Capture, inspect, transform, and forward webhooks in real time.
A lightweight webhook.site replacement you own. Browser mode replaces ngrok — zero setup.
Every webhook flows through a composable pipeline. Enable only what you need.
Receive any HTTP request
Persist to PostgreSQL
JS/Lua/Jsonnet scripts
Relay to your services
Custom HTTP response
POST /h/abc123
"event": "order.created"}
function transform(req) {
req.body.ts = Date.now();
return req;
}
POST https://api.yourapp.com
"event": "order.created",
"ts": 1711234567890 From live inspection to programmable transforms — one tool for the full webhook lifecycle.
Browser mode forwards via fetch() — reach localhost, Docker, anything your machine can see. No CLI, no daemon.
Browser mode: zero server storage. Payloads never touch disk. GDPR-friendly, ideal for sensitive data.
WebSocket-powered live view. See every request the instant it arrives — headers, body, timing.
JavaScript, Lua, or Jsonnet scripts transform payloads before forwarding. Runs in WASM — sandboxed and fast.
Forward to any URL with sync or async mode. Sync mode captures the response for your handler scripts.
Headers, query params, body with JSON/XML syntax highlighting. Copy as cURL, replay, export as JSON/CSV.
Server mode for production reliability, Browser mode for privacy and local testing.
Requests are stored in PostgreSQL. Transforms and forwarding run server-side, always-on even without a browser. Ideal for production webhooks.
Your tunnel replacement for local webhook testing. Webhooks hit Testhooks, stream to your browser via WebSocket, and fetch() delivers them to localhost. No CLI, no daemon, no port forwarding. Zero server storage.
Browser mode turns Testhooks into a webhook tunnel — without installing anything.
Sends webhook to
your Testhooks URL
Receives via WebSocket,
inspects, transforms, forwards
Your app receives
the webhook via fetch()
Works with any webhook provider — Stripe, GitHub, Slack, Shopify, Twilio, Linear, and more.
Just point their webhook URL at your Testhooks endpoint.
Open source, self-hostable, no sign-up required. One binary, one database — and browser mode reaches localhost too.