---
title: "List delivery attempts"
method: GET
path: "/v1/webhooks/{webhook_id}/attempts"
tags: ["webhooks"]
---

# List delivery attempts

`GET /v1/webhooks/{webhook_id}/attempts`

## Request

- Base URL: `https://us1.platform.bird.com`
- URL: `https://us1.platform.bird.com/v1/webhooks/{webhook_id}/attempts`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `bird_session`

Returns the endpoint's recent delivery attempts, newest first. Each entry is one HTTP
request, so a retried event appears once per try; use it to see what failed and why
before requesting redelivery with
[Replay failed deliveries](/docs/api/reference/create-webhook-replay).

Bound the window with the `before`/`after` timestamps and cap the page with `limit`.
To page further back without a cursor, pass the oldest `attempted_at`
you received as `before`.

## Query parameters

- `limit` integer
- `before` string, date-time
- `after` string, date-time

## Headers

- `X-Workspace-Id` string
- `X-Organization-Id` string

## Response `200`

Recent delivery attempts.

- WebhookAttemptList
  - `data` WebhookAttempt[], required: Delivery attempts, newest first.
    - `id` string, required: Identifier of this individual delivery attempt. Each retry is a separate attempt with its own id; use `event_id` to group the attempts for one event.
    - `event_id` string
    - `event_type` string, required: Webhook event type. This is an open enum, so accept unrecognized values in deliveries. Subscribing to a type outside the event catalog returns a `422`.
    - `status` 'delivered' | 'pending' | 'failed', required: Outcome of this attempt. - `delivered`: your endpoint accepted it with a `2xx` response. - `pending`: the attempt is still in flight. - `failed`: it returned a non-`2xx` response or no response at all. Automatic retries appear as further attempts with the same `event_id`, so a `failed` attempt is final for the event only once the retry schedule is spent. A replayed delivery takes a single attempt and is never retried.
    - `url` string, uri, required: URL the request was sent to: the endpoint's `url` at the time of the attempt, which can differ from the current configuration after an update.
    - `failure_reason` string: Why the attempt failed before any request was sent, for example a connector body that could not be rendered or an endpoint whose connection changed after the event was queued. Absent for an attempt that reached the network.
    - `response_status_code` integer, nullable, required: HTTP status returned by the receiver. Null when no response was received (timeout, connection error, DNS failure).
    - `response_body` string: Response body your endpoint returned, which may be truncated. Omitted when no body was returned.
    - `response_duration_ms` integer, required: Round-trip duration in milliseconds.
    - `attempted_at` string, date-time, required: When this attempt was made. Attempts are listed newest first by this timestamp, and the list's `before`/`after` parameters bound it.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Insufficient permissions
- `404`: Resource not found
- `422`: The request has invalid field values, violates a business rule, or carries a query parameter the endpoint does not declare. Field validation errors use `type: validation_error` and include the affected fields in `details`. Business-rule errors identify the failed rule in `type`.
- `429`: Rate limit exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/messagebird/apis/bird-api.md) · [All operations](https://skmtc.dev/messagebird/apis/bird-api/llms.txt) · [OpenAPI document](https://skmtc.dev/messagebird/apis/bird-api/revisions/6dfce1179799?raw)
