---
title: "The delivery log: every webhook POST for 30 days, newest first, with its outcome and the exact body sent. Secret key with the `keys` scope. A key reads the deliveries of its own mode: live keys the live log, test keys the sandbox log."
method: GET
path: "/webhooks/deliveries"
---

# The delivery log: every webhook POST for 30 days, newest first, with its outcome and the exact body sent. Secret key with the \`keys\` scope. A key reads the deliveries of its own mode: live keys the live log, test keys the sandbox log.

`GET /webhooks/deliveries`

## Request

- Base URL: `https://widget.reelquoteai.com/api/v1`
- URL: `https://widget.reelquoteai.com/api/v1/webhooks/deliveries`
- Auth: HTTP bearer

## Query parameters

- `webhook_id` string
- `job_id` string
- `limit` integer
- `before` string, date-time

## Response `200`

One page

- object
  - `deliveries` WebhookDelivery[]
    - `id` string, required: Delivery id — pass to /webhooks/deliveries/replay
    - `envelope_id` string, required: The `id` inside the body the receiver saw; a replay keeps it, so dedupe still works
    - `webhook_id` string, required
    - `event` 'job.complete' | 'cube_sheet.ready' | 'job.booked_requested' | 'job.booked' | 'job.declined', required
    - `job_id` string, nullable
    - `livemode` boolean, required
    - `status` 'pending' | 'delivered' | 'failed', required
    - `attempts` integer, required: 1–3
    - `last_status` integer, nullable: HTTP status of the last attempt; null when it never connected
    - `last_error` string, nullable
    - `replayed_from` string, nullable: The delivery this one re-sent
    - `created_at` string, date-time, required
    - `delivered_at` string, date-time, nullable
    - `body` string, required: The exact JSON that was POSTed — a WebhookEnvelope
  - `limit` integer
  - `next_before` string, date-time, nullable: Pass as `before` for the next page; null on the last

## Other responses

- `400`: `invalid_request` — A field is missing, malformed or not allowed in this state. `message` says which. `secret_key_in_url` — A secret key was sent as `?k=`. Secret keys go in the Authorization header only.
- `401`: `unauthorized` — No key, an unknown key, or a revoked key.
- `403`: `secret_key_required` — The endpoint is server-only; a publishable key cannot reach it. `insufficient_scope` — The key does not carry the scope this call needs (named in `message`). Mint one that does from the keys page or POST /keys. `key_rotated` — The calling key has been rotated and is in its grace period: it still serves jobs and quotes, but key management and the delivery log belong to its replacement. `mode_mismatch` — A test key tried to manage a live key. Live keys manage both modes; test keys manage test keys only.
- `429`: `rate_limited` — Per-key limit (60/min publishable, 300/min secret), the mover's daily ballpark or video-analysis cap, or a visitor's daily catalog-search cap. Obey `Retry-After`. Carries `Retry-After` in seconds.

---

[API](https://skmtc.dev/reelquoteai/apis/reelquoteai-us-api.md) · [All operations](https://skmtc.dev/reelquoteai/apis/reelquoteai-us-api/llms.txt) · [OpenAPI document](https://skmtc.dev/reelquoteai/apis/reelquoteai-us-api/revisions/56c304752192?raw)
