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.
| Detail | Test URL | Production URL |
|---|---|---|
| Default path | /webhook-test/<path> | /webhook/<path> |
| Starts listening | Listen for test event or Execute workflow | When you publish the workflow |
| Listens for | 120 seconds | Until the workflow is unpublished |
| Data shown in the editor | Yes | No, open the Executions tab |
Capture a provider's payload before you build
- Create a free bin in your browser at view.webhooks.page or run
curl -X POST https://webhooks.sh/v1/bins. - 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. - Trigger a real event in the provider and save the captured JSON body from the bin viewer as
payload.json. - Click
Listen for test eventin 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-Typeheader that yourBody Content Typesetting produced. - Notice that header names arrive in lowercase because
Lowercase Headersis turned on by default. - Check the file name on a
Form-Dataupload, where n8n takes the name from the binary data and sendsfileif 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 expectingmultipart/form-dataanswer415.
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 Type | Content-Type the bin will show |
|---|---|
| Form Urlencoded | application/x-www-form-urlencoded |
| Form-Data | multipart/form-data |
| JSON | application/json |
| n8n Binary File | The file's stored MIME type, or application/octet-stream |
| Raw | Whatever 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.
| Setting | Value | Notes |
|---|---|---|
| Max payload | 16MB | N8N_PAYLOAD_SIZE_MAX on self-hosted |
| n8n Cloud response time | 100 seconds | Then the caller gets a 524 |
| Webhooks per path and method | 1 | Change the path or method to add another |
| Methods | DELETE, GET, HEAD, PATCH, POST, PUT | Allow Multiple HTTP Methods adds one output per method |
| IP(s) Allowlist | Empty allows all addresses | Addresses 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.