BroadNet
Provider-neutral migration guide·/developers/migrate

Migrate your SMS traffic to BroadNet from any provider.

This guide takes the concepts your current provider uses (sending a message, the sender, delivery receipts and status webhooks) and shows the matching part of the BroadNet API. It then covers the operational side: sender ID registration, running both providers in parallel, increasing traffic in stages, rolling back, and who is responsible for each step. It names no provider, because the concepts are the same everywhere.

Send one SMS
POST /sms/sendSms
Authentication
Authorization: Bearer <token>
Legacy HTTP API
/websmpp/websms
SMPP
Version 3.4, with delivery receipts

Map your current API onto BroadNet

Most SMS APIs share the same handful of concepts under different names. Find the concept in the first column, whatever your provider calls it, and use the BroadNet equivalent. Field names are exactly as they appear in the OpenAPI spec.

ConceptTypical form at other providersBroadNet
API hostA regional API host for your accounthttps://api.broadnet.me

Test credentials, and where to send test traffic, come with your test access: request it at /signup and we reply within one business day.

AuthenticationAn account ID and secret over Basic auth, or an API key headerAuthorization: Bearer <token>

One access token per account.

Send one messageAn HTTP POST request to a messages endpointPOST /sms/sendSms

The request body is JSON.

Senderfrom, sender, originatorsenderId

An alphanumeric sender ID or a number, registered per country.

Recipientto, destination, msisdndestinationNumber

International format, as in the spec example 447700900101.

Message textbody, text, contentmessage

The text of the message, exactly as the recipient will see it.

Character encoding and message partsCalculated by the provider, or returned by a separate API callmessageType

TEXT (GSM-7) or UNICODE. POST /sms/identify returns messageType, charCount, smsParts and charLimit before you send.

Scheduled sendingA send_at or schedule-time fieldisSchedule · gmt · time

Leave these fields out to send the message immediately.

Message IDAn ID field in the JSON response200 OK → 2603121407537573731

The response body of /sms/sendSms is the message ID.

Many recipientsA batch endpoint, or a loopPOST /sms/sendSmsGroupData

A contacts array in the body. POST /sms/sendbulk takes a file upload instead.

Delivery status webhookA callback URL per request or per accountWebhook URL on your account

Delivery status is pushed to the webhook URL configured on your account. POST /sms/resendDlr pushes receipts again when they did not reach it.

Delivery status queryA GET request for the message by its IDGET /websmpp/websmsstatus

Legacy HTTP API. Pass the message ID as respid, and format=json for JSON. Values: DELIVRD, UNDELIV, EXPIRED, REJECTD.

Delivery report exportA CSV export in the console/websmpp/api/dlrreport

Legacy HTTP API. An XLSX delivery report for a date range.

Error responsesAn HTTP status plus a provider error code400 · 401 · 500

400: validation error or missing field. 401: invalid or missing Bearer token. 500: unexpected server error.

SMPPSMPP sessions (binds) to the provider's SMSCbind · submit_sm · deliver_sm

SMPP v3.4 sessions as transmitter, receiver or transceiver. Delivery receipts arrive as deliver_sm. Your account includes the SMPP login credentials.

Sending with an HTTP GET URLA GET URL with credentials in the parametersGET /websmpp/websms

Legacy HTTP API. user, pass (or accesskey), sid, mno, type, text. Kept for existing integrations; new ones should use /sms.

SDKA client library per language@broadnet/cpaas-sdk

One official SDK for TypeScript and Node.js. For other languages, generate a client from the OpenAPI spec.

Here is the same send as a single request. Replace your provider's sender, recipient and text fields with senderId, destinationNumber and message:

POST /sms/sendSms
curl -X POST https://api.broadnet.me/sms/sendSms \
  -H "Authorization: Bearer $BROADNET_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "senderId": "ACME",
    "destinationNumber": "447700900101",
    "message": "Your code is 8123",
    "messageType": "TEXT"
  }'

# 200 OK — the response body is the message ID, e.g. 2603121407537573731

To check one message, query its status with the message ID that the send request returned:

Delivery status lookup
# Status lookup on the legacy HTTP API (/websmpp), by message ID
curl "https://api.broadnet.me/websmpp/websmsstatus?respid=2603121407537573731&format=json" \
  -H "Authorization: Bearer $BROADNET_TOKEN"

# "status": "DELIVRD"   (or UNDELIV, EXPIRED, REJECTD)

Move your sender IDs

Alphanumeric sender IDs and short codes are generally portable, subject to each operator's and regulator's registration rules. A registration belongs to the route your traffic takes, so plan it before any production message moves to BroadNet.

  1. 1

    List every sender ID, the countries it sends to and the type of traffic it carries: OTP, transactional or marketing.

  2. 2

    Check each country's rules. In the UAE, sender IDs are registered under TDRA rules through the operator, one ID per legal entity per use case. In Saudi Arabia they need CST and operator approval, and foreign senders bind through a CST-licensed local aggregator.

  3. 3

    Your migration engineer submits the registrations for BroadNet's routes, and BroadNet's compliance team follows each one through to approval.

  4. 4

    Begin the parallel run in a country only after the sender ID is approved there for BroadNet's routes. Until then, keep sending through your current provider.

The rules for each market are on the regulations pages. SMS regulations by country

Run both providers in parallel

Keep your current provider live and add BroadNet as a second route behind a switch in your own code. Send first to your own verified numbers, then a small share of real traffic, and compare both routes on the same destinations.

