agentsclimarketplace

N8n impl webhooks

Skill Impertio-Studio/n8n-Claude-Skill-Package/skills/source/n8n-impl/n8n-impl-webhooks

21 deterministic Claude AI skills for n8n v1.x workflow automation

Install
npx -y skills add Impertio-Studio/n8n-Claude-Skill-Package --skill n8n-impl-webhooks

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Use when configuring webhook endpoints in n8n workflows. Prevents the #1 mistake of using test URLs in production (different base paths). Covers Webhook node setup, 6 HTTP methods, test vs production URLs, 4 response modes, 4 auth methods, Respond to Webhook node (8 response types including JWT and streaming), dynamic path parameters, binary data handling, CORS configuration, IP whitelist, and 16MB payload limit. Keywords: n8n, webhook, HTTP, REST, callback, trigger, response mode, receive webhook, HTTP callback, test vs production URL, webhook auth, response mode..

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

9.1 KB, as published. Nobody here has run it

n8n Webhook Implementation

Quick Reference

AspectDetails
Trigger nodeWebhook
HTTP methodsGET, POST, PUT, PATCH, DELETE, HEAD
Test URL<base>/webhook-test/<path>
Production URL<base>/webhook/<path>
Response modes4 (Immediately, Last Node, Respond to Webhook, Streaming)
Auth methods4 (None, Basic Auth, Header Auth, JWT Auth)
Payload limit16MB default (N8N_PAYLOAD_SIZE_MAX)
Response nodeRespond to Webhook (8 response types)

Critical: Test vs Production URLs

ALWAYS understand the two-URL system before deploying webhooks:

Test URL

  • Format: <base>/webhook-test/<path>
  • Active when: Clicking "Listen for Test Event" or running manually in the editor
  • Data display: Results appear directly in the workflow editor
  • Use for: Development and testing ONLY
  • Env var: N8N_ENDPOINT_WEBHOOK_TEST (default: webhook-test)

Production URL

  • Format: <base>/webhook/<path>
  • Active when: Workflow is activated (published)
  • Data display: Results appear ONLY in the Executions tab
  • Use for: Live integrations and external services
  • Env var: N8N_ENDPOINT_WEBHOOK (default: webhook)

WEBHOOK_URL Environment Variable

ALWAYS set WEBHOOK_URL when n8n is behind a reverse proxy:

WEBHOOK_URL=https://n8n.example.com/

Without this, n8n generates URLs using its internal hostname, which external services cannot reach.

Decision Tree: Response Mode

