n8n webhook: test URL vs production URL, HTTP Request and Respond to Webhook

n8n gives each Webhook node a test URL, which listens for 120 seconds after you click Listen for test event, and a production URL that works once the workflow is published. To capture a real payload first, use a free webhooks.sh bin: no signup, 48 hours, 100 requests a day.

An n8n webhook test URL only listens for 120 seconds after you click Listen for test event and shows the incoming data right in the editor, while the production URL only works once the workflow is published. This page covers how to capture a provider's real payload in a free bin and replay it to n8n, how to inspect what the HTTP Request node sends, and the response settings and timeouts that trip people up.

Test URL vs production URL

You use the n8n Webhook node test URL while building so incoming data shows up directly in the editor, and switch to the n8n webhook production URL when you publish the workflow and give the address to your provider. The classic mistake is sending a request to the test URL when nobody clicked Listen for test event or after the 120 seconds ran out: the workflow doesn't start, and the same happens to a provider left pointing at the test URL. Also keep in mind that n8n only allows one webhook per path and HTTP method combination.

DetailTest URLProduction URL
Default path/webhook-test/<path>/webhook/<path>
Starts listeningListen for test event or Execute workflowWhen you publish the workflow
Listens for120 secondsUntil the workflow is unpublished
Data shown in the editorYesNo, open the Executions tab

Capture a provider's payload before you build

  1. Create a free bin in your browser at view.webhooks.page or run curl -X POST https://webhooks.sh/v1/bins.
  2. Paste the bin's ingest URL into your provider as the webhook URL, using any path you want such as https://<bin>.webhooks.page/n8n.
  3. Trigger a real event in the provider and save the captured JSON body from the bin viewer as payload.json.
  4. Click Listen for test event in n8n and replay the file with curl to your n8n test URL within 120 seconds so the editor gets the real payload.

You can replay payload.json as often as you like instead of re-triggering real events each time the listen window closes. The replay only carries the headers you pass to curl, so add any header your workflow reads.

# 1. Create a free bin; give its ingest_url to the provider
curl -X POST https://webhooks.sh/v1/bins

# 2. Save the captured body as payload.json, click Listen for
#    test event in n8n, then replay it within 120 seconds
curl -X POST "https://<your-n8n>/webhook-test/<path>" \
  -H "Content-Type: application/json" \
  -d @payload.json

See exactly what the HTTP Request node sends

Set the HTTP Request node's URL to https://<bin>.webhooks.page/n8n and execute the step: the bin viewer shows the method, headers and body exactly as n8n sent them.

  • Check the Content-Type header that your Body Content Type setting produced.
  • Notice that header names arrive in lowercase because Lowercase Headers is turned on by default.
  • Check the file name on a Form-Data upload, where n8n takes the name from the binary data and sends file if none is set.
  • Watch out for n8n Binary File, which sends the file as the whole request body without a multipart envelope, which is why APIs expecting multipart/form-data answer 415.

Two limits apply: headers whose names contain authorization, cookie, key, token or secret show as redacted, so you see that they arrived but not their values, and the bin always answers 200 with a small JSON body, so it can't stand in for an API whose response the next node needs.

Body Content TypeContent-Type the bin will show
Form Urlencodedapplication/x-www-form-urlencoded
Form-Datamultipart/form-data
JSONapplication/json
n8n Binary FileThe file's stored MIME type, or application/octet-stream
RawWhatever you enter as Content Type

Responses, timeouts and limits

The Webhook node's Respond setting decides how n8n answers: Immediately returns Workflow got started, When Last Node Finishes returns the last node's output, Using 'Respond to Webhook' Node lets that node shape the reply with JSON, Text, Redirect, Binary File or another Respond With option, and Streaming streams results back.

The Respond to Webhook node runs once with the first incoming item, and a second one is ignored. An error before it runs returns a 500; a workflow that finishes without reaching it returns a standard message with a 200. On n8n Cloud, Cloudflare ends any webhook that doesn't answer within 100 seconds with a 524, so long jobs should respond right away and do the heavy work after.

SettingValueNotes
Max payload16MBN8N_PAYLOAD_SIZE_MAX on self-hosted
n8n Cloud response time100 secondsThen the caller gets a 524
Webhooks per path and method1Change the path or method to add another
MethodsDELETE, GET, HEAD, PATCH, POST, PUTAllow Multiple HTTP Methods adds one output per method
IP(s) AllowlistEmpty allows all addressesAddresses not listed get a 403

Self-hosted n8n, proxies and localhost

Providers can't reach n8n on localhost or a private network, and in Docker, localhost inside the container means the container itself (use host.docker.internal to reach services on the host). When n8n sits behind a reverse proxy that serves port 443 in front of internal port 5678, set N8N_WEBHOOK_URL so the editor displays and registers your public URL, and set N8N_PROXY_HOPS=1 so IP(s) Allowlist checks see the real client address instead of the proxy (N8N_WEBHOOK_URL replaces WEBHOOK_URL, which is deprecated from n8n 2.35.0).

For n8n on a laptop, the capture-and-replay steps above work without exposing your machine, or Solo's wsh CLI (wsh listen <endpoint> --to localhost:3000) relays live deliveries from a persistent endpoint to a local port. The CLI doesn't pass n8n's response back to the sender; see the guide on testing webhooks locally.

Keep the test URL or go persistent

A free bin lasts 48 hours, takes 100 requests a day and accepts bodies up to 100KB: enough for grabbing payloads and checking node output, not for production traffic. To keep the URL, claim the bin with a free Google sign-in, which stops the timer and keeps 30 days of history.

Solo ($12 a month) adds named endpoints on webhooks.host with 250,000 requests a month, 5MB bodies, forwarding to up to 3 verified HTTPS URLs, replay and the wsh CLI; see pricing.

FAQ

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

The test URL only listens for 120 seconds after you click Listen for test event and displays the incoming payload directly in the editor. The production URL stays active once you publish the workflow, and you inspect its runs in the Executions tab instead of the editor.

Why is my n8n webhook test URL not working?

Usually nobody clicked Listen for test event, the 120-second listen window ran out, or the request's HTTP method or path doesn't match the node settings. The test URL only accepts requests while the editor is actively waiting for a test event.

How do I see what the n8n HTTP Request node sends?

Point the node's URL at a free bin like https://<bin>.webhooks.page/n8n and execute the step. The bin viewer shows the exact method, headers, and body that arrived, though values for headers containing authorization, cookie, key, token, or secret are redacted.

What is the maximum payload size for an n8n webhook?

16MB by default. Self-hosted n8n can change it with the N8N_PAYLOAD_SIZE_MAX environment variable.

Why does my n8n Cloud webhook return a 524 error?

Your workflow took longer than 100 seconds to send a response, so Cloudflare closed the connection with a 524 status code. Set the webhook to respond immediately and finish the work afterward, or use one webhook to start the job and a second webhook to check its status.

Can I test n8n webhooks on localhost without a tunnel?

Partly. Capture the provider's webhook in a free bin and replay the saved JSON to your local test URL with curl. Live deliveries to localhost need a tunnel or a relay such as the wsh CLI on Solo.

Last updated

Try it in 10 seconds.

Create a free bin at view.webhooks.page — no signup, no install. Point your sender at the URL and watch requests land live. Bins expire after 48 hours.