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…

GEThttps://api.mailfully.com/v1/webhook-dead-letters

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. Requires the manage:webhooks scope, which is a dashboard-session scope and cannot be granted to API keys today: every mf_ API key receives 403. Call this endpoint with a dashboard session token (owner, admin, or member).

Loading code example
Loading code example

Authorizations

Authorizationstringheaderrequired

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Query Parameters

limitintegerdefault: 50

Maximum rows to return. Default 50, clamped to [1, 100].

Required range: x >= 1, x <= 100
Default: 50
cursorstring

Opaque pagination cursor from a previous response's `next_cursor`.

webhook_idstring

Filter to one endpoint's dead letters. An unknown value yields an empty page.

Response

application/json

A page of dead letters.

dataarray<object>required
data.idstringrequired

Dead-letter id (a bare ULID, no prefix).

data.webhook_idstringrequired

The exhausted endpoint (`whk_…`).

data.event_idstringrequired
data.event_type"email.delivered" | "email.bounced" | "email.complained" | "email.failed" | "email.delivery_delayed" | "email.opened" | "email.clicked" | "email.suppressed"required

Subscribable webhook event types. `email.suppressed` is accepted by the subscription filter but is never delivered as a webhook today — the suppressed event appears only in the message event timeline (`GET /v1/emails/{id}/events`).

Allowed values: "email.delivered" | "email.bounced" | "email.complained" | "email.failed" | "email.delivery_delayed" | "email.opened" | "email.clicked" | "email.suppressed"
data.last_status_codeintegerrequired

HTTP status of the exhausting attempt; null on transport error or breaker skip.

data.attemptsintegerrequired

Attempt count at exhaustion (7 on the normal path).

data.dead_lettered_atstring<date-time>required
data.replayed_atstring<date-time>required
has_morebooleanrequired
next_cursorstringrequired