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"
}
idstring

The delivery’s ID. Every attempt carries it in X-Hooks-Delivery-Id.

eventIdstring

The event it delivers.

destinationIdstring

The destination it goes to.

connectionIdstring or null

The connection that made it, or null once that connection is deleted.

triggerstring

event, made when the webhook arrived, or resend, made when a delivery was sent again.

statusstring

pending, sending, retrying, delivered, failed, or cancelled. See View events and deliveries.

attemptsinteger

How many attempts it has had.

dueAtstring or null

When its next attempt is due, or null when it has finished.

firstAttemptAtstring or null

When its first attempt started.

finishedAtstring or null

When it was delivered, failed, or cancelled.

lastStatusCodeinteger or null

The status your app answered its last attempt with, or null when it did not answer.

lastErrorstring

Why the last attempt failed, for a person to read. Empty when it did not fail.

lastErrorClassstring

The kind of failure, such as http or timeout, or empty. See What counts as a failure.

createdAtstring

When the delivery was made.

List deliveries

GET/v1/projects/{project}/deliveries

Returns the project’s deliveries, newest first, a page at a time. See Paging.

destinationquery

Only the deliveries to this destination.

statusquery

pending, sending, retrying, delivered, failed, or cancelled.

Read a delivery

GET/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"
  }
}
attemptListarray

Each attempt: its number from 1, startedAt, durationMs, statusCode or null, errorClass, error, and responseExcerpt, the first 4 KB of your app’s answer.

sentobject or null

The headers and body a transformation returned, which every attempt sends, before the authentication and signing headers are added. null when the connection has no transformation.

Send a delivery again

POST/v1/projects/{project}/deliveries/{delivery}/resend

Makes 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

POST/v1/projects/{project}/deliveries/resend

Send 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

POST/v1/projects/{project}/deliveries/resend-failed

Sends 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

POST/v1/projects/{project}/deliveries/{delivery}/cancel

Cancels 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