List delivery attempts
/v1/webhooks/{webhook_id}/attemptsfor await (const attempt of bird.webhooks.attempts(
"whk_01krdgeqcxet5s7t44vh8rt9mg",
)) {
console.log(attempt.status, attempt.response_status_code);
}for attempt in client.webhooks.attempts("whk_01krdgeqcxet5s7t44vh8rt9mg"):
print(attempt.status, attempt.response_status_code)for attempt, err := range client.Webhooks.Attempts(context.Background(), "whk_123", bird.WebhooksAttemptsParams{}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(attempt.Status)
}foreach ($bird->webhooks->attempts('whk_01krdgeqcxet5s7t44vh8rt9mg') as $attempt) {
echo $attempt->getStatus(), PHP_EOL;
}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"{
"data": [
{
"id": "msgatt_3FdaB1NkOmM6m8AxhgEYTJgqHU3",
"event_id": "whe_01krdgeqcxet5s7t44vh8rt9mg",
"event_type": "amb.accepted",
"status": "delivered",
"url": "https://example.com/webhooks",
"failure_reason": "The endpoint's connection changed after this delivery was queued.",
"response_status_code": 200,
"response_body": "{\"ok\":true}",
"response_duration_ms": 87,
"attempted_at": "2026-05-22T11:50:38.080Z"
}
],
"next_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9",
"prev_cursor": null,
"refresh_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9"
}
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.
Cap the page with limit, and pass next_cursor from the response as starting_after to
get the next, older page. Narrow the time window with the before/after timestamps;
they combine with a cursor. Send only one of starting_after and ending_before; passing
both returns 422.
Parameters
webhook_idstringID of the webhook endpoint (whk_ prefix), as returned when it was created.
Query Parameters
limitintegerMaximum number of attempts to return. Defaults to 50, capped at 100.
beforestringOnly return attempts strictly before this timestamp.
afterstringOnly return attempts strictly after this timestamp.
starting_afterstringCursor from the next_cursor field of a previous list response. Returns items immediately after the cursor position in the current sort order.
ending_beforestringCursor from the prev_cursor or refresh_cursor field of a previous list response. Returns items immediately before the cursor position in the current sort order. prev_cursor returns the preceding page. refresh_cursor anchors at the first row of that response, which on a newest-first sort is how to fetch the items that have appeared since.
Response Payload
next_cursorCursor for the next page. Pass back as starting_after to advance forward. null when no next page exists.
prev_cursorCursor for the previous page. Pass back as ending_before to step backward. null when no previous page exists.
refresh_cursorRefresh anchor, the first row of this response. Pass back as ending_before to fetch what precedes it in the current sort order. On a newest-first sort those are the items that have appeared since; on any other sort they are the items that sort earlier, so refreshing such a list means re-fetching it instead. Non-null whenever data is non-empty; null only on an empty page. Distinct from prev_cursor.
Related resources
Continue with the documentation, guides and examples for this topic.