See every webhook. Instantly.

Create a capture URL in one click. Point any webhook or HTTP client at it and watch requests arrive live — full headers, body, query params. Copy any capture as curl, fetch, Python, or HTTPie. Replay it. Configure the response. Free, no limits that hurt.

No signup needed. Sign up free for 30-day history & permanent bins. Coming from webhook.site? See the comparison.

⚡ Live view

Requests appear in the dashboard within seconds. No refresh needed.

🔁 Replay & forward

Re-send any capture to your real endpoint, or auto-forward everything live — inspect webhooks without taking them offline.

🎛 Custom responses + templates

Set the status code, body, and even a response delay (up to 10s) — test failure paths, timeouts and retries. Template vars like {{body.challenge}} echo the request back, so your bin passes Slack/Zoom-style URL verification.

📦 Generous limits

1,000 requests per bin, 30-day retention and custom URL slugs (/h/my-stripe-dev) with a free account. Anonymous bins last 24h.

✅ Signature checks

Add your webhook secret and every request gets a ✓/✗ badge — GitHub, Stripe, or any HMAC-SHA256 signature.

🧰 API-first

Create bins and fetch captures with plain curl. Copy any capture as curl, fetch (JS), Python, or HTTPie code. Great for CI and scripts.

🏠 Webhooks → localhost

./catchhook relay re-delivers captures to your local server — original path, headers and byte-identical body, signatures intact. No tunnel, no ngrok. How →

🔍 Filter & diff

Live-filter captures, or pick any two and see a colorized line diff of headers and body — spot exactly what changed between deliveries.

🔒 Private by default

Bin URLs are unguessable. Delete everything anytime.

Try it from your terminal

$ curl https://catchhook.catchhook.workers.dev/new
bin created

  send requests to:  https://catchhook.catchhook.workers.dev/h/k3x9w2m4qa
  inspect live at:   https://catchhook.catchhook.workers.dev/b/k3x9w2m4qa
  JSON API:          https://catchhook.catchhook.workers.dev/api/bins/k3x9w2m4qa/requests

$ curl -X POST https://catchhook.catchhook.workers.dev/h/k3x9w2m4qa -d '{"hello":"world"}' -H 'content-type: application/json'

Prefer to stay in the terminal? curl -s https://catchhook.catchhook.workers.dev/cli -o catchhook && chmod +x catchhook — then ./catchhook tail k3x9w2m4qa live-streams captures right into your shell, and ./catchhook relay k3x9w2m4qa http://localhost:3000 re-delivers them to your local server — no tunnel. CLI docs →