{"workflow":{"id":13491,"name":"Protect public webhooks with Ainoflow Guard rate limiting","views":15,"recentViews":0,"totalViews":15,"createdAt":"2026-02-18T15:07:25.138Z","description":"# Webhook Rate Limiter (Ainoflow Guard)\n\nStop webhook flooding before it starts. Add production-grade rate limiting to any n8n webhook in minutes - reject abusive traffic **before** expensive workflow logic executes.\n\n## ✨ Key Features\n\n- **⚡ Edge-style decisions** - Allow/deny checked before any business logic runs\n- **🛡️ Burst protection** - Configurable limits (requests per time window)\n- **🔄 Stateless** - No queues, databases, or counters needed in n8n\n- **📡 Proxy-aware** - Correct IP extraction behind Cloudflare, nginx, load balancers\n- **🔑 Dual identity modes** - Rate limit by IP address or API key\n- **⏱️ Retry-After headers** - Proper 429 responses with retry guidance\n- **💥 Fail-open** - Guard outage doesn't block your production traffic\n- **🔧 Auto-setup** - Guard policy auto-creates on first request\n\n## 🎯 How It Works\n\n1. **Webhook receives** POST request\n\n2. **Identity extracted** from headers:\n   - API key (`x-api-key`) → per-client limiting\n   - Client IP (`X-Forwarded-For` / `x-real-ip`) → per-IP limiting\n\n3. **Guard decides** allow or deny:\n   - `POST /api/v1/guard/{route:identity}/counter`\n   - Checks against configured rate limit policy\n\n4. **Allowed** → your business logic executes → `200 OK`\n\n5. **Denied** → immediate `429 Too Many Requests` + `Retry-After` header\n\n```\nClient → Webhook → Identity → Guard → Allowed? → Business Logic → 200 OK\n                                         ↓ NO\n                                    429 + Retry-After\n```\n\n## 🔧 Setup Requirements\n\n- **Ainoflow** - [Sign up free](https://www.ainoflow.io/signup) for Guard API access. Free plan available.\n\nThat's it. One credential, one API.\n\n## ⚡ Quick Start\n\n### 1. Import workflow and set Ainoflow Bearer credential on `GuardCheck` node\n\n### 2. Edit `Config` node with your limits:\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `rate_limit` | `30` | Max requests per window |\n| `window_sec` | `60` | Window in seconds |\n| `identity_mode` | `ip` | `ip` or `apiKey` |\n| `route_name` | `webhook` | Endpoint name |\n\n### 3. Replace `BusinessLogic` node with your workflow\n\nAccess original request:\n```javascript\nconst body = $('Webhook').first().json.body;\nconst headers = $('Webhook').first().json.headers;\n```\n\n### 4. Activate and test\n\n## 🧪 Testing\n\n### Burst Test\n\n**Bash (Linux/macOS):**\n```bash\nfor i in {1..50}; do\n  curl -s -o /dev/null -w \"%{http_code}\\n\" \\\n    -X POST https://your-n8n.com/webhook/rate-limited-endpoint \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\"test\": true}'\ndone\n```\n\n**PowerShell (Windows):**\n```powershell\n1..50 | ForEach-Object {\n  (Invoke-WebRequest -Uri \"https://your-n8n.com/webhook/rate-limited-endpoint\" -Method POST -Body '{\"test\":true}' -ContentType \"application/json\" -UseBasicParsing).StatusCode\n}\n```\n\n**Expected:** First 30 → `200`, remaining → `429`\n\n### Proxy Test\n\n```bash\ncurl -H \"X-Forwarded-For: 1.2.3.4, 5.6.7.8\" \\\n  -X POST https://your-n8n.com/webhook/rate-limited-endpoint\n```\n\nIdentity key should use `1.2.3.4` (first IP from chain).\n\n## 💬 Response Examples\n\n### Allowed (200 OK)\n\n```json\n{\n  \"ok\": true,\n  \"data\": { \"message\": \"Request processed successfully\" }\n}\n```\n\n### Denied (429 Too Many Requests)\n\nHeaders: `Retry-After: 17`\n\n```json\n{\n  \"ok\": false,\n  \"error\": \"rate_limited\",\n  \"retryAfter\": 17\n}\n```\n\n## 🏗️ Workflow Architecture\n\n| Section | Nodes | Description |\n|---------|-------|-------------|\n| **Rate Limit Check** | Webhook → Config → BuildIdentity → GuardCheck → IfAllowed | Extract identity, check Guard |\n| **Allowed Path** | BusinessLogic → RespondOk | Your logic + 200 response |\n| **Denied Path** | BuildDeniedResponse → RespondRateLimited | 429 + Retry-After |\n\n**Total: 9 nodes.** Minimal by design.\n\n## 🔒 What This Protects Against\n\n- ✅ Webhook flooding - bot traffic, retry storms hitting your endpoint\n- ✅ Credit burn - one runaway loop = €500+ OpenAI/Twilio bill overnight\n- ✅ Automation overload - uncontrolled DB writes, external API hammering\n- ✅ Accidental loops - webhook chains triggering each other endlessly\n\n## ❌ What This Does NOT Replace\n\n- Cloudflare / WAF (network-level protection)\n- Bot detection (behavioral analysis)\n- Layer 3/4 DDoS mitigation\n- Authentication (who is the user?)\n\nGuard handles **application-level rate decisions**, not network security.\n\n## 🔑 Identity Modes\n\n### IP Mode (default)\n\nBest for public webhooks where clients don't have API keys.\n\n```\nX-Forwarded-For: 1.2.3.4, 5.6.7.8 → identity = \"1.2.3.4\"\nx-real-ip: 10.0.0.1               → identity = \"10.0.0.1\"\n```\n\n⚠️ IP addresses can be shared (NAT, mobile carriers, offices).\n\n### API Key Mode\n\nBest for authenticated endpoints with per-client keys.\n\n```\nx-api-key: client_abc123 → identity = \"client_abc123\"\n```\n\nFalls back to IP if header is missing.\n\n## 🛠️ Customization\n\n### Rate Limit Presets\n\n| Use Case | rate_limit | window_sec | Result |\n|----------|-----------|------------|--------|\n| Burst protection | 30 | 60 | 30/min |\n| API rate limiting | 100 | 3600 | 100/hour |\n| LLM cost protection | 10 | 60 | 10/min |\n| Daily limit | 1000 | 86400 | 1000/day |\n\n### Multiple Endpoints\n\nUse different `route_name` values to create separate rate limits:\n\n```\nConfig A: route_name = \"orders\"    → key = \"orders:1.2.3.4\"\nConfig B: route_name = \"payments\"  → key = \"payments:1.2.3.4\"\n```\n\nEach route has independent counters.\n\n### Fail-Open vs Fail-Closed\n\n**Default: Fail-open** - Guard API uses `failOpen=true`, so Guard outage doesn't block traffic.\n\nTo switch to fail-closed: change `failOpen` query parameter to `false` in `GuardCheck` node.\n\n### Combine with Shield (Dedup Protection)\n\nGetting duplicate webhook deliveries? Add [Ainoflow Shield](https://www.ainoflow.io/docs/api/shield) before your business logic - one trigger, one execution, guaranteed. Guard + Shield = rate limiting + deduplication on the same endpoint.\n\n## ⚠️ Important Notes\n\n- **Guard policy auto-creates** on first request with rateMax/rateWindow parameters\n- **`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\n- **Denied requests not counted** - only successful requests increment the counter\n- **Window resets atomically** - no gradual decay, clean reset every N seconds\n- **No state in n8n** - all rate limiting state lives in Guard API\n- **5-second timeout** - GuardCheck has 5s timeout to prevent blocking\n\n## 💼 Need Customization?\n\nWant to add temporary bans, cost protection mode, multi-tier rate limiting, or per-client usage dashboards?\n\n**[Ainova Systems](https://ainovasystems.com/)** - We build custom AI automation infrastructure and safety layers for production workflows.\n\n---\n\n**Tags:** `webhook`, `rate-limiting`, `security`, `guard`, `burst-protection`, `api-protection`, `ainoflow`, `production`, `webhook-security`, `cost-control`\n","workflow":{"meta":{"instanceId":"608063c199ef9befaee7d009cae64cabedc72960a786e69676f755ea2cde6bfa"},"nodes":[{"id":"a66a93f6-eed6-4565-815a-cf61df76f168","name":"README","type":"n8n-nodes-base.stickyNote","position":[3760,5632],"parameters":{"width":800,"height":2256,"content":"# Webhook Rate Limiter (Guard)\n\nProtect public webhooks from burst traffic, abuse, and overload.\nUses **Ainoflow Guard** for edge-style rate decisions BEFORE expensive workflow logic executes.\n\n## Quick Start\n\n## 1. Setup Ainoflow\n### 1.1 Create API Key\n - https://www.ainoflow.io/signup (free plan available)\n### 1.2 Setup HTTP Bearer Credentials:\n - Ainoflow\n\n## 2. Configure Rate Limits\n### Edit **Config** node:\n - `rate_limit` — Max requests per window (default: 30)\n - `window_sec` — Window size in seconds (default: 60)\n - `identity_mode` — \"ip\" or \"apiKey\" (default: ip)\n - `route_name` — Logical endpoint name (default: webhook)\n\n## 3. Add Your Business Logic\n### Replace **BusinessLogic** node:\n - Access request body: `$('Webhook').first().json.body`\n - Access headers: `$('Webhook').first().json.headers`\n - Return your response data as JSON\n\n## 4. Test\n### Burst test (terminal):\n```\nfor i in {1..50}; do\n  curl -s -o /dev/null -w \"%{http_code}\\n\" \\\n    -X POST https://your-n8n.com/webhook/rate-limited-endpoint \\\n    -H \"Content-Type: application/json\" \\\n    -d '{\"test\": true}'\ndone\n```\n\n### Expected:\n - First 30 requests → 200 OK\n - Remaining → 429 Too Many Requests\n\n## 5. How It Works\n\n1. Webhook receives POST request\n2. Identity extracted (IP or API key)\n3. Guard checks rate limit (allow/deny)\n4. Allowed → Business Logic → 200 OK\n5. Denied → 429 + Retry-After header\n\n## 6. Architecture\n\n- **Fail-open**: Guard API uses `failOpen=true`\n  (Guard down → requests allowed through)\n- **Stateless**: No queues or databases needed in n8n\n- **Edge-style**: Decision before business logic\n- **Proxy-aware**: X-Forwarded-For support\n- Guard policy auto-creates on first request\n\n## 7. Identity Modes\n\n### IP mode (default)\n - Extracts client IP from X-Forwarded-For or x-real-ip\n - Works behind Cloudflare, nginx, load balancers\n - Identity key: `webhook:185.22.xx.xx`\n\n### API Key mode\n - Uses x-api-key header\n - Falls back to IP if header missing\n - Identity key: `webhook:client_abc123`\n\n## 8. Guard API Details\n\n - Endpoint: POST /api/v1/guard/{key}/counter\n - Policy auto-created with rateMax + rateWindow\n - returnSuccess=true → always 200 OK response\n - allowPolicyOverwrite=true → easy testing (set false in production)\n - Response: { allowed, remaining, resetsIn, rateLimit }\n\n## 9. Combine with Shield\nDuplicate webhooks? Add Ainoflow Shield for\none-trigger-one-execution guarantee.\nGuard + Shield = rate limiting + dedup.\n\n## 10. Need help?\nAinova Systems: https://ainovasystems.com/"},"typeVersion":1},{"id":"4ca89072-57e6-493d-850e-726755c271d2","name":"SectionRateLimitCheck","type":"n8n-nodes-base.stickyNote","position":[4608,5632],"parameters":{"color":5,"width":1360,"height":652,"content":"## 1. Rate Limit Decision\nWebhook → Config → Build Identity → Guard Check → Allow or Deny"},"typeVersion":1},{"id":"f238178d-2eed-4bfe-8650-6b39d0d23389","name":"SectionAllowed","type":"n8n-nodes-base.stickyNote","position":[6000,5632],"parameters":{"color":4,"width":640,"height":320,"content":"## 2. Allowed → Business Logic\nReplace **BusinessLogic** node with your workflow"},"typeVersion":1},{"id":"ca85a539-3419-4dc7-9f8c-5da7f6003579","name":"SectionDenied","type":"n8n-nodes-base.stickyNote","position":[6000,5968],"parameters":{"color":3,"width":640,"height":320,"content":"## 3. Denied → 429 Rate Limited\nImmediate rejection with Retry-After header"},"typeVersion":1},{"id":"88e3710e-2bb8-4d9d-9fc9-1a269f4ba01e","name":"StickyWebhook","type":"n8n-nodes-base.stickyNote","disabled":true,"position":[4640,5760],"parameters":{"color":7,"width":224,"height":416,"content":"## Webhook Entry\nPOST requests only.\nUses \"Respond to Webhook\" mode\nso workflow controls response timing."},"typeVersion":1},{"id":"06c7ebe5-6636-4a36-ae7c-287e2d05239e","name":"StickyConfig","type":"n8n-nodes-base.stickyNote","disabled":true,"position":[4896,5760],"parameters":{"color":2,"height":416,"content":"## Configuration\nEdit values here to change\nrate limits and identity mode.\nNo code changes needed."},"typeVersion":1},{"id":"66f62add-06b6-450e-a690-a40ca09789b8","name":"StickyIdentity","type":"n8n-nodes-base.stickyNote","disabled":true,"position":[5168,5760],"parameters":{"color":2,"height":416,"content":"## Identity Builder\nExtracts client identity from\nrequest headers.\nFormat: route:identity"},"typeVersion":1},{"id":"63b60baa-6ef5-487c-b575-5d68daa91bb3","name":"StickyGuard","type":"n8n-nodes-base.stickyNote","disabled":true,"position":[5440,5760],"parameters":{"color":2,"height":416,"content":"## Guard Decision\nPOST to Guard API.\nPolicy auto-creates on first call.\nreturnSuccess=true → always 200.\n\n⚠️ allowPolicyOverwrite=true\nis set for easy testing.\nFor production: set to false\nto avoid hidden config drift."},"typeVersion":1},{"id":"cd78a863-63ae-41ee-98b1-c3122dfa62bc","name":"Webhook","type":"n8n-nodes-base.webhook","position":[4704,6016],"webhookId":"e7f8a9b0-c1d2-4e3f-4a5b-6c7d8e9f0a1b","parameters":{"path":"rate-limited-endpoint","options":{},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"98d24922-4c1b-4b0d-9203-25cdde4a2edb","name":"Config","type":"n8n-nodes-base.set","position":[4960,6016],"parameters":{"options":{},"assignments":{"assignments":[{"id":"cfg-rate-limit","name":"rate_limit","type":"number","value":30},{"id":"cfg-window-sec","name":"window_sec","type":"number","value":60},{"id":"cfg-identity-mode","name":"identity_mode","type":"string","value":"ip"},{"id":"cfg-route-name","name":"route_name","type":"string","value":"webhook"}]}},"typeVersion":3.4},{"id":"9ff885dd-a783-4813-894b-22a90aa2cf65","name":"BuildIdentity","type":"n8n-nodes-base.code","position":[5232,6016],"parameters":{"jsCode":"// Build identity key for Guard rate limiting\n// Priority: x-api-key → X-Forwarded-For[0] → x-real-ip → 'unknown'\n\nconst headers = $('Webhook').first().json.headers;\nconst config = $input.first().json;\n\nlet identity;\n\nif (config.identity_mode === 'apiKey' && headers['x-api-key']) {\n  identity = headers['x-api-key'];\n} else {\n  const xff = headers['x-forwarded-for'];\n  if (xff) {\n    // Always use FIRST value (real client IP)\n    identity = xff.split(',')[0].trim();\n  } else {\n    identity = headers['x-real-ip'] || 'unknown';\n  }\n}\n\n// Format: route:identity (prevents cross-endpoint pollution)\nconst identityKey = `${config.route_name}:${identity}`;\n\nreturn [{\n  json: {\n    identity_key: identityKey,\n    identity: identity,\n    rate_limit: config.rate_limit,\n    window_sec: config.window_sec\n  }\n}];"},"typeVersion":2},{"id":"c3bc52e5-b7b0-48f5-b353-6952c878cf64","name":"GuardCheck","type":"n8n-nodes-base.httpRequest","position":[5504,6016],"parameters":{"url":"=https://api.ainoflow.io/api/v1/guard/{{ encodeURIComponent($json.identity_key) }}/counter","method":"POST","options":{"timeout":5000},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpBearerAuth","queryParameters":{"parameters":[{"name":"rateMax","value":"={{ $json.rate_limit }}"},{"name":"rateWindow","value":"={{ $json.window_sec }}"},{"name":"returnSuccess","value":"true"},{"name":"failOpen","value":"true"},{"name":"allowPolicyOverwrite","value":"true"}]}},"credentials":{"httpBearerAuth":{"name":"Ainoflow"}},"typeVersion":4.2,"alwaysOutputData":true},{"id":"b0f570b9-074b-4f6c-a13b-ec22b97349d6","name":"IfAllowed","type":"n8n-nodes-base.if","position":[5776,6016],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"guard-allowed-check","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.allowed }}","rightValue":true}]}},"typeVersion":2.2},{"id":"b0fbb34c-5329-4d36-b1a8-2c6291989bd1","name":"BusinessLogic","type":"n8n-nodes-base.code","position":[6080,5760],"parameters":{"jsCode":"// ===== YOUR BUSINESS LOGIC HERE =====\n// Replace this node with your actual workflow logic.\n//\n// Access original webhook data:\n//   const body = $('Webhook').first().json.body;\n//   const headers = $('Webhook').first().json.headers;\n//   const query = $('Webhook').first().json.query;\n//\n// Guard decision details (from GuardCheck):\n//   const remaining = $('GuardCheck').first().json.remaining;\n//   const resetsIn = $('GuardCheck').first().json.resetsIn;\n\nconst body = $('Webhook').first().json.body;\n\nreturn [{\n  json: {\n    ok: true,\n    data: body || { message: \"Request processed successfully\" }\n  }\n}];"},"typeVersion":2},{"id":"09b05b88-3695-499d-8401-432390111f48","name":"RespondOk","type":"n8n-nodes-base.respondToWebhook","position":[6288,5760],"parameters":{"options":{"responseCode":200}},"typeVersion":1.1},{"id":"abbf7d98-4ba5-436d-9ffc-d27f26a7bc38","name":"BuildDeniedResponse","type":"n8n-nodes-base.set","position":[6096,6096],"parameters":{"options":{},"assignments":{"assignments":[{"id":"denied-ok","name":"ok","type":"boolean","value":false},{"id":"denied-error","name":"error","type":"string","value":"rate_limited"},{"id":"denied-retry","name":"retryAfter","type":"number","value":"={{ $json.resetsIn }}"}]}},"typeVersion":3.4},{"id":"40764d73-42fd-4730-ad69-a83a2bc7f65b","name":"RespondRateLimited","type":"n8n-nodes-base.respondToWebhook","position":[6288,6096],"parameters":{"options":{"responseCode":429,"responseHeaders":{"entries":[{"name":"Retry-After","value":"={{ $json.retryAfter }}"}]}}},"typeVersion":1.1}],"pinData":{},"connections":{"Config":{"main":[[{"node":"BuildIdentity","type":"main","index":0}]]},"Webhook":{"main":[[{"node":"Config","type":"main","index":0}]]},"IfAllowed":{"main":[[{"node":"BusinessLogic","type":"main","index":0}],[{"node":"BuildDeniedResponse","type":"main","index":0}]]},"GuardCheck":{"main":[[{"node":"IfAllowed","type":"main","index":0}]]},"BuildIdentity":{"main":[[{"node":"GuardCheck","type":"main","index":0}]]},"BusinessLogic":{"main":[[{"node":"RespondOk","type":"main","index":0}]]},"BuildDeniedResponse":{"main":[[{"node":"RespondRateLimited","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":17,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":2},"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.stickyNote":{"count":8},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Dmitrij Zykovic","username":"dmitrijz","bio":"","verified":true,"links":["https://www.ainovasystems.com"],"avatar":"https://gravatar.com/avatar/cb06c73208d9c0717caac00aa02c64fe4681e2edc4a8a8d534d0ef5377c98056?r=pg&d=retro&size=200"},"nodes":[{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":29,"name":"SecOps"}],"image":[]}}