Ship your first message in an afternoon
A plain REST API for sending, tracking and receiving SMS — token auth, real-time webhooks and SDKs, with nothing exotic to learn.
Three moves, start to delivered
Every integration is the same short arc — authenticate, send, then track.
Send your access key as a Token header, with Content-Type: application/json, on every request.
POST a from, to and content. The response comes back with a msgid and an errorcode immediately.
We POST or GET a status report to your callback URL the moment a message reaches its final state.
One request, in the language you already use
POST your sender, recipient and content with a Token header. The response comes back the moment we accept it.
01curl -X POST https://secure.smslocal.com/api/service/enterprise-service/external/sms \02 -H "Token: $SMSLOCAL_TOKEN" \03 -H "Content-Type: application/json" \04 -d '{05 "from": "SMSLOCAL",06 "to": "14155550123",07 "content": "Your code is 481920."08 }'msgid "9f2a7c10-4b2e-…"
direction "mt"
errorcode 0
Save the msgid — it is how you track this message from here.
Read a message top to bottom
Send, status and inbound events all return the same shape — learn it once.
Message ID
msgid — minted the moment a message is created. This is the handle you use to check its status later.
Sender
from — a phone number, or an alphanumeric ID up to 11 characters, whichever identity your recipients see.
Recipient
to — the number the message is going to, including country code.
Encoding
datacoding — GSM7 fits 160 characters per part; switch to Unicode and that drops to 70. Go over, and it concatenates into extra billed parts.
Direction
direction — every message is mt (you sent it) or mo (you received it), the same shape either way.
Error Code
errorcode — returned on the send response and every status report. 0 means accepted; anything else tells you exactly what went wrong.
One endpoint, two verbs
POST to send, GET to check status — the same URL and the same Token header either way.
Send
Send a message and get back a msgid and an errorcode immediately.
Returns msgid + errorcodeTrack
Look up a message you already sent to check its current status.
Returns message + statusStatus reports, the moment they happen
Set a callback URL and every delivery, failure and inbound reply lands there as a GET or POST — no polling required.
Developer docs — frequently asked questions
Pass your access key in a Token header on every request — Token: {accessKey} — along with Content-Type: application/json.
Every send returns a msgid. Point us at a callback URL and we POST or GET a status report to it the moment the message reaches its final state — subdate, donedate and the resulting status code included.
mt (mobile terminated) is a message you sent; mo (mobile originated) is a reply you received. Both use the same message object shape.
Delivery is retried according to the retry policy — nothing is silently dropped, but an endpoint that never acknowledges will keep receiving retries.
160 characters on GSM7 encoding, or 70 on Unicode. Go past the limit and the message concatenates into multiple parts, each billed separately.