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.
Capture one real event
Point the provider at your ingest URL and send once. That event is now stored and replayable indefinitely.wbhk events list <endpoint-id> --all
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.wbhk listen <endpoint-id> --forward http://localhost:3000/webhooks --resume
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.wbhk replay <event-id> --forward http://localhost:3000/webhooks --edit
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.
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.