Guides

Practical, copy-pasteable walkthroughs for common webhook debugging jobs.

🔏 Webhook signature debugger (free tool)

Paste secret + raw body + signature header, see match/mismatch and exactly what was signed — GitHub, Stripe, Shopify, Slack, Zoom, Svix/Clerk, Twitch, Square, HubSpot, Mailgun, SendGrid (ECDSA), Intercom, Twilio. Runs 100% in your browser; the secret is never sent anywhere.

📦 Webhook payload examples

Realistic sample payloads — body and headers — for GitHub, Stripe, Shopify, Slack, Twilio, SendGrid, GitLab and Mailgun webhooks. One click opens any of them in a live capture bin.

How to test webhooks online (free, no signup)

Get a free URL that captures any webhook or HTTP request so you can inspect headers and body live — no signup, no install.

Receive webhooks on localhost — without ngrok or a tunnel

Deliver GitHub, Stripe or any webhooks to a server on your laptop with one shell script — no tunnel daemon, no ngrok account, no firewall changes.

Test GitHub webhooks and verify X-Hub-Signature-256

Capture GitHub webhook deliveries, inspect the payload, and verify the X-Hub-Signature-256 HMAC signature — free.

GitHub webhook not triggering? Diagnose it in 5 minutes

GitHub webhook not working or not delivering? Isolate the failure with the Recent Deliveries log, a capture URL, and the documented causes: wrong events, timeouts, SSL, payload caps.

Inspect Stripe webhooks without the Stripe CLI

Capture Stripe webhook events at a free URL, inspect the exact payload and Stripe-Signature header, and verify the signature.

Stripe "Webhook signature verification failed" — every cause, in the order to check them

Why stripe.webhooks.constructEvent throws "No signatures found matching the expected signature": raw body parsing, wrong whsec_ secret, clock skew, proxy mutation — with the fix for each.

Pass Slack URL verification (url_verification challenge) instantly

Slack's Events API requires your endpoint to echo a challenge. Do it with zero code using response templates — and capture every event.

Test Shopify webhooks and verify X-Shopify-Hmac-Sha256

Capture Shopify webhook deliveries at a free URL, inspect the exact payload, and verify the base64 X-Shopify-Hmac-Sha256 HMAC signature.

Debug Twilio webhooks: see exactly what Twilio sends

Capture Twilio SMS/voice webhooks at a free URL, see the form-encoded parameters decoded, and test your TwiML responses.

Debug Telegram bot webhooks: see every update, fix 409s and silent failures

See the exact Update JSON Telegram sends your bot, diagnose last_error_message, fix 409 Conflict and port errors, and develop bots on localhost without a tunnel.

Discord "interactions endpoint URL could not be verified" — what actually fails, and the fix

Why Discord rejects your interactions endpoint: the Ed25519 signature check, the deliberate invalid-signature probes, the PING ACK, raw-body gotchas, and how to develop locally.

WooCommerce webhook not firing? Cron delays, silent disables, and how to actually see deliveries

Why WooCommerce webhooks arrive late or stop entirely: Action Scheduler / WP-Cron delays, the 5-failure auto-disable, the strict HTTP-200 activation ping, and how to verify X-WC-Webhook-Signature.

Free ngrok alternatives for webhook testing (2026)

Honest comparison of free ways to get webhooks to localhost — cloudflared, localtunnel, SSH tunnels, and a no-tunnel relay approach — with the trade-offs of each.

Webhook retry schedules: 26 providers compared (2026)

How many times each provider retries a failed webhook, at what intervals, what counts as failure, and when it gives up or disables your endpoint — GitHub, Stripe, Shopify, Slack, Square, Svix and more, with sources.

Test webhook retries, timeouts and failure handling

Force any webhook sender to retry: return 500s, add response delays to trip timeouts, and observe the real retry schedule — without deploying anything.

RequestBin alternatives in 2026 (the original is gone)

requestbin.com shut down years ago. Here are the working free alternatives for inspecting HTTP requests and webhooks — and what each one paywalls.

webhook.site alternatives in 2026 (free, without the 100-request cap)

webhook.site is fine for a two-minute look, but the free tier caps requests and paywalls replay, custom URLs, and the CLI. Honest rundown of the alternatives.

Beeceptor alternatives: free webhook inspection without the 50/day cap

Beeceptor’s free tier caps you at ~50 requests per endpoint per day with short history. If you’re inspecting webhooks rather than mocking APIs, here are better free options.

Mockbin alternatives: mockbin.org is gone — free replacements that work

mockbin.org no longer resolves; Kong folded Mockbin into Insomnia. Free working alternatives for inspecting HTTP requests and mocking webhook responses.

Hookbin alternatives: hookbin.com is gone — here’s what to use instead

