Skip to main content

Protect public webhooks with Ainoflow Guard rate limiting

Workflow preview

Protect public webhooks with Ainoflow Guard rate limiting preview
Open on n8n.io

Overview

Webhook Rate Limiter (Ainoflow Guard)

Stop webhook flooding before it starts. Add production-grade rate limiting to any n8n webhook in minutes - reject abusive traffic before expensive workflow logic executes.

โœจ Key Features

  • โšก Edge-style decisions - Allow/deny checked before any business logic runs
  • ๐Ÿ›ก๏ธ Burst protection - Configurable limits (requests per time window)
  • ๐Ÿ”„ Stateless - No queues, databases, or counters needed in n8n
  • ๐Ÿ“ก Proxy-aware - Correct IP extraction behind Cloudflare, nginx, load balancers
  • ๐Ÿ”‘ Dual identity modes - Rate limit by IP address or API key
  • โฑ๏ธ Retry-After headers - Proper 429 responses with retry guidance
  • ๐Ÿ’ฅ Fail-open - Guard outage doesn't block your production traffic
  • ๐Ÿ”ง Auto-setup - Guard policy auto-creates on first request

๐ŸŽฏ How It Works

  1. Webhook receives POST request

  2. Identity extracted from headers:

  • API key (x-api-key) โ†’ per-client limiting
  • Client IP (X-Forwarded-For / x-real-ip) โ†’ per-IP limiting
  1. Guard decides allow or deny:
  • POST /api/v1/guard/{route:identity}/counter
  • Checks against configured rate limit policy
  1. Allowed โ†’ your business logic executes โ†’ 200 OK

  2. Denied โ†’ immediate 429 Too Many Requests + Retry-After header

Client โ†’ Webhook โ†’ Identity โ†’ Guard โ†’ Allowed? โ†’ Business Logic โ†’ 200 OK
 โ†“ NO
 429 + Retry-After

๐Ÿ”ง Setup Requirements

  • Ainoflow - Sign up free for Guard API access. Free plan available.

That's it. One credential, one API.

โšก Quick Start

1. Import workflow and set Ainoflow Bearer credential on GuardCheck node

2. Edit Config node with your limits:

Variable Default Description
rate_limit 30 Max requests per window
window_sec 60 Window in seconds
identity_mode ip ip or apiKey
route_name webhook Endpoint name

3. Replace BusinessLogic node with your workflow

Access original request:

const body = $('Webhook').first().json.body;
const headers = $('Webhook').first().json.headers;

4. Activate and test

๐Ÿงช Testing

Burst Test

Bash (Linux/macOS):

for i in {1..50}; do
 curl -s -o /dev/null -w "%{http_code}\n" \
 -X POST https://your-n8n.com/webhook/rate-limited-endpoint \
 -H "Content-Type: application/json" \
 -d '{"test": true}'
done

PowerShell (Windows):

1..50 | ForEach-Object {
 (Invoke-WebRequest -Uri "https://your-n8n.com/webhook/rate-limited-endpoint" -Method POST -Body '{"test":true}' -ContentType "application/json" -UseBasicParsing).StatusCode
}

Expected: First 30 โ†’ 200, remaining โ†’ 429

Proxy Test

curl -H "X-Forwarded-For: 1.2.3.4, 5.6.7.8" \
 -X POST https://your-n8n.com/webhook/rate-limited-endpoint

Identity key should use 1.2.3.4 (first IP from chain).

๐Ÿ’ฌ Response Examples

Allowed (200 OK)

{
 "ok": true,
 "data": { "message": "Request processed successfully" }
}

Denied (429 Too Many Requests)

Headers: Retry-After: 17

{
 "ok": false,
 "error": "rate_limited",
 "retryAfter": 17
}

๐Ÿ—๏ธ Workflow Architecture

Section Nodes Description
Rate Limit Check Webhook โ†’ Config โ†’ BuildIdentity โ†’ GuardCheck โ†’ IfAllowed Extract identity, check Guard
Allowed Path BusinessLogic โ†’ RespondOk Your logic + 200 response
Denied Path BuildDeniedResponse โ†’ RespondRateLimited 429 + Retry-After

Total: 9 nodes. Minimal by design.

๐Ÿ”’ What This Protects Against

  • โœ… Webhook flooding - bot traffic, retry storms hitting your endpoint
  • โœ… Credit burn - one runaway loop = โ‚ฌ500+ OpenAI/Twilio bill overnight
  • โœ… Automation overload - uncontrolled DB writes, external API hammering
  • โœ… Accidental loops - webhook chains triggering each other endlessly

โŒ What This Does NOT Replace

  • Cloudflare / WAF (network-level protection)
  • Bot detection (behavioral analysis)
  • Layer 3/4 DDoS mitigation
  • Authentication (who is the user?)

Guard handles application-level rate decisions, not network security.

๐Ÿ”‘ Identity Modes

IP Mode (default)

Best for public webhooks where clients don't have API keys.

X-Forwarded-For: 1.2.3.4, 5.6.7.8 โ†’ identity = "1.2.3.4"
x-real-ip: 10.0.0.1 โ†’ identity = "10.0.0.1"

โš ๏ธ IP addresses can be shared (NAT, mobile carriers, offices).

API Key Mode

Best for authenticated endpoints with per-client keys.

x-api-key: client_abc123 โ†’ identity = "client_abc123"

Falls back to IP if header is missing.

๐Ÿ› ๏ธ Customization

Rate Limit Presets

Use Case rate_limit window_sec Result
Burst protection 30 60 30/min
API rate limiting 100 3600 100/hour
LLM cost protection 10 60 10/min
Daily limit 1000 86400 1000/day

Multiple Endpoints

Use different route_name values to create separate rate limits:

Config A: route_name = "orders" โ†’ key = "orders:1.2.3.4"
Config B: route_name = "payments" โ†’ key = "payments:1.2.3.4"

Each route has independent counters.

Fail-Open vs Fail-Closed

Default: Fail-open - Guard API uses failOpen=true, so Guard outage doesn't block traffic.

To switch to fail-closed: change failOpen query parameter to false in GuardCheck node.

Combine with Shield (Dedup Protection)

Getting duplicate webhook deliveries? Add Ainoflow Shield before your business logic - one trigger, one execution, guaranteed. Guard + Shield = rate limiting + deduplication on the same endpoint.

โš ๏ธ Important Notes

  • Guard policy auto-creates on first request with rateMax/rateWindow parameters
  • allowPolicyOverwrite=true is set for easy demo/testing - Config node values always apply. Production: set to false in GuardCheck query params to lock policy and prevent hidden config drift
  • Denied requests not counted - only successful requests increment the counter
  • Window resets atomically - no gradual decay, clean reset every N seconds
  • No state in n8n - all rate limiting state lives in Guard API
  • 5-second timeout - GuardCheck has 5s timeout to prevent blocking

๐Ÿ’ผ Need Customization?

Want to add temporary bans, cost protection mode, multi-tier rate limiting, or per-client usage dashboards?

Ainova Systems - We build custom AI automation infrastructure and safety layers for production workflows.


Tags: webhook, rate-limiting, security, guard, burst-protection, api-protection, ainoflow, production, webhook-security, cost-control