Delivery statuses
Copy page
Every message moves through a lifecycle of statuses, reported by carriers via delivery reports (DLR).
Status table
Section titled “Status table”| Status | Description | Final? |
|---|---|---|
pending |
Queued, waiting to send | No |
sent |
Submitted to carrier network | No |
ENROUTE |
Accepted by carrier, in transit | No |
ACCEPTD |
Accepted by carrier for delivery | No |
DELIVRD |
Delivered to recipient’s handset | Yes |
UNDELIV |
Delivery failed (invalid number, phone off) | Yes |
REJECTD |
Rejected by carrier (filtered, blacklisted) | Yes |
EXPIRED |
Delivery timed out | Yes |
DELETED |
Message deleted on the carrier network | Yes |
UNKNOWN |
Outcome unknown, including a send whose result was unclear (for example a timeout); a later delivery report can still replace it | No |
failed |
Rejected by the gateway before routing (usually no route available), or an internal queue failure. Never charged — the portal reports these as Not Billed. | Yes |
Typical flows
Section titled “Typical flows”pending → sent → ENROUTE → DELIVRD successpending → UNKNOWN outcome unclear (may still change)pending → sent → UNDELIV bad number / phone offpending → sent → REJECTD carrier blockedpending → sent → EXPIRED recipient unreachablepending → failed no route available / internal error (never charged)Where statuses appear
Section titled “Where statuses appear”| Place | Field |
|---|---|
| Message status | message.status |
| Message lists | /sms/messages returns raw status; /sms/messages/unified returns lower-case groups delivered, undelivered, pending, expired, not_billed |
| Delivery webhook | status |
| Statistics | Aggregated into delivered / undelivered / pending / expired / not_billed |
Reconciliation
Section titled “Reconciliation”API messages are never finalized automatically: they can remain sent, ENROUTE or ACCEPTD. Campaign and automation messages are moved to UNDELIV by an hourly job after 3 days with a carrier ID, or 7 days without one (reported as Not Billed). Campaign delivery reports later than 3 days are ignored.
Interpreting statuses
Section titled “Interpreting statuses”DELIVRDis the only confirmed handset delivery.sentmeans the carrier accepted the message, not that the phone received it.UNDELIVvsREJECTD:UNDELIVis usually a recipient problem (dead number, phone off for days);REJECTDis a carrier policy decision (content filtering, blacklist) — review your content/sender if it spikes.EXPIREDoften means the handset was off or out of coverage for the entire validity period.- Clean your lists: repeatedly
UNDELIVnumbers should be suppressed — they cost money and hurt your sending reputation.
