Deliveries
List and read deliveries and their attempts, send them again, and cancel the ones still waiting.
A delivery is one event on its way to one destination. Deliveries are kept for 30 days, with their events.
The delivery object
{
"id": "01m3my2c7hq0n5d2x8f4k6s9ta",
"eventId": "01m3my2b42vahrbx8zt4fw84wc",
"destinationId": "01m3m5c2yb7h4s1k9q8r6t3v0w",
"connectionId": "01m3m5hezf7epksb7f8qbww4wb",
"trigger": "event",
"status": "retrying",
"attempts": 2,
"dueAt": "2026-10-01T09:14:15Z",
"firstAttemptAt": "2026-10-01T09:12:45Z",
"finishedAt": null,
"lastStatusCode": 503,
"lastError": "the destination answered 503 Service Unavailable",
"lastErrorClass": "http",
"createdAt": "2026-10-01T09:12:44Z"
}idstringThe delivery’s ID. Every attempt carries it in
X-Hooks-Delivery-Id.eventIdstringThe event it delivers.
destinationIdstringThe destination it goes to.
connectionIdstring or nullThe connection that made it, or
nullonce that connection is deleted.triggerstringevent, made when the webhook arrived, orresend, made when a delivery was sent again.statusstringpending,sending,retrying,delivered,failed, orcancelled. See View events and deliveries.attemptsintegerHow many attempts it has had.
dueAtstring or nullWhen its next attempt is due, or
nullwhen it has finished.firstAttemptAtstring or nullWhen its first attempt started.
finishedAtstring or nullWhen it was delivered, failed, or cancelled.
lastStatusCodeinteger or nullThe status your app answered its last attempt with, or
nullwhen it did not answer.lastErrorstringWhy the last attempt failed, for a person to read. Empty when it did not fail.
lastErrorClassstringThe kind of failure, such as
httportimeout, or empty. See What counts as a failure.createdAtstringWhen the delivery was made.
List deliveries
/v1/projects/{project}/deliveriesReturns the project’s deliveries, newest first, a page at a time. See Paging.
destinationqueryOnly the deliveries to this destination.
statusquerypending,sending,retrying,delivered,failed, orcancelled.
Read a delivery
/v1/projects/{project}/deliveries/{delivery}Returns the delivery with every attempt, and what it sent:
{
"id": "01m3my2c7hq0n5d2x8f4k6s9ta",
"status": "delivered",
"attempts": 1,
"attemptList": [
{
"number": 1,
"startedAt": "2026-10-01T09:12:45Z",
"durationMs": 184,
"statusCode": 200,
"errorClass": "",
"error": "",
"responseExcerpt": "{\"ok\":true}"
}
],
"sent": {
"headers": [{ "name": "x-order-id", "value": "ORD-104233" }],
"body": "{\"orderId\":\"ORD-104233\",\"amountTzs\":25000}",
"bodyEncoding": "text"
}
}attemptListarrayEach attempt: its
numberfrom 1,startedAt,durationMs,statusCodeornull,errorClass,error, andresponseExcerpt, the first 4 KB of your app’s answer.sentobject or nullThe headers and body a transformation returned, which every attempt sends, before the authentication and signing headers are added.
nullwhen the connection has no transformation.
Send a delivery again
/v1/projects/{project}/deliveries/{delivery}/resendMakes a new delivery of the same event to the same destination, with trigger set to resend, due straight away. It runs the connection’s current transformation. Returns 201 with the new delivery. Any delivery can be sent again, whatever its status.
Send several again
/v1/projects/{project}/deliveries/resendSend 1 to 100 delivery IDs:
{ "deliveryIds": ["01m3my2c7hq0n5d2x8f4k6s9ta", "01m3my3k0a8v2p6d1q9x4f7s3e"] }Returns { "resent": 2 }, how many new deliveries were made. IDs the project does not have are skipped.
Send every failed delivery again
/v1/projects/{project}/deliveries/resend-failedSends again every failed delivery of the project, or of one destination with destinationId, up to 1,000 at a time. A failed delivery that was already sent again is skipped, so running it twice does not send the same event twice.
{ "destinationId": "01m3m5c2yb7h4s1k9q8r6t3v0w" }Returns { "resent": 12 }. Send {} for the whole project.
Cancel a delivery
/v1/projects/{project}/deliveries/{delivery}/cancelCancels a pending or retrying delivery, so it is never sent, and returns it. A delivery that is being sent, or has finished, gets 409 with the code delivery_not_waiting.
Last updated