Webhooks power integrations between services — Stripe payment events, GitHub push notifications, Slack messages. Debugging them is painful because you can't see what arrives. A webhook tester gives you a disposable URL that captures every incoming request for inspection.
What Is Webhook Tester?
A webhook tester creates a temporary HTTP endpoint that logs all incoming requests. You point your third-party service at this URL, trigger the event, and inspect the raw payload — headers, body, query params, and HTTP method — in real time.
How to Use Webhook Tester on DevToolHub
- Open the Webhook Tester tool on DevToolHub — no signup required.
- Generate a unique webhook URL with one click.
- Copy the URL and paste it into your service's webhook configuration (Stripe, GitHub, etc.).
- Trigger the event (e.g., make a test purchase, push a commit).
- Return to the tester and inspect the captured request details.
- Replay the request to test your handler's response logic.
Capturing a Stripe Payment Webhook
After configuring Stripe to send events to your tester URL:
POST /webhook/abc123
Stripe-Signature: t=1678901234,v1=5257a869...
Content-Type: application/json
{
"type": "payment_intent.succeeded",
"data": {
"object": {
"id": "pi_3N...",
"amount": 4999,
"currency": "usd"
}
}
}You can verify the event structure, check the signature header format, and confirm the amount field before writing your handler.
Debugging GitHub Push Events
GitHub sends detailed payloads when code is pushed:
{
"ref": "refs/heads/main",
"commits": [
{
"id": "abc123",
"message": "Fix auth middleware",
"author": { "name": "Alice" },
"added": ["src/auth.ts"],
"modified": ["src/index.ts"]
}
],
"repository": { "full_name": "org/repo" }
}Seeing the exact payload structure helps you write the correct conditional logic for CI/CD triggers.
Replaying Requests for Testing
Once captured, you can replay a webhook to test your actual handler:
// Your handler at /api/webhooks/stripe
if (event.type === 'payment_intent.succeeded') {
await fulfillOrder(event.data.object.id);
return Response.json({ received: true });
}Replay the captured Stripe event against your local handler to verify it processes correctly — without making another test purchase.
Pro Tips
- Use unique URLs per integration — keep Stripe, GitHub, and Slack webhooks separated for cleaner debugging.
- Check idempotency — replay the same webhook twice and ensure your handler doesn't duplicate side effects.
- Inspect timing — if webhooks arrive late, the issue is with the sender; if your handler is slow, the issue is yours.
- Verify signatures — most services sign payloads; test your signature verification code against real captured data.
When You Need This
- Setting up a new payment provider integration
- Debugging why a GitHub Actions workflow doesn't trigger
- Testing Slack slash command payloads during development
- Verifying that your webhook handler returns 200 quickly enough to avoid retries
Free Tools Mentioned in This Article