# POST /v1/webhook-deliveries/:deliveryId/replay (/docs/api/reference/webhooks/replay-delivery)



<Endpoint method="POST" path="/v1/webhook-deliveries/{deliveryId}/replay" auth="X-Api-Key" phase="1" />

Queues a fresh delivery carrying the same `data` as the original delivery. Useful when a partner's endpoint was down during the retry window and the original exhausted its attempts.

The replay gets a NEW `eventId` (so the dedupe index doesn't reject the enqueue), plus a top-level `replayOf: <original delivery id>` inside the payload so your handler can reconcile.

<Parameters
  title="Path"
  rows="[
  { name: 'deliveryId', type: 'string (UUID)', required: true, description: 'The delivery to replay. Must be owned by the calling org.' },
]"
/>

<Parameters
  title="Headers"
  rows="[
  { name: 'Idempotency-Key', type: 'string (UUID)', description: 'Replays within 24h return the same replay delivery id.' },
]"
/>

## Example [#example]

```bash
curl -X POST https://api.layers.com/v1/webhook-deliveries/9b8a41e2-.../replay \
  -H "X-Api-Key: $LAYERS_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"
```

<Response status="200" description="Accepted — replay enqueued">
  ```json
  {
    "originalDeliveryId": "9b8a41e2-0cc6-4c7a-9f89-1a7d19a1c233",
    "replayDeliveryId": "a1c29d44-0ff2-4e8e-b6a7-2f3ce1a4d78b",
    "scheduledAt": "2026-04-22T14:02:00.000Z"
  }
  ```
</Response>

The replay fires within \~1 minute. Treat the new delivery like any other webhook — verify the signature, dedupe on `eventId` (the new one), and act.

## Errors [#errors]

| Status | Code                   | When                                          |
| ------ | ---------------------- | --------------------------------------------- |
| 404    | `NOT_FOUND`            | Delivery not owned by the calling org.        |
| 409    | `IDEMPOTENCY_CONFLICT` | Idempotency-Key reused with a different body. |
