# WebhookDelivery

The WebhookDelivery object of the Kaabist API.

| Field | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes | pattern `^dlv_[0-9a-hjkmnp-tv-z]{26}$` |
| `object` | `"webhook_delivery"` | yes |  |
| `endpoint_id` | string | yes | pattern `^whk_[0-9a-hjkmnp-tv-z]{26}$` |
| `event_id` | string | yes | pattern `^evt_[0-9a-hjkmnp-tv-z]{26}$` |
| `event_type` | enum (24 values) | yes | one of `"job.queued"`, `"job.blocked"`, `"job.started"`, `"job.awaiting_input"`, `"job.needs_attention"`, `"job.succeeded"`, `"job.failed"`, `"job.canceled"`, `"batch.completed"`, `"proposal.created"`, `"proposal.decided"`, `"schedule.run"`, `"schedule.changed"`, `"schedule.paused"`, `"schedule.failing"`, `"session.expired"`, `"program.drift_detected"`, `"credits.low"`, `"credits.exhausted"`, `"credits.recharged"`, `"byo.unhealthy"`, `"byo.recovered"`, `"webhook.disabled"`, `"ping"` |
| `origin` | `"planned"`, `"resend"`, `"test"` | yes |  |
| `attempt` | integer | yes | ≥ 1 |
| `status` | `"pending"`, `"succeeded"`, `"failed"`, `"exhausted"` | yes |  |
| `response_code` | integer or null | yes |  |
| `response_ms` | integer or null | yes |  |
| `response_body` | string or null | yes |  |
| `error` | string or null | yes |  |
| `next_retry_at` | string or null (date-time) | yes |  |
| `last_attempt_at` | string or null (date-time) | yes |  |
| `created_at` | string (date-time) | yes |  |

## Example

```json
{
  "id": "dlv_01j9zqk3q7m4n5p6r7s8t9v0wx",
  "object": "webhook_delivery",
  "endpoint_id": "whk_01j9zqk3q7m4n5p6r7s8t9v0wx",
  "event_id": "evt_01j9zqk3q7m4n5p6r7s8t9v0wx",
  "event_type": "job.needs_attention",
  "origin": "planned",
  "attempt": 2,
  "status": "pending",
  "response_code": 500,
  "response_ms": 1200,
  "response_body": "upstream exploded",
  "error": "http_500",
  "next_retry_at": "2026-09-18T10:05:00Z",
  "last_attempt_at": "2026-09-18T10:00:01Z",
  "created_at": "2026-09-18T10:00:00Z"
}
```
