Statuses and events
Every email has a status and a timeline of events. See both with GET /emails/{id}.
Statuses
Section titled “Statuses”| Status | Meaning |
|---|---|
queued |
Accepted, about to be sent. |
scheduled |
Waiting for its scheduledAt time. |
sending |
Being handed to the mail servers. |
sent |
Accepted by Amazon SES for delivery. |
delivered |
The recipient’s mail server accepted it. |
delivery_delayed |
The recipient’s server is temporarily refusing it (for example a full mailbox). Delivery is retried. |
bounced |
Permanently rejected: the address doesn’t exist or refuses mail. |
complained |
The recipient marked it as spam. |
suppressed |
Not sent: every recipient is on a suppression list. |
failed |
Rejected before delivery. The error field says why. |
canceled |
A scheduled email you canceled. |
A status only ever moves forward. For example, a late delivered event never hides an earlier
complaint. For emails with several recipients the status reflects the most serious outcome; the
events show each recipient.
Events
Section titled “Events”| Event | When |
|---|---|
sent |
Handed to SES. |
delivered |
Accepted by the recipient’s server (per recipient). |
delivery_delayed |
A temporary problem, with delayType or the bounce details in data. |
bounced |
A permanent bounce, with the bounce type and diagnostic code in data. |
complained |
A spam report, with the feedback type in data. |
suppressed |
A recipient was skipped because it is suppressed, with the reason in data. |
rejected |
SES refused the email, with the reason in data. |
"events": [ { "type": "sent", "recipient": null, "data": { "messageId": "0109..." }, "occurredAt": "2026-10-28T05:00:00.120Z" }, { "type": "delivered", "recipient": "[email protected]", "data": { "smtpResponse": "250 OK" }, "occurredAt": "2026-10-28T05:00:01.480Z" }]Open and click tracking are not enabled yet. Login codes and password resets should never carry tracking.
Getting events pushed to your own server is coming with webhooks.