Need to respond to the caller?
|
+-- No --> "Immediately" (returns 200 + "Workflow got started")
|
+-- Yes --> Need custom response logic?
    |
    +-- No --> "When Last Node Finishes" (returns last node's data)
    |   |
    |   +-- Response Data options:
    |       - All Entries: array of all items
    |       - First Entry JSON: single JSON object
    |       - First Entry Binary: binary file download
    |       - No Response Body: empty 200
    |
    +-- Yes --> Need streaming?
        |
        +-- Yes --> "Streaming" (real-time data from streaming-capable nodes)
        |
        +-- No --> "Using 'Respond to Webhook' Node"
                   (full control: JSON, text, binary, JWT, redirect, etc.)

Decision Tree: Authentication Method

Who calls this webhook?
|
+-- Internal/trusted service --> None (use network-level security instead)
|
+-- External service with API key --> Header Auth
|   (custom header name + value)
|
+-- External service with credentials --> Basic Auth
|   (username + password)
|
+-- Service requiring token validation --> JWT Auth
    (validate incoming JWTs, extract claims)

Webhook Node Configuration

Path Configuration

The Path field defines the URL endpoint. ALWAYS use lowercase, hyphenated paths:

# Static paths
my-webhook
orders/incoming
api/v1/notifications

# Dynamic path parameters (use :param syntax)
orders/:orderId
users/:userId/events
:tenantId/webhooks/:eventType

Access dynamic parameters in subsequent nodes:

// In expressions
{{ $json.params.orderId }}

// In Code node
const orderId = $input.first().json.params.orderId;

HTTP Method Selection

MethodUse When
POSTReceiving data submissions, form data, JSON payloads
GETHealth checks, status queries, simple triggers
PUTFull resource updates from external systems
PATCHPartial resource updates
DELETEDeletion notifications
HEADAvailability checks (no body returned)

ALWAYS use POST for webhooks receiving payload data. NEVER use GET for sensitive data (parameters appear in URL/logs).

Additional Options

OptionWhen to Use
Binary DataALWAYS enable when receiving file uploads
IP WhitelistALWAYS use when caller IPs are known (comma-separated)
CORSSet specific domains; use * only for public APIs
Ignore BotsEnable for public-facing webhooks
Raw BodyEnable when receiving XML or non-JSON payloads
Response HeadersAdd custom headers (Content-Type, Cache-Control, etc.)
Response CodeOverride default status code (e.g., 201 for created)

Respond to Webhook Node

Setup Requirements

  1. Add Webhook node as trigger
  2. Set Webhook Respond to "Using 'Respond to Webhook' Node"
  3. Place Respond to Webhook node AFTER all processing nodes

Response Types (8 Options)

TypeUse Case
All Incoming ItemsReturn processed data array
First Incoming ItemReturn single processed item
JSONReturn custom-crafted JSON response
TextReturn plain text or HTML
Binary FileReturn file download
JWT TokenReturn signed JWT for authentication flows
RedirectSend caller to another URL (302)
No DataAcknowledge with empty body

Critical Behavior Rules

  • The node executes ONCE using the first incoming data item
  • NEVER place multiple Respond to Webhook nodes in the same execution path (only the first executes)
  • If the node is skipped (via IF/Switch), n8n returns 200 with a standard message
  • Pre-execution errors return HTTP 500 automatically
  • In non-webhook contexts, the node is silently ignored
  • Since v1.103.0: HTML responses are wrapped in <iframe> with sandbox (NEVER rely on JS access to parent window)

Additional Options

OptionDescription
Response CodeCustom HTTP status code
Response HeadersCustom headers (e.g., Content-Type: application/xml)
Put Response in FieldRename the response data field
Enable StreamingEnable for streaming-configured triggers

Webhook Lifecycle

Registration and Activation

1. Create workflow with Webhook node
2. Configure path, method, auth, response mode
3. Test: Click "Listen for Test Event" --> test URL active
4. Deploy: Activate workflow --> production URL active
5. Deactivate workflow --> production URL stops responding

ALWAYS verify webhook registration after activation:

curl -I https://n8n.example.com/webhook/<path>
# Expected: HTTP 200 (or auth challenge)
# If 404: workflow is not active or path is wrong

Environment Variables for Webhooks

VariableDefaultPurpose
WEBHOOK_URLPublic URL for reverse proxy setups
N8N_ENDPOINT_WEBHOOKwebhookProduction path prefix
N8N_ENDPOINT_WEBHOOK_TESTwebhook-testTest path prefix
N8N_ENDPOINT_WEBHOOK_WAITwebhook-waitingWaiting webhook path prefix
N8N_PAYLOAD_SIZE_MAX16MBMaximum request payload size
N8N_FORMDATA_FILE_SIZE_MAXMaximum form data file size
N8N_DISABLE_PRODUCTION_MAIN_PROCESSfalseOffload webhooks to separate process

Binary Data via Webhooks

ALWAYS enable the Binary Data option when receiving files:

  1. Enable "Binary Data" in Webhook node options
  2. Files arrive as binary properties on the incoming item
  3. Access binary data in subsequent nodes via $binary
  4. For multipart form data, each file becomes a separate binary property
// Access uploaded file in Code node
const fileBuffer = await $input.first().binary.file.data;
const fileName = $input.first().binary.file.fileName;
const mimeType = $input.first().binary.file.mimeType;

CORS Configuration

  • Default: * (all origins allowed)
  • ALWAYS restrict to specific domains in production
  • Set via the CORS additional option in the Webhook node
  • Example: https://app.example.com,https://admin.example.com

IP Whitelist

  • Set via the IP Whitelist additional option
  • Comma-separated list of allowed IP addresses
  • Unlisted IPs receive HTTP 403 Forbidden
  • ALWAYS use when the calling service has known, static IPs

Queue Mode Webhook Handling

In queue mode (multi-instance deployments):

  • The main instance handles all webhook reception
  • Workers execute the triggered workflows
  • Set WEBHOOK_URL to point to the main instance
  • For high traffic: use a dedicated webhook processor (n8n webhook command)
  • Set N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true when using a separate webhook processor

Reference Files

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.