Reference

Statuses & events

Every message moves through a series of events. Its status is the furthest stage it has reached.

Furthest stage reached

Each message (one per recipient) records an event for every step: queued, sent, delivered, opened, clicked and so on. The message status is not simply the latest event but the furthest stage reached along the happy path. For example, a message that was delivered, then clicked, and later opened again stays CLICKED; a late DELIVERED notification arriving after an OPENED event does not move it back.

Problem outcomes — bounces, complaints, blocks and failures — are reported as the status, so a message that hard-bounced is shown as HARD_BOUNCE. Opens and clicks are still counted separately (the portal shows totals per message).

Email statuses

QUEUED→SENT→DELIVERED→OPENED→CLICKED
StatusMeaning
QUEUEDAccepted by the API or SMTP relay and waiting to be sent.
SENTHanded over to the mail infrastructure (Amazon SES).
DELIVEREDThe recipient's mail server accepted the message.
OPENEDThe recipient opened the email (tracking pixel loaded). May be affected by privacy features such as Apple Mail Privacy Protection.
CLICKEDThe recipient clicked a tracked link.
SOFT_BOUNCETemporary delivery failure (mailbox full, server unavailable…).
HARD_BOUNCEPermanent delivery failure (address does not exist). The address is added to the suppression list.
COMPLAINTThe recipient marked the message as spam. The address is suppressed.
BLOCKEDNot sent because the recipient is on the suppression list (earlier hard bounce, complaint or unsubscribe).
FAILEDPermanent send or render error (for example a template that fails to render with the given params).

Email events

Besides the status-changing events above, these events are recorded on a message:

EventMeaning
UNSUBSCRIBEDThe recipient used the {{ unsubscribe }} link. Future sends to the address are blocked.
OPENED / CLICKEDRecorded on every open and click, with the user agent and, for clicks, the URL.
SOFT_BOUNCE / HARD_BOUNCEInclude a diagnostic message and bounce type from the receiving server.

Where to see events

Open Transactional → Messages in the portal to search messages by recipient, tag, template or status and see the full event timeline of each one.

WhatsApp statuses

QUEUED→SENT→DELIVERED→READ
StatusMeaning
QUEUEDAccepted by SnappyMails and waiting to be sent to WhatsApp.
SENTAccepted by WhatsApp (a wa_message_id is assigned).
DELIVEREDDelivered to the customer's device.
READThe customer opened the message (only when they have read receipts enabled).
FAILEDWhatsApp rejected or could not deliver the message; see the error object.
RECEIVEDAn inbound message from the customer. Opens or refreshes the 24-hour service window.

WhatsApp statuses follow the same furthest-stage rule: a READ message stays READ even if a delivery receipt arrives afterwards. Poll GET /v1/whatsapp/messages/{messageId} to follow a message.

Good to know

  • Timestamps are RFC 3339 in UTC.
  • Statuses are recorded per recipient; a message sent to three addresses has three independent statuses.
  • Open tracking is approximate; prefer clicks or delivery for critical decisions.
  • To be notified instead of polling, subscribe to these events with webhooks.