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

# List Webhook Deliveries

> List every delivery Tuco made to one webhook in the last 30 days: event, your endpoint's status code, latency and attempts. Cursor-paginated.

Newest first. Deliveries are kept for **30 days**. Includes live events, tests and replays.

## Authentication

```bash theme={null}
Authorization: Bearer tuco_xxxxxxxxxxxxx
```

## Path parameters

<ParamField path="id" type="string" required>
  Webhook ID.
</ParamField>

## Query parameters

<ParamField query="limit" type="number" default="25">
  Page size, 1–100.
</ParamField>

<ParamField query="status" type="string">
  `success` or `failed`.
</ParamField>

<ParamField query="event" type="string">
  Only this event, e.g. `message.sent`.
</ParamField>

<ParamField query="cursor" type="string">
  `nextCursor` from the previous page.
</ParamField>

## Response

<ResponseField name="deliveries" type="array">
  <Expandable title="delivery">
    <ResponseField name="id" type="string">Delivery id. Use it to get or replay the delivery.</ResponseField>
    <ResponseField name="event" type="string">Event type.</ResponseField>
    <ResponseField name="eventId" type="string | null">`X-Tuco-Event-Id` that was sent.</ResponseField>
    <ResponseField name="deliveryId" type="string | null">`X-Tuco-Delivery-Id` that was sent.</ResponseField>
    <ResponseField name="messageId" type="string | null">Tuco message id, when the event has one.</ResponseField>
    <ResponseField name="status" type="string">`success` (your endpoint returned 2xx) or `failed`.</ResponseField>
    <ResponseField name="responseStatus" type="number | null">Your endpoint's final HTTP status. `null` on a timeout or network error.</ResponseField>
    <ResponseField name="error" type="string | null">Why it failed.</ResponseField>
    <ResponseField name="latencyMs" type="number">Total time including the retry.</ResponseField>
    <ResponseField name="attemptCount" type="number">1, or 2 when Tuco retried.</ResponseField>
    <ResponseField name="isTest" type="boolean">Sent by the test endpoint.</ResponseField>
    <ResponseField name="isReplayOf" type="string | null">For a replay: the id of the original delivery.</ResponseField>
    <ResponseField name="url" type="string">Endpoint URL it was sent to.</ResponseField>
    <ResponseField name="createdAt" type="string">ISO 8601 UTC.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="nextCursor" type="string | null">Pass as `cursor` for the next page. `null` on the last page.</ResponseField>

| Status | When |
| - | - |
| `200` | OK |
| `400` | Invalid `limit`, `status` or `cursor` |
| `401` | Missing or invalid API key |
| `404` | Webhook not found in your workspace |

## Example

```bash theme={null}
curl "https://app.tuco.ai/api/webhooks/680a1b2c3d4e5f6789012345/deliveries?status=failed&limit=2" \
  -H "Authorization: Bearer tuco_xxxxxxxxxxxxx"
```

```json theme={null}
{
  "deliveries": [
    {
      "id": "6ad14a1e2f9c4b0012ab34cd",
      "event": "message.sent",
      "eventId": "evt_3f1c9a7e52b04d8a9c61e0f2",
      "deliveryId": "dlv_8b2d4e6f10a3c5e7f9b1d3a5",
      "messageId": "6ad119046e345bcbe00cd99b",
      "status": "failed",
      "responseStatus": 503,
      "error": "HTTP 503: Service Unavailable",
      "latencyMs": 5231,
      "attemptCount": 2,
      "isTest": false,
      "isReplayOf": null,
      "url": "https://hooks.example.com/tuco",
      "createdAt": "2026-10-16T09:12:44.512Z"
    }
  ],
  "nextCursor": "6ad14a1e2f9c4b0012ab34cd"
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.