GoRunner

Jobs that failed past redelivery

Requires scope run:read
GET
/api/queue/dead

The dead-letter queue: jobs a worker could not parse, or that exceeded MaxRedeliveries (3) stale-sweep redeliveries. GET /api/stats reports its SIZE; this reports what is in it.

INSTANCE-WIDE, not workspace-scoped — the queue is one Redis list for the whole fleet, like the other queue counters on /api/stats. Entries carry IDENTITY only (run id, workflow id, tenant, trigger type, when it was enqueued, how many redeliveries it survived, its size on the queue). The stored entry also contains the whole workflow definition; that is deliberately NOT returned, so this cannot become a second way to read a workflow.

Newest first, capped at 200. total is the real length and truncated says whether you are looking at all of it.

There is no replay. A dead-lettered run has already been redelivered three times and its run row failed by the orphan sweep, and re-enqueueing the stored definition would execute a snapshot the workflow may have moved past. Clearing the queue (DELETE /api/queue/dead, org:manage) is the only mutation, and it is all-or-nothing.

Authorization

bearerAuth
AuthorizationBearer <token>

An API token: Authorization: Bearer grt_…. Mint one in the app under Settings → Workspace → API tokens; the raw value is shown once. Scopes confine the token — see x-permission on each operation.

In: header

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/queue/dead"
{  "data": {    "entries": [      {        "index": 0,        "runId": "78c33d18-170c-44d3-a227-b3194f134f73",        "workflowId": "43c4fa9b-0cbc-4b57-a121-9d7d46a3eaa4",        "workspaceId": "ef0efa32-d1c1-43d4-a5e2-fe7b4f00403c",        "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa",        "triggerType": "string",        "enqueuedAt": "2019-08-24T14:15:22Z",        "retries": 0,        "unparseable": true,        "bytes": 0      }    ],    "total": 0,    "truncated": true  }}