SMS API
Branded SMS to every Kenyan network — Safaricom, Airtel, Telkom and Equitel — through a REST API whose contract is frozen: it will never change under you.
Endpoints at a glance
- POST /v1/send/message — one message to one number
- GET /v1/send/messageget — the same send as a plain URL, for ERPs that can't POST
- POST /v1/send/bulk — one message to many numbers
- POST /v1/send/bulk-personalized — a different message per number
- POST /v2/send/message — adds your own trackingId and returns cost
- POST /v1/dlr — delivery report lookup (plus push webhooks)
- GET /v1/get-balance/ — SMS credit balance
- GET /v1/groups/ — contact group management
Platform endpoints (under /api/v1/, scoped tokens):
- Sender ID requests — apply for your branded sender with documents, track approval
- Campaigns — group sends with drafts, scheduling, live progress and resend
- Blacklist — your opt-out list, per sender or global
Concepts in one minute
Sender IDs
The name that appears on the recipient's phone (e.g. MOBILESASA, your brand). Sender IDs are registered per network — apply over the API with your business documents; the API rejects sends from names your account doesn't own.
Message parts & billing
A single SMS carries 160 GSM-7 characters (70 for Unicode). Longer texts are split into parts of 153 (67 Unicode) and rebuilt on the handset — you are billed per part. Accented characters are transliterated to plain ASCII before sending so a stray “é” doesn't silently double your bill.
Priority
Transactional traffic (OTPs, alerts) is dispatched on a high-priority lane ahead of bulk marketing, so a campaign never delays a login code.
Which endpoint should I use?
/v1/send/message. Same text to a list → /v1/send/bulk. Different text per person (names, amounts) → /v1/send/bulk-personalized. Need to reconcile sends against your own IDs, or want the cost back → use the v2 variant.