Why Does My n8n Webhook Work in Test but Not in Production?

Short answer: your n8n webhook has two different addresses, and they behave like two different doors. The test address (/webhook-test/…) only works while the editor is waiting for you. The production address (/webhook/…) only works after the workflow is published. If your form, app or payment tool still holds the test address, it will work on your laptop and then go silent. Swap in the production address, publish the workflow, and look in the Executions tab instead of the canvas.

This is one of the most repeated questions on the n8n community forum. A September 2026 thread asks exactly this for a website form, and an October 2026 post calls it a trap. Many people still end up stuck, because the reason is not always the URL. Below is the full checklist, in the order I would try it.

n8n documentation table showing Test URL listens 120 seconds and Production URL works until the workflow is unpublished
n8n’s own docs: the test door closes after 120 seconds, the production door stays open while the workflow is published.

Why the same webhook works in one place and not the other

Picture a shop. The test URL is a side window the shopkeeper opens only when you knock on the editor and say "Listen for test event". It shuts again after about two minutes, and it shows you every customer on the canvas. The production URL is the front door. It opens when you publish, stays open as long as the workflow stays published, and nobody shows you the customers on the canvas. You have to look at the visitor book, which is the Executions tab.

Most "it does not work" cases come from this difference. Imagine a student in Hyderabad who builds a Google Form to n8n to WhatsApp flow, tests it with the test URL pasted into a form add-on, and sees data arrive. She closes the editor and sleeps, and next morning 40 form replies have gone nowhere. Nothing was broken. The add-on was knocking on a window that had closed.

Fix 1: Use the production URL and publish the workflow

  1. Open your workflow and double-click the Webhook node.
  2. At the top of the node panel, click the Production URL tab, not Test URL.
  3. Copy that address. It should contain /webhook/ and not /webhook-test/.
  4. Paste it into your website code, form tool or app, and remove the old test address everywhere.
  5. Publish the workflow from the top right of the editor. Older versions called this the Active switch.
  6. Trigger the real event once, then open the workflow’s Executions tab.
n8n Webhook node panel with Test URL and Production URL toggle
The two tabs inside the Webhook node. Whichever tab is selected decides which address you copy.

Tip: do not wait for the canvas

When a production run works, the canvas stays empty and the nodes do not light up. n8n’s docs say production data is shown only in the Executions tab. Many people think the workflow failed when it ran fine.

Fix 2: Match the HTTP method

A webhook node listens for one method by default, such as POST. If your form sends GET, or you open the address in a browser while the node expects POST, n8n answers with an error that says the webhook is not registered for that method. One forum user saw exactly this: the test run worked with one method, and the live one used another.

Check the HTTP Method field in the node, then check what your sender uses. If you need both, open the node Settings and turn on Allow Multiple HTTP Methods. You can test the node directly from a terminal with these two commands. Replace the address with your own production URL.

BASH
# POST with a small body
curl --request POST 'https://your-n8n.example.com/webhook/my-path' --data 'name=Ravi'

# GET, to see the 'not registered for GET' message if your node is POST-only
curl --request GET 'https://your-n8n.example.com/webhook/my-path'

If the POST creates a new row in Executions, n8n is fine and the problem is in the sender. If it does not, keep reading.

Fix 3: Check for a path conflict

n8n allows only one webhook for each combination of path and method. If you copied a workflow, the copy may fight the original for the same path. The docs say to unpublish the workflow that holds the path, or change the path or method on one of them. Copied workflows are a very common cause when you move from a practice workflow to the real one.

Fix 4: Look at the URL itself, mainly for self-hosted n8n

This is the one that catches students who run n8n on a cheap VPS or in Docker. If the production URL in the node starts with localhost or an internal port such as :5678, no outside service can reach it. n8n builds that address from its host, protocol and port settings, which breaks behind a reverse proxy like Nginx or Caddy.

The n8n docs say to set the public address yourself with the N8N_WEBHOOK_URL environment variable, set N8N_PROXY_HOPS to 1 when one proxy sits in front, and restart n8n. The older name WEBHOOK_URL is deprecated from n8n 2.35.0 but is still the name many tutorials show. In a Docker Compose file it looks like this:

