Message status reference

Every status a message can hold, and what it means for your bill.

Lifecycle

QUEUED  ──▶  SUBMITTED  ──▶  DELIVERED
   │             │
   │             ├──▶  FAILED     (handset unreachable)
   │             └──▶  EXPIRED    (no receipt in 48h)
   │
   ├──▶  REJECTED   (network refused) ── refunded
   └──▶  CANCELLED  (you cancelled)   ── hold released
StatusTerminalChargedMeaning
QUEUEDNoReservedAccepted by us, waiting for a worker. Credit is held, not spent.
SUBMITTEDNoYesA network accepted it. This is the billing moment.
DELIVEREDYesYesThe handset confirmed receipt.
FAILEDYesYesDelivery attempted and failed — phone off, out of coverage.
REJECTEDYesNo — refundedRefused outright: invalid number, or the subscriber blocks bulk SMS.
EXPIREDYesYesA network accepted it but never returned a final receipt within 48 hours. Charged, because acceptance is the billing moment and a missing receipt is not evidence the SMS failed.
CANCELLEDYesNo — hold releasedYou cancelled before it was submitted. Nothing was ever charged, so the reservation is simply released.
A terminal status never changes. If a late duplicate receipt arrives after a message is DELIVERED, it is ignored rather than re-firing your webhook.

FAILED and REJECTED are different

REJECTED means the network would not even try — the number is invalid or blocked. Nothing was spent on your behalf, so you are refunded.

FAILED means it tried and could not deliver. That attempt cost real money, so it is charged. If you see many failures to one number, the number is probably wrong even though it is well-formed.

Voice call status reference

Calls have their own statuses, their own events, and — importantly — a different billing moment. See Voice calls.

QUEUED  ──▶  SUBMITTED  ──▶  ANSWERED   ── charged
   │             │
   │             ├──▶  NO_ANSWER  ── released
   │             ├──▶  BUSY       ── released
   │             └──▶  FAILED     ── released
   │
   └──▶  CANCELLED  (you cancelled) ── released
StatusEventChargedMeaning
QUEUED—ReservedAccepted by us, waiting to dial. Call time is held, not spent.
SUBMITTED—ReservedHanded to the carrier and ringing. Still held, not yet spent.
ANSWEREDvoice.call.answeredYesThey picked up and heard the recording. This is the billing moment.
NO_ANSWERvoice.call.no_answerNo — releasedIt rang out. Nobody pays for ringing a phone.
BUSYvoice.call.busyNo — releasedDeclined, engaged, unreachable or switched off. Carriers do not distinguish these, so neither do we rather than guess.
FAILEDvoice.call.failedNo — releasedThe call could not be placed at all.
CANCELLEDvoice.call.cancelledNo — releasedYou cancelled the campaign before this one dialled.
Voice bills on ANSWERED; SMS bills on SUBMITTED. That is the one difference to hold on to. A network accepting an SMS is the moment it costs us money, so that is when you are charged. A ringing phone costs nobody anything, so an unanswered call releases its seconds back to you.

A call is charged the recording's full length, not the time spent on the line — someone who answers and hangs up after two seconds still costs the whole recording. And if you left retry on, each re-dial is a separate call that is charged again when answered.