# GET /v1/webhooks/{endpoint_id}/deliveries

> Every attempt with status code and timing.

In [Webhooks and events API](https://vestra.ai/developers/reference/api/webhooks-and-events.md): Where events go, how each delivery went, and the record of every event.

Send `Authorization: Bearer vk_test_...` on every call.

Every attempt with status code and timing.

Your API key, scope `setup` or `all`. On the card: [`events`](https://vestra.ai/developers/events.md). Over HTTP it is made from the contract: fill in each {…} and every value.

## Request

Path:

- `endpoint_id` (`string`, required): The webhook endpoint's id (`whk_...`).

Query:

- `limit` (`integer`): How many items per page, 1 to 100. Default 20.
- `cursor` (`string`): Where to go on from: the `next_cursor` of the page before, unchanged. Absent: the first page.
- `state` (`"pending" | "sending" | "sent" | "failed"`): Only deliveries in this state.

## Answers 200

- `data` (`object[]`): The items on this page.
  - `id` (`string`): The delivery: one event, to one endpoint (dlv_...).
  - `object` (`"webhook_delivery"`): Always webhook_delivery.
  - `endpoint_id` (`string`): The endpoint (whk_...).
  - `event_id` (`string`): The event (evt_...): read it again with GET /v1/events.
  - `event_type` (`string | null`): The event's type; null when the event is gone. Limits: one of 28 values.
  - `state` (`"pending" | "sending" | "sent" | "failed"`): pending: waiting for its next try. sending: being sent now. sent: your endpoint answered 2xx. failed: it gave up: after 5 tries, or when the endpoint was turned off or the event is gone.
  - `attempts` (`integer`): How many times it has been tried: 5 at most, waiting 1, 5, 15 and then 60 minutes between them.
  - `next_attempt_at` (`string | null`): When it is tried next, as an ISO 8601 time; null when it will not be.
  - `last_status_code` (`integer | null`): What your endpoint last answered; null when it never answered.
  - `last_error` (`string | null`): What last went wrong; null when nothing did.
  - `attempt_log` (`object[]`): Every try, oldest first.
    - `at` (`string`): When it was tried, as an ISO 8601 time.
    - `status_code` (`integer | null`): What your endpoint answered; null when it did not answer.
    - `duration_ms` (`integer`): How long the try took, in milliseconds: a try waits 10 seconds at most.
    - `error` (`string | null`): What went wrong, such as a timeout; null when it was sent.
  - `created_at` (`string`): When the event was queued for this endpoint, as an ISO 8601 time.
  - `sent_at` (`string | null`): When your endpoint took it, as an ISO 8601 time; null until then.
- `next_cursor` (`string | null`): Send it as `cursor` for the next page; null on the last page.

## Code

**HTTP**

```bash
curl "$VESTRA_BASE_URL/v1/webhooks/{endpoint_id}/deliveries" \
  -H "Authorization: Bearer $VESTRA_API_KEY"
```

**TypeScript, Python, CLI, MCP**: No sample in your language for this route, so here it is over HTTP.
