DEV Community

Pirate Prentice
Pirate Prentice

Posted on

How to use the n8n Webhook node — receive HTTP requests and trigger workflows (free JSON)

The Webhook node is the front door of almost every n8n integration. Whenever you need to receive data from an external service — a form submission, a Stripe event, a GitHub push, a custom app — the Webhook node is what catches it.

This tutorial walks through the Webhook node end-to-end: setting it up, parsing the request body, sending a response, and chaining it to a real action. A copy-paste workflow JSON is in the comments.

What the Webhook node does

The Webhook node creates an HTTP endpoint on your n8n instance. When something hits that URL with a POST (or GET), n8n wakes up the workflow and passes the request data downstream as a JSON object you can use like any other node output.

It replaces the need for a custom API server for simple integrations.

Step 1: Add and configure the Webhook node

  1. Create a new workflow in n8n
  2. Click + and search for "Webhook"
  3. Set HTTP Method to POST (most common for receiving data)
  4. Set Response Mode to "When Last Node Finishes" if you want to return data, or "Immediately" if you just want to acknowledge receipt fast
  5. Copy the Test URL shown — you'll use this to send test requests

Step 2: Trigger a test request

With the workflow open and the Webhook node selected, click Listen for Test Event. Then send a POST request to the test URL:

curl -X POST https://your-n8n-instance/webhook-test/YOUR-ID \
  -H "Content-Type: application/json" \
  -d '{"name": "Jane", "email": "jane@example.com"}'
Enter fullscreen mode Exit fullscreen mode

The node will show the incoming data immediately. You'll see the body parsed into {{ $json.name }} and {{ $json.email }} — ready to use in any downstream node.

Step 3: Use the data downstream

After the Webhook node you can add any node — a Google Sheets append, a Slack message, an email send, a database write. Reference the incoming fields with:

  • {{ $json.name }} — the name field from the POST body
  • {{ $json.email }} — the email field
  • {{ $json.body }} — full raw body if you sent something non-standard

For headers (useful for webhook signatures/auth): {{ $request.headers['x-my-header'] }}

Step 4: Send a response back

If the calling service expects a response (many do — Stripe, Typeform, etc.), add a Respond to Webhook node at the end of your chain:

  1. Add the Respond to Webhook node after your last action node
  2. Set Response Body to whatever you want to return — e.g. { "status": "received" }
  3. Set Response Code to 200

Now the external service gets a proper acknowledgment instead of a timeout.

Step 5: Switch to the Production URL

Once your workflow is tested:

  1. Activate the workflow (toggle in top right)
  2. Switch your external service from the Test URL to the Production URL shown in the Webhook node settings
  3. The production URL stays stable — it won't change if you edit the workflow

Common patterns

Webhook + email notification: Catch a form submission → send an email via Gmail or SMTP node → respond with 200.

Webhook + CRM write: Catch a lead form → append to Google Sheets or POST to your CRM API → acknowledge.

Webhook + Slack alert: Catch a monitoring ping → post to Slack → respond OK.

Webhook + conditional logic: Catch an event → IF node to route by type → different actions per branch.

All four of these patterns are in the n8n Workflow Starter Pack (link below) as ready-to-import JSON files.

Free workflow JSON

Drop a comment below and I'll share the Webhook → Google Sheets workflow JSON. Already posted it as the first comment.


If you're building out a full automation stack, the n8n Workflow Starter Pack ($29) has 5 production-ready workflows covering the most common patterns — lead capture, form → Sheets, Stripe receipts, CRM sync, and scheduled reports. Each is documented and import-ready.

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.