Local webhook development

Guides / Workflow

Webhook providers can't reach localhost. The usual fixes are a tunnel, a staging deploy, or copying a payload from logs into curl. Each loses something: the tunnel URL changes, staging is slow, and the curl request has different headers, a reformatted body and a signature that no longer matches.

HookWatcher gives you a stable public endpoint that stores every request exactly as it arrived. hwcli listen then delivers each request to your machine byte for byte, and keeps it so you can send it again later.

Replaying a captured webhook on your machineA provider sends a webhook to your HookWatcher endpoint, which stores the exact request. hwcli on your machine receives it or replays it later to your local server, and reports the response.ProviderStripe, GitHub…HookWatcherexact bytes, headers,signature · immutablehwclilisten / replayon your machineYour applocalhost:8080status, body, latency reported back
Replaying a captured webhook on your machine

Set it up

hwcli login
hwcli endpoints create --copy          # a new endpoint, URL copied
hwcli listen <endpoint> --forward http://localhost:8080/webhooks

Point the provider's webhook settings at your endpoint URL. Each delivery shows up in the terminal with your server's answer:

Forwarding events to localhost:8080/webhooks

✓ payment_intent.succeeded   200 OK      38 ms
✗ invoice.paid               500 Error   214 ms   evt_93df18ab
  Replay: hwcli replay evt_93df18ab

What gets delivered

  • The exact raw body, method and query string. JSON is never re-serialized, so signatures computed over the body stay valid.
  • Headers as received, including signature headers when you pass --include-sensitive. Your server can run its real verification code.
  • :8080/webhooks is shorthand for http://localhost:8080/webhooks. --append-path adds the path the provider called after the endpoint ID.
  • Only loopback targets are accepted. hwcli never forwards to other machines on your network.

The local endpoint is a forwarding endpoint like any other. It shows as Offline while hwcli isn't running, and deliveries that fail are retried. In the dashboard the device appears under Replay Locally, so anyone in the workspace with Developer access can send an event to your running session.

Next

When a delivery fails, don't wait for the provider to retry. Replay it as often as you need while you fix the handler.

Create an endpoint and capture your first webhook. No signup needed.

Start Free