Every webhook,
captured.
Replay any request with edited payloads. Forward to your local listener. Verify signatures inline.
Free tier: 1 bin, 50 requests/mo. No credit card.
POST /payment_intent
Stripe · just now
POST /invoice.created
Resend · 2m ago
POST /customer.updated
GitHub · 14m ago
The debugging loop, closed.
Replay with edited payloads
Re-send any captured request to your forward URL with overridden headers or a fixed body. Test the failure path without re-triggering production events.
POST /api/requests/rid/replay
{
"url": "http://localhost:3000/hooks",
"body_override": "amount": 9999
}
→ 200 OK · forwarded
Persistent history
Every request queryable.
30d
Forward while you watch
# cron hits capture URL
→ captured
# relayed to listener
→ localhost:3000/hook
Signature verification
Decode Stripe-style signed payloads and check HMACs inline.
Team-ready bins
Share bins with teammates on the Team plan.
"The replay feature alone saved us a full day of debugging when our payment provider changed their payload format without notice."
Arjun Mehta
Backend lead, fintech startup
sample feedback
Sixty seconds to first capture.
Create a bin
One POST gives you a permanent capture URL and an owner token.
POST /api/bins -> { id, token, capture_url }
Point webhooks at it
Any method, any path, any payload. Optionally forward to your local listener.
POST https://:8101/b/890d9ce8 <- provider
Inspect and replay
Newest-first history. Replay any request with edits, tagged separately from live traffic.
replay rid + body_override -> 200 forwarded
Built for the debug loop, not the tunnel.
| WebhookEnv | Webhook.site | ngrok | |
|---|---|---|---|
| Persistent history | yes (30d) | ephemeral | no UI |
| Replay with edited payloads | yes | no | - |
| Forward to localhost | yes | paid tiers | yes |
| Signature verification | inline | no | - |
| Team bins | team plan | no | paid seats |
positioning per public docs and pricing pages, 2026
free tier
Stop losing webhooks to console.log.
One bin, fifty requests a month, replay included.