Test webhooks on localhost
tunnel.to gives a webhook handler running on localhost a public HTTPS URL so external services can send callbacks directly to your development environment.
Copy the generated HTTPS URL into your webhook provider. Requests are forwarded to your local application while your code and debugger stay on your machine.
tunnelto 3000How local webhook testing works
- 1Start the handler at http://localhost:3000/webhook.
- 2Run tunnelto 3000 in another terminal.
- 3Copy https://<generated-host>.tunnel.to/webhook.
- 4Add that URL to the provider and send a test event.
Test webhooks from the services you use
Use the generated HTTPS URL with Stripe, GitHub, Shopify, Twilio, Slack, Discord, PayPal, or any service that can send an HTTP webhook. These are examples of compatible webhook senders, not official integrations or partnerships.
Why use a tunnel for webhook development?
Develop and debug the handler locally while the external service sees a normal public HTTPS endpoint. Keep using your debugger, logs, local database, IDE, and development stack without redeploying after every change.
Temporary vs persistent webhook URLs
Anonymous tunnels are useful for a quick test. When a provider needs to retain the same callback URL between sessions, use a reserved hostname or attach a custom domain.
Related guides
Frequently asked questions
How do I test a webhook on localhost?
Run the webhook handler locally, start a tunnel to that port, and give the provider the public HTTPS URL plus the handler path.
Why can't a webhook provider call localhost directly?
localhost refers to the provider's own machine or network context, not your development computer.
Do I need to deploy my webhook handler?
No. It can continue running locally while requests are forwarded through the tunnel.
Can I keep the same webhook URL?
Yes. Use a reserved tunnel name or custom domain when the callback URL must stay the same between sessions.
The shortest path from localhost to public HTTPS.
Start anonymously. Add a stable hostname or custom domain when you need one.