Skip to main content
Point Stripe at a permanent, signed ingest URL, verify every event’s signature, and forward the live stream to localhost — then replay any captured event into your handler as many times as it takes. No re-triggering charges in the Stripe dashboard, no tunnel that dies when your laptop sleeps.
1

Create an endpoint and grab its ingest URL

The ingest URL is permanent and stays visible in your dashboard.
wbhk endpoints create stripe-dev
# → ingest URL: https://wbhk.my/whep_...
2

Register your Stripe signing secret

Now events arrive with a verificationState of verified instead of unattempted. The secret is read from stdin, never a shell argument.
wbhk endpoints add-provider-secret <endpoint-id> --provider stripe
# paste whsec... at the prompt
Point a Stripe webhook endpoint at https://wbhk.my/<token> and send a test event. See verify inbound signatures for the details.
3

Forward the live stream to your dev server

listen --forward re-delivers each captured event to your local URL, cursor-gated at least once. Reconnects resume from the durable cursor, so a dropped wifi connection doesn’t lose events.
wbhk listen <endpoint-id> --forward http://localhost:3000/webhooks --since now
4

Replay while you iterate

Broke your handler on invoice.paid? Don’t fish in the Stripe dashboard — replay the one you already captured, editing the body first to exercise an edge case.
wbhk replay <event-id> --forward http://localhost:3000/webhooks --edit
--edit re-delivers modified bytes, so Stripe’s original signature won’t re-verify against them — expected when you’re testing your handler’s logic rather than its verification. Forward without --edit to replay the exact signed bytes.