> ## 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.

# The tight local webhook dev loop

> Capture a real webhook once, then forward, edit, and replay it into your handler indefinitely — no re-triggering upstream.

Capture one real webhook, then iterate against it forever — forward the live stream, replay a stored event, tweak its body to hit an edge case, repeat. You stop depending on the provider to re-send anything.

<Steps>
  <Step title="Capture one real event">
    Point the provider at your ingest URL and send once. That event is now stored and replayable indefinitely.

    ```sh theme={null}
    wbhk events list <endpoint-id> --all
    ```
  </Step>

  <Step title="Forward the stream while you work">
    `--since from-last-ack` with `--resume` picks up where you left off across restarts, so a rebuild doesn't replay the whole backlog.

    ```sh theme={null}
    wbhk listen <endpoint-id> --forward http://localhost:3000/webhooks --resume
    ```
  </Step>

  <Step title="Replay one event, editing the payload">
    `--edit` opens the body in `$EDITOR` before forwarding — flip a field, add a line item, null something out, and fire it at your handler.

    ```sh theme={null}
    wbhk replay <event-id> --forward http://localhost:3000/webhooks --edit
    ```
  </Step>
</Steps>

<Note>
  An edited replay won't re-verify against the provider's original signature — you're exercising
  handler logic, not verification. Replay without `--edit` to send the exact captured bytes.
</Note>

Reading, listing, and replaying to localhost cost nothing — only a replay that *forwards to a destination* is a metered delivery. See [what counts as an event](/events-and-usage).
