The webhook.site alternative that sends webhooks to your real code
webhook.site gives you a URL that stores each request on its servers, so you can read the payload in the browser. Expose gives you a URL that forwards each request to the app on your machine, so your own handler runs, and shows it in a dashboard on localhost where you can replay it. If you only want to see a payload, expose catch-all answers every request with 200 OK.
curl -fsSL https://expose.dev/install.sh | sh
irm https://expose.dev/install.ps1 | iex
Expose and webhook.site side by side
| Feature | Expose | webhook.site |
|---|---|---|
| Where a webhook goes | Through the tunnel to the app on your machine. Your handler runs, and its response goes back to the sender. | To webhook.site's servers in Germany. You read it in the browser, and the URL answers with a default response you can edit. |
| Just looking at payloads | expose catch-all answers every request with 200 OK and shows it in the dashboard, with Stripe, GitHub and Paddle Billing webhooks labelled. No app needs to run. | Open the site and you have a URL and an email address. Nothing to install and no signup. |
| Free plan | A free account with random URLs on one server in Germany and a time limit per connection. | Free URLs expire after a week and keep up to 50 requests. |
| Who can read the requests | You, in the dashboard on your machine. For coding agents, the Expose server also keeps the last 50 requests of a tunnel for up to 30 minutes, without credentials or IP addresses, and only your account can read them. | On the free plan, anyone who knows the URL. URLs on a paid plan are protected with a login. |
| The same URL every time | Reserved subdomains and your own domain in Pro, $79 a year per user. | Paid URLs don't expire, and you can pick an alias like webhook.site/my-alias. Your own domain is in Enterprise. |
| Sending webhooks to your own app | What every share does: expose share http://localhost:3000. | Its CLI, whcli, forwards requests to localhost and waits 5 seconds by default, and at most 10, to return your app's response. It needs Node.js or Docker. The pricing page lists localhost forwarding as a paid feature. |
| Replaying a webhook | A dashboard on localhost:4040 with every request, replay, and replay with changes. | Replay runs your Custom Actions again on past requests, a paid feature. The CLI can also forward past requests. |
| Coding agents | An MCP server that lets your agent read the requests that reached the tunnel. | Not stated. Its Action AI helps you build Custom Actions workflows. |
| Price | Free plan, or Pro for $79 a year per user, with no usage billing. | Basic $90 a year for 1 URL, Pro $190 a year for 50 URLs, Enterprise $699 a year with your own domain and 10 users. Or $9, $19 and $69 a month. |
From the Expose pricing, webhook.site's pricing page and its docs on November 13, 2026. "Not stated" means we didn't find it there.
Your webhook.site commands in Expose
| Task | webhook.site | Expose |
|---|---|---|
| See a payload without writing code | Open webhook.site and copy the URL | expose catch-all |
| Send webhooks to your local app | whcli forward --token=TOKEN --api-key=KEY --target=http://localhost:3000 | expose share http://localhost:3000 |
| Keep the same URL | An alias like webhook.site/my-app, on a paid plan | expose share http://localhost:3000 --subdomain=my-app |
More options in the sharing docs.
When webhook.site fits better
If you want a URL in ten seconds with nothing to install, webhook.site is hard to beat. It also keeps collecting while your laptop is closed, which Expose can't: a tunnel only answers while expose runs. It captures emails as well as HTTP requests, and its paid Custom Actions run workflows on its cloud whenever a request or email arrives. If you want a hosted bin on your own servers, its open-source edition (MIT) runs in Docker, without Custom Actions.
Trying Expose takes a minute
- 1. Install Expose with the command above.
- 2. Run
expose share http://localhost:3000, orexpose catch-allif you have no handler yet. The first time, it opens the browser to create a free account. - 3. Replace the webhook.site URL in Stripe, GitHub or Paddle with the Expose URL and your route, then open
http://127.0.0.1:4040to see and replay every request.
Other webhook.site alternatives
Hookdeck Inspect and the Hookdeck CLI
A free capture URL without an account, with requests kept for 3 days, and a CLI that forwards them to localhost with hookdeck listen 3000. Source URLs are not private: anyone with the link can read what they captured. A good fit if you will run webhooks through Hookdeck in production. Paid plans start at $39 a month and bill for events above 10,000 a month.
ngrok
A tunnel like Expose, with an inspector on localhost:4040 that replays requests, with changes. The free plan has one dev domain that stays the same, 20,000 HTTP requests a month and a warning page in front of browser traffic, which doesn't affect webhooks. The Pay-as-you-go plan bills for usage above what it includes.
Expose vs ngrokBeeceptor
A hosted endpoint built for mocking APIs. The free endpoint is public and takes 50 requests a day, and beeceptor-cli -p 8080 tunnels it to localhost. Paid plans make the endpoint private and are priced per endpoint, from $10 a month. A good fit if you also need mock responses.
RequestBin
The original request bin. requestbin.com and public.requestbin.com now redirect to Pipedream's homepage, which no longer mentions RequestBin. Pipedream Workflows, whose HTTP triggers give you a similar URL, are in maintenance mode, closed to new signups and will shut down on March 31, 2027. If you used RequestBin, webhook.site and Hookdeck Inspect work the same way, and a tunnel sends the requests to your own code.
From Hookdeck's docs, ngrok's docs, Beeceptor's pricing page and Pipedream's docs on November 13, 2026.
Questions
Can Expose capture webhooks without a local app, like webhook.site?
Yes. expose catch-all gives you a public URL that answers every request with 200 OK and shows it in the dashboard on http://127.0.0.1:4040. Built-in plugins label Stripe, GitHub and Paddle Billing webhooks.
Will my webhook URL change?
On the free plans, yes: webhook.site's free URLs expire after a week, and Expose gives you a random URL. Expose Pro, $79 a year per user, lets you reserve a subdomain with --subdomain, so the URL you paste into Stripe or GitHub stays the same.
Who can see my webhook payloads?
With Expose, requests go to your app and the dashboard on your machine. For the MCP server, the Expose server keeps the last 50 requests of a tunnel for up to 30 minutes, with credentials and IP addresses removed. A free webhook.site URL can be read by anyone who knows it; paid URLs are protected with a login.
What is a good RequestBin alternative?
requestbin.com now redirects to Pipedream, which no longer mentions RequestBin. For a hosted bin, webhook.site and Hookdeck Inspect work the same way. To send the requests to your own code and replay them, use a tunnel such as Expose.
Can my coding agent see the webhooks?
Yes. Connect the Expose MCP server at https://expose.dev/mcp, and Claude Code, Codex or ChatGPT can list your tunnels and read the last 50 requests of each one, for up to 30 minutes.