---
title: "Re-send one delivery to its endpoint: the same body byte for byte (same envelope id, so your dedupe still works) under a fresh signature, with the usual retries. Returns the replay's own delivery record. Deliveries of the other mode are not found (404)."
method: POST
path: "/webhooks/deliveries/replay"
---

# Re-send one delivery to its endpoint: the same body byte for byte (same envelope id, so your dedupe still works) under a fresh signature, with the usual retries. Returns the replay's own delivery record. Deliveries of the other mode are not found (404).

`POST /webhooks/deliveries/replay`

## Request

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

## Request body

- object
  - `id` string, required: A delivery id from the log

## Response `200`

The replay, recorded and pointing at the original

- object
  - `delivery` WebhookDelivery: One webhook POST and what became of it. Kept 30 days.
    - `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

## 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.
- `404`: `not_found` — No such job for this key, or no such endpoint.
- `409`: `last_publishable_key` — The only live publishable key cannot be revoked — the widget stops without one. Rotate it instead. `key_already_rotated` — That key was already rotated. A key is rotated once; its replacement is the one to use and to rotate next. `webhook_paused` — That webhook endpoint is paused; turn it back on before replaying a delivery to it. `video_in_flight` — A video is already being fetched for this job (POST /jobs/{id}/video). Poll GET /jobs/{id}. `video_already_supplied` — The job already has a video and has moved past upload. Start a new job for a different walkthrough. `no_rate_card` — The mover has no active rate card, so nothing can be priced yet. `ballpark_not_bookable` — Only a firm quote from a filmed walkthrough can be booked. `already_requested` — The job is already booked or awaiting the mover, so the move date can no longer change here. Contact the mover. `idempotency_in_progress` — A request with the same Idempotency-Key is still being processed. Obey `Retry-After` (1 s) and retry with the same key.
- `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)
