Requex.me LogoRequex.me

Documentation

Browse by section

Keep all guides, tool docs, automation recipes, and comparison pages in one navigable place.

Docs Home
Docs

Foundation docs for getting started fast, understanding key terms, and tracking what has changed.

Guides

Start with fundamentals, then move into provider-specific webhook testing and production hardening.

Tool Docs

These pages explain what each tool does, when to use it, and how it fits into a webhook debugging workflow.

Automation Docs

Use these setup guides when you want forwarding rules, custom responses, security checks, or multi-destination fanout.

Compare

Use these pages to compare developer workflows, pricing tradeoffs, and feature differences between webhook tools.

Quick Fix

The most common cause: you are sending to the test URL but the workflow is not in "Listen for test event" mode. Test URLs only fire once and only while actively listening. Switch to the production URL and activate the workflow — or use Requex.me as a capture layer that always records, regardless of n8n state.

n8n Webhook Not Working? 9 Causes, 9 Fixes

If your n8n Webhook trigger fires in test mode but fails in production, silently stops working, or never fires at all, one of these nine issues is almost certainly the cause.

Last updated: April 2026 · 10 min read

1. Test URL vs Production URL Confusion

n8n generates two URLs per Webhook node: a /webhook-test/ URL and a /webhook/ URL. They behave differently:

  • Test URL: fires once, only while you have "Listen for test event" active. The next request returns 404.
  • Production URL: requires the workflow to be toggled to "Active". Only fires when active.

Fix: check which URL is in your webhook sender. If it contains webhook-test, switch it to the production URL and activate the workflow.

2. Workflow Is Inactive

Production webhooks only fire when the workflow toggle in the top-right is set to Active. A deactivated workflow returns 404 on the production URL.

Fix: toggle Active. Watch for the green dot. If the toggle fails to switch, check that the workflow has no validation errors — an invalid node config blocks activation.

3. Wrong HTTP Method

The Webhook node has an HTTP Method field. If it is set to POST and your sender does GET, you get a 404 or 405. Many webhook providers (Stripe, Shopify) always POST, but some health checks use GET.

Fix: either set the method to match your sender, or use "Any" to accept all methods. Verify with a simple curl test: curl -X POST your-webhook-url

4. Authentication Blocking the Request

If you enabled authentication on the Webhook node (Basic Auth, Header Auth, JWT), requests without the right credentials get 401 or 403. Your sender may not support that scheme.

Fix: in n8n's execution log, look for a 4xx status. If you see 401/403, either disable auth or configure your sender to include the credential. For HMAC-signed webhooks (Stripe, Shopify), use a separate HMAC verify step inside the workflow instead of Webhook node auth.

5. Self-Hosted Reverse Proxy Issues

If you self-host n8n behind nginx, Caddy, or Traefik, the reverse proxy must pass the full request path. A common misconfig strips the /webhook prefix or terminates the connection too early.

Other common proxy issues:

  • Body size limit too small — large JSON payloads get 413
  • Read timeout shorter than workflow duration — long workflows 504
  • Missing X-Forwarded-For header breaks IP-based auth

Fix: bypass the proxy temporarily by hitting n8n directly on its container port. If that works, the issue is in your proxy config.

6. Environment Variable WEBHOOK_URL Mismatch

Self-hosted n8n uses the WEBHOOK_URL env var to generate the URLs shown in the UI. If this points to http://localhost in a Docker setup, the UI shows localhost URLs that are unreachable from outside.

Fix: set WEBHOOK_URL=https://your-domain.com/ and restart n8n. The URLs in the UI will regenerate.

7. Queue Mode Not Processing Webhooks

If you enabled queue mode (main + worker processes with Redis), webhooks are accepted by main but executed by workers. If no worker is running, the queue fills silently.

Fix: check worker logs for Redis connection errors. Run docker compose ps to confirm the worker container is running. Look at the Redis queue length — if it grows, no worker is consuming it.

8. Payload Shape Mismatch

The workflow accepts the webhook but "nothing happens downstream." Check the execution log: the trigger fired, but a downstream IF or Set node failed silently because the payload structure differs from what you assumed.

Fix: open the execution, click the Webhook node, inspect the output JSON. Compare to the expressions in downstream nodes — for example, {{ $json.event.type }} will be undefined if the actual shape is {{ $json.type }}.

9. Sender Retries Being Silently Dropped

Stripe, GitHub, and Shopify retry on 5xx responses. If your n8n workflow crashes partway and returns 500, the sender retries — doubling the work. n8n does not deduplicate by default.

Fix: add a hash-based dedup step near the top of the workflow. Or switch to a tool with a built-in dedup node — see Requex's Webhook Dedup node.

Debugging Checklist

  1. Confirm the URL — is it /webhook/ (prod) or /webhook-test/ (one-shot)?
  2. Confirm the workflow is Active
  3. Send a curl test — does n8n record the execution?
  4. If nothing is recorded, check nginx/proxy logs first
  5. If recorded but failed, open the execution and inspect the Webhook node's output JSON
  6. For self-hosted: check WEBHOOK_URL env var
  7. For queue mode: check worker container and Redis queue length

Use Requex.me as a Capture Layer

One trick for debugging: send your webhook to Requex.me first, confirm the payload is what you expect, then forward it to n8n. Requex records every request regardless of workflow state, so you can tell whether the issue is in the sender or in n8n.

You can also use Requex forwarding rules: Requex receives the request, stores it, and forwards to n8n. If Requex has the request but n8n does not, the problem is on the n8n side.

FAQ

My webhook fired once and stopped. Why?

You are on the test URL. Test URLs are one-shot — they fire once, then deactivate. Switch to the production URL and activate the workflow.

n8n Cloud works but self-hosted does not. Why?

Almost always a reverse proxy or WEBHOOK_URL env var issue. Bypass the proxy to confirm; set the env var to your public HTTPS URL; restart.

How do I test without an external sender?

Use curl: curl -X POST -H "Content-Type: application/json" -d '{"test":1}' YOUR_URL. Check the n8n execution log immediately.

What returns 404 vs 500 vs nothing?

404 usually means the workflow is inactive or the URL is wrong. 500 means the workflow ran and errored inside. Nothing at all usually means the request never reached n8n — check your proxy.

Related Resources