Skip to content

Track Email

Every email you send gets an id, and comes back in the same shape wherever you see it: in API responses, in webhooks and in an email’s timeline. To be told when an email’s status changes instead of asking, use Email Events.

{
"id": "358120554712436736",
"kind": "transactional",
"sender": "hello@yourcompany.com",
"recipient": "sam@example.com",
"subject": "Your order has shipped",
"content": { "html": null, "text": "Hi Sam, your order is on its way." },
"status": "delivered",
"reason": null,
"clientReference": "order-991",
"clientTag": null,
"openCount": 0,
"createdAt": "2026-10-10T09:30:00Z",
"scheduledAt": null,
"sentAt": "2026-10-10T09:30:01Z",
"deliveredAt": "2026-10-10T09:30:03Z",
"openedAt": null,
"updatedAt": "2026-10-10T09:31:00Z"
}

We don’t keep the HTML after sending, so content.html is always null. content.text is a plain text excerpt of the body. See GET /v2/email/{id} in the API reference for every field.

StatusMeaning
queuedAccepted, or scheduled, and not yet sent
sentHanded to the recipient’s email server, with no result yet
deliveredAccepted by the recipient’s email server
failedNot delivered. reason says why
cancelledA scheduled email you cancelled

A soft bounce, such as a full inbox, leaves the email sent with a reason, as the recipient’s server may still accept it. A spam complaint leaves the email delivered with a reason.

reason is null unless something went wrong:

CategoryMeaning
hard_bounceThe address doesn’t exist or can’t receive email. The address is added to your suppression list
soft_bounceA temporary problem, such as a full inbox
complaintThe recipient marked the email as spam
suppressedThe recipient is on your suppression list
rejectedThe recipient’s server refused the email
failedThe email could not be sent

retryable is true when the problem wasn’t caused by the email or the recipient, so sending again later may work.

  • GET /v2/email/{id} gets one email.
  • GET /v2/email lists your email, newest first. Filter by status, kind, recipient, clientReference, clientTag and time.
  • GET /v2/email/{id}/events lists the events for one email, oldest first, so you can see everything that happened to it. Events are kept for 7 days. After that the timeline is empty, but the email still has its status and times.