List dead-lettered deliveries
List the organization's dead-lettered webhook deliveries (events whose 7-attempt retry schedule was exhausted), newest first, with keyset pagination (default limit 50). Optionally filter by webhook_id. Dashboard only (owner, admin, or member). API keys get 403 insufficient_scope.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Maximum rows to return. Default 50, clamped to [1, 100].
x >= 1, x <= 10050Opaque pagination cursor from a previous response's next_cursor.
Filter to one endpoint's dead letters. An unknown value yields an empty page.
Response
A page of dead letters.
dataarray<object>requireddata.idstringrequiredDead-letter id (a bare ULID, no prefix).
data.webhook_idstringrequiredThe exhausted endpoint (whk_…).
data.event_idstringrequireddata.event_type"email.delivered" | "email.bounced" | "email.complained" | "email.failed" | "email.delivery_delayed" | "email.opened" | "email.clicked" | "email.suppressed" | "email.unsubscribed" | "email.received"requiredSubscribable webhook event types. email.suppressed and email.unsubscribed are accepted by the subscription filter but are never delivered as webhooks. The suppressed and unsubscribed events appear only in the message event timeline (GET /v1/emails/{id}/events). email.received fires once for each email received at a domain with receiving turned on or at the hosted address.
"email.delivered" | "email.bounced" | "email.complained" | "email.failed" | "email.delivery_delayed" | "email.opened" | "email.clicked" | "email.suppressed" | "email.unsubscribed" | "email.received"data.last_status_codeintegerrequiredHTTP status of the exhausting attempt; null on a connection error or timeout, or when delivery was skipped because the endpoint is failing.
data.attemptsintegerrequiredAttempt count at exhaustion (7 on the normal path).
data.dead_lettered_atstring<date-time>requireddata.replayed_atstring<date-time>requiredhas_morebooleanrequirednext_cursorstringrequired