---
title: "List webhook deliveries"
method: GET
path: "/api/v1/webhook_endpoints/{endpoint_id}/deliveries"
tags: ["Webhooks"]
---

# List webhook deliveries

`GET /api/v1/webhook_endpoints/{endpoint_id}/deliveries`

## Request

- Base URL: `https://app.voicepanel.com`
- URL: `https://app.voicepanel.com/api/v1/webhook_endpoints/{endpoint_id}/deliveries`
- Auth: HTTP bearer

Retrieve recent deliveries for an endpoint, newest first, with the HTTP status and response body of the last attempt. Deliveries are kept for 30 days.

## Path parameters

- `endpoint_id` string, required

## Query parameters

- `status` 'pending' | 'succeeded' | 'failed'
- `limit` integer
- `cursor` string

## Response `200`

Successful response

- object
  - `data` WebhookDelivery[], required
    - `id` string, required: The webhook delivery ID
    - `endpoint_id` string, required: The webhook endpoint ID
    - `account_id` string, required: The account that owns the endpoint
    - `event_id` string, required: Event ID sent in the `webhook-id` header
    - `event_type` 'response.completed' | 'webhook.test', required: Event type sent in the `x-voicepanel-event` header
    - `payload` object, required: The event body as delivered to the endpoint
      - `id` string, required: Event ID. Retries of the same event reuse it.
      - `type` string, required: Event type
      - `created_at` string, date-time, required
      - `data` object, required: Event data. Listed per event type under Webhooks.
    - `status` 'pending' | 'succeeded' | 'failed', required: `pending` while attempts remain
    - `attempts` integer, required: Attempts made so far
    - `last_attempt_at` string, date-time, nullable, required
    - `response_status` integer, nullable, required: HTTP status of the last attempt
    - `response_body` string, nullable, required: Response body of the last attempt, truncated
    - `error` string, nullable, required: Error of the last attempt, when no response arrived
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `has_more` boolean, required: True when rows exist after the last one in data
  - `next_cursor` string, nullable, required: Pass back as `cursor` to read the next page

## Other responses

- `400`: Bad request. `code` is `validation_error` when a field is invalid or a query parameter is unknown, with the field paths in `details`, or `bad_request` otherwise.
- `401`: Unauthorized. The token is missing, invalid, or has no user.
- `403`: Forbidden. The token has no access to this resource.
- `404`: Not found. The resource does not exist or belongs to another account.
- `429`: Too many requests. The account used its API rate limit. `code` is `too_many_requests`. Wait for the number of seconds in `Retry-After`, then retry.
- `500`: Internal error. Quote `request_id` when you contact support.

---

[API](https://skmtc.dev/voicepanel/apis/voicepanel-api.md) - [All operations](https://skmtc.dev/voicepanel/apis/voicepanel-api/llms.txt) - [OpenAPI document](https://skmtc.dev/voicepanel/apis/voicepanel-api/revisions/ee41535c5694?raw)
