Documentation

WebhookCatcher

WebhookCatcher for n8n

Catch, inspect, secure and forward webhooks with WebhookCatcher, and react to them in your n8n workflows.

npm version MIT license n8n community node

English · Español · Deutsch · Français · Português · 日本語 · Русский · 中文


This package adds four nodes to n8n:

Node What it does
WebhookCatcher Manage endpoints, forwarding targets, auth methods and webhook requests, read your account usage and analytics, and redeliver requests. n8n AI Agents can also use it as a tool.
WebhookCatcher Trigger Starts a workflow in real time each time an endpoint receives a webhook. Needs an n8n instance reachable from the internet.
WebhookCatcher Polling Trigger Starts a workflow when new requests are stored. Works with n8n on localhost or behind a firewall.
WebhookCatcher Event Trigger Starts a workflow when WebhookCatcher raises an alert: a failed delivery, a rate limited request, a security event or a usage warning.

Contents

Installation

From the n8n editor (recommended)

  1. Open Settings → Community Nodes.
  2. Click Install.
  3. Enter @webhookcatcher/n8n-nodes-webhookcatcher and confirm.
  4. Search for WebhookCatcher in the nodes panel.

See the n8n community nodes guide for more details.

Manual installation (self-hosted n8n)

cd ~/.n8n/nodes
npm install @webhookcatcher/n8n-nodes-webhookcatcher

Restart n8n after installing. With Docker, run the command inside the container (in /home/node/.n8n/nodes) and restart the container.

Credentials

The nodes authenticate with a WebhookCatcher API token.

[!NOTE]
API access is available on the Pro, Team and Business plans. Requests made with a token of a team without API access are rejected with 403.

  1. Sign in to WebhookCatcher.
  2. Open your profile menu → API Tokens.
  3. Enter a name (for example n8n) and select the permissions your workflows need.
  4. Copy the token. It is shown only once.
  5. In n8n, create a WebhookCatcher API credential:
Field Value
API Token The token you just created.
Base URL https://webhookcatcher.com/api/v1. Change it only for a self-hosted WebhookCatcher instance.

n8n tests the credential by calling GET /account, so the token needs at least the account:read permission.

A token belongs to the team that was active when it was created. Every node that uses the credential works with that team's endpoints and requests.

Token permissions

Give each token only the permissions its workflows need.

Permission Allows
account:read Account, plan, usage and analytics. Required to test the credential.
endpoints:read List and read endpoints. Used by every endpoint dropdown.
endpoints:write Create, update and delete endpoints.
forwarding-targets:read List and read forwarding targets.
forwarding-targets:write Create, update and delete forwarding targets.
auth-methods:read List and read auth methods.
auth-methods:write Create, update, delete and regenerate auth methods.
requests:read List and read webhook requests and their forwarding deliveries.
requests:redeliver Redeliver (replay) webhook requests, one by one or in bulk.
requests:delete Delete webhook requests, one by one or in bulk.
events:read Read alert event subscriptions.
events:write Create, update and delete alert event subscriptions.
cli:tunnel Used by the WebhookCatcher CLI. Not needed in n8n.

Permissions used by each node:

Node / operation Permissions
Account → Get, Get Analytics account:read
Endpoint → Get, Get Many endpoints:read
Endpoint → Create, Update, Delete endpoints:write
Forwarding Target → Get, Get Many forwarding-targets:read
Forwarding Target → Create, Update, Delete forwarding-targets:write
Auth Method → Get, Get Many auth-methods:read
Auth Method → Create, Update, Delete, Regenerate Credentials auth-methods:write
Request → Get, Get Many, Get Deliveries requests:read
Request → Redeliver, Redeliver Many requests:redeliver
Request → Delete, Delete Many requests:delete
WebhookCatcher Trigger endpoints:read, forwarding-targets:read, forwarding-targets:write
WebhookCatcher Polling Trigger endpoints:read, requests:read
WebhookCatcher Event Trigger events:read, events:write

Tokens created before these permissions existed keep working: read allows every :read permission, write allows create, update and delete, and * allows everything.

When a token lacks a permission, the API answers 403 with This API token does not have the "<permission>" permission. and the node shows that message.

WebhookCatcher node

Resource Operations
Account Get (team, plan, features, monthly usage and token details) · Get Analytics (date range)
Endpoint Create · Get · Get Many · Update · Delete
Forwarding Target Create · Get · Get Many · Update · Delete
Auth Method Create · Get · Get Many · Update · Delete · Regenerate Credentials
Request Get · Get Many · Get Deliveries · Redeliver · Redeliver Many · Delete · Delete Many

Endpoint

  • Create takes a name, a path, the accepted HTTP method and the authentication (None, API Key, Basic Auth, Bearer Token or HMAC) with the auth method that validates it. Additional fields: description, active state and rate limit.
  • Update sends only the fields you set. The rest of the endpoint stays as it is.
  • Get Many supports Return All or a Limit, and filters by active state.
  • Response Status Code, Response Body and Response Headers set what the sender gets back when a webhook is accepted (by default 200 with a JSON body). The body can echo values of the request with {{body.*}}, {{query.*}} and {{header.*}} placeholders, for example {{body.challenge}} for Slack URL verification. Without a Content-Type header, JSON bodies are sent as application/json and anything else as text/plain.

