Handlers that work in a quick manual test often break in production: the provider sends an event twice, two deliveries arrive at the same moment, a signature is wrong, the body is cut off. Replay Lab takes one real captured event and reproduces those conditions on purpose.
hwcli replay evt_93df18ab --duplicate 5 # one after another hwcli replay evt_93df18ab --concurrent 10 # all at once hwcli replay evt_93df18ab --delay 5s # after a pause hwcli replay evt_93df18ab --burst 100 --duration 5s # spread over 5 seconds hwcli replay evt_93df18ab --invalid-signature hwcli replay evt_93df18ab --remove-signature hwcli replay evt_93df18ab --malformed invalid_json # also: truncate, empty hwcli replay evt_3 evt_1 evt_2 # a sequence, in this order
Each Lab run reports every delivery and a summary:
Duplicate x5 → localhost:8080/webhooks #1 200 OK 41 ms #2 200 OK 12 ms #3 500 9 ms duplicate key value violates unique constraint #4 200 OK 11 ms #5 200 OK 10 ms 4 of 5 succeeded · p50 11 ms · max 41 ms
Marked as synthetic
Lab deliveries carry X-HookWatcher-Synthetic: replay-lab and X-HookWatcher-Replay: <id>, and are labelled as synthetic in the dashboard. They are never confused with real provider traffic. Plain replays add no headers.
Limits
Duplicates, sequences and delays work on every plan. Concurrent and burst deliveries need a paid plan. On Free you can send up to 3 duplicates and delays up to 10 s. On Pro: 50 duplicates, 50 concurrent, bursts of 500 and delays up to 300 s. See pricing. Lab runs to production-looking hosts always ask for confirmation.