Product How it works Pricing Docs Sign in Start free
Webhook inbox for developers

See every
webhook.

Peekhook gives you an instant URL for every provider. Inspect the full request, replay it to your own machine, and return exactly the response they expect — without deploying a thing.

0 webhooks captured here 2 endpoints free no card required
LIVE · THIS IS REAL
/h/demo live
Incoming 0 recent
Connecting to the demo endpoint…
Demo waiting for a hook
// Send a webhook and it will appear here.
POST · 200 OK
/h/demo
Works with every provider
Stripe GitHub Shopify Slack Linear Vercel Clerk Twilio Plaid
The webhook inbox

Your integration, under a microscope.

Every request is captured in full — no more “it worked on my machine” with a side of guesswork.

Every byte, one place

Method, path, query, headers, raw body and size. JSON gets pretty-printed, forms get decoded, binaries get sized — all without touching your server.

POSTStripe · checkout.session.completed200
POSTGitHub · pull_request.opened200
POSTShopify · orders/create500

Replay to your machine

Send any captured request to your local dev server or staging URL with one click, headers and body intact. Stop waiting for the provider to retry.

peekhook /h/8f2k → localhost:3000/api/hook

Answer on your terms

Return a custom status, body and delay so a provider gets the exact response it wants while you fix the handler behind it. No more retry storms.

201 application/json
{ "received": true }

History that outlives the bug

Thirty days of searchable captures on Pro. Filter by provider, status or text, and share a read-only permalink with the teammate who broke it.

Three steps, zero deploys

From “what did they send?” to fixed in minutes.

Try it free

Create an endpoint

One click gives you a unique HTTPS URL. No tunnel, no port forwarding, no “works on my machine” dance.

https://your-app.dev/h/8f2kq9

Point your provider

Paste the URL into Stripe, GitHub, Shopify, Slack — anything that speaks webhooks. The first delivery lands instantly.

stripe webhook_endpoints create \
  --url https://your-app.dev/h/8f2kq9

Inspect, replay, ship

Read the request, replay it locally, return the response the provider expects. Your integration gets fixed instead of retried.

200 OK · captured in 42ms
replayed to localhost:3000 ✓
No signup required

This is a real endpoint.
Hit it.

The panel above is a live Peekhook feed, not a screenshot. Fire the request below and watch it land — then try replaying it or setting a custom response in the dashboard.

  • Real capture — full headers and body, stored in Postgres.
  • Real streaming — delivered over server-sent events to this page.
  • Real product — the same endpoint type you get on a free account.
terminal — bash
curl -X POST http://localhost:8080/h/demo \
  -H 'content-type: application/json' \
  -d '{"hello":"peekhook"}'
waiting
Pricing

Start free. Upgrade when it saves you a night.

Pro pays for itself the first time a webhook fails silently and you find out before your customers do.

Free forever
$0/ always

For side projects, first integrations and “is this thing on?” moments.

Create a free endpoint
  • 2 endpoints, 200 requests / month
  • Live inspection + full request detail
  • 24-hour retention
  • Read-only share links
7-day free trial Pro
$12/ month

Billed monthly. Cancel anytime from the Stripe billing portal.

  • Up to 100 endpoints, 20,000 requests / month
  • One-click replay to your dev or staging URL
  • Custom responses — status, body, delay
  • 30-day searchable history + share links
  • Web push alerts when a hook lands

Prices in USD. Card required for the trial; cancel before day 7 and you pay nothing. Payments run in Stripe test mode in this demo.

Questions

The fine print, in plain English.

Is my webhook data private?

Your endpoints require a random URL and your dashboard requires a session. Captures are only readable by the endpoint owner. The public demo endpoint on this page is intentionally open. On paid plans, share links are opt-in and expire after seven days.

What happens after the 7-day trial?

Stripe charges the card on file for the plan you picked — $12/month or $115/year. Cancel or switch plans any time from the billing portal; access stays active until the end of the period you paid for.

Can I replay to localhost?

Not directly, and that is deliberate: replay blocks private and loopback addresses so the feature cannot be used to probe your internal network. Expose your local server with a tunnel (ngrok, cloudflared, Tailscale Funnel) and replay to that public URL instead.

How do custom responses work?

On Pro, each endpoint can return a status code between 200 and 599, a custom body up to 8 KB, and an optional delay up to 5 seconds. Providers see a successful delivery, so retries stop while you fix the real handler.

Do you store secrets?

Headers are captured verbatim because signature debugging needs them. That can include provider signatures and, rarely, authorization headers. Keep endpoint URLs private, and delete captures you no longer need. Retention is 24 hours on Free and 30 days on Pro.

Can I run this myself?

Yes — this build ships with a Docker Compose stack (app + Postgres), migrations, seeded demo data and Stripe test-mode wiring. The README has the full runbook.

Stop guessing

Know exactly what they sent.

Create your first endpoint in under ten seconds. Two endpoints free, no credit card, no deploy required.