Every developer building a webhook integration faces the same problem: your handler runs on localhost, but Stripe, GitHub, Shopify — every provider — needs a public HTTPS URL to deliver events. The traditional answers are ngrok (a CLI tunnel) or deploying to staging for every change. WebhookWhisper gives you a better option: a permanent public endpoint that forwards events straight to your local machine, with no install and no tunnel.
How Webhook Forwarding Works
WebhookWhisper acts as a relay between the outside world and your local machine. For a full walkthrough, read the complete webhook forwarding guide:
- You get a permanent public HTTPS URL (e.g.
https://webhookwhisper.com/hook/abc123) - You register this URL with your provider (Stripe, GitHub, etc.)
- You set a forwarding rule: target =
http://localhost:3000/your-path - Provider fires a webhook → WebhookWhisper receives it, logs it, then immediately POSTs it to your local server
- If your local server is down or returns an error, WebhookWhisper retries automatically
Your local server receives the original request with all original headers preserved — including signature headers like Stripe-Signature and X-Hub-Signature-256 — so signature verification works exactly as it would in production.
Webhook Forwarding vs ngrok — Side-by-Side
| Feature | ngrok (free) | WebhookWhisper |
|---|---|---|
| Installation required | Yes — CLI binary | No — browser only |
| Persistent terminal process | Yes — must stay running | No — cloud-side relay |
| Static URL | No — rotates each restart | Yes — permanent endpoint |
| Automatic retry on failure | No | Yes — built-in |
| Full event history | Limited in-session only | 14 days (Starter plan) |
| Delivery log with status codes | No | Yes — per-attempt log |
| Inspect payloads in browser | Via ngrok dashboard | Yes — built-in |
| Multiple forwarding targets | No — single tunnel | Yes — multiple rules per endpoint |
| Free tier | Yes (rotating URL) | Yes (1-hour guest, permanent on Starter) |
| Exposes full local server | Yes — whole port | No — only relays to the target URL |
Works With Every Webhook Provider
WebhookWhisper accepts any HTTP POST request, so it works as a forwarding relay for any provider that sends webhooks:
- Stripe — payment events, subscription lifecycle, disputes
- GitHub — push, pull_request, workflow_run, release events
- Shopify — orders, products, customers, GDPR topics
- Twilio — SMS delivery status, call events
- SendGrid — email open, click, bounce, spam events
- Slack — Events API, slash commands, interactivity payloads
- PayPal — IPN and REST webhook notifications
- Razorpay — payment, subscription, dispute events
- Any custom webhook — internal services, IoT devices, third-party APIs
Advanced Forwarding Features
Multiple forwarding rules per endpoint
Need the same webhook to hit your local server and a staging environment simultaneously? Set two forwarding rules on one endpoint and WebhookWhisper delivers to both in parallel. Useful for smoke-testing staging while also running local integration tests.
Automatic retry with exponential backoff
If your local server returns a non-2xx status or isn't reachable, WebhookWhisper retries the delivery automatically. No missed events because your server was momentarily restarting. The retry count and interval are configurable per rule.
Full delivery log
Every forwarding attempt is logged with the HTTP status code your server returned, the response body, and the round-trip duration. When your handler returns a 500, you see it immediately and can replay the event after fixing the bug — without waiting for the provider to retry.
Headers are forwarded intact
WebhookWhisper forwards the original request headers to your local server, including all signature headers. Stripe-Signature, X-Hub-Signature-256, X-Shopify-Hmac-Sha256 — all present and correct. Your signature verification code works identically in local testing and production.
Guides & Related Resources
- Forward Webhooks to Localhost Without ngrok — Full Guide
- How to Test Stripe Webhooks Without Deploying
- How to Debug Webhooks: A Practical Guide
- Stripe Webhook Testing — Free Tool
- GitHub Webhook Testing — Free Tool
- Shopify Webhook Testing — Free Tool
- 35+ Webhook Providers Directory
Frequently Asked Questions
Do I need to install anything to forward webhooks to localhost?
No. WebhookWhisper is entirely browser-based. Create a free endpoint, set a forwarding rule, and you're done. No CLI to install, no binary to download, no terminal process to keep running.
Does my local server need to be publicly accessible?
No. WebhookWhisper's servers make the outbound request to your local machine — but that only works if your machine can receive inbound connections on the target port. On most development setups (Mac, Windows, Linux with a standard network) localhost is reachable from the same machine. If you're inside a corporate VPN or a Docker network you may need to use your machine's local IP address (e.g. http://192.168.1.5:3000) instead of localhost.
What happens if my local server is down when a webhook arrives?
WebhookWhisper still receives and stores the event. The forwarding attempt is logged as failed. You can replay the event from the dashboard once your local server is back up — no need to trigger the provider again.
Can I forward to multiple localhost ports at the same time?
Yes. Add multiple forwarding rules to the same endpoint, each with a different target URL. For example: http://localhost:3000/webhooks (your main app) and http://localhost:9000/debug (a debug listener). Both receive every event.
Is there a rate limit on webhook forwarding?
Guest endpoints have a limit of 50 events per session. Starter plan ($6/mo) and Pro plan ($9/mo) have no event limits. For high-volume production forwarding, consider the Pro plan which also includes 30-day event history and API access.