Messaging
Send SMS
One endpoint sends text messages to one number or thousands, right now or at a set time, with a delivery report for each one.
Send a message
POST/sms/3/messages
A request holds a messages array. Each message has a sender, one or more destinations and its content.
Each destination gets its own messageId and starts as PENDING_ACCEPTED. details.messageCount is the number of SMS parts the text needed, which is what you are billed for.
Request body
messages[]
senderstring- Who the message comes from: an alphanumeric sender ID of up to 11 characters (
YourBrand) or one of your numbers. What is allowed depends on the country. destinations[].tostringRequired- The recipient, in international format without
+. destinations[].messageIdstring- Your own ID for this message. Returned in reports, so you can match them without storing ours.
content.textstringRequired- The message text. Long texts are split into parts and joined on the phone.
content.transliterationstring- Replace characters outside the GSM alphabet with close equivalents to keep messages short, e.g.
TURKISH,GREEK,CENTRAL_EUROPEAN,NON_UNICODE. options.validityPeriodobject- How long to keep trying, as
{ amount, timeUnit }withSECONDS,MINUTESorHOURS. Up to 48 hours. options.deliveryTimeWindowobject- Days and hours (UTC) during which the message may be delivered.
options.campaignReferenceIdstring- A label to group messages by campaign in logs and reports.
options.flashboolean- Show the message on screen without saving it to the inbox.
webhooks.delivery.urlstring- Where to push the delivery report. See Delivery reports.
webhooks.callbackDatastring- Free text returned untouched in every report for this message.
options (top level)
schedule.sendAtstring- When to send, as an ISO 8601 date-time such as
2026-10-20T07:00:00.000+0000. schedule.bulkIdstring- Your ID for the whole request. Use it to fetch reports for all its messages.
schedule.sendingSpeedLimitobject- Spread a large send over time, as
{ amount, timeUnit }withMINUTE,HOURorDAY. includeSmsCountInResponseboolean- Return the number of parts each message uses in the response.
Send to many people
Add destinations to send the same text to several numbers, and add messages to send different texts in one request. Set your own messageId on each destination to match reports to your records.
Schedule and limit delivery
options.schedule.sendAt holds the request until the given time. validityPeriod stops retries once a message is no longer useful, and deliveryTimeWindow keeps messages out of the night.
Length and encoding
An SMS part holds 160 characters from the GSM-7 alphabet, or 70 when the text contains other characters such as emoji or most accents outside Western European languages. Longer texts are split into parts of 153 or 67 characters and shown as one message on the phone. Each part is billed.