Skip to content
Hardcount
Run it locally
Pre-1.0 · one maintainer · Stripe and cards only · no SDKs (client libraries) yet · no production users yet. Docs describe v0.9.1 (29 Oct 2026) · What’s new →

List all delivery attempts for an event

GET
/v1/webhook_events/{id}/deliveries
curl --request GET \
--url http://localhost:8080/v1/webhook_events/example/deliveries \
--header 'Authorization: Bearer <token>'

Returns one timeline, oldest first, of every delivery for the original event and for all of its replays. If id is a replay, the timeline starts from its original event (root_event_id). Rows keep the endpoint’s URL and description even after the endpoint is deleted.

id
required
string

An event id, either the original or a replay.

Delivery timeline

Media typeapplication/json
object
root_event_id
required

The original event the timeline is built from.

string
deliveries
required
Array<object>
object
id
required
string
event_id
required

The event this delivery belongs to. When is_replay is true, the replay’s own id; the message it sent carries the original event’s id (root_event_id).

string
endpoint_id
required
string
endpoint_url
required
string
endpoint_description
required
string
attempt_no
required

Position in the timeline, starting at 1.

integer
status
required
string
Allowed values: pending succeeded failed
status_code
required
integer
response_body
required

First 4 KB of the receiver’s response.

string
error
required
string
request_payload_sha256
required

SHA-256 of the event payload. Equal values mean the same payload was sent.

string
attempted_at
required
string format: date-time
completed_at
required
string format: date-time
nullable
next_retry_at
required
string format: date-time
nullable
is_replay
required
boolean
replay_event_id
required

The replay’s event id when is_replay is true; otherwise empty.

string

Example

{
"deliveries": [
{
"status": "pending"
}
]
}

Caller lacks the apikey:read permission

Media typeapplication/json
object
error
object
type

One of invalid_request_error, authentication_error, rate_limit_error or api_error. Every error the API answers has this shape, including an unknown path (404, code route_not_found) and a method the path does not take (405, code method_not_allowed, with an Allow header). The few exceptions are listed in docs/api-surface.md.

string
code
string
message
string
request_id
string
param

The request field the error is about. Sent only when the error names one. A request body may hold only the fields its operation lists, spelled and cased as listed: any other field, or one the server sets (such as id), is refused with 422 and param naming it. An operation with no request body lists no fields: send no body, {} or null. The Stripe and Postmark webhooks and the LiteLLM callback take their sender’s body as it comes.

string

Example

{
"error": {
"type": "invalid_request_error"
}
}

No such event in this mode

Media typeapplication/json
object
error
object
type

One of invalid_request_error, authentication_error, rate_limit_error or api_error. Every error the API answers has this shape, including an unknown path (404, code route_not_found) and a method the path does not take (405, code method_not_allowed, with an Allow header). The few exceptions are listed in docs/api-surface.md.

string
code
string
message
string
request_id
string
param

The request field the error is about. Sent only when the error names one. A request body may hold only the fields its operation lists, spelled and cased as listed: any other field, or one the server sets (such as id), is refused with 422 and param naming it. An operation with no request body lists no fields: send no body, {} or null. The Stripe and Postmark webhooks and the LiteLLM callback take their sender’s body as it comes.

string

Example

{
"error": {
"type": "invalid_request_error"
}
}