Requex.me Logo
Requex.me

How to Test n8n Webhooks — Debug Trigger Nodes

n8n's Webhook node is a powerful trigger — but testing it in real environments can be frustrating. This guide shows you how to capture, inspect, and debug n8n webhook payloads before your workflow goes live.

Last updated: March 2026 • 10 min read

The n8n Webhook Node: Trigger vs Respond

n8n's Webhook node has two distinct modes:

Webhook (Trigger node)

Receives an incoming HTTP request and starts the workflow. This is the entry point — n8n generates a unique URL for you. The node outputs the full request: body, headers, query params, and method.

Respond to Webhook node

Sends a response back to the caller — useful when the webhook sender (e.g., Stripe) expects a specific response body or when building webhook-based APIs that return data to the caller.

The most common testing challenge is the Trigger node: n8n generates a test URL and a separate production URL, and they behave differently. This guide covers both.

Setting Up Requex.me as Your n8n Test URL

Before wiring your webhook source to n8n, use Requex.me to capture the raw payload first. This lets you understand the exact data structure before building your n8n workflow.

1

Get a Requex capture URL

Visit requex.me — your unique URL is generated instantly. Copy it.

2

Paste into your webhook source

In the service that will trigger your n8n workflow (Stripe, GitHub, your app), set the webhook URL to your Requex URL.

3

Trigger the event

Fire a test event. The full payload appears in Requex in real-time — inspect the JSON structure, field names, and header values.

4

Build your n8n workflow with real field names

Now that you know the exact field names and structure, configure your n8n Webhook node and downstream nodes with confidence. Replace the webhook URL with the n8n test URL when ready.

# Send a test payload directly to your Requex URL (simulating your webhook source)
curl -X POST https://requex.me/hook/YOUR-WEBHOOK-ID \
  -H "Content-Type: application/json" \
  -d '{"event": "user.signed_up", "user_id": 4521, "email": "[email protected]", "plan": "pro"}'

Reading Captured Payload Back in n8n Expressions

Once you know your payload structure from Requex inspection, you can write n8n expressions correctly:

For a payload like {"event": "user.signed_up", "user_id": 4521, "email": "[email protected]"}:

{{ $json.body.email }}[email protected]
{{ $json.body.user_id }}→ 4521
{{ $json.body.event }}→ user.signed_up
{{ $json.headers["content-type"] }}→ application/json

⚠️ n8n data path note: The Webhook node wraps the incoming request. Body fields are accessed via $json.body.fieldName, headers via $json.headers.headername (lowercase), and query params via $json.query.paramName.

Test vs Production Webhook URL in n8n

n8n generates two distinct URLs for each Webhook node:

URL typeWhen to useBehaviour
Test URLDuring workflow development in n8n editorOnly active while the editor is open and "listening". Single-use — captures one request then stops.
Production URLAfter activating the workflowAlways active when the workflow is activated. Processes every incoming request.

💡 Best practice: Always use the test URL during development. Never point production services at n8n's test URL — it only captures a single request and requires the editor to be open.

Common n8n Webhook Errors

Trigger not firing / no data captured

Most likely causes: (1) You're sending to the test URL but the editor isn't in listening mode — click "Listen for Test Event" first. (2) Your n8n instance URL isn't publicly accessible — use Requex.me to verify the source is sending correctly, then check your n8n instance networking.

401 Unauthorized

Your Webhook node has authentication enabled (Basic Auth or Header Auth) but the sender isn't including the expected credentials. Check the Webhook node authentication settings and update the sender accordingly.

Workflow not active (production URL returns 404)

The production URL only works when the workflow is activated. Go to the workflow list, find your workflow, and toggle it to "Active". The production URL will then accept requests.

Expression error: Cannot read property of undefined

The field path in your n8n expression doesn't match the actual payload structure. Use Requex.me to capture the real payload and verify the exact field names and nesting before writing expressions.

Quick Reference cURL Commands

Send a test payload to n8n test URL:

curl -X POST https://your-n8n-instance.com/webhook-test/YOUR-WEBHOOK-ID \
  -H "Content-Type: application/json" \
  -d '{"event": "test.event", "data": {"key": "value"}}'

Send to production URL (workflow must be active):

curl -X POST https://your-n8n-instance.com/webhook/YOUR-WEBHOOK-ID \
  -H "Content-Type: application/json" \
  -d '{"event": "user.created", "user_id": 123}'

Capture to Requex first (inspect payload before n8n):

curl -X POST https://requex.me/hook/YOUR-REQUEX-ID \
  -H "Content-Type: application/json" \
  -d '{"event": "user.created", "user_id": 123}'

Related Resources

Inspect Your n8n Webhook Payload

Get a free capture URL — understand your payload structure before building your n8n workflow.

Open Webhook Tester →