API reference
5 operations in dead_work. Raw spec: openapi.json.
/api/v1/admin/dead-workGET /api/admin/dead-work — every ledger's abandoned work, newest first.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
source | query | — | No | Restrict to one ledger: `job`, `email`, `webhook` or `event`. |
include_cancelled | query | — | No | Include rows an operator already cancelled. Off by default: the list exists to show what still needs a decision. |
limit | query | — | No | Page size, clamped to 1..=200. |
offset | query | — | No | Rows to skip, from a previous page's `next_offset`. |
Responses
| Status | Description |
|---|---|
200 |
Security: bearer
/api/v1/admin/dead-work/destinationsGET /api/admin/dead-work/destinations — webhook destinations and their failure counters.
Paused first, then the ones closest to pausing: the operator question is "what is suppressed, and what is about to be".
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
paused_only | query | — | No | Only destinations that are currently paused. |
Responses
| Status | Description |
|---|---|
200 |
Security: bearer
/api/v1/admin/dead-work/destinations/{id}/resumePOST /api/admin/dead-work/destinations/{id}/resume — clear a pause.
Also resets the counter, so the destination gets a full budget of failures before it pauses again rather than pausing on the next one. The operator fixed something; the evidence that it was broken is history, not a debt.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | Yes |
Responses
| Status | Description |
|---|---|
204 |
Security: bearer
/api/v1/admin/dead-work/{source}/{id}/cancelPOST /api/admin/dead-work/{source}/{id}/cancel — record that this work is not wanted.
For a job (including a webhook delivery job) the row also moves to `failed`, so the dead depth an alert reads actually falls. For email and dead events the ledger state stays and the decision is this table's row: see `core_db::dead_work::cancel` for why that asymmetry is deliberate.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
source | path | string | Yes | |
id | path | string | Yes |
Request body
CancelDeadWorkRequest
Responses
| Status | Description |
|---|---|
200 |
Security: bearer
/api/v1/admin/dead-work/{source}/{id}/redrivePOST /api/admin/dead-work/{source}/{id}/redrive — requeue one item.
The row is requeued in place: a webhook job keeps its dedupe key, so the replay cannot deliver the same `(webhook, event)` twice, and the attempt budget restarts so the retry is real. A repeat call is `not_dead` and writes no second audit row.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
source | path | string | Yes | |
id | path | string | Yes |
Responses
| Status | Description |
|---|---|
200 |
Security: bearer