Forwarding Target

Forwards every request that an endpoint accepts to another URL. Options: HTTP method, authentication for the destination, custom headers, automatic retries, active state, description and payload filters (forward only when a field of the payload matches a condition).

The destination must be a public URL. Private, loopback and link-local addresses are rejected to prevent SSRF.

When the target has an auth method, WebhookCatcher authenticates each forwarded request with it: X-API-KEY for API keys, Authorization: Bearer … or Authorization: Basic …, or X-Timestamp and X-Signature for HMAC (hash_hmac('sha256', timestamp + body, secret) over the exact body sent). If the auth method is inactive or expired, the delivery fails instead of being sent without credentials. Set Authentication to None to remove it.

Auth Method

Creates the credentials that endpoints use to validate incoming webhooks: API key, Basic Auth (username and password), Bearer token or HMAC secret. Regenerate Credentials rotates the generated token or secret and returns the new value.

Request

  • Get Many filters by endpoint, status (success, error, pending, timeout), HTTP method, response code and date range, sorted newest or oldest first.
  • Get Deliveries returns every forwarding attempt of a request with its status code, duration, error and response body.
  • Redeliver sends a stored request again to all forwarding targets of its endpoint, to one forwarding target, or to a custom public URL.
  • Redeliver Many sends every request that matches the filters (or a list of request IDs) again, oldest first, to the forwarding targets of its endpoint or to one forwarding target. The node continues batch by batch (100 requests per call) until all are queued and returns the redelivered request IDs.
  • Delete removes a request with its forwarding attempts. Delete Many removes every request that matches the filters or a list of request IDs. At least one filter is required, so a workflow can never empty the whole log by mistake.
  • Every request includes body (parsed) and raw_body: the exact bytes received, for XML, plain text or signed payloads. raw_body is null when it is identical to body encoded as JSON.

Use as an AI Agent tool

The WebhookCatcher node is marked as usableAsTool. Attach it to an n8n AI Agent to let the agent list endpoints, inspect failed requests or redeliver them.

WebhookCatcher Trigger

Starts the workflow as soon as an endpoint accepts a webhook.

  1. Add the WebhookCatcher Trigger node and select the endpoint.
  2. Activate the workflow, or click Listen for test event.

On activation the node creates a forwarding target on that endpoint. It points to the n8n webhook URL and sends a random X-WebhookCatcher-Secret header. n8n rejects any call without that secret with 401. The forwarding target is deleted when the workflow is deactivated. Test and production URLs get separate forwarding targets.

Output:

{
  "body": { "event": "invoice.paid", "id": "in_123" },
  "query": {},
  "headers": { "content-type": "application/json", "user-agent": "Stripe/1.0" },
  "receivedAt": "2026-10-08T15:04:05.000Z"
}

Turn off Options → Include Headers to output only the body and query.

Turn on Options → Include Raw Body to also output rawBody, the body exactly as it was received. WebhookCatcher forwards the original bytes and Content-Type, so XML, form and plain text webhooks arrive unchanged.

[!IMPORTANT]
WebhookCatcher must be able to reach your n8n instance. Set WEBHOOK_URL in n8n to its public URL. For n8n on localhost, use the Polling Trigger.

WebhookCatcher Event Trigger

Starts the workflow when WebhookCatcher raises an alert. Select the events in Events:

Event Sent when
Delivery Failed (webhook_failed) A webhook could not be delivered to a forwarding target after all its attempts.
Rate Limited (rate_limited) An endpoint rejected requests that exceeded its rate limit.
Security Event (security_events) A request was rejected for missing or invalid credentials, an auth method was created, updated, regenerated or deleted, or an endpoint was deleted.
Monthly Usage Warning (monthly_usage_warning) The team used 80% of its monthly webhook quota, and again at 100%.
Test Alert (test) You click Send Test Alert on the Alerts page of WebhookCatcher.

Rate limited and rejected-credential events are sent at most once every 5 minutes per endpoint, so a burst of rejected requests starts one execution.

On activation the node creates an event subscription that points to the n8n webhook URL. WebhookCatcher signs every event with X-WebhookCatcher-Signature (HMAC-SHA256(secret, X-WebhookCatcher-Timestamp + body)). n8n rejects events with an invalid signature or older than 5 minutes with 401. The subscription is deleted when the workflow is deactivated.

Output:

{
  "id": "0199c2a4-5f1e-7c3a-9d1b-2f4e6a8b0c1d",
  "event": "webhook_failed",
  "title": "Webhook Delivery Failed",
  "message": "Delivery to Billing failed: Server Error",
  "team": { "id": 1, "slug": "acme", "name": "Acme" },
  "data": {
    "webhook_request_id": "0199c2a4-...",
    "endpoint_id": "0199c2a0-...",
    "forwarding_target_id": "0199c2a1-...",
    "forwarding_target_name": "Billing",
    "url": "https://billing.example.com/hooks",
    "attempts": 4,
    "response_status": 500,
    "error": "Server Error"
  },
  "occurred_at": "2026-10-09T15:04:05+00:00"
}

