Webhook Testing
Ephemeral test sessions, the inspector, custom responses, forwarding, and graduation.
Hookstream gives you a free, no-signup webhook testing tool at hookstream.io/test. Open the page, get a unique URL, and inspect every request in real-time. When you're ready, graduate the session to a full account without losing any data.
No account required. No credit card. No install. Open the page and you have a working webhook URL in under a second.
Create a test session
Open hookstream.io/test
A session is auto-created on page load. You get:
- A unique ingest URL:
https://hookstream.io/v1/ingest/src_<id> - A two-panel inspector (events list on the left, event detail on the right)
- 14-day TTL or 2,000 requests, whichever comes first
Point a provider at it
Paste the ingest URL into any webhook provider, or hit it with curl:
bashcurl -X POST https://hookstream.io/v1/ingest/src_abc \ -H "Content-Type: application/json" \ -d '{"hello":"world"}'
New events stream into the inspector via WebSocket — no refresh needed.
Inspect each request
Click an event to see headers, pretty-printed JSON body, query parameters, source IP, and metadata. Hookstream also auto-detects common providers (Stripe, GitHub, Shopify, Clerk, Svix, etc.) and shows a provider badge so you know what you're looking at.
Prefer the terminal? Use the CLI.
hookstream testhookstream listentest creates a session and opens the inspector URL. listen creates a session and streams events into your terminal in real-time over WebSocket — headers, body, status, the lot.
Customize the response
By default the ingest URL returns 200 OK. You can override that per session to simulate odd behavior (5xx, redirects, custom bodies):
bashcurl -X PATCH https://hookstream.io/v1/test/sessions/sess_abc/response \ -H "Content-Type: application/json" \ -d '{ "status_code": 201, "headers": { "X-Custom": "value" }, "body": "{\"ok\": true}" }'
Forward to localhost (or anywhere)
Tunnel your live test session to your dev server without setting up ngrok:
Expose your local endpoint
Use ngrok, Cloudflare Tunnel, or a local URL your laptop can reach from the internet.
Enable forwarding on the session
bashcurl -X PATCH https://hookstream.io/v1/test/sessions/sess_abc/forwarding \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-ngrok-url.ngrok.io/webhook", "enabled": true }'
Forwarding runs via waitUntil, so it never blocks the provider's response — hookstream replies instantly and forwards in the background. The forwarding response shows up in the event detail so you can see what your server said.
Everything else you can do
- Search and filter across received events.
- Copy as code — hookstream generates ready-to-paste snippets in cURL, JavaScript, Python, and Go for any captured request.
- Add notes to events (
PUT /v1/test/sessions/:id/events/:eid/note) — handy for documenting what each test was for. - Export as NDJSON or CSV:
GET /v1/test/sessions/:id/export?format=ndjson. - Configure a custom response body to simulate provider-side quirks.
Graduate to your account
Sign up and hookstream offers to "graduate" your test session: the ingest URL stays exactly the same, but the source and all its events move into your org with full pipeline support — destinations, retries, alerts, collections, everything.
bashcurl -X POST https://hookstream.io/v1/test/sessions/sess_abc/claim \ -H "X-API-Key: $HOOKSTREAM_API_KEY"
You don't need to update anything on the provider side — the URL keeps working.