SMS API overview
Copy page
The SMS API covers the full lifecycle of a message: send → track → analyze. It is the first channel of the 23 Telecom messaging platform — additional channels (Viber and more) will appear here alongside SMS, sharing the same authentication, webhooks and account layer.
| Endpoint | Method | Purpose | Permission |
|---|---|---|---|
| /sms/send | POST | Send to 1–100 recipients | sms.send |
| /sms/send-individual | POST | Personalized bulk, 1–1000 recipient-specific messages | sms.send |
| /integrations/sms/send | POST | Strict single-message CRM webhook (managed activation) | sms.send |
| /sms/status/:message_id | GET | Delivery status of one message | sms.read |
| /sms/messages | GET | Paginated message history | sms.read |
| /sms/messages/unified | GET | API + campaign traffic in one view | sms.read |
| /sms/messages/unified/export | GET | Streaming CSV export | sms.read |
| /sms/stats | GET | Aggregate statistics | sms.read |
| /sms/stats/daily | GET | Day-by-day breakdown | sms.read |
| /sms/stats/by-country | GET | Per-country breakdown | sms.read |
How delivery works
Section titled “How delivery works”your server ──POST /sms/send──▶ 23 Telecom ──▶ carrier ──▶ handset ▲ │ └──── webhook (DLR) ◀──────────┘- You send a message; the API responds immediately with a
message_idper recipient and a cost/encoding summary. - The carrier returns a delivery report (DLR) — typically within seconds.
- You receive the final status by webhook (recommended) or by polling message status.
Things worth knowing up front
Section titled “Things worth knowing up front”- E.164 numbers. Always send phone numbers as
+<country><number>, e.g.+447911123456. - Encoding affects cost. One emoji switches the whole message from GSM-7 (160 chars/segment) to UCS-2 (70 chars/segment) — see encoding & segments.
- Sender IDs are regulated. Format support depends on your account, route and destination country; alphanumeric senders commonly follow 3–11 character rules — see sender IDs.
- Batch retries are idempotent where documented.
/sms/send-individualrequiresIdempotency-Key; reuse the same key when retrying a logical batch. - CRM retries use the strict endpoint.
/integrations/sms/sendaccepts one message and requiresIdempotency-Key; ask your account manager to enable it. - Balance and pricing are monitoring signals. The current send endpoints
accept valid traffic fail-open when local balance or pricing data is missing;
a provisional local cost can be
0. Monitor balance, then use the delivery report for the final status and cost.