> ## Documentation Index
> Fetch the complete documentation index at: https://docs.webhook.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Diagnose and recover a failing delivery

> Find failed and dead deliveries, read the real error, fix the receiver, re-enable it, and replay the events it missed.

Something downstream broke and deliveries are piling up as `dead`. Find them, read why, fix the receiver, re-enable it, and replay exactly the events it missed — nothing lost, nothing double-run if your consumer is idempotent.

<Steps>
  <Step title="List what failed">
    `dead` means the retry schedule (8 attempts, \~32h) exhausted; `failed` is an attempt that errored. Filter to both.

    ```sh theme={null}
    wbhk deliveries list --status failed,dead
    ```
  </Step>

  <Step title="Read the actual error">
    `get` shows the status code and error string from the last attempt — a 500, a TLS failure, a timeout.

    ```sh theme={null}
    wbhk deliveries get <delivery-id>
    ```
  </Step>

  <Step title="Fix, then re-enable the destination">
    After 20 dead deliveries a destination auto-disables. Clearing it resumes owed deliveries on the next wake — so re-enable only once the receiver is actually fixed.

    ```sh theme={null}
    wbhk replay-destinations enable <destination-id>
    ```
  </Step>

  <Step title="Replay the events it missed">
    Replay each captured event to the destination. The server delivers the stored bytes with a fresh idempotency key per call, so a retried replay is safe.

    ```sh theme={null}
    wbhk replay <event-id> --destination <destination-id>
    ```
  </Step>
</Steps>

<Note>
  Replaying to a destination re-delivers the exact signed bytes — no `--edit`, unlike a `--forward`
  replay to localhost. That's what keeps the signature valid for your receiver.
</Note>