data for the other events: endpoint_id, endpoint_name, endpoint_path, status_code, error, method and ip for rate limited and unauthorized requests, action, auth_method_id, auth_type, endpoint_id and user for auth method and endpoint changes, and used, limit, percentage, threshold and month for usage warnings.

The events are the same ones you can receive by email, Slack or Discord. The event trigger does not depend on those alert settings.

[!IMPORTANT]
WebhookCatcher must be able to reach your n8n instance. Set WEBHOOK_URL in n8n to its public URL.

WebhookCatcher Polling Trigger

Checks WebhookCatcher for new requests on the poll interval you choose (every minute, every hour, …).

  • Endpoint: one endpoint, or empty for all endpoints.
  • Filters → Status: for example only error requests, to get notified about rejected webhooks.

On first activation the node starts from the newest request and does not replay the history. Each poll emits the requests received since the previous poll, oldest first, up to 500 per poll. Any remaining requests are emitted in the next poll.

A manual test run returns the latest request so you can map its fields.

Which trigger should I use?

WebhookCatcher Trigger WebhookCatcher Polling Trigger
Latency Real time Poll interval
n8n on localhost or a private network ❌ ✅
Output Original body, query and headers Stored request (body, headers, status, response code, duration, …)
Rejected requests Not received, only accepted requests are forwarded Received, use the status filter
Creates resources in WebhookCatcher A forwarding target while active None

Example workflows

  • Stripe → Slack: WebhookCatcher Trigger on your Stripe endpoint → IF body.type is invoice.payment_failed → Slack message.
  • Alert on rejected webhooks: Polling Trigger with Status = Error → email or Slack message with the endpoint, response code and error.
  • Retry failed forwards: Schedule Trigger → Request: Get Many (status error, last hour) → Request: Get Deliveries → Request: Redeliver.
  • Daily usage report: Schedule Trigger → Account: Get and Get Analytics → Google Sheets.
  • Incident on failed deliveries: Event Trigger (Delivery Failed) → PagerDuty or Slack → Request: Redeliver once the destination is back.
  • Usage alert: Event Trigger (Monthly Usage Warning) → email the account owner.
  • Data retention: Schedule Trigger (daily) → Request: Delete Many (Received Before: 30 days ago).
  • Slack app verification: Endpoint: Create with Response Body {{body.challenge}}.
  • Customer onboarding: Form Trigger → Auth Method: Create → Endpoint: Create → Forwarding Target: Create → send the URL and credentials to the customer.

Troubleshooting

Problem Solution
401 Unauthenticated The token is wrong, expired or deleted. Create a new one.
403 Your active plan does not support API access The token's team needs the Pro, Team or Business plan.
403 This API token does not have the "…" permission Edit the token permissions in WebhookCatcher → API Tokens.
422 with field errors The node shows the validation message of each field. Check the values you send.
The Trigger never fires n8n is not public, WEBHOOK_URL is not set, or the endpoint rejects the webhook before forwarding it (check its authentication). Try the Polling Trigger.
The Event Trigger never fires n8n is not public or WEBHOOK_URL is not set. Click Send Test Alert on the Alerts page of WebhookCatcher to check it.
URLs pointing to private or internal networks are not allowed. Forwarding targets and redeliveries cannot use private or local addresses.
Dropdowns are empty The token needs the matching :read permission.

Development

Requirements: Node.js 20.19 or later and npm.

git clone https://github.com/WebhookCatcher/WebhookCatcher-Node.git
cd WebhookCatcher-Node
npm install
npm run dev

npm run dev builds the nodes, rebuilds them on change and starts a local n8n at http://localhost:5678 with the package loaded.

npm script make Description
npm run dev make dev Start n8n with the nodes loaded and rebuild on change.
npm run build make build Compile TypeScript and copy the icons into dist/.
npm run build:watch make watch Recompile on change without starting n8n.
npm run lint make lint Check the code with the n8n community node rules.
npm run lint:fix make lint-fix Fix the issues that can be fixed automatically.
npm run format make format Format the code with Prettier.
npm run release make release Bump the version, update the changelog, tag and push.

Releasing

The Publish workflow publishes each release to npm with a provenance statement, which n8n requires for community nodes. Run npm run release locally: it lints, builds, bumps the version, creates the tag and pushes it, and the workflow publishes the package.

Set up npm Trusted Publishing for WebhookCatcher/WebhookCatcher-Node with the publish.yml workflow, or add an NPM_TOKEN repository secret.

Project structure

credentials/
  WebhookCatcherApi.credentials.ts      API token and base URL
nodes/
  WebhookCatcher/                       Action node, shared API helpers and descriptions
  WebhookCatcherTrigger/                Real-time trigger (forwarding target + secret header)
  WebhookCatcherPollingTrigger/         Polling trigger (cursor on request ids)
  WebhookCatcherEventTrigger/           Alert events trigger (signed event subscription)
docs/                                   Translated READMEs and images

Resources

License

MIT

Discussion