List delivery attempts
const url = 'https://api.aerandil.com/v1/webhook-subscriptions/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/deliveries';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.aerandil.com/v1/webhook-subscriptions/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/deliveries \ --header 'Authorization: Bearer <token>'Per-attempt audit of every delivery the worker made for one subscription, newest first. Each row records the seq range covered, attempt number, HTTP status (when the receiver answered), and a 512-byte response excerpt (the wire-level evidence operators need to debug a misbehaving receiver).
Use this surface to root-cause a dead_letter subscription before resetting it — the run of failed attempts surfaces the receiver’s last response shape.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Subscription id.
Query Parameters
Section titled “Query Parameters”Page size. Default 50, server-clamps to 500.
Responses
Section titled “Responses”Delivery audit for one subscription.
object
One row in webhook_deliveries — append-only audit per attempt. The wire-level evidence operators need to debug a misbehaving receiver.
object
1-based attempt counter.
When the attempt finished — success, failure, or timeout. Unset only if a worker crashed mid-flight.
Transport-level error message when the receiver did not answer (connection refused, TLS handshake failure, timeout, etc.).
Inclusive lower bound of the seq range covered by this attempt.
First 512 bytes of the receiver’s response body.
Per-attempt delivery outcome. Distinct from WebhookSubscriptionStatus: a single delivery row can be failed while the parent subscription stays active (within retry budget).
HTTP status the receiver returned. Unset on transport errors (receiver never responded).
Inclusive upper bound. A success advances the subscription cursor to to_seq; a failure leaves it where it was.
Example
{ "data": [ { "status": "success" } ]}No subscription with that id for this tenant.
Structured error wrapper. Every non-2xx response from any Aerandil endpoint serialises to this shape; the HTTP status carries the failure class (4xx/5xx), the body adds a stable code for programmatic dispatch plus a human-readable message.
object
object
Stable, programmatic error code (e.g. unauthorized, forbidden, not_found, invalid_body, invalid_url, precondition_failed, no_secondary_key). Clients dispatch on code, not on the message (which may be localised or contextualised in future versions).
Request-id correlation handle echoed on the request-id response header — support teams correlate without scraping logs.
Human-readable explanation of the failure.
Per-error structured detail. The shape varies by code (e.g. forbidden_action carries {"action": "..."}; precondition_failed carries {"current_version": N}).
Examplegenerated
{ "error": { "code": "example", "instance_id": "example", "message": "example", "parameters": "example" }}invalid_limit — limit must be positive.
Structured error wrapper. Every non-2xx response from any Aerandil endpoint serialises to this shape; the HTTP status carries the failure class (4xx/5xx), the body adds a stable code for programmatic dispatch plus a human-readable message.
object
object
Stable, programmatic error code (e.g. unauthorized, forbidden, not_found, invalid_body, invalid_url, precondition_failed, no_secondary_key). Clients dispatch on code, not on the message (which may be localised or contextualised in future versions).
Request-id correlation handle echoed on the request-id response header — support teams correlate without scraping logs.
Human-readable explanation of the failure.
Per-error structured detail. The shape varies by code (e.g. forbidden_action carries {"action": "..."}; precondition_failed carries {"current_version": N}).
Examplegenerated
{ "error": { "code": "example", "instance_id": "example", "message": "example", "parameters": "example" }}