YAML
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    environment:
      - N8N_WEBHOOK_URL=https://n8n.yourdomain.in/
      - N8N_PROXY_HOPS=1

After the restart, open the Webhook node again. The address shown should start with your own https domain. If it still shows localhost, the variable did not reach the container.

Tip: test from outside

Run the curl command from your mobile data, not from the same Wi-Fi as the server. A request that works from inside your home network can still fail from outside because of a firewall or DNS record.

Fix 5: If the request comes from a web page, check CORS

When a browser page calls your webhook with fetch or axios, the browser can block the request before n8n answers, and you only see a red error in the console. Open DevTools with F12, go to the Network tab, send the request once and read the status. A CORS message or a failed OPTIONS request means the browser stopped it.

In the Webhook node, click Add Option and pick Allowed Origins (CORS). The docs say the default is * (all origins) and you can give a comma-separated list of allowed URLs. Put your website’s address there. This option helps with simple cross-origin calls. A forum thread on a GET request that was blocked from localhost shows that CORS problems can still hide other causes, so always read the real error in the Network tab before changing things.

A calmer route for a website form is to send the form to your own backend first, and let the backend call n8n. The browser then never talks to n8n directly, and your webhook address stays out of the page source.

Quick table: what you see and what it means

What you seeLikely causeWhat to do
Works only while the editor is openTest URL in useSwitch to the Production URL and publish
No data on the canvas, but a row in ExecutionsNormal production behaviourRead the run in the Executions tab
Message about the webhook not registered for GET or POSTWrong HTTP methodMatch the method, or allow multiple methods
Error about path and method already in useTwo workflows share a pathUnpublish one, or change the path
Address shows localhost or :5678Public URL not setSet N8N_WEBHOOK_URL, restart n8n
Red CORS error in browser consoleBrowser blocked the callSet Allowed Origins (CORS) or call through your backend
403 errorIP allowlist or auth ruleCheck IP(s) Allowlist and Authentication in the node

If nothing above helps

  • Point your sender at a temporary request-catching page for a minute, so you can see whether it sends anything at all, and with which method and body.
  • Check the webhook credentials. If you set Basic, Header or JWT auth in the node, the sender must send the matching header. Without it the call is refused.
  • Check the IP(s) Allowlist option. The docs say addresses outside the list get a 403 error.
  • On n8n Cloud, remember that a webhook that takes longer than 100 seconds to answer fails with a 524 status. For slow jobs, answer fast and send the result later with a second webhook.
  • Use the Only Run If option with care. Requests that do not match its rule get a 200 reply but start no run, which looks like a silent failure.

Common mistakes

  • Leaving the test address in a live form, app or payment tool.
  • Saving the workflow and forgetting to publish it.
  • Expecting production runs to show on the canvas.
  • Opening a POST-only webhook address in the browser and thinking it is broken.
  • Copying a workflow and keeping the same webhook path.
  • Leaving localhost in the URL on a VPS.
  • Changing five settings at once, so you never learn which one fixed it.

Frequently Asked Questions

Why does my n8n webhook only work when I click Listen for test event?

Because you are using the test address. It listens only during a test session, and the docs list 120 seconds for it. Use the production address and publish the workflow for permanent use.

Where can I see data from a production webhook run?

In the workflow’s Executions tab. The editor canvas does not show production data.

Do I need a paid n8n plan for production webhooks?

I did not find a rule like that in the Webhook docs. The key steps are the production URL and a published workflow, on both Cloud and self-hosted n8n.

Can I change the webhook path to something short?

Yes. The Path field takes a custom value. Each path and method pair can be used by only one webhook, so pick a name that no other workflow uses.


Sources & Documentation

Checked on 3 November 2026. n8n menus change between versions, so confirm on the n8n docs for your version.

Written & Verified by Sampath Anji

Sampath Anji is a technology researcher, systems developer, and digital creator based in Telangana, India. He specializes in on-device AI architectures, autonomous agent workflows, high-throughput inference engines, and digital media production. Every tutorial on ISMARTANJI CREATIONS is grounded in code reproducibility, verified documentation, and transparent test environments. Read our full testing methodology on our About Us page, or submit feedback and code updates via our Contact Desk.

Leave a Comment