POSTSend SMS
Send an SMS message to a destination number. Send to a single number or batch up to 2,000,000 numbers per request. On success, the response includes a uuid you can use to fetch status and delivery reports at GET /api/v2/sms/{uuid}/recipients.
How to authenticate
Create an API key on the Settings → API Keys page. Then attach the x-api-key: <key> header on every request.
The POST /api/v2/sms/send endpoint requires an API key with the sms:send scope or *. Other endpoints in this doc only require any valid API key.
Parameters
content or templateId is required.66XXXXXXXXX or 0XXXXXXXXX. Up to 2,000,000 numbers per request. *Either msisdns or contactGroupId is required.content. Provide variables to fill placeholders like {{name}}.{"name":"Toon"}.2026-06-01T10:00:00+07:00.true to estimate cost and message parts without consuming credits or actually sending.Response
Per-recipient delivery status
Call GET /api/v2/sms/{uuid}/recipients to receive the status for each number.
Accepted; queued for delivery to the carrier.
Delivered to recipient ✓
Send failed (phone off / no signal)
Invalid number
Number is on the blocklist
Retry window exhausted
No delivery report received within the allowed window
Error format
When the API responds with a 4xx/5xx status code, the body is always JSON in the same shape:
{
"error": "Insufficient credits",
"code": "INSUFFICIENT_CREDITS"
} error is human-readable; code is machine-readable (present on some endpoints, e.g. send/retry). Common HTTP status codes:
Invalid parameters
Missing / invalid API key
Insufficient credits
Scope insufficient or you're not the resource owner
Resource not found
Rate limit exceeded
POSTPreview cost
Compute the number of message parts and credits that would be charged before calling /send. No credits are consumed and no SMS is sent.
Body parameters
msisdns or contactGroupId.content.POSTCancel scheduled SMS
Cancel a scheduled SMS that has not yet been sent. Credits are refunded after cancellation (if previously held).
Path
/send.Only SMS that are scheduled and not yet started can be cancelled (i.e. with a scheduledTime). If the SMS is already processing / sent / cancelled, you'll get HTTP 400 or 409 with code: NOT_SCHEDULED / ALREADY_CANCELLED / ALREADY_PROCESSING.
GETList messages
Lists the messages on the account, most recent first.
Query parameters
sent | failed | pending | scheduled | cancelledGETGet one message
Details of a single SMS, including drSummary (count per status) once the send is complete.
GETRecipients (per-recipient status)
Per-recipient destination status, with cursor pagination so you can page through very large recipient lists fast — even at million-recipient scale.
Query parameters
nextCursor from the previous response (start at 0 for the first page) to fetch the next page.pending | success | failed | invalid | blocked | expired | timeoutWhen using after, the response carries nextCursor + hasMore in place of total (use summary[] for the per-status totals).
GETCredit balance
Account credit balance — useful to check before a large batch send.
GETList senders
All sender names on the account (including shared). You can send SMS only from senders with status = "approved".
Request a new sender name via the Senders page in the app (document verification is required — not available through the API).