Compare, per country and operator:

  • The mix of delivery statuses: delivered, undelivered, expired and rejected.
  • The time from sending a message to receiving its delivery receipt.
  • The sender shown on the handset.
  • The segment count for the same text, from POST /sms/identify.

Choose the route per recipient rather than per message, so that all OTP retries for one user go through the same provider. A minimal routing switch:

route.ts
// Send a share of recipients through BroadNet; the rest stay on your
// current provider. BROADNET_SHARE is a percentage (0-100) you control.
const BROADNET_SHARE = Number(process.env.BROADNET_SHARE ?? "0");

// Same recipient -> same bucket, so OTP retries stay on one provider.
function bucket(to: string): number {
  let h = 0;
  for (const c of to) h = (h * 31 + c.charCodeAt(0)) >>> 0;
  return h % 100;
}

export async function sendSms(to: string, text: string, senderId: string) {
  if (bucket(to) < BROADNET_SHARE) return sendViaBroadNet(to, text, senderId);
  return sendViaCurrentProvider(to, text, senderId); // your existing code
}

async function sendViaBroadNet(to: string, text: string, senderId: string) {
  const res = await fetch("https://api.broadnet.me/sms/sendSms", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.BROADNET_TOKEN}`,
      "Content-Type": "application/json",
    },
    // Use UNICODE for non-GSM text; POST /sms/identify tells you which.
    body: JSON.stringify({ senderId, destinationNumber: to, message: text, messageType: "TEXT" }),
  });
  if (!res.ok) throw new Error(`BroadNet send failed: ${res.status}`);
  return { provider: "broadnet", messageId: await res.text() };
}

Increase traffic in stages

Move production volume to BroadNet in steps you choose, one country or use case at a time. Stay at each step until its delivery receipts match what you sent, then take the next one.

  1. Testing

    Your own verified numbers only. Confirm the sender ID, the message text and the delivery receipts.

  2. 5%

    A small share of real traffic. OTP traffic to a single country returns fast, clear delivery receipts.

  3. 25%

    Enough volume to compare delivery rates and receipt times with your current provider.

  4. 100%

    All traffic for that country or use case. Your current provider stays live until the delivery receipts match what you sent.

How long it takes

Increasing traffic takes as long as you choose. Onboarding follows one path: we reply to a test-access request within one business day, technical integration takes 2–5 business days, and route validation with sender ID approval takes 3–10 business days. Most markets go from discovery to go-live in 5–15 business days; markets where regulators take longer to approve sender IDs take longer. See the onboarding steps

Roll back to your current provider without an outage

To roll back, use the same switch in reverse: lower the percentage of traffic sent through BroadNet to the last step that worked, or to zero. Your current integration and its sender ID registrations stay live the whole time, so lowering the percentage is enough. Nothing has to be rebuilt.

  • Keep your current provider's credentials, sender ID registrations and webhook endpoint active until all traffic has moved and the delivery receipts match what you sent.
  • Before you start, agree what triggers a rollback, for example a fall in the share of messages delivered in one country, and who is allowed to decide it.
  • Keep your webhook handler running after a rollback: delivery receipts for messages already sent through BroadNet can still arrive.
  • Retire the old route only after all traffic runs cleanly through BroadNet and the delivery receipts match what you sent.

Who is accountable for what

A migration touches your code, your sender registrations and live traffic. This is how the work is split.

TaskYouBroadNet
Field mapping and code changesMake the code changes and own the routing switch.Your migration engineer maps your current payloads, sender IDs and receipts to the BroadNet API.
CredentialsStore the access token securely and keep it out of source control.Issues the access token and, for SMPP, the login credentials.
Sender ID registrationProvide the company documents each regulator asks for.Submits the registrations for its routes and follows each one through to approval.
Route validationConfirm the test results on your own phone numbers.Tests delivery in each market before production traffic.
Traffic increase and rollbackDecide each step, what triggers a rollback, and who decides it.A named migration engineer is reachable through the parallel run and the cutover.
Delivery after BroadNet accepts a messageMonitor the delivery receipts in your own systems.Routes each message from its platform to the operator and reports the delivery receipt.
Production incidentsReport them to developers@broadnet.me.Engineering support 24/7 for production accounts, with a 15-minute P1 response.
Retiring the old routeClose the account with your previous provider.Confirms that sender IDs, throughput and delivery receipts are settled before you close it.

Related documentation

Frequently asked questions

Do I have to rewrite my integration to move to BroadNet?

Usually not. You change the host, the authentication header and a few field names: the sender field becomes senderId, the recipient field becomes destinationNumber and the text field becomes message. SMPP integrations point their existing bind at BroadNet with new credentials.

Can I keep my sender IDs?

Generally yes, subject to each operator's and regulator's registration rules. The registrations are filed on BroadNet's routes before cutover: in the UAE under TDRA rules, and in Saudi Arabia with CST and operator approval.

How long does a migration take?

Most markets go from discovery to go-live in 5–15 business days; markets where regulators take longer to approve sender IDs take longer. The traffic ramp after that takes as long as you choose.

What happens if delivery rates drop while I increase traffic?

Lower the percentage of traffic sent through BroadNet to the last step that worked, or to zero. Your current provider is still live, so traffic keeps flowing. Then review the delivery receipts for the affected country with your migration engineer before you try again.

Is there a charge for migration support?

No. Migration support and the parallel-run window come with your account. You pay only for the messages you send.

Request test access · reply within one business day

Get credentials, send test messages to your own verified number, and map your current integration with a BroadNet telecom engineer before any production traffic moves.