hookbin.com now redirects to Pipedream’s RequestBin; the standalone request-capture tool is gone. Free working alternatives for inspecting HTTP requests and webhooks.

smee.io alternatives: webhooks to localhost without dropped deliveries

smee.io forwards webhooks to localhost but drops every delivery that arrives while your client is disconnected. Alternatives that persist payloads, verify signatures, and need no Node client.

localtunnel alternatives: stable webhook URLs without the password page

localtunnel is free but unreliable: interstitial password pages that block webhook senders, rotating URLs, npm client, frequent downtime. Free alternatives that actually deliver webhooks.

ngrok errors explained: ERR_NGROK_108, 3200, 121, 6024 (and how to stop hitting them)

What ERR_NGROK_108, ERR_NGROK_3200, ERR_NGROK_121 and ERR_NGROK_6024 actually mean, the quick fix for each, and how to take webhooks out of the tunnel entirely.

How to expose localhost to the internet (5 free ways, honestly compared)

Every free way to make a local server reachable from the internet — ngrok, cloudflared, SSH tunnels, Tailscale Funnel, VS Code port forwarding — plus the case where you don’t need to expose anything at all.

PayPal webhook not working? Port 443, the 3-day retry window, and signature checks that actually pass

Why PayPal webhooks never arrive or fail verification: the HTTPS-443-only delivery rule, 25 retries over 3 days, simulator mock-event gotchas (WEBHOOK_ID), and the transmissionId|timeStamp|webhookId|crc32 signature string.

GitLab webhook not working? "Url is blocked", auto-disable after 4 failures, and how to see deliveries

Fix "Url is blocked: Requests to the local network are not allowed", understand GitLab's 4-failure temporary disable and 40-failure permanent disable, read Recent events, and verify X-Gitlab-Token or the new webhook-signature header.

Bitbucket webhook not working? Turn on the request log first, then check timeouts, retries, and X-Hub-Signature

Bitbucket Cloud records no webhook history until you enable it. Where the request log hides, the 10-second timeout and -1 status, the 256 KB silent payload limit, 5xx auto-retries with X-Attempt-Number, URL-encoding traps, and verifying the WebSub-style X-Hub-Signature (sha256).

Jenkins GitHub webhook not triggering builds? The trailing slash, the checkbox, and 4 other causes in order

Fix a GitHub webhook that never triggers Jenkins: the /github-webhook/ trailing-slash 302, the "GitHub hook trigger for GITScm polling" checkbox, branch specifier mismatches, 403 crumb errors, multibranch differences, and reaching a Jenkins behind a firewall.

Zoom webhook 'failed to validate' — fix the URL validation CRC

Why Zoom's endpoint.url_validation fails, how the plainToken/encryptedToken HMAC works, and how to pass it with zero code — including the 72-hour revalidation.

WhatsApp webhook ‘couldn't be validated’ — fix Meta's hub.challenge check

Why Meta's dashboard says the callback URL or verify token couldn't be validated (WhatsApp Cloud API, Messenger, Instagram), how the GET hub.challenge handshake works, and how to pass it with zero code — plus X-Hub-Signature-256 verification and the 7-day retry window.

Twitch EventSub webhook_callback_verification — pass the challenge, fix revocations

Why your Twitch EventSub subscription is stuck in webhook_callback_verification_pending, how the challenge and the HMAC signature (message-id + timestamp + body) actually work, and how to pass the check with zero code.

Clerk webhook verification failed — debugging Svix signatures

Why verifyWebhook() throws, how the Svix signature (svix-id.svix-timestamp.body HMAC) actually works, and how to see exactly what Clerk sends — plus Resend, Railway, and every Standard-Webhooks sender.

Square webhook signature verification failed — the URL is part of the signature

Square's HMAC covers the notification URL plus the body — so a trailing slash, http vs https, or a changed tunnel URL breaks verification even when your code is right. Every cause, in order, plus the retry schedule.

HubSpot webhook signature validation failing? v3 signs the URL and the timestamp too

HubSpot's X-HubSpot-Signature-v3 is an HMAC over method + URI + body + timestamp — so a proxy-rewritten URL, a re-serialized JSON batch, or 5 minutes of clock skew breaks it even when your code is right. Every cause, plus the v1/v2/v3 differences and the retry schedule.

AWS SNS subscription stuck in PendingConfirmation? How to actually confirm an HTTP/S endpoint

Why an SNS HTTP/S subscription stays PendingConfirmation: the text/plain Content-Type trap, the SubscribeURL you never saw, the 3 fast retries, and how to confirm with zero code.

Mailgun webhook signature verification — it doesn't sign the body at all

