Skip to content

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.

EndpointMethodPurposePermission
/sms/sendPOSTSend to 1–100 recipientssms.send
/sms/send-individualPOSTPersonalized bulk, 1–1000 recipient-specific messagessms.send
/integrations/sms/sendPOSTStrict single-message CRM webhook (managed activation)sms.send
/sms/status/:message_idGETDelivery status of one messagesms.read
/sms/messagesGETPaginated message historysms.read
/sms/messages/unifiedGETAPI + campaign traffic in one viewsms.read
/sms/messages/unified/exportGETStreaming CSV exportsms.read
/sms/statsGETAggregate statisticssms.read
/sms/stats/dailyGETDay-by-day breakdownsms.read
/sms/stats/by-countryGETPer-country breakdownsms.read
your server ──POST /sms/send──▶ 23 Telecom ──▶ carrier ──▶ handset
▲ │
└──── webhook (DLR) ◀──────────┘
  1. You send a message; the API responds immediately with a message_id per recipient and a cost/encoding summary.
  2. The carrier returns a delivery report (DLR) — typically within seconds.
  3. You receive the final status by webhook (recommended) or by polling message status.
  • 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-individual requires Idempotency-Key; reuse the same key when retrying a logical batch.
  • CRM retries use the strict endpoint. /integrations/sms/send accepts one message and requires Idempotency-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.