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

# List Deliveries

> Returns a cursor-paginated log of an endpoint's recent deliveries.

Requires the `webhooks:read` scope. Returns the delivery attempts for a webhook endpoint, most recent first. Delivery log rows are retained for 30 days.

### Path parameters

<ParamField path="id" type="string" required>
  The id of the webhook endpoint.
</ParamField>

### Query parameters

<ParamField query="page_size" type="number" default="25">
  The number of deliveries to return per page.
</ParamField>

<ParamField query="cursor" type="string">
  The pagination cursor from a previous response's `next_cursor`. See [Pagination](/pagination).
</ParamField>

### Response

<ResponseField name="data" type="array">
  The page of deliveries.

  <Expandable title="properties" defaultOpen="true">
    <ResponseField name="id" type="string">
      The delivery's unique id, matching the `X-Audienceful-Delivery-Id` header sent to your server.
    </ResponseField>

    <ResponseField name="event" type="string">
      The event that was delivered (e.g. `person.created`, or `ping` for a test).
    </ResponseField>

    <ResponseField name="payload" type="object">
      The full signed body that was (or will be) POSTed to your endpoint — the `{ "event": ..., "data": ... }` envelope. Exposed so the log is a real debugging tool: you can see exactly what was sent for each delivery.
    </ResponseField>

    <ResponseField name="succeeded" type="boolean or null">
      Whether the delivery succeeded. `null` while a delivery is still in flight.
    </ResponseField>

    <ResponseField name="attempts" type="number">
      How many delivery attempts have been made.
    </ResponseField>

    <ResponseField name="response_status" type="number or null">
      The HTTP status code your server returned on the last attempt.
    </ResponseField>

    <ResponseField name="response_ms" type="number or null">
      How long your server took to respond, in milliseconds.
    </ResponseField>

    <ResponseField name="error" type="string">
      The error from the last failed attempt, if any. Empty on success.
    </ResponseField>

    <ResponseField name="created_at" type="string">
      The datetime (UTC) the delivery was created.
    </ResponseField>

    <ResponseField name="completed_at" type="string or null">
      The datetime (UTC) the delivery finished, if it has.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="has_more" type="boolean">
  Whether more deliveries exist after this page.
</ResponseField>

<ResponseField name="next_cursor" type="string or null">
  The cursor to pass as `?cursor=` to fetch the next page.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --location --request GET 'https://api.audienceful.com/v2/webhooks/wYt3nKq8Zs4pLm9vRb2xJc/deliveries' \
  --header 'X-Api-Key: <your-api-key>'
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.audienceful.com/v2/webhooks/wYt3nKq8Zs4pLm9vRb2xJc/deliveries"
  headers = {
      "X-Api-Key": "<your-api-key>",
  }

  response = requests.get(url, headers=headers)
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.audienceful.com/v2/webhooks/wYt3nKq8Zs4pLm9vRb2xJc/deliveries", {
    method: "GET",
    headers: {
      "X-Api-Key": "<your-api-key>",
    },
  });
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  {
    "data": [
      {
        "id": "dLm4vRb2xJcwYt3nKq8Zs4",
        "event": "person.created",
        "payload": {
          "event": "person.created",
          "data": {
            "email": "person@example.com",
            "created_at": "2026-07-04T12:00:00Z",
            "extra_data": { "plan": "pro" },
            "audiences": ["Newsletter"],
            "tags": ["vip"],
            "double_opt_in": "not_required"
          }
        },
        "succeeded": true,
        "attempts": 1,
        "response_status": 200,
        "response_ms": 84,
        "error": "",
        "created_at": "2026-07-04T12:00:00Z",
        "completed_at": "2026-07-04T12:00:00Z"
      }
    ],
    "has_more": false,
    "next_cursor": null
  }
  ```
</ResponseExample>
