How to Fix Webhook 404 "Not Registered" Error in n8n (Step-by-Step)

🔴 You've created a webhook workflow in n8n, copied the production URL, and sent a test request. But instead of data flowing through, you get back a cold HTTP 404 error with the message "Not Registered".

I've seen this error hundreds of times in the n8n community forum and on my own servers. The good news? It's almost always one of four simple things. In this guide, I'll walk you through each fix – from the most common (forgetting to activate the workflow) to the more subtle (Docker networking issues).

Why Does n8n Return "404 Not Registered"?

Unlike a traditional web server that has static endpoints, n8n only registers webhook URLs when a workflow is active. When you create a webhook node, n8n generates a unique path like /webhook/your-path. But that path only becomes live when you flip the workflow toggle to "Active".

Think of it this way: creating a webhook node is like building a door. Activating the workflow is like unlocking that door. Without the key (activation), anyone who knocks gets a "nobody's home" response – that's your 404.

🧠
Key insight: n8n's webhook registration is dynamic. Each time you activate a workflow, n8n tells its internal router "hey, this path is now live". When you deactivate, it unregisters the path.
n8n webhook 404 not registered error
Fig 1. The dreaded 404 "Not Registered" error – your webhook endpoint isn't live yet.

Fix #1: Activate Your Workflow (The Most Common Fix)

I can't tell you how many times I've debugged this for 30 minutes only to realize the workflow was inactive. It's embarassing, but it happens to everyone.

In the n8n editor, look at the top‑right corner. You'll see a toggle switch. If it's gray and says "Inactive", click it. It should turn green and say "Active". That's it. That's usually the entire fix.

Pro tip: After activating, wait 2-3 seconds for n8n to register the webhook. Then try your test request again.
n8n workflow activate toggle
Fig 2. The activation toggle – make sure it says "Active" (green) not "Inactive" (gray).

Fix #2: Check Your Webhook Path and HTTP Method

When you add a Webhook node in n8n, you set two critical fields:

  • HTTP Method – usually POST, GET, or PUT
  • Path – anything you want, like /incoming-data or /shopify-order

The full webhook URL becomes: https://your-n8n.com/webhook/YOUR-PATH. If you send a request to a different path (even missing a slash), n8n won't recognize it and will return 404.

Also, if your webhook node expects POST but you send GET, n8n won't match it. Double‑check both.

⚠️
Common mistake: People often add an extra slash, like //webhook//data instead of /webhook/data. Copy the URL exactly from the webhook node's "Production URL" field – don't type it manually.
n8n webhook node settings showing path and method
Fig 3. Webhook node settings – verify your path and HTTP method match what you're sending.

Fix #3: Production URL vs. Test URL

n8n gives you two different URLs for each webhook node:

  • Test URL – only works while you're editing the workflow (workflow doesn't need to be active). Used for testing within the editor.
  • Production URL – works only when the workflow is active. This is what external apps should call.

If you copy the Test URL and try to use it after closing the editor, it will return 404. Always use the Production URL for live integrations.

📋
How to get the Production URL: In the webhook node, click the copy icon next to "Production URL". It will look like https://your-n8n.com/webhook/your-path.
n8n webhook production URL vs test URL
Fig 4. Always use the Production URL – the Test URL only works inside the editor.

Fix #4: Nginx Reverse Proxy Configuration (For Self-Hosted n8n)

If you're running n8n behind Nginx (as you should for HTTPS), a misconfigured proxy can also cause 404 errors. The proxy needs to forward the original Host header and the correct path.

Here's a minimal working Nginx configuration for n8n:

/etc/nginx/sites-available/n8n
server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    location / {
        proxy_pass http://localhost:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

The critical lines are proxy_set_header Host $host; and the proxy_pass pointing to the correct port (5678 is n8n's default). After changing Nginx config, run sudo nginx -t then sudo systemctl reload nginx.

Testing Your Webhook After Fixing

Once you've applied the fixes, test your webhook using cURL or a tool like Postman:

cURL test
curl -X POST https://your-n8n.com/webhook/incoming-data \
  -H "Content-Type: application/json" \
  -d '{"test": "Hello from TriggerWorkflow", "user": "reader"}'

If successful, you'll see your workflow execute. You can check the n8n execution log (bottom of the editor) to confirm.

🎉
Fixed! Your webhook is now registered and responding. It will work with any external service – Shopify, Typeform, Google Forms, or custom apps.

Frequently Asked Questions

Do I need to reactivate the workflow after changing the webhook path?
Yes. Any time you change the webhook node's path or method, save the workflow, then deactivate and reactivate it. This re‑registers the webhook with the new path.
Can I have multiple webhook nodes in one workflow?
Yes, each webhook node gets its own unique path. They all work simultaneously when the workflow is active.
Why does my webhook work in test mode but not production?
You're likely using the Test URL. Copy the Production URL instead – it's a different link. Also ensure the workflow is activated.
What about the "webhook URL shows localhost" error from Article #3?
That's a different issue (environment variables). Check our previous guide for that fix.

What's Coming Next on TriggerWorkflow

TriggerWorkflow Team
We've debugged this error on dozens of n8n instances. Follow these steps and you'll be up and running in minutes.

Post a Comment

Previous Post Next Post