Skip to main content
Every email you send leaves a timeline. Read a send’s current status with the id the send call returned, page its per-recipient delivery events, or have the same signals pushed to your app as they happen.

The lifecycle

A send’s status tells you where it stands right now: Delivery confirmations do not change status — they are recorded as events and advance the send’s lastEventType and lastEventAt fields, so a sent message with lastEventType: "Delivery" has been accepted by the recipient’s mail server.

Read a send

Fetch a send with GET /v1/messages/{messageId} (scope messages:read), using the id returned when you sent it.

Page the delivery events

For the full timeline, list one send’s delivery events with GET /v1/messages/{messageId}/events — newest first, default 50, up to 100 per request.

Event fields

Each event says what happened, to whom, and when.
Events can arrive out of order. Sort by occurredAt — not by when you received each event — when you reconstruct a message’s lifecycle.

What to do with each signal

Get events pushed to you

Polling works, but for real-time updates subscribe to message.delivered, message.bounced, and message.complained via webhooks, and Dairo calls your app the moment each one lands. For a single, durable, account-wide stream of everything, read the event ledger.

Next steps