SMS
SMS on wholesale African routes, with the compliance engine built in.
Aggregator routes connected to local mobile networks, least-cost routing for marketing, the most reliable route for OTPs, and failover in under a minute. Consent, STOP handling, do-not-contact lists and send windows are enforced by the API.
import { Sendbaze } from "@sendbaze/sdk";
const sendbaze = new Sendbaze({ apiKey: process.env.SENDBAZE_API_KEY! });
const sms = await sendbaze.sms.send({
to: "+27821234567",
body: "Your OTP is 482 913. It expires in 5 minutes.",
class: "transactional", // marketing requires consent
});
// sms.segments === 1, sms.credits === 1Coverage
Every major network, two routes each
MTN
Two routes · least-cost for marketing · primary for OTP
Vodacom
Two routes · least-cost for marketing · primary for OTP
Airtel
Two routes · least-cost for marketing · primary for OTP
Orange
Two routes · least-cost for marketing · primary for OTP
Plus the national operators in each country we deliver to. Before launch we run a delivery test on every network we route to, on both routes, and publish the result: target 97% delivered with a p95 under 10 seconds.
What it does
Sending, routing and receipts
- Segment count before you pay
- The API detects GSM-7 versus UCS-2, applies concatenation rules and returns the segment count and credit cost in the response. No surprise on the invoice.
- Two routes, automatic failover
- A rolling failure rate or timeouts on one route disable it for ten minutes and move traffic to the other. Route health is visible in the dashboard.
- Transactional and marketing classes
- Every SMS carries a class. Transactional and OTP traffic always takes the primary route and ignores quiet hours; marketing takes the cheapest route and obeys the legal window.
- Delivery receipts, unified
- Aggregator delivery receipts map to queued, sent, delivered, failed, expired and rejected. Each message shows which route delivered it and how long it took.
- Sender IDs
- Shared numeric sender by default. Request a dedicated number or a branded alphanumeric sender from the dashboard; approval is manual and network caveats are documented.
- Batch and schedule
- Up to 1,000 messages a call with per-item results. Scheduled send and CSV upload-and-send in the dashboard arrive in the release after launch.
Compliance engine
The rules a raw aggregator account leaves to you
Each rule is enforced in the request path. You get a clear error code, not a regulator complaint three weeks later.
| Rule | What the API does |
|---|---|
| Message class | Required on every SMS. Marketing without a consent record returns 403 consent_missing. |
| Consent | Contacts and consents with source, evidence and timestamp, or a logged attestation of an existing-customer relationship. |
| Opt-out | Inbound STOP, END, CANCEL, UNSUBSCRIBE or QUIT, in any case and with punctuation, flags the contact, fires sms.opted_out and blocks future marketing. |
| Opt-out footer | A reply-STOP line is appended to marketing SMS unless already present, and the segment count is recalculated. |
| Do-not-contact lists | Weekly sync of the destination's do-not-contact list, such as WASPA's. Marketing to a listed number returns 403 dnc_listed; transactional is unaffected. |
| Time windows | Marketing outside the destination's legal window (08:00 to 20:00 local time, no Sundays or public holidays in South Africa) is held and sent at the next legal window. |
| Evidence | Export every consent record for a number or an organisation as CSV in under a minute. |
Sender IDs
Shared by default, branded on request
Every organisation starts on a shared numeric sender. Request a dedicated number or an alphanumeric sender such as YOURSHOP from the dashboard. Approval is manual, and we document which networks replace alphanumeric senders with a number.
Send your first OTP in ten minutes
Free plan includes 50 SMS credits after a quick card check. Test keys let you integrate without sending.