DEV Community

Cover image for Stop using ngrok just to inspect webhooks — 5-second alternative
Mock Bolt
Mock Bolt

Posted on

Stop using ngrok just to inspect webhooks — 5-second alternative

Every time I integrate a third-party webhook I do the same annoying dance:

  1. Start a local server
  2. Open a terminal, run ngrok http 3000
  3. Copy the URL
  4. Paste it into the webhook dashboard
  5. Trigger a test event
  6. Stare at the ngrok terminal output

That's 5 minutes of setup before I've written a single line of handler code.
And the URL changes every restart.

The read-only trap

The next tool most developers reach for is webhook.site.
It's much faster — you get a URL instantly, no install.

But it has one big limitation: it's read-only.

Your webhook source gets a fixed 200 OK with no body. That means you can't test:

  • How your code handles a 422 response (retry logic)
  • Whether your handler correctly parses a 201 with a payload
  • What actually gets returned to the calling service

For pure inspection ("what does Stripe actually send?") it's fine.
For anything more, you're stuck.

What I use instead

MockBolt is an instant mock API — paste JSON,
get a live public HTTPS endpoint in seconds. Every request is logged in real time.

For webhook testing it means you get both sides:

  • See the full incoming request (body, headers, IP, timing)
  • Control exactly what goes back to the webhook source

No install. No account. No CLI. No local server.


Testing a Stripe webhook in 60 seconds

Step 1 — Create the endpoint

Go to mockbolt.com, paste the response Stripe expects back:

{
  "received": true
}
Enter fullscreen mode Exit fullscreen mode

Set status code to 200. Click Generate Mock.
You get a URL like https://mockbolt.com/b/7f3d2c1a-...

Step 2 — Add it in Stripe

Dashboard → Developers → Webhooks → Add endpoint → paste your MockBolt URL.

Step 3 — Send a test event

Click "Send test webhook" → pick payment_intent.succeeded.

Open the MockBolt manage tab. The full Stripe payload appears in the
real-time inspector instantly — headers, body, everything Stripe sends.

No terminal. No restart. No port forwarding.


Testing a GitHub webhook

Same flow:

{ "status": "ok" }
Enter fullscreen mode Exit fullscreen mode

Status 200. Generate Mock. Copy URL.

Repo → Settings → Webhooks → Add webhook → paste URL.
Select application/json. Choose events (push, pull_request, etc.)

GitHub fires a ping immediately when you save. You'll see the full
ping payload arrive in MockBolt within 2 seconds.


Testing a Shopify order webhook

Shopify expects 200 with an empty body on success:

{}
Enter fullscreen mode Exit fullscreen mode

Add the endpoint in your Shopify Partners app settings.
Trigger a test order from the Shopify admin.
See the exact orders/create payload — line items, customer, totals, everything.


When to use each tool

Situation Best tool
Just need to see what payload a webhook sends webhook.site or MockBolt
Need to control the response (status + body) MockBolt
Need to forward to your local running server ngrok
Testing retry logic end-to-end MockBolt
Permanent staging webhook endpoint MockBolt ($2 one-time, never expires)
Debugging a webhook that fires infrequently MockBolt (auto-extends if active)

One more thing: request replay

MockBolt logs every request. There's a replay button (↩) on each row —
re-sends the exact request to your endpoint with one click.

Useful when you want to test a handler change without triggering
a new real event from Stripe/GitHub/Shopify.


Try it

mockbolt.com/webhook-testing

Create a free endpoint in 5 seconds. No account, no install.


What webhook services are you integrating? Drop a comment and I'll show
the exact payload setup for each one.

Top comments (0)