Send in bulk
Up to 500 messages a request. Each one is checked and priced on its own, so a bad number is reported back to you and skipped rather than failing the batch.
Bulk SMS with a REST API. Send to one number or five hundred, schedule ahead, get delivery receipts pushed to your server, and read back exactly what each message cost, broken down by network.
With a page in the console for each of it. No add-ons, no upgrade wall.
Up to 500 messages a request. Each one is checked and priced on its own, so a bad number is reported back to you and skipped rather than failing the batch.
Delivery receipts come back from the network and are pushed to your server, signed and retried. expired and undelivered arrive as separate outcomes, so you can retry the first and drop the second.
Book a send up to three months ahead and it waits as a database row, not a timer. Set a sender ID of up to 11 characters, and the console tells you which routes can carry one.
One suppression list, checked on every send: the API, the console, a group, a reply from the inbox. A reply of STOP adds the sender to it.
Replies are matched to the account that last messaged that handset, and threaded with what you sent, so a conversation reads in order.
Give a team its own credentials and its own credit balance. Each sub account sees only its own messages, groups and opt-outs.
Authenticate with a bearer token, post a batch, and read back the cost, the parts and a fault report naming anything that could not be sent. No SDK required.
$ curl -X POST https://your-host/v3/BulkMessages \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "messages": [ { "destination": "0821234567",
"content": "Your code is 4821" } ] }'
// 200 OK
{
"statusCode": 200,
"sendResponse": {
"eventId": 4821,
"messages": 1,
"parts": 1,
"cost": 0.28,
"costBreakdown": [ { "network": "Vodacom",
"quantity": 1, "cost": 0.28 } ],
"remainingBalance": 9971.72,
"sample": "Your code is 4821",
"errorReport": { "noNetwork": 0, "noContents": 0,
"contentToLong": 0, "duplicates": 0,
"optedOuts": 0, "faults": [] }
},
"errors": []
}
Opt-out is first class. One suppression list is checked on every send — the API, the
console, a group, a reply — and a STOP reply adds the sender to it.
Every receipt is signed over a canonical string that includes the timestamp, so your server can verify it came from us and reject a replay.
Sub accounts isolate messages, groups and opt-outs, each with its own key and its own credit balance. A sub account cannot see a sibling's traffic.
You hold credit and each message is priced against the recipient's network when you send. The response itemises what you were charged, network by network, and a message we refuse is never billed.
Replies are stored and threaded against the account that last messaged that handset, and shown in the console inbox. There is no webhook for an inbound message yet.
Yes, up to 11 characters. Whether it survives depends on the route: the Vodacom route cannot carry one, so those messages keep the gateway's own sender, and the console says so on the send page.
expired and undelivered come back as separate outcomes, so you can retry the first and drop the second without guessing.
Create an account, get credentials, and post your first batch. Start with 50 free credits, no card required.