> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stateset.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Aggregate webhook delivery view across all tenant endpoints

> Recent delivery attempts across **all** the tenant's webhook endpoints…

Recent delivery attempts across **all** the tenant's webhook endpoints.

Per-endpoint history sits at `/webhooks/&#123;id&#125;/deliveries` — this is
the dashboard view: 'show me what every webhook fired in the last
N attempts, regardless of which endpoint.' Sorted newest-first.
Cross-tenant leakage prevented by joining through WebhookEndpoint.

**Pagination.** Two modes:

* Bare `?limit=N` returns the N newest rows, with
  `X-Next-Cursor` set when the result fills the page (more
  rows exist).
* Pass `?cursor=&lt;value>` to page strictly past the seed —
  receives only rows strictly older than the cursor's
  `created_at` (ties broken by id for determinism). Mirror of
  the cursor pattern on `/jobs`.

### Query parameters

<ParamField query="limit" type="integer" />

<ParamField query="status" type="string,null">
  Filter to one of: pending, success, failed.
</ParamField>

<ParamField query="cursor" type="string,null">
  Opaque cursor from a previous response's `X-Next-Cursor` header. When supplied, pages strictly past the seed row using a seek predicate — stable across new deliveries arriving mid-paginate (offset would skip rows; cursor won't). Format is the prior page's last delivery id.
</ParamField>

### Response

`WebhookDeliverySummary[]` — each element:

<ResponseField name="id" type="string" required />

<ResponseField name="endpoint_id" type="string" required />

<ResponseField name="event_type" type="string" required />

<ResponseField name="status" type="string" required>
  pending | success | failed
</ResponseField>

<ResponseField name="response_code" type="integer,null">
  HTTP status from the receiver, if a response was received.
</ResponseField>

<ResponseField name="attempts" type="integer" required>
  Total attempts so far (1..3).
</ResponseField>

<ResponseField name="next_retry_at" type="string,null">
  Scheduled retry time, ISO 8601 UTC, when status == 'failed'.
</ResponseField>

<ResponseField name="created_at" type="string" required />

### Status codes

| Code  | Meaning             |
| ----- | ------------------- |
| `200` | Successful Response |
| `422` | Validation Error    |

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api.computer.stateset.app/api/v1/webhooks/deliveries/recent' \
    --header 'X-API-Key: YOUR_API_KEY'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "endpoint_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "event_type": "string",
      "status": "pending",
      "response_code": 1,
      "attempts": 1,
      "next_retry_at": "2026-08-31T14:22:05Z",
      "created_at": "2026-08-31T14:22:05Z"
    }
  ]
  ```
</ResponseExample>
