Sistava

n8n Webhook Node: How to Receive Data From Any Service

How-to — — by Mahmoud Zalt

Use the n8n Webhook node properly: test URL versus production URL, authentication options, response modes, node options, and the payload size limit.

A webhook is the difference between a workflow that checks and a workflow that is told. Instead of polling a service every five minutes to see whether anything happened, you hand that service a URL and it calls you the moment something does.

In n8n that URL comes from the Webhook node, which sits at the very start of a workflow as its trigger. The node itself is simple. The parts that cost people time are the two URLs, the authentication choice, and deciding what the caller gets back, so this guide spends its time there.

What does the n8n Webhook node do?

It listens on a URL and starts your workflow when something calls it. n8n's documentation lists the HTTP methods it accepts: DELETE, GET, HEAD, PATCH, POST and PUT. Most integrations will send you a POST with a JSON body.

The Path parameter holds a randomly generated value by default, and you can replace it with something you choose. n8n also documents route parameters, so a path can carry variables in forms such as /:variable, /path/:variable, or /:variable1/:variable2. That is useful when one workflow should serve several related callers.

What is the difference between the test URL and the production URL?

They are two addresses for the same node, and they become active at different moments. n8n's documentation says the node displays both URLs at the top of the node panel, with a toggle to switch which one is shown.

The test URL is registered when you select Listen for Test Event, or when you execute the workflow while it is not active. Its whole purpose is visibility: n8n displays the incoming data right there in the editor, so you can see the exact shape of what the caller sent before you build anything against it.

The production URL is registered when the workflow is published. It does not display data in the editor, and n8n's documentation points you at the workflow's Executions tab to see what arrived. That is not a limitation, it is the point: a live webhook should not depend on anyone having the editor open.

Setting up a webhook, in order

  1. Add the Webhook node as your trigger — It goes at the start of the workflow. Everything else hangs off it.
  2. Choose the HTTP method — Match whatever the calling service sends. n8n supports DELETE, GET, HEAD, PATCH, POST and PUT.
  3. Set the path, or keep the generated one — The default path is random, which is fine. Set your own when you want a readable URL or route parameters.
  4. Listen for a real test event — Select Listen for Test Event, then have the real service fire, or send your own request. Look at the data that lands in the editor.
  5. Build the rest of the workflow against real data — Now that you can see the actual payload shape, write your expressions against fields that genuinely exist.
  6. Choose the authentication and response settings — Decide who is allowed to call this and what they get back. Both are covered below.
  7. Publish, then test the production URL — Publishing is what registers the production endpoint. Send one real request and confirm it in the Executions tab.

That is a plain curl request, not anything n8n-specific, and it is the fastest way to prove an endpoint is reachable before you go looking for problems in the calling service. Send it once against the test URL and once against the production URL. If one works and the other does not, you have already found your answer.

How do you stop anyone from calling your webhook?

With the node's Authentication parameter, which n8n documents as offering Basic auth, Header auth, JWT auth, or None. A webhook URL is a public address, so None means anyone who learns the URL can start your workflow.

Header auth is the option most third-party services can actually use, since almost every integration lets you add a custom header to its outgoing calls. JWT auth is there when the caller already signs its requests. Basic auth works, and is best kept to internal callers you control.

n8n also documents an IP(s) Allowlist among the node's options, which is worth stacking on top of authentication when the caller has stable addresses. Two independent checks on an endpoint that can start automated work is not paranoia, it is proportionate.

What does the caller get back?

Whatever you choose in the Respond parameter, and the four documented options behave quite differently. This matters because some services will retry, or mark your endpoint unhealthy, if the response is not what they expect.

Respond optionWhat the caller receives
ImmediatelyThe response code and a Workflow got started message, before the workflow finishes
When Last Node FinishesThe response code and the data output by the last node
Using 'Respond to Webhook' NodeWhatever that node is configured to send, wherever you place it in the flow
Streaming responseData streamed in real time, which n8n notes requires compatible nodes

Pick Immediately when the caller only needs an acknowledgement and your workflow might take a while. Pick the Respond to Webhook node when the caller genuinely needs a result, because it lets you decide the exact moment and content of the reply rather than inheriting whatever the last node produced.

n8n additionally documents a Response Code parameter for choosing which HTTP status you send, and a Response Data setting offering All Entries, First Entry JSON, First Entry Binary, or No Response Body. If you are building against a service with strict expectations, those are the two dials to reach for.

Set-up work like this is exactly what we removed at Sistava. Rather than choosing a method, a path, an auth scheme and a response mode before anything useful happens, you hire an AI Employee and tell it in plain English what you want handled. It has the tools connected already, it asks you when it is unsure, and there is no endpoint for you to secure.

Which webhook options are actually worth knowing?

The Options section of the node is where several real problems get solved, and most people never open it. n8n documents the following among them.

Only Run If and Ignore Bots deserve a second look if you are on a plan where executions are counted. Every request that reaches an unfiltered webhook is an execution, including the ones from scanners that found your URL by accident.

How big a payload can an n8n webhook accept?

n8n documents a maximum webhook payload size of 16MB, configurable on self-hosted instances through the N8N_PAYLOAD_SIZE_MAX environment variable. On managed hosting you work within whatever the platform sets.

If you are near that ceiling, the fix is usually design rather than configuration. Have the caller send a reference and let the workflow fetch the object, which keeps the request small, makes retries cheap, and avoids a failure mode that only appears on your largest and most important payloads.

What trips people up with n8n webhooks?

None of these are faults in n8n. The Webhook node exposes real HTTP honestly, including the parts that are fiddly, and that is the right call for a tool built for people who want control. The cost is simply that the contract is yours to define and yours to maintain when the other side changes.

If the reason you reached for a webhook was that something needed to happen when an event occurred, and not that you wanted to own an HTTP endpoint, that is the question Sistava answers. You hire an AI Employee, describe the trigger and the outcome in a sentence, and there is no path, auth scheme or response mode in between.

FAQ

Why is my n8n webhook not working?

The most common cause is that the workflow is not published. n8n registers the production webhook URL when the workflow is published, and registers the test URL only when you select Listen for Test Event or execute an inactive workflow. Confirm which of the two URLs you gave the calling service, then confirm the workflow's publish state.

What is the difference between the test and production webhook URLs in n8n?

The test URL is for building. It is registered when you select Listen for Test Event or run an inactive workflow, and n8n shows the incoming data in the editor. The production URL is registered when the workflow is published, does not show data in the editor, and its traffic is visible in the workflow's Executions tab instead.

Which HTTP methods does the n8n Webhook node support?

n8n's documentation lists DELETE, GET, HEAD, PATCH, POST and PUT. Set the node's method to match whatever the calling service actually sends, since a mismatch produces a request that never reaches your workflow.

How do I secure an n8n webhook?

The node's Authentication parameter offers Basic auth, Header auth, JWT auth, or None. Header auth is usually the most practical with third-party services. n8n also documents an IP(s) Allowlist option, and Raw Body if you need the untouched payload to verify a signature.

How do I send a custom response back from an n8n webhook?

Set the Respond parameter to use the Respond to Webhook node, which n8n documents separately, and place that node wherever in the flow you want the reply sent from. The alternatives are responding Immediately with a workflow started message, responding when the last node finishes, or streaming.

What is the maximum payload size for an n8n webhook?

n8n documents a 16MB maximum, configurable on self-hosted instances via the N8N_PAYLOAD_SIZE_MAX environment variable. If you are close to that, have the caller send a reference and let the workflow fetch the object rather than pushing large bodies through the endpoint.

Sources