Mailgun's HMAC covers timestamp + token, not the payload — and the signature lives inside the body, not a header. Why your GitHub-style verifier never matches, which key to use, the 406 permanent-reject rule, and the 8-hour retry schedule.

SendGrid webhook signature verification — it's ECDSA, not HMAC

SendGrid's Signed Event Webhook uses public-key ECDSA (P-256), so every HMAC verifier fails by construction. Where the Verification Key lives, what exactly is signed, the DER-vs-raw signature trap, and how to check a real delivery in one minute.

Notion webhook verification — don't lose the one-time verification_token

Notion sends your webhook's verification_token exactly once, in a POST you have to be ready to catch. How the verify step works, what X-Notion-Signature actually signs, why events arrive late or out of order, and the at-most-once retry policy nobody expects.

Paddle webhook signature verification failing? The 5 causes, in order

Paddle Billing signs webhooks with Paddle-Signature: ts=…;h1=…, an HMAC-SHA256 over ts:rawBody keyed with your destination's pdl_ntfset_ secret. Why verification fails — wrong destination key, re-serialized body, the 5-second timestamp tolerance — and how to check a real delivery in one minute.

Zapier webhook not triggering? Catch Hook debugging in the right order

Fix a Zapier Catch Hook that never fires: the paid-plan requirement, the stale 200 after a Zap turns off, unsupported payload formats, Catch Hook vs Catch Raw Hook, throttling delays — and how to see exactly what your app is sending.

Make.com webhook not triggering? Read the response body first

Fix a Make (Integromat) custom webhook that never runs its scenario: the 200-Accepted-but-queued trap, scheduling vs Immediately, the webhook's own ON/OFF switch, data-structure 400s, missing headers, and the 5 MB limit — plus how to see what your app actually sends.

n8n webhook not working? Test URL vs Production URL, explained

Fix an n8n Webhook node that returns 404 "webhook is not registered" or silently never runs: the webhook-test vs webhook URL split, the 120-second test window, publish-to-register, method mismatch, the Only-Run-If silent 200, reverse-proxy localhost URLs, and the Cloud 100-second deadline.

Give your AI agent a webhook endpoint (MCP server)

Add one JSON line and your AI agent (Claude Code, Cursor, any MCP client) can create webhook capture URLs, read what arrived, and block until the next webhook lands — no auth, no SDK.

Zendesk webhook signature verification — the static test secret trap

Zendesk signs webhooks with base64 HMAC-SHA256 over an ISO-8601 timestamp + raw body — and test deliveries sign with a documented static secret while production uses a per-webhook one. The 5 verification failures in order, plus Zendesk's unusually narrow 409-only retry policy.

Asana webhook handshake failing? Echo X-Hook-Secret as a response header

Asana won't create your webhook until your endpoint echoes the X-Hook-Secret request header back as a response header — while your own create call is still pending. How the handshake works, why single-threaded dev servers deadlock on it, the zero-code way to pass it, and the 24-hour delete-on-failure rule.

Adyen HMAC signature verification failing — the hex-key trap and 6 other causes

Adyen signs extracted fields, not the raw body — base64 HMAC-SHA256 over 8 colon-joined values, keyed with a HEX-DECODED key. The verification failures in order (hex-chars-as-key is #1), the escaping myth, the Banking-webhook header variant, and Adyen's 30-day sequential retry queue.

Patreon webhook signature verification — it's HMAC-MD5, not SHA-256

Patreon signs webhooks with hex HMAC-MD5 over the raw body (X-Patreon-Signature) — the only major provider still on MD5, and WebCrypto runtimes can't compute it at all. The verification failures in order, the X-Patreon-Event discriminator trap, and the queue-and-replay + paused:true retry model.

Trello webhook not firing? Check the token, then the HEAD request

Trello webhooks die silently when the token that created them is revoked — the #1 cause of “worked for months, then stopped”. Plus the HEAD-must-200 creation trap behind “400: URL not reachable”, the 410-deletes-your-webhook rule, the 3-retry schedule, and the body+callbackURL HMAC-SHA1 signature.

Webflow webhook signature missing or failing? Check how the webhook was created

Webflow webhooks created in the site dashboard send no signature headers at all — the #1 reason x-webflow-signature is missing. Plus the milliseconds timestamp trap, the two different signing keys (OAuth client secret vs per-webhook secret), the docs' own JSON.stringify re-serialization bug, and the 3×-10-minute retry schedule.

Strava webhook “callback url not verifiable” — passing the hub.challenge validation

Why POST /push_subscriptions returns 400 “callback url: not verifiable”, how Strava’s GET hub.challenge validation actually works (JSON echo, not Meta’s plain-text echo), the 2-second deadline, the one-subscription-per-app rule, and what to do about Strava’s unsigned event deliveries.