Skip to content

Check the delivery status of a sent message.

GET  /api/v1/sms/status/:message_id  · Permission: sms.read

Terminal window
curl https://restlink23telecom.com/api/v1/sms/status/api_42_1743667200123456789_a3f8b2c1d9e45f67 \
-H "X-API-Key: $API_KEY"
200 OK
{
"status": true,
"message": {
"message_id": "api_42_1743667200123456789_a3f8b2c1d9e45f67",
"telecom_message_id": "6946d0f5-040b-106e-42c7-49026f2b5bc1",
"recipient": "+14155551234",
"segments": 1,
"message": "Your verification code is 847291",
"sender_id": "MyApp",
"status": "DELIVRD",
"status_code": "000",
"cost": 0.0085,
"created_at": "2026-02-13T10:30:00Z",
"delivered_at": "2026-02-13T10:30:04Z"
}
}

Returns 404 NOT_FOUND if the message does not exist or belongs to another account.

StatusDescriptionFinal?
pendingQueued, waiting to sendNo
sentSubmitted to carrier networkNo
ENROUTEAccepted by carrier, in transitNo
ACCEPTDAccepted by carrier for deliveryNo
DELIVRDDelivered to recipient’s handsetYes
UNDELIVDelivery failed (invalid number, phone off)Yes
REJECTDRejected by carrier (filtered, blacklisted)Yes
EXPIREDDelivery timed outYes
DELETEDMessage deleted on the carrier networkYes
UNKNOWNFinal status unknownYes
failedInternal error (queue/config failure)Yes

Raw carrier statuses (ENROUTE, ACCEPTD, DELETED) can appear verbatim — treat any status not in your known set as non-final and keep polling, except the clearly terminal ones above. See delivery statuses for typical status flows.

When filtering the message list by status, the accepted filter values are delivered, undelivered, expired, pending, not_billed and sent (legacy aliases failed and unknown map to undelivered) — these map to groups of the raw statuses above.

If you poll instead of using webhooks:

  • Poll every 3–5 seconds, stop on any final status.
  • Give up after a few minutes and treat the message as in-flight — some carriers report late; the hourly reconciliation will finalize stuck messages.
  • Prefer webhooks for anything beyond low-volume testing: they remove polling load and deliver statuses the moment carriers report them.