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

# List Webhook Deliveries

> Lists recent delivery attempts for a webhook endpoint

Available on agency plans. The API token must belong to the agency owner.

Returns the delivery log for one endpoint, newest first. Deliveries are kept for 30 days.

## Path Parameters

| Name          | Type   | Description            |
| ------------- | ------ | ---------------------- |
| webhook\_id\* | String | The ID of the webhook. |

## Query Parameters

| Name      | Type    | Description                            |
| --------- | ------- | -------------------------------------- |
| page      | Integer | Page number.                           |
| per\_page | Integer | Results per page, max 100. Default 25. |

## Headers

| Name            | Type   | Description        |
| --------------- | ------ | ------------------ |
| Accept\*        | String | application/json   |
| Authorization\* | String | Bearer {api_token} |

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.sitespeak.ai/v1/agency/webhooks/{webhook_id}/deliveries" \
    -H "Accept: application/json" \
    -H "Authorization: Bearer YOUR_API_TOKEN"
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch(
    'https://api.sitespeak.ai/v1/agency/webhooks/{webhook_id}/deliveries',
    {
      headers: {
        'Accept': 'application/json',
        'Authorization': 'Bearer YOUR_API_TOKEN'
      }
    }
  );

  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

## Response

Standard Laravel pagination envelope. Each delivery shows the payload that was sent, the last response status, the attempt count, and when it was delivered.

<Tabs>
  <Tab title="200 Success">
    ```json theme={null}
    {
      "current_page": 1,
      "data": [
        {
          "id": "9194bb86-10ab-443c-829c-5c420c475e2f",
          "agency_webhook_id": "4e1d795f-16b5-412a-b324-5f34779829a7",
          "event": "lead.captured",
          "payload": {
            "id": "9194bb86-10ab-443c-829c-5c420c475e2f",
            "event": "lead.captured",
            "timestamp": "2026-08-18T11:43:08+00:00",
            "team_id": "8e7a1b4c-8c7c-4029-aa4e-c3bf3c8b7abc",
            "external_reference": "your-billing-id-123",
            "chatbot_id": "8cc9fd44-4c7c-4d5d-aebe-68b03e8236fd",
            "data": {
              "visitor": {
                "id": "a176e7eb-c8bb-4be0-bc1a-608f4377df8d",
                "email": "customer@example.com",
                "first_name": "Jane",
                "last_name": "Doe",
                "phone": null,
                "visitor_id": "wh-visitor-1",
                "custom_data": null
              },
              "chatbot_name": "Support Agent"
            }
          },
          "response_status": 200,
          "attempts": 1,
          "last_error": null,
          "delivered_at": "2026-08-18T11:43:10.000000Z",
          "created_at": "2026-08-18T11:43:08.000000Z",
          "updated_at": "2026-08-18T11:43:10.000000Z"
        }
      ],
      "per_page": 25,
      "total": 1
    }
    ```
  </Tab>
</Tabs>

A delivery with `delivered_at: null` and a `last_error` is still retrying, unless the error ends with `(retries exhausted)` or `(not sent)`, which is terminal.
