List delivery attempts
GET
/v1/webhooks/{webhook_id}/attempts
bird webhooks attempts <webhook-id>curl -X GET "https://us1.platform.bird.com/v1/webhooks/{webhook_id}/attempts" \
-H "Authorization: Bearer $TOKEN" \
--url-query "limit=50"Response200
{
"data": [
{
"id": "msgatt_3FdaB1NkOmM6m8AxhgEYTJgqHU3",
"event_id": "whe_01krdgeqcxet5s7t44vh8rt9mg",
"event_type": "domain.failed",
"status": "delivered",
"url": "https://example.com/webhooks",
"response_status_code": 200,
"response_body": "{\"ok\":true}",
"response_duration_ms": 87,
"attempted_at": "2026-05-22T11:50:38.08Z"
}
]
}
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 missed events.
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.
Parameters
webhook_id
string
ID of the webhook endpoint (whk_ prefix), as returned when it was created.
Query Parameters
limit
integer
Maximum number of attempts to return. Defaults to 50, capped at 100.
before
string
Only return attempts strictly before this timestamp.
after
string
Only return attempts strictly after this timestamp.
Response Payload
data
array of object
required
Delivery attempts, newest first.
Show child attributes
data.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.
data.event_id
nullable string
Bird's source event ID, stable across retries of the same event. Null only for older attempts recorded before event IDs were available.
data.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.
Possible values (may grow over time): domain.failed, domain.verified, email.accepted, email.bounced, email.canceled, email.clicked, email.complained, email.deferred, email.delivered, email.list_unsubscribed, email.opened, email.out_of_band_bounce, email.processed, email.received, email.rejected, email.scheduled, email.unsubscribed, email_mailbox.message_delivered, email_mailbox.message_failed, email_mailbox.message_received, email_mailbox.message_sent, email_mailbox.suspended, email_mailbox.thread_created, email_suppression.created, sms.accepted, sms.delivered, sms.expired, sms.failed, sms.received, sms.rejected, sms.sent, sms.undelivered, verify.attempt.delivered, verify.attempt.sent, verify.attempt.undelivered, verify.verification.created, verify.verification.failed, verify.verification.verified, voice_call.answered, voice_call.ended, voice_call.initiated, whatsapp.accepted, whatsapp.delivered, whatsapp.failed, whatsapp.read, whatsapp.received, whatsapp.rejected, whatsapp.sent
data.status
string
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. A failed attempt is not final for the event: automatic retries appear as further attempts with the same event_id.
Possible values: delivered, pending, failed
data.url
string
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.
data.response_status_code
nullable integer
required
HTTP status returned by the receiver. Null when no response was received (timeout, connection error, DNS failure).
data.response_body
string
Response body your endpoint returned, which may be truncated. Omitted when no body was returned.
data.response_duration_ms
integer
required
Round-trip duration in milliseconds.
data.attempted_at
string
required
When this attempt was made. Attempts are listed newest first by this timestamp, and the list's before/after parameters bound it.