API reference / Failed messages (DLQ)
Failed messages (DLQ) scope: manage · reads: read
Browse dead letters grouped by error signature, redrive them back to the queue, or discard them for good.
GET/v1/subscriptions/{sub}/dlqBrowse dead letters, grouped by error signature
Query parameters
| project | Project the name is scoped to. Omitted = "default". Ignored for project API keys — their project is enforced server-side. |
Response · 200
{ "total": 41,
"groups": [ { "error": "downstream 500", "count": 39, "example": "msg_…" } ],
"entries": [ {
"delivery_id": "dlv_…", "message_id": "msg_…", "key": "tenant_7",
"offset": 12, "attempts": 5, "error": "downstream 500",
"dead_at": "2026-08-31T09:00:00.000Z",
"payload_preview": "{\"order_id\":812}"
} ] }Errors
| 404 | no subscription named {sub} in project {project} |
POST/v1/subscriptions/{sub}/dlq/redriveSend dead letters back to the queue (internally rate-limited)
Query parameters
| project | Project the name is scoped to. Omitted = "default". Ignored for project API keys — their project is enforced server-side. |
Request body
{ "all": true }
// or one error group: { "error": "downstream 500" }
// or specific messages: { "message_ids": ["msg_…"] }Response · 200
{ "subscription": "payments/billing-worker", "redriven": 39 }Errors
| 400 | pass message_ids, an error group, or all: true |
| 404 | no subscription named {sub} in project {project} |
DELETE/v1/subscriptions/{sub}/dlq/{id}Discard one dead letter for good (delivery or message id)
Query parameters
| project | Project the name is scoped to. Omitted = "default". Ignored for project API keys — their project is enforced server-side. |
Response · 200
{ "discarded": "dlv_…" }Errors
| 404 | no dead-lettered delivery with that id |