How to test webhooks

Webhook debugging fails when you cannot see what the provider actually sent. You need a public HTTPS URL, a place to read method, headers, and body, and — only later — a way to forward that traffic to a process on your laptop.

What a webhook test needs

  • A public URL the provider can reach (localhost alone is not enough)
  • Payload visibility — headers and body, including signature headers
  • A clear path for retries and failed deliveries when the first attempt misbehaves

An online webhook tester covers the first two without installing an agent. A Local Tunnel covers the third when your app must respond on a local port.

Browser tester vs Local Tunnel

  • Inspect a delivery quickly — use the online webhook tester (guest mode)
  • Forward to a local HTTP server — use a Local Tunnel after free registration
  • Replay or record live traffic — use Record Session on a Local Tunnel (account required)

Guest mode records requests and returns 204 No Content. It does not forward to your machine.

Open an online webhook tester

Open the webhook tester

Open mercur.sh/webhook-tester. A guest endpoint is provisioned in the browser with no account and no install.

Copy the public HTTPS URL

Copy the temporary endpoint from the page. Unused guest endpoints expire after 24 hours idle. Copy the URL from the page — the subdomain is unique to your session.

Point a provider or curl at the URL

Paste the URL into a provider webhook setting, or send a POST with curl. The tester responds 204 and records the request. Provider dashboards (Stripe, GitHub, Shopify, and others) work the same way: paste the HTTPS URL and trigger a test event.

Inspect method, headers, and body

Open request history on the same page to see what the sender transmitted, including signature headers and retries. Select a log entry to expand headers and body. Signature verification failures usually show up here as the raw Stripe-Signature or similar header plus the body your code would verify.

Forward to localhost when ready

Create a free account to unlock Record Session and Local Tunnels so deliveries can reach a service on your machine. Your guest tester URL is deleted on registration (or expires after idle TTL). After signup you get a stopped HTTP tunnel in the console — start it when you are ready to hit localhost.

Common failures

  • Webhook not received — wrong URL, typo in the path, or the provider still pointing at an old endpoint
  • 4xx / 5xx in the provider dashboard — in guest mode Mercur always responds 204; if the provider shows an error, the request may never have left their side
  • Signature verification failed — compare the raw body and signature header in request history with what your verifier expects (encoding and whitespace matter)

Keep going

Try the online webhook tester