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

# List Webhook Deliveries

> What was sent to an endpoint and how it went

[← Webhooks](/api-reference/webhooks/overview)

The deliveries sent to an endpoint, newest first, with the outcome of their last attempt and the exact payload. Use it to debug your server or to find events you missed.

<Warning>
  **Beta.** Part of the webhooks API, currently in beta. The contract may still change before general availability.
</Warning>

<RequestExample>
  ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl -X GET "https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries" \
    -H "x-api-key: ${DCYCLE_API_KEY}" \
    -H "x-organization-id: ${DCYCLE_ORG_ID}"
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark"}}
  import os

  import requests

  response = requests.get(
      "https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries",
      headers={
          "x-api-key": os.environ["DCYCLE_API_KEY"],
          "x-organization-id": os.environ["DCYCLE_ORG_ID"],
      },
      timeout=30,
  )
  response.raise_for_status()
  print(response.status_code, response.json())
  ```

  ```javascript JavaScript theme={"theme":{"light":"github-light","dark":"github-dark"}}
  const axios = require('axios');

  const response = await axios.get('https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries', {
    headers: {
      'x-api-key': process.env.DCYCLE_API_KEY,
      'x-organization-id': process.env.DCYCLE_ORG_ID,
    },
  });
  console.log(response.status, response.data);
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "items": [
      {
        "id": "8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3",
        "event_id": "6f1d2c3b-9a8e-4f7d-b6c5-a4e3d2c1b0a9",
        "event_type": "ingest_job.finished",
        "status": "pending",
        "attempt_count": 2,
        "next_attempt_at": "2026-10-01T10:23:43.118204",
        "last_attempt_at": "2026-10-01T10:17:43.118204",
        "last_status_code": 503,
        "last_error": "HTTP 503",
        "last_duration_ms": 412,
        "delivered_at": null,
        "created_at": "2026-10-01T10:16:42.004117",
        "payload": {
          "id": "6f1d2c3b-9a8e-4f7d-b6c5-a4e3d2c1b0a9",
          "type": "ingest_job.finished",
          "created_at": "2026-10-01T10:16:42Z",
          "organization_id": "a8315ef3-dd50-43f8-b7ce-d839e68d51fa",
          "data": {
            "id": "2d4b90c1-7c1e-4b6f-9a55-3f2b8e61d0aa",
            "status": "completed"
          }
        }
      }
    ],
    "total": 1,
    "page": 1,
    "size": 10
  }
  ```
</ResponseExample>

## Request

### Headers

<ParamField header="x-api-key" type="string" required>
  API key of an **organization admin**.

  **Example:** `sk_live_1234567890abcdef`
</ParamField>

<ParamField header="x-organization-id" type="string" required>
  The organization that owns the endpoints.

  **Example:** `a8315ef3-dd50-43f8-b7ce-d839e68d51fa`
</ParamField>

### Path Parameters

<ParamField path="endpoint_id" type="uuid" required>
  The endpoint `id`.

  **Example:** `5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f`
</ParamField>

### Query Parameters

<ParamField query="page" type="integer" default="1">Page number.</ParamField>
<ParamField query="size" type="integer" default="10">Page size, 1 to 500.</ParamField>

## Response

A page of deliveries (`200 OK`): `items`, `total`, `page`, `size`. Each item:

<ResponseField name="id" type="uuid">Delivery id.</ResponseField>
<ResponseField name="event_id" type="uuid">The payload `id`, the same on every retry and for every endpoint that got the event.</ResponseField>
<ResponseField name="event_type" type="string">`ingest_job.finished` or `webhook.test`.</ResponseField>

<ResponseField name="status" type="string">
  **Available values:** `pending` (being sent or waiting for a retry), `succeeded` (got a `2xx`), `failed` (retries exhausted, or the endpoint was disabled).
</ResponseField>

<ResponseField name="attempt_count" type="integer">Attempts so far (at most 7).</ResponseField>
<ResponseField name="next_attempt_at" type="datetime | null">When the next retry is due (UTC), while `pending`.</ResponseField>
<ResponseField name="last_attempt_at" type="datetime | null">UTC.</ResponseField>
<ResponseField name="last_status_code" type="integer | null">HTTP status your server answered; `null` on a timeout or network error.</ResponseField>
<ResponseField name="last_error" type="string | null">Why the last attempt failed, e.g. `HTTP 503` or a connection error.</ResponseField>
<ResponseField name="last_duration_ms" type="integer | null">How long the last attempt took.</ResponseField>
<ResponseField name="delivered_at" type="datetime | null">When your server answered `2xx` (UTC).</ResponseField>
<ResponseField name="created_at" type="datetime">When the event was recorded (UTC).</ResponseField>
<ResponseField name="payload" type="object">The exact JSON body sent. See [Events](/api-reference/webhooks/overview#events).</ResponseField>

## Common Errors

### 401 Unauthorized

Missing or invalid API key.

### 403 Forbidden

`ORG_ADMIN_REQUIRED`: only organization admins can manage webhook endpoints. `LOGGED_USER_NOT_MEMBER`: the API key's user is not a member of the organization.

### 404 Not Found

The endpoint does not exist or belongs to another organization. Both cases return the same response.

## Related Endpoints

<CardGroup cols={2}>
  <Card title="Send Test Event" icon="paper-plane" href="/api-reference/webhooks/test-endpoint">
    Generate a delivery now
  </Card>

  <Card title="Update Webhook Endpoint" icon="pencil" href="/api-reference/webhooks/update-endpoint">
    Re-enable a disabled endpoint
  </Card>
</CardGroup>
