How ngrok's Traffic Inspector Kills the Guesswork in Webhook Debugging
Webhook debugging used to mean adding console.log everywhere and hoping. ngrok's Traffic Inspector made that feel barbaric.
Before Traffic Inspector, debugging a webhook was archaeology.
Your provider sent a POST request. Something went wrong — your handler returned a 500, or maybe a 400, or maybe a 200 and then silently failed to do anything useful. You had no idea what payload arrived. You had no idea what your handler returned. You had log lines, somewhere, if you'd remembered to log the right things. You'd curl a replay at your endpoint and pray it matched what the provider actually sent. You'd print the JSON body, stare at it, add a console.log('GOT HERE') to the handler, restart the server, manually trigger another test event, wait.
ngrok's Traffic Inspector didn't just improve this workflow — it made the old workflow feel embarrassing in retrospect. For full setup details, see the ngrok documentation.
What Traffic Inspector Actually Shows You
Open http://localhost:4040 while your ngrok tunnel is running. Every request that hits your tunnel shows up in a real-time list on the left: method, path, status code, latency. Click any entry and you get the full picture.
The request panel shows the complete incoming payload: every header (including the signature headers your HMAC verification depends on), the raw body, and the content-type. No filtering, no truncation, no guessing about what the provider actually sent. The exact bytes that hit your server. Refer to the Stripe webhook documentation for the exact header format Stripe sends.
The response panel shows what your handler returned: status code, response headers, response body. If your handler crashed with an unhandled exception and Express returned a default 500 with an HTML error page — you see that. If your handler returned 200 but the body is empty when it should say {"received": true} — you see that.
The latency display is more useful than it sounds. Stripe times out after 30 seconds. If your handler is doing synchronous database work and taking 25 seconds to respond, Traffic Inspector shows you 25,000ms and you immediately know why Stripe is retrying.
The filter controls let you narrow by method, path, or status. If you're testing a multi-step flow that hits your server a dozen times and you want to isolate just the POST /webhooks/stripe calls that returned a 4xx — it's two clicks. For a broader troubleshooting approach, see our webhook debugging checklist.
The Replay Button and the Verification Tab
Two features turn Traffic Inspector from "inspection tool" to "development accelerator."
One-click replay: any captured request has a Replay button. Click it and ngrok re-fires the exact original request — same headers, same body, same everything — at your handler. You can fix a bug, restart your server, and replay the failing request without going back to Stripe and hunting through their event list to trigger another test event. Tight feedback loop, no context switching.
The webhook verification tab: this is a genuinely clever addition. Paste in your webhook signing secret and Traffic Inspector will verify the HMAC signature on every incoming request, showing you a clear pass/fail result alongside the decoded payload data. This surfaces the most common class of webhook debugging failure — signature verification problems — before you've written a single line of verification code. Wrong secret, body already parsed, content-type encoding mismatch — all of these show up immediately, labeled clearly.
This is what a great developer tool looks like: specific, opinionated, and built around the actual failure modes developers hit in practice.
Where Hookdeck Wins
Traffic Inspector is a development tool. Hookdeck is production event infrastructure — and for that job, it's in a different category.
Hookdeck's core offering is at-least-once delivery as an explicit, documented contract. This is not "we'll try to deliver your webhooks." This is a platform guarantee: if your server is unavailable, Hookdeck queues the event and retries up to 50 times automatically. The retry schedule is configurable. The platform maintains a full audit log of every delivery attempt, with timing, response codes, and response bodies.
For teams running payment or provisioning flows where a missed webhook means a missed state transition, 50 automatic retries with guaranteed delivery semantics is a different class of reliability promise than a local dev tunnel can provide.
Hookdeck also offers production-grade event routing: filter by event type, route different events to different destinations, transform payloads between providers. The Vercel integration makes it particularly compelling for teams already deployed there — one config change and your webhook infrastructure has retry guarantees without code changes. SOC2 compliance means it fits enterprise procurement conversations that other tools don't.
The Team plan starts at $39/month. That's not cheap, but it's buying something specific: the guarantee that your events get delivered, a documented retry SLA, and the audit trail that proves it.
ngrok is not trying to compete with this. ngrok is a development tool. When your tunnel closes, your history closes with it. When you shut your laptop, the inspection session is gone. That's fine — it's the right trade-off for a local development tool. But it means the two tools are solving different problems.
The Gap Between Inspection and Recovery
This is where HookTunnel carves out its own lane.
The failing event from last Tuesday night at 11:47 PM: ngrok's Traffic Inspector didn't capture it (your tunnel wasn't running). Hookdeck may have queued and retried it (if Hookdeck was your webhook endpoint). But what if you need the exact payload, the exact headers, and you need to replay it to your staging server to reproduce a bug?
HookTunnel is built for this specific job: production payload forensics and replay for incident recovery.
Every event that hits a HookTunnel hook URL is captured permanently (24-hour history on free, 30 days on Pro). The URL never changes. The history doesn't depend on a tunnel being active. You can search across all captured events, filter by time range, inspect the full payload, and replay any event to any target URL — your local server, your staging environment, or production. Learn more about silent webhook failure — the pattern this solves.
The replay mechanism works from the dashboard or from the CLI:
hooktunnel replay --hook abc123xyz --event evt_9k2m --to http://localhost:3000/webhooks/stripe
This closes the loop that Traffic Inspector opens: you saw the problem during development, you understand the payload shape, you have a permanent capture URL in Stripe's config, and when something goes wrong in production you have the payload history to replay and reproduce.
The Decision Matrix
Different problems, different tools:
Local webhook development: ngrok Traffic Inspector. You want to see exactly what your provider is sending, iterate rapidly against real payloads, and verify your signature code. Traffic Inspector's real-time UI and one-click replay are the right tool for this job.
Production routing with automated retries and delivery guarantees: Hookdeck. When at-least-once delivery is a hard requirement, 50 automatic retries with configurable schedules and SOC2 compliance is what you're buying. The $39/month Team plan buys an actual reliability contract.
Production payload capture and incident recovery replay: HookTunnel Pro. When something went wrong last Tuesday night and you need the exact failing payload to reproduce and fix the bug, persistent history and replay-to-any-target is the job. The free tier gives you a permanent capture URL and 24-hour history — enough to catch most things. Pro at $19/month extends to 30 days and adds replay.
Closing Thoughts
ngrok's Traffic Inspector is one of the better developer experience decisions in the webhook tooling space. Real-time inspection, one-click replay, HMAC verification built into the UI — these are the right features, built right. It's genuinely excellent for what it does.
Hookdeck made a different bet: production infrastructure with delivery guarantees, not development inspection. If your team needs SOC2 and 50 automatic retries and an event routing layer, that's the right bet.
Pick the tool that matches your actual problem. But if your problem is "I need the exact failing payload from last Tuesday night, and I need to replay it against staging until the bug reproduces" — there's a newer player worth knowing about.
Get a free permanent capture URL → No install, no signup friction, permanent URL from minute one.
Stop guessing. Start proving.
Generate a webhook URL in one click. No signup required.
Get started free →