catchbinJoin the waitlist
Launching as a public beta

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 with a free tier for everyone and a paid Solo plan at $15/mo. 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.

dashboard.catchbin.io / endpoint / abc123
stripe.payment_intent.succeeded200 OK14ms
github.pull_request.openedqueued—
shopify.orders.create500 ERR22ms
247 events captured todaylive

Catching and debugging webhooks stays free. Solo is for the live integration you stopped watching.

Every plan keeps a permanent webhook URL. History, endpoints, and alerting scale with the plan.

Free
$0
at launch, for everyone
  • 3 endpoints
  • 7-day history
  • 1 CLI session
Bin Crew
first 100
$0
free forever, first 100 accounts
  • 5 endpoints
  • 14-day history
  • 3 CLI sessions
Solo
$15
/mo at launch
  • 20 endpoints
  • 1 year of history
  • 10 CLI sessions
  • Alerts when an endpoint stops receiving
  • Alerts when signature failures spike
  • Weekly digest
Team
—
coming soon

For teams. Details closer to the time.

Prices are in USD and exclude tax. Applicable sales tax, VAT or GST is added at checkout. Currency conversion, where it applies, is handled by the payment provider at its own rate.

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.

01

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.

02

Store

Every byte is persisted, encrypted at rest — 7 days on Free, 14 days on Bin Crew, 1 year on Solo. Headers, raw body, timestamp, source IP. Searchable, exportable, replayable.

03

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.

SIGNATURE DEBUGGER

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
evt_3PqZk2RxC7Lm1Q8F
signature failed
  • Raw body byte count: 1,847 received vs. 1,852 signed → mismatch
    Middleware 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: valid
    stripe-signature parses: t= timestamp plus a v1= signature. Schemes other than v1 are ignored.

One command. Live on localhost.

The CLI is a single Go binary. No daemon, optional config file.

~/projects/api
$ 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.

Featurecatchbinwebhook.site (free)ngrok (free)
Permanent URLYesExpires after ~7 daysChanges each session
Event historyPersistent (7 days to 1 year by plan)Limited~24 hours
One-click replayYesNoNo
Forward to localhostYes (Go CLI)NoYes (tunnel)
PriceFree tier, Solo $15/moFreeFree

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 days on Free, 14 days on Bin Crew, and 1 year on Solo.

Is catchbin free?

There is a Free tier for everyone, at no cost. A "Bin Crew" tier is also free and stays free permanently for the first 100 accounts, with more endpoints, longer retention, and more CLI sessions. A paid Solo tier is available from launch at $15/mo, for heavier use and a longer history window.

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 once production is live. No date is promised. Join the waitlist to hear first, and to claim one of the 100 free-forever Bin Crew spots.

Get in before catchbin opens.

The public beta is coming. 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.