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

# List Webhook Deliveries

> Audit log of delivery attempts for an endpoint

## Path Parameters

<ParamField path="id" type="string" required>Endpoint ID (`whk_*`).</ParamField>

## Query Parameters

<ParamField query="limit" type="integer" default="20">Page size (1--100).</ParamField>
<ParamField query="cursor" type="string">Opaque cursor.</ParamField>

<ParamField query="since" type="string">
  ISO 8601 timestamp. Only deliveries with `created_at >= since` are
  returned. Useful for incremental polling — set
  `since = last_seen_created_at` and walk pages until exhausted. Composes
  cleanly with `cursor` so pagination stays stable across the filtered
  window.
</ParamField>

## Retention

Delivery audit rows are retained for **30 days** (daily-partitioned;
older partitions are dropped by the partition-maintenance cron). Queries
for `since` values older than 30 days return an empty list rather than an
error — fall back to the alert audit log
([GET /v1/alerts](/api-reference/monitoring/alerts/list)) when you need
older history.

## Response

<ResponseField name="object" type="string">Always `"list"`.</ResponseField>

<ResponseField name="data" type="object[]">
  Array of `WebhookDelivery` rows.

  <Expandable title="WebhookDelivery">
    <ResponseField name="id" type="string">Raw UUID of the attempt row.</ResponseField>
    <ResponseField name="object" type="string">Always `"webhook_delivery"`.</ResponseField>
    <ResponseField name="endpoint_id" type="string">Source endpoint (`whk_*`).</ResponseField>
    <ResponseField name="alert_id" type="string | null">Source alert (`alt_*`) when applicable.</ResponseField>
    <ResponseField name="event_id" type="string">Stable event identifier — same value as the `webhook-id` header on the delivery.</ResponseField>
    <ResponseField name="event_type" type="string">Event type (e.g., `alert.created`).</ResponseField>
    <ResponseField name="attempt" type="integer">Retry attempt number (1-indexed).</ResponseField>
    <ResponseField name="delivery_attempt_id" type="string">UUID of this specific attempt.</ResponseField>
    <ResponseField name="status" type="string">One of `pending`, `delivered`, `failed`, or `exhausted`. `exhausted` is the terminal state after all 7 retry attempts have failed.</ResponseField>
    <ResponseField name="http_status" type="integer | null">Response code from the customer endpoint.</ResponseField>
    <ResponseField name="response_body" type="string | null">First 1KB of the response body (truncated).</ResponseField>
    <ResponseField name="signature_timestamp" type="string">ISO timestamp embedded in the `webhook-timestamp` header.</ResponseField>
    <ResponseField name="next_retry_at" type="string | null">ISO timestamp of the next scheduled retry.</ResponseField>
    <ResponseField name="delivered_at" type="string | null">When the delivery succeeded.</ResponseField>
    <ResponseField name="created_at" type="string">When the attempt was scheduled.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="has_more" type="boolean">Whether more pages exist.</ResponseField>
<ResponseField name="pagination" type="object">Cursor envelope.</ResponseField>
<ResponseField name="request_id" type="string">Request identifier.</ResponseField>

## Errors

* **400** — `since` is not a valid ISO 8601 timestamp.
* **404** — endpoint does not exist or belongs to another org.

<RequestExample>
  ```bash cURL theme={null}
  curl "https://api.signa.so/v1/webhooks/whk_01HK.../deliveries?since=2026-05-01T00:00:00Z" \
    -H "Authorization: Bearer $SIGNA_API_KEY"
  ```

  ```ts TypeScript theme={null}
  const deliveries = await signa.webhooks.listDeliveries('whk_01HK...', {
    since: '2026-05-01T00:00:00Z',
  });
  ```
</RequestExample>
