List account email events
Lists account-level email events sorted oldest first by occurred_at asc, id asc. Each row contains a legacy email.-prefixed event_type and an additive canonical_event_type. Gateway rejection renders email.failed with canonical email.gw_reject; ambiguous injection timeout renders email.injection_timeout in both; MTA expiration renders email.bounced with canonical email.expired. Message-scoped queued, sending, sandbox, cancelled, and daily_limit_exceeded rows fan out per durable recipient with stable derived IDs matching webhook delivery. Scheduled is the cardinality exception: account polling retains one message-scoped scheduled row with its stored event ID, while scheduled webhook publication fans out per recipient with derived IDs; reconcile scheduled events by message ID, event type, and occurrence time rather than event UUID. Recipient-scoped stored rows retain their stored UUIDs across polling and webhook delivery. Legacy names are derived from stored rows; an AdminBounce row stored as failed renders email.failed in polling while its webhook retains email.bounced, both with canonical email.failed.
Query parameters
Number of results to return. Defaults to 25; maximum is 100. Invalid values are clamped to the valid range.
Opaque URL-safe Base64 cursor returned by a previous event list response. The legacy page[after] and flat page_cursor forms are also accepted.
Comma-separated list of event types to include. Also accepts repeated query parameters (e.g. event_type=delivered&event_type=bounced). Unknown values return no matches.
Dual-name compatibility: values are accepted bare or email.-prefixed. A legacy value keeps matching the rows it matched pre-rename — no widening: failed also matches the rows that now store the canonical names of the outcomes it covered (gw_reject, injection_timeout, expired); bounced matches stored bounced rows only (recipient-scoped Expirations stored failed pre-rename and never matched bounced, so expired is deliberately not a bounced expansion). A canonical value matches its own rows plus legacy rows whose recorded payload evidence proves that outcome (expired also surfaces legacy bounced rows with bounce_category: transient). The additive canonical_event_type field in each response row names the canonical outcome.
Filter events for a specific email message UUID. Invalid UUID values are silently ignored (no filter applied).
Inclusive ISO 8601 start timestamp. Defaults to 30 days ago when omitted.
Inclusive ISO 8601 end timestamp. When from is provided without to, defaults to from + 30 days.
Response
Paginated list of account email events.
Example response
{
"data": [
{
"event_type": "email.delivered",
"canonical_event_type": "email.delivered"
}
]
}