Permanent webhook URLs. Inspect, replay, and debug — without reconfiguring providers every week.
One tool that replaces webhook.site and ngrok — permanent webhook URLs, persistent event history, localhost forwarding, and signature debugging that tells you why verification failed.
catchbin launches as a public beta in the second half of 2026 — free at launch, no price tag and no checkout. Join the waitlist to get in early.
Bin Crew — 100 founding spots, free forever. Be one of the first 100 accounts at launch.
No spam. One email when we launch.
Something went wrong — please try again.
Free at launch
For everyone, at launch
Available to anyone who signs up. Permanent webhook URLs are included — they don't expire.
Free forever, first 100 accounts
More endpoints, longer retention, and more CLI sessions than the free tier. Claimed by the first 100 accounts at launch and kept free for life.
For heavier solo use
A paid solo tier with higher volume and longer retention arrives after launch. Nothing is paid at launch — pricing isn't set yet.
Exact limits aren't finalised yet. The waitlist gets first word when they are.
If you integrate Stripe, you've done this dance
You configured a webhook.site URL, copied it into the Stripe dashboard, watched events flow in for an afternoon — then came back a week later to find the URL had expired. The history is gone. You reconfigure Stripe.
Next attempt: the Stripe CLI. It forwards to localhost, which is what you wanted, except it only works for Stripe and only while your laptop is open. Your teammate can't reproduce the bug because the events never reached anywhere persistent.
So you pay for ngrok, pay for webhook.site Pro, glue them together, and the first signature failure you hit comes back asinvalid signature — no indication of which byte, which header, or which middleware silently rewrote the body.
How it works
Three components: a permanent receiver, durable storage, and a small CLI that tunnels into your dev machine.
Catch
Stripe, GitHub, Shopify, or any generic POST hits your permanent catchbin URL. The URL is yours forever — it does not expire when your trial ends.
Store
Every byte is persisted, encrypted at rest — 7 days on Free, 14 days on Bin Crew. Headers, raw body, timestamp, source IP. Searchable, exportable, replayable.
Forward / Replay
Pipe live events to localhost through the Go CLI, or replay any historical event to staging with a re-signed payload your handler will accept.
Stop guessing why signatures fail.
When verification fails, catchbin compares what was signed against what arrived and tells you which assumption broke. Most failures are body-mutation issues introduced by a framework middleware between the wire and your handler.
- Byte-level body comparison
- Timestamp tolerance analysis
- Secret format and header structure checks
- Raw body byte count: 1,847 received vs. 1,852 signed → mismatchMiddleware is likely modifying body before handler sees it.
- Timestamp age: 42s (within tolerance)Webhook arrived 42 seconds after Stripe signed it.
- Secret format: starts with whsec_ (looks correct)Matches Stripe's secret prefix convention.
- Header format: validstripe-signature includes t=, v1=, and v0= as expected.
One command. Live on localhost.
The CLI is a single Go binary. No daemon, optional config file.
$ catchbin forward abc123 localhost:3000 ✓ Connected to catchbin cloud receiver ✓ Forwarding endpoint: abc123 → localhost:3000 [10:42:01] stripe.payment_intent.succeeded → 200 OK (14ms) [10:42:38] stripe.customer.updated → 200 OK (9ms) [10:44:55] stripe.charge.failed → 500 ERR (22ms)
How it compares
Three tools developers reach for when a webhook isn't behaving. Here's what each one gives you on its free tier.
| Feature | Catchbin | webhook.site (free) | ngrok (free) |
|---|---|---|---|
| Permanent URL | Yes | Expires after ~7 days | Changes each session |
| Event history | Persistent (7–14 days at launch) | Limited | ~24 hours |
| One-click replay | Yes | No | No |
| Forward to localhost | Yes (Go CLI) | No | Yes (tunnel) |
| Price | Free at launch | Free | Free |
Questions
Short answers to what people ask before signing up.
Do Catchbin URLs expire?
No. Your webhook URL is permanent. Configure Stripe, GitHub, or any provider to send to it once and it keeps working — it does not rotate when a trial ends or after a few days of inactivity, so you never have to reconfigure the sending provider. Captured events are retained for your plan's history window, which is 7 to 14 days at launch.
Is Catchbin free?
Yes, free at launch with no checkout. There is a Free tier for everyone, and a "Bin Crew" tier that is free forever for the first 100 accounts, with more endpoints, longer retention, and more CLI sessions. A paid Solo tier arrives later; nothing you sign up for at launch is taken away.
How is it different from webhook.site?
Catchbin URLs are permanent and never expire, every event is stored and encrypted, and you can replay any captured event with one click. webhook.site's free URLs expire after about a week and it has no replay, so configured providers break and history is lost.
Does it work with providers other than Stripe?
Yes. Catchbin captures any webhook or generic HTTP POST — GitHub, Shopify, Twilio, Paddle, or your own services. The signature diagnostics are tuned for common providers like Stripe, but the capture, storage, and replay features work for any source.
Can I forward webhooks to localhost?
Yes, through a single Go CLI binary. Point it at your endpoint and it streams live events to a local port, so you can develop against real webhook traffic without a tunnel and without exposing your machine to the public internet.
When does Catchbin launch?
Catchbin launches as a public beta in the second half of 2026. Join the waitlist to get in early and to claim one of the 100 free-forever Bin Crew spots.
Get in before catchbin opens.
Public beta lands in the second half of 2026. The waitlist hears first.
Bin Crew — 100 founding spots, free forever. Be one of the first 100 accounts at launch.
No spam. One email when we launch.
Something went wrong — please try again.