To use webhooks in n8n, add the Webhook node as your workflow trigger, set the HTTP method and path, then call the Test URL while you build and switch to the Production URL once you publish the workflow. The node can also send the workflow's result back to the caller, so it works like a small API endpoint.
What the Webhook node gives you
Plenty of the apps a small business uses can send a webhook but have no dedicated trigger in n8n. That's exactly the gap the Webhook node fills. It's a trigger node that creates a webhook to receive data from an app or service when something happens, and that data starts your workflow.
It can also return the data generated at the end of the workflow, so the caller gets an answer back. That turns a workflow into something that behaves like a small API endpoint. If you're hazy on how webhooks differ from regular API calls, my explainer on webhooks versus APIs sets out the basics.
Building a webhook workflow, start to finish
1. Add the trigger
Add the Webhook node as the first node of a new workflow. It accepts DELETE, GET, HEAD, PATCH, POST and PUT, so pick the HTTP method the sending service uses.
2. Set a path you'll recognise
The Path field holds a randomly generated path by default, which avoids clashes between webhook nodes. If you want a stable, readable address, set your own. You can include route parameters such as /:variable or /path/:variable to pick up values from the URL itself.
3. Lock it down
Choose an authentication method: Basic auth, Header auth, JWT auth, n8n User Auth (OAuth2) or None. Header auth is a simple choice when the sending service lets you add a custom header. You can also use the IP(s) Allowlist option to limit who can call the webhook, and anything from an address outside the list gets a 403 error.
4. Decide how it answers
Under Respond you've got four options: Immediately, which returns 'Workflow got started'; When Last Node Finishes; Using 'Respond to Webhook' Node; and Streaming response. If you pick When Last Node Finishes, the Response Data setting lets you choose All Entries, First Entry JSON, First Entry Binary or No Response Body.
5. Test it
Select Listen for Test Event, then call the Test URL from the service or with a test request. The incoming data appears in the workflow so you can build the next steps against real fields.
6. Go live and check the runs
Paste the Production URL into the sending service and publish the workflow. From then on, check runs in the workflow's Executions tab.
Test URL versus Production URL
The node shows two webhook URLs at the top of its panel. A test webhook registers when you select Listen for Test Event or Execute workflow while the workflow is inactive, and the data shows up in the editor. A production webhook registers only when you publish the workflow, and it doesn't display data in the editor at all.
Why a working webhook can look dead after publishing
n8n Docs on the Webhook node explain the behaviour that confuses most people. Because the Production URL doesn't show data in the editor and only works once the workflow is published, a webhook that worked perfectly in testing can look like it's doing nothing in production. It isn't broken. Open the Executions tab and you'll see the runs there.
Two more things to watch. If the sending service still has the Test URL pasted in, nothing will reach the published workflow. And there's a 16MB maximum payload, which self-hosters can change with the N8N_PAYLOAD_SIZE_MAX environment variable.
Want AI doing the heavy lifting in your marketing?
I build the systems that handle the boring 80 percent, so you get your week back. Done properly, with the human kept in.
Options worth switching on
- Only Run If takes an expression against the request. Requests that don't match get a 200 response without creating an execution, which keeps noise out of your logs.
- Ignore Bots helps when link previews and crawlers hit your URL.
- Allowed Origins (CORS), Raw Body, Binary Property and Response Headers cover browser calls, unparsed bodies, files and custom replies.
If you send HTML back, note that since n8n 1.103.0 HTML responses to webhooks are wrapped in a sandboxed iframe. Relative URLs and top-level window access fail, so use absolute URLs.
Webhooks in other tools
Zapier offers Webhooks by Zapier, which triggers when a POST, PUT or GET request hits a Zapier URL and gives you the request body unparsed, up to 2 MB, plus headers. My comparison of n8n against Zapier covers the bigger differences.
Freshdesk automation rules can run a Trigger Webhook action on ticket creation or update, which is a handy way to push support data into a CRM.
The advice I'd give on your first n8n webhook
Set your own path, add Header auth from day one, and test with the Test URL until the data looks right. Then swap the Production URL into the sending service, publish, and check the Executions tab rather than the editor. If you'd rather hand the build to someone, my guide to hiring an automation specialist explains what to look for.
Want your tool on this list? Featured spots and reviews here are paid partnerships. Here's how to partner with me.
Frequently asked questions
What is the difference between the test and production webhook URL in n8n?
The Test URL works after you select Listen for Test Event and shows data in the editor. The Production URL registers when you publish the workflow, and its runs appear in the Executions tab.
Can an n8n webhook send data back to the caller?
Yes. Choose When Last Node Finishes or Using 'Respond to Webhook' Node under Respond.
How big can a webhook payload be?
The maximum is 16MB, and self-hosted users can change it with N8N_PAYLOAD_SIZE_MAX.
How do I secure an n8n webhook?
Use Basic, Header, JWT or n8n User Auth (OAuth2), and restrict callers with the IP(s) Allowlist if you need to. Blocked addresses get a 403.
Which HTTP methods does the Webhook node accept?
DELETE, GET, HEAD, PATCH, POST and PUT.