Skip to content

Every message moves through a lifecycle of statuses, reported by carriers via delivery reports (DLR).

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
pending → sent → ENROUTE → DELIVRD success
pending → UNKNOWN outcome unclear (may still change)
pending → sent → UNDELIV bad number / phone off
pending → sent → REJECTD carrier blocked
pending → sent → EXPIRED recipient unreachable
pending → failed no route available / internal error (never charged)
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

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.

  • DELIVRD is the only confirmed handset delivery. sent means the carrier accepted the message, not that the phone received it.
  • UNDELIV vs REJECTD: UNDELIV is usually a recipient problem (dead number, phone off for days); REJECTD is a carrier policy decision (content filtering, blacklist) — review your content/sender if it spikes.
  • EXPIRED often means the handset was off or out of coverage for the entire validity period.
  • Clean your lists: repeatedly UNDELIV numbers should be suppressed — they cost money and hurt your sending reputation.