> For the complete documentation index, see [llms.txt](https://docs.shortcutco.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.shortcutco.com/developers/api-reference/reference/objects/webhook-delivery.md).

# The webhook delivery object

The webhook delivery object in the Shortcut API - every field, an example, and the endpoints that return it.

One event sent, or to be sent, to one subscription.

## Fields

| Field                 | Type                                                  | Description                                                                                                                                                                                                                                                                                                                            |
| --------------------- | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                  | id                                                    | The delivery's id (also sent as the `Shortcut-Delivery-Id` header).                                                                                                                                                                                                                                                                    |
| `object`              | `"webhook_delivery"`                                  | Always `webhook_delivery`.                                                                                                                                                                                                                                                                                                             |
| `webhookId`           | id                                                    | The subscription it was sent to.                                                                                                                                                                                                                                                                                                       |
| `eventId`             | string                                                | The envelope `id` (`evt_…`), the same on every retry; use it to drop duplicates.                                                                                                                                                                                                                                                       |
| `eventType`           | string                                                | The event type, or `webhook.test` for a test event.                                                                                                                                                                                                                                                                                    |
| `status`              | `pending`, `held`, `succeeded`, `failed`, `exhausted` | `pending` waits for its next attempt. `held` waits for a paused subscription to resume, or for the workspace's billing. `succeeded` got a 2xx. `failed` failed its last attempt and will be retried at `nextAttemptAt`. `exhausted` will not be tried again.                                                                           |
| `attempts`            | integer                                               | Attempts made so far.                                                                                                                                                                                                                                                                                                                  |
| `nextAttemptAt`       | timestamp or null                                     | When the next attempt is due, ISO 8601 in UTC.                                                                                                                                                                                                                                                                                         |
| `deliveredAt`         | timestamp or null                                     | When the receiver answered with a 2xx, ISO 8601 in UTC.                                                                                                                                                                                                                                                                                |
| `lastResponseStatus`  | integer or null                                       | The HTTP status of the last attempt, if a response arrived.                                                                                                                                                                                                                                                                            |
| `lastError`           | string or null                                        | Why the last attempt failed or the delivery ended: `http_<status>`, `timeout`, `connect_timeout`, `unresolvable`, `private_address`, `port_not_allowed`, `not_https`, `object_not_found`, `scope_missing`, `subscription_disabled`, `event_type_unsubscribed`, `expired`, `held_expired`, `secret_unavailable`, or another short code. |
| `lastResponseExcerpt` | string or null                                        | The first 500 characters of the last response body, with secrets and contact details redacted.                                                                                                                                                                                                                                         |
| `createdAt`           | timestamp                                             | When the delivery was created, ISO 8601 in UTC.                                                                                                                                                                                                                                                                                        |

## Example

```json
{
  "id": "a6577fcf-a2a1-4b16-8eeb-f65d9b3631a4",
  "object": "webhook_delivery",
  "webhookId": "ab1c3988-a766-44cf-83b0-b0169ffaeb5d",
  "eventId": "evt_9b2e4c6a8d0f1e3b5a7c9d2f4e6b8a0c",
  "eventType": "customer.updated",
  "status": "succeeded",
  "attempts": 1,
  "nextAttemptAt": null,
  "deliveredAt": "2026-10-16T17:04:12.381Z",
  "lastResponseStatus": 200,
  "lastError": null,
  "lastResponseExcerpt": "ok",
  "createdAt": "2026-10-16T17:04:12.381Z"
}
```

## Endpoints

| Endpoint                                               | What it does                |
| ------------------------------------------------------ | --------------------------- |
| `GET /v1/webhooks/{id}/deliveries`                     | List a webhook's deliveries |
| `POST /v1/webhooks/{id}/deliveries/{deliveryId}/retry` | Retry a delivery            |
| `POST /v1/webhooks/{id}/test`                          | Send a test event           |
