Message statuses
| Status | Meaning | Credit |
|---|---|---|
| queued | Accepted and waiting for the sender | reserved |
| sending | The sender is rendering it and talking to the provider | reserved |
| sent | The provider accepted it | used |
| delivered | The provider confirmed delivery to the recipient’s server (needs webhooks) | used |
| bounced | The recipient’s server rejected it; hard bounces add the address to the suppression list | used |
| complained | The recipient marked it as spam; the address is suppressed | used |
| failed | Permanent error, or transient errors exhausted all retries | refunded (not when a custom SMTP server may already have received the message, or when an unusually high share of the organization’s sends fails) |
| held | Waiting for credits in the hold queue | none yet |
| held_service_error | Waiting for a broken service to be fixed | refunded, reserved again on release |
| discarded | Removed from the hold queue – the hold duration ran out or someone discarded it manually | none |
The API returns queued or held when you send. Everything else you see via
getStatus() / GET /v1/messages/:id, History, or the Node SDK’s history().
Typical flows
Section titled “Typical flows”queued → sending → sent → deliveredqueued → sending → sent → bouncedqueued → sending → (retry …) → sentqueued → sending → (failover to fallback service) → sentqueued → sending → failedheld → (credits added) → queued → sending → sentheld → (hold duration over) → discardedqueued → sending → (auth error, no fallback) → held_service_error → (service fixed) → queued → …Timeline events
Section titled “Timeline events”Each message has a timeline of events with timestamps. The dashboard’s History detail shows them with these labels:
| Event | Label in History | Meaning |
|---|---|---|
held |
Held | Stored in the hold queue |
released |
Released | Released from the hold queue |
queued |
Queued | Waiting for the sender |
sending |
Sending | Handed to the provider |
sent |
Sent | The provider accepted it |
failover |
Switched to fallback service | The primary service failed, the fallback was used |
retry |
Retry scheduled | A transient error, another attempt follows |
auto_reply |
Auto-reply created | An auto-reply was created for this message |
delivered |
Delivered | Delivery confirmed via webhook |
bounced |
Bounced | Hard bounce (status bounced) or soft bounce (event only, the provider keeps retrying) |
complained |
Marked as spam | The recipient complained |
opened / clicked |
Opened / Link clicked | Open and click tracking from the provider |
failed |
Failed | Permanent error |
refunded |
Credit refunded | The reserved credit went back to its grant |
discarded |
Discarded | Removed from the hold queue |
opened and clicked are events, not statuses – a delivered message that was opened stays
delivered. Open tracking depends on the provider and on the recipient loading images, so treat
it as an estimate.
Retention
Section titled “Retention”Messages and their rendered content are kept for the history period of the plan they were sent on (7 to 180 days, see Plans), then deleted.