🔴 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.
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.
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-dataor/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.
//webhook//data instead of /webhook/data. Copy the URL exactly from the webhook node's "Production URL" field – don't type it manually.
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.
https://your-n8n.com/webhook/your-path.
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:
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 -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.