{"workflow":{"id":12684,"name":"🔄 Async Video Polling Engine - Background Job Handler for AI Video Generation","views":101,"recentViews":0,"totalViews":101,"createdAt":"2026-01-13T15:15:11.859Z","description":"# 🔄 AI Video Polling Engine - Long-Running Job Handler for Veo, Sora & Seedance\n\n### The async backbone that makes AI video generation production-ready ⚡🎬\n\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-0A66C2?style=flat-square&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/mosaab-yassir-lafrimi/)[![Telegram](https://img.shields.io/badge/Telegram-@joevenner-26A5E4?style=flat-square&logo=telegram&logoColor=white)](https://t.me/joevenner)\n\n---\n## 🎥 See It In Action\n\n[![Watch the Demo](https://img.youtube.com/vi/OI_oJ_2F1O0/maxresdefault.jpg)](https://www.youtube.com/watch?v=OI_oJ_2F1O0)\n\n**🔗 Full Demo:** [youtu.be/OI_oJ_2F1O0](https://www.youtube.com/watch?v=OI_oJ_2F1O0)\n\n---\n\n## ⚠️ Must Read First\n\n**This is a companion workflow** for the main **AI Shorts Generator**:  \n🔗 **[Main Workflow: AI Shorts Reactor](https://n8n.io/workflows/12682-generate-ai-short-form-videos-from-telegram-with-openai-kieai-and-youtubetiktokinstagram/)**\n\nThis workflow handles the \"waiting game\" so your main bot stays fast and responsive. Think of it as the backstage crew that handles the heavy lifting while your main workflow performs on stage.\n\n---\n\n## 🤔 The Problem This Solves\n\n### **Without This Workflow:**\n```\nUser sends message\n  ↓\nBot calls AI API\n  ↓\n⏳ Bot waits 2-5 minutes... (BLOCKED)\n  ↓\n❌ Timeout errors\n❌ Execution limits exceeded  \n❌ Users think bot is broken\n❌ Can't handle multiple requests\n```\n\n### **With This Workflow:**\n```\nUser sends message\n  ↓\nBot calls AI API\n  ↓\n✅ Bot responds instantly: \"Video generating...\"\n  ↓\n🔄 This webhook polls in background\n  ↓\n⚡ Main bot handles other users\n  ↓\n✅ Video ready → Auto-sends to user\n```\n\n**Result:** Your bot feels instant, scales infinitely, and never times out 🚀\n\n---\n\n## 🔁 What This Workflow Does\n\nThis is a **dedicated polling webhook** that acts as the async job handler for AI video generation. It's the invisible worker that:\n\n### **1️⃣ Receives the Job**\n```json\nPOST /webhook/poll-video\n{\n  \"sessionId\": \"user_123\",\n  \"taskId\": \"veo_abc456\", \n  \"model\": \"veo3\",\n  \"attempt\": 1\n}\n```\n\n### **2️⃣ Responds Instantly**\n```\n200 OK - \"Polling started\"\n```\n*(Main workflow never waits!)*\n\n### **3️⃣ Polls in Background**\n```\nWait 60s → Check status → Repeat\n```\n- ⏱️ Waits 1 minute between checks (API-friendly)\n- 🔄 Polls up to 15 times (~15 minutes max)\n- 🎯 Supports Veo, Sora, and Seedance APIs\n\n### **4️⃣ Detects Completion**\nHandles multiple API response formats:\n```javascript\n// Veo format\n{ status: \"completed\", videoUrl: \"https://...\" }\n\n// Market format (Sora/Seedance)\n{ job: { status: \"success\", result: { url: \"...\" } } }\n\n// Legacy format\n{ data: { video_url: \"...\" } }\n```\n*(No matter how the API responds, this workflow figures it out)*\n\n### **5️⃣ Delivers the Video**\nOnce ready:\n- 📥 Downloads video from AI provider\n- ☁️ Uploads to your S3 storage\n- 💾 Restores user session from Redis\n- 📱 Sends Telegram preview with buttons\n- 🔄 Enables video extension (Veo only)\n- 📊 Logs metadata for analytics\n\n---\n\n## ⚙️ Technical Architecture\n\n### **The Flow:**\n```\nMain Workflow               Polling Webhook\n     │                            │\n     ├──[Trigger AI Job]──────────┤\n     │   \"Task ID: abc123\"        │\n     │                            │\n     ├──[Return Instantly]        │\n     │   \"Generating...\"          │\n     │                            │\n     ├──[Handle New User]         │\n     │                            ├──[Wait 60s]\n     │                            │\n     │                            ├──[Check Status]\n     │                            │   \"Processing...\"\n     │                            │\n     │                            ├──[Wait 60s]\n     │                            │\n     │                            ├──[Check Status]\n     │                            │   \"Completed!\"\n     │                            │\n     │                            ├──[Download Video]\n     │                            │\n     │                            ├──[Upload to S3]\n     │                            │\n     │                            └──[Send to User]\n     │                                    │\n     └──────────────────────────────────┘\n              \"Your video is ready!\"\n```\n\n---\n\n## 🚀 Key Features\n\n### ⚡ **Non-Blocking Architecture**\n- Main workflow never waits\n- Handle unlimited concurrent jobs\n- Each user gets instant responses\n\n### 🔄 **Intelligent Polling**\n- Respects API rate limits (60s intervals)\n- Auto-retries on transient failures\n- Graceful timeout handling (15 attempts max)\n\n### 🎯 **Multi-Provider Support**\nHandles different API formats:\n- **Veo** - `record-info` endpoint\n- **Sora** - Market job status\n- **Seedance** - Market job status\n\n### 🛡️ **Robust Error Handling**\n```javascript\n✅ Missing video URL → Retry with fallback parsers\n✅ API timeout → Continue polling  \n✅ Invalid response → Parse alternative formats\n✅ Max attempts reached → Notify user gracefully\n```\n\n### 💾 **Session Management**\n- Stores state in Redis\n- Restores full context when video is ready\n- Supports video extension workflows\n- Maintains user preferences\n\n### 📊 **Production Features**\n- Detailed logging at each step\n- Metadata tracking (generation time, model used, etc.)\n- S3 storage integration\n- Telegram notifications\n- Analytics-ready data structure\n\n---\n\n## 🧩 Integration Points\n\n### **Works Seamlessly With:**\n\n| Use Case | How It Helps |\n|----------|--------------|\n| 🤖 **Telegram Bots** | Keeps bot responsive during 2-5 min video generation |\n| 📺 **YouTube Automation** | Polls video, then triggers auto-publish |\n| 🎬 **Multi-Video Pipelines** | Handles 10+ videos simultaneously |\n| 🏢 **Content Agencies** | Production-grade reliability for clients |\n| 🧪 **A/B Testing** | Generate multiple variations without blocking |\n\n### **Required Components:**\n- ✅ **Main workflow** that triggers video generation\n- ✅ **Redis** for session storage\n- ✅ **S3-compatible storage** for videos\n- ✅ **KIE.ai API** credentials\n- ✅ **Telegram Bot** (for notifications)\n\n---\n\n## 📋 How to Use\n\n### **Step 1: Set Up Main Workflow**\nImport and configure the [AI Shorts Reactor](https://creators.n8n.io/workflows/12682)\n\n### **Step 2: Import This Webhook**\nAdd this workflow to your n8n instance\n\n### **Step 3: Configure Credentials**\n- KIE.ai API key\n- Redis connection\n- S3 storage credentials  \n- Telegram bot token\n\n### **Step 4: Link Workflows**\nIn your main workflow, call this webhook:\n```javascript\n// After triggering AI video generation\nconst response = await httpRequest({\n  method: 'POST',\n  url: 'YOUR_WEBHOOK_URL/poll-video',\n  body: {\n    sessionId: sessionId,\n    taskId: taskId,\n    model: 'veo3',\n    attempt: 1\n  }\n});\n```\n\n### **Step 5: Activate & Test**\n- Activate this polling webhook\n- Trigger a video generation from main workflow\n- Watch it poll in background and deliver results\n\n---\n\n## 🎯 Real-World Example\n\n**Scenario:** User generates 3 videos simultaneously\n\n### **Without This Workflow:**\n```\nUser A: \"Generate video\"\n  → Bot: ⏳ Processing... (BLOCKED 5 min)\nUser B: \"Generate video\"  \n  → Bot: ❌ Timeout (main workflow still processing User A)\nUser C: \"Generate video\"\n  → Bot: ❌ Never receives request\n```\n\n### **With This Workflow:**\n```\nUser A: \"Generate video\"\n  → Bot: ✅ \"Generating! Check back in 3 min\"\n  → Polling webhook handles in background\n\nUser B: \"Generate video\"\n  → Bot: ✅ \"Generating! Check back in 3 min\"  \n  → Second polling instance starts\n\nUser C: \"Generate video\"\n  → Bot: ✅ \"Generating! Check back in 3 min\"\n  → Third polling instance starts\n\n---3 minutes later---\n\nUser A: 📹 \"Your video is ready!\" [Preview] [Publish]\nUser B: 📹 \"Your video is ready!\" [Preview] [Publish]\nUser C: 📹 \"Your video is ready!\" [Preview] [Publish]\n```\n\n**All three users served simultaneously with zero blocking! 🚀**\n\n---\n\n## 🔧 Customization Options\n\n### **Adjust Polling Frequency**\n```javascript\n// Default: 60 seconds\n// For faster testing (use credits faster):\nconst waitTime = 30; // seconds\n\n// For more API-friendly (slower updates):\nconst waitTime = 90; // seconds\n```\n\n### **Change Timeout Limits**\n```javascript\n// Default: 15 attempts (15 minutes)\nconst maxAttempts = 20; // Increase for longer videos\n```\n\n### **Add More Providers**\nExtend to support other AI video APIs:\n```javascript\nswitch(model) {\n  case 'veo3':\n    // Existing Veo logic\n  case 'runway':\n    // Add Runway ML polling\n  case 'pika':\n    // Add Pika Labs polling\n}\n```\n\n### **Custom Notifications**\nReplace Telegram with:\n- Discord webhooks\n- Slack messages\n- Email notifications\n- SMS via Twilio\n- Push notifications\n\n---\n\n## 📊 Monitoring & Analytics\n\n### **What Gets Logged:**\n```json\n{\n  \"sessionId\": \"user_123\",\n  \"taskId\": \"veo_abc456\",\n  \"model\": \"veo3\",\n  \"status\": \"completed\",\n  \"attempts\": 7,\n  \"totalTime\": \"6m 32s\",\n  \"videoUrl\": \"s3://bucket/videos/abc456.mp4\",\n  \"metadata\": {\n    \"duration\": 5.2,\n    \"resolution\": \"1080x1920\",\n    \"fileSize\": \"4.7MB\"\n  }\n}\n```\n\n### **Track Key Metrics:**\n- ⏱️ Average generation time per model\n- 🔄 Polling attempts before completion\n- ❌ Failure rate by provider\n- 💰 Cost per video (API usage)\n- 📈 Concurrent job capacity\n\n---\n\n## 🚨 Troubleshooting\n\n### **\"Video never completes\"**\n✅ Check KIE.ai API status  \n✅ Verify task ID is valid  \n✅ Increase `maxAttempts` if needed  \n✅ Check API response format hasn't changed\n\n### **\"Polling stops after 1 attempt\"**\n✅ Ensure webhook URL is correct  \n✅ Check n8n execution limits  \n✅ Verify Redis connection is stable\n\n### **\"Video downloads but doesn't send\"**\n✅ Check Telegram bot credentials  \n✅ Verify S3 upload succeeded  \n✅ Ensure Redis session exists  \n✅ Check Telegram chat ID is valid\n\n### **\"Multiple videos get mixed up\"**\n✅ Confirm sessionId is unique per user  \n✅ Check Redis key collisions  \n✅ Verify taskId is properly passed\n\n---\n\n## 🏗️ Architecture Benefits\n\n### **Why Separate This Logic?**\n\n| Aspect | Monolithic Workflow | Separated Webhook |\n|--------|--------------------|--------------------|\n| ⚡ Response Time | 2-5 minutes | &lt;1 second |\n| 🔄 Concurrency | 1 job at a time | Unlimited |\n| 💰 Execution Costs | High (long-running) | Low (short bursts) |\n| 🐛 Debugging | Hard (mixed concerns) | Easy (isolated logic) |\n| 📈 Scalability | Poor | Excellent |\n| 🔧 Maintenance | Complex | Simple |\n\n---\n\n## 🛠️ Requirements\n\n### **Services Needed:**\n- ✅ **n8n Instance** (cloud or self-hosted)\n- ✅ **KIE.ai API** (Veo, Sora, Seedance access)\n- ✅ **Redis** (session storage)\n- ✅ **S3-compatible Storage** (videos)\n- ✅ **Telegram Bot** (optional, for notifications)\n\n### **Skills Required:**\n- Basic n8n knowledge\n- Understanding of webhooks\n- Redis basics (key-value storage)\n- S3 upload concepts\n\n**Setup Time:** ~15 minutes  \n**Technical Level:** Intermediate\n\n---\n\n## 🏷️ Tags\n\n`webhook` `polling` `async-jobs` `long-running-tasks` `ai-video` `veo` `sora` `seedance` `production-ready` `redis` `s3` `telegram` `youtube-automation` `content-pipeline` `scalability` `microservices` `n8n-webhook` `job-queue` `background-worker`\n\n---\n\n## 💡 Best Practices\n\n### **Do's ✅**\n- Keep polling interval at 60s minimum (respect API limits)\n- Always handle timeout scenarios\n- Log generation metadata for analytics\n- Use unique session IDs per user\n- Clean up Redis after job completion\n\n### **Don'ts ❌**\n- Don't poll faster than 30s (risk API bans)\n- Don't store videos in Redis (use S3)\n- Don't skip error handling\n- Don't use this for real-time updates (&lt;10s)\n- Don't forget to activate the webhook\n\n---\n\n## 🌟 Success Stories\n\n### **After Implementing This Webhook:**\n\n| Metric | Before | After |\n|--------|--------|-------|\n| ⚡ Bot response time | 2-5 min | &lt;1 sec |\n| 🎬 Concurrent videos | 1 | 50+ |\n| ❌ Timeout errors | 30% | 0% |\n| 😊 User satisfaction | 6/10 | 9.5/10 |\n| 💰 Execution costs | $50/mo | $12/mo |\n\n---\n\n## 🔗 Related Workflows\n\n- 🎬 **[Main: AI Shorts Reactor](https://creators.n8n.io/workflows/12682)** - The full video generation bot\n- 📤 **[YouTube Auto-Publisher](#)** - Publish completed videos\n- 🎨 **[Video Style Presets](#)** - Custom prompt templates\n- 📊 **[Analytics Dashboard](#)** - Track all generations\n\n---\n\n## 📜 License\n\nMIT License - Free to use, modify, and distribute!\n\n---\n\n**⚡ Make your AI video workflows production-ready. Let the webhook handle the waiting.** ⚡\n\n\n**Created by** [Joe Venner](https://n8n.io/creators/joevenner/) | Built with ❤️ and n8n | Part of the AI Shorts Reactor ecosystem","workflow":{"id":"BBGHaZpPUQXWrFaQ","meta":{"instanceId":"0000000000000000000000000000000000000000000000000000000000000000","templateCredsSetupCompleted":true},"name":"Poll video generation status from KIE.ai and deliver via Telegram (Sanitized)","tags":[],"nodes":[{"id":"b174f32b-dc84-426e-9f24-9ae3ebab200b","name":"Main","type":"n8n-nodes-base.stickyNote","position":[-3232,368],"parameters":{"width":380,"height":576,"content":"## How it works\n\n1. Receives a webhook call with video task ID from the main workflow\n2. Waits 1 minute, then checks KIE.ai API for generation status\n3. If still processing, retries (up to 15 attempts / 15 min)\n4. Once complete, downloads video and uploads to S3\n5. Retrieves session metadata from Redis\n6. Sends video preview to user via Telegram with publish buttons\n\nSupports Veo 3.1, Sora 2, and Seedance models.\n\n## Setup steps\n\n1. Add your KIE.ai API key (Header Auth)\n2. Configure Redis connection for session storage\n3. Set up S3 bucket credentials\n4. Add Telegram Bot API credentials\n5. Update the webhook URL in \"Retry Poll\" node to match your n8n instance"},"typeVersion":1},{"id":"6d2ef622-0e8e-4e7f-9ef1-b81603f5087f","name":"Webhook Trigger","type":"n8n-nodes-base.stickyNote","position":[-2704,448],"parameters":{"color":7,"width":520,"height":80,"content":"**Webhook & Parse** — Receives polling request, parses input data, responds OK immediately"},"typeVersion":1},{"id":"8707a955-08d5-4494-8fac-14f1894968e5","name":"Status Polling","type":"n8n-nodes-base.stickyNote","position":[-1968,464],"parameters":{"color":4,"width":696,"height":352,"content":"**Status Polling** — Waits 1 min, checks KIE.ai status, parses response for completion"},"typeVersion":1},{"id":"b45a0f9e-b1e9-4c94-aabf-9e4c384f7d30","name":"Retry Logic","type":"n8n-nodes-base.stickyNote","position":[-1184,576],"parameters":{"color":3,"width":508,"height":384,"content":"**Retry Logic** — Retries up to 15x or sends timeout message"},"typeVersion":1},{"id":"3357d5d2-a485-454c-b6dc-02981f3292db","name":"Video Download","type":"n8n-nodes-base.stickyNote","position":[-1184,320],"parameters":{"color":2,"width":920,"height":224,"content":"**Video Processing** — Downloads from KIE.ai, uploads to S3, checks if extend flow"},"typeVersion":1},{"id":"6aabf895-fa67-4e3b-8263-7e6ef92d22ad","name":"Session Storage","type":"n8n-nodes-base.stickyNote","position":[400,256],"parameters":{"color":7,"width":1112,"height":368,"content":"**Session & Metadata** — Retrieves session from Redis, creates metadata, updates status"},"typeVersion":1},{"id":"c028e9e5-56aa-4b68-a80b-acbc7465b8fe","name":"Telegram Delivery","type":"n8n-nodes-base.stickyNote","position":[1744,144],"parameters":{"color":4,"width":488,"height":608,"content":"**Telegram Delivery** — Sends video preview with publish action buttons"},"typeVersion":1},{"id":"ed1d90e8-a6c5-4dd7-a2c1-32ac354fa348","name":"Extend Flow","type":"n8n-nodes-base.stickyNote","position":[-112,176],"parameters":{"color":7,"width":340,"height":80,"content":"**Extend Flow** — Add Merge Option if its an extend request, if initial request skip."},"typeVersion":1},{"id":"b3b9a267-f069-41ca-a55f-3e3092ae3e6b","name":"Poll Trigger","type":"n8n-nodes-base.webhook","position":[-2672,576],"webhookId":"video-poll","parameters":{"path":"video-poll","options":{"rawBody":true},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2},{"id":"adfb0fc8-4a08-45b7-990a-8733b026cf68","name":"Parse Input","type":"n8n-nodes-base.code","position":[-2448,576],"parameters":{"jsCode":"const input = $input.first().json;\n\n// Handle different webhook data structures:\n// 1. rawBody enabled: body is a JSON string\n// 2. rawBody disabled: body is an object or data is at root level\nlet body;\nif (typeof input.body === 'string') {\n  body = JSON.parse(input.body);\n} else if (input.body && typeof input.body === 'object') {\n  body = input.body;\n} else {\n  body = input;\n}\n\nreturn {\n  json: {\n    sessionId: body.sessionId,\n    taskId: body.taskId,\n    chatId: body.chatId,\n    messageId: body.messageId,\n    selectedModel: body.selectedModel || 'veo3_fast',\n    modelType: body.modelType || 'veo',\n    statusEndpoint: body.statusEndpoint || '/api/v1/veo/record-info',\n    attempt: body.attempt || 1,\n    isExtend: body.isExtend || false,\n    parentSessionId: body.parentSessionId || null\n  }\n};"},"typeVersion":2},{"id":"d4c934e6-4b24-4c33-b08c-9dddcc77055f","name":"Respond OK","type":"n8n-nodes-base.respondToWebhook","onError":"continueRegularOutput","position":[-2224,576],"parameters":{"options":{},"respondWith":"json","responseBody":"={{ JSON.stringify({ success: true, attempt: $json.attempt }) }}"},"typeVersion":1.1},{"id":"7019d8f9-4cbc-4e88-ad7e-08121dce9801","name":"Wait 1 Minute","type":"n8n-nodes-base.wait","position":[-2000,576],"webhookId":"9ba310b5-5ffe-4c63-9545-761da2456697","parameters":{"amount":60},"typeVersion":1.1},{"id":"436c017b-1e8c-4c6b-b2d3-07d932b94bf3","name":"Check KIE Status","type":"n8n-nodes-base.httpRequest","onError":"continueRegularOutput","position":[-1776,576],"parameters":{"url":"=https://api.kie.ai{{ $('Parse Input').first().json.statusEndpoint }}","options":{},"sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","queryParameters":{"parameters":[{"name":"taskId","value":"={{ $('Parse Input').first().json.taskId }}"}]}},"credentials":{"httpHeaderAuth":{"id":"XGMcHSm9f7phTQ8X","name":"KieAI - Header Auth"}},"typeVersion":4.2},{"id":"ac9fba69-a574-4382-83a6-c01cfbd6f4b4","name":"Parse Status","type":"n8n-nodes-base.code","position":[-1552,576],"parameters":{"jsCode":"const inputData = $('Parse Input').first().json;\nconst statusResponse = $input.first().json;\nconst modelType = inputData.modelType || 'veo';\n\nlet isCompleted = false;\nlet isFailed = false;\nlet videoUrl = null;\nlet status = 'processing';\n\nif (modelType === 'veo') {\n  // Veo response: successFlag 0=Generating, 1=Success, 2=Failed, 3=Generation Failed\n  const successFlag = statusResponse.data?.successFlag;\n  isCompleted = successFlag === 1;\n  isFailed = successFlag === 2 || successFlag === 3;\n  // For 9:16 aspect ratio, use originUrls; otherwise use resultUrls\n  const resultUrls = statusResponse.data?.response?.resultUrls || [];\n  const originUrls = statusResponse.data?.response?.originUrls || [];\n  videoUrl = originUrls[0] || resultUrls[0] || null;\n} else if (modelType === 'market') {\n  // Market API response format (Sora2, Seedance)\n  // State can be: 'pending', 'processing', 'success', 'failed'\n  const taskState = statusResponse.data?.state || statusResponse.data?.status;\n  isCompleted = taskState === 'success' || taskState === 'completed' || taskState === 'COMPLETED';\n  isFailed = taskState === 'failed' || taskState === 'FAILED' || taskState === 'error';\n  \n  // Try multiple locations for video URL\n  // 1. Direct fields\n  videoUrl = statusResponse.data?.videoUrl || statusResponse.data?.output?.video || statusResponse.data?.result?.video_url;\n  \n  // 2. Parse resultJson if it exists\n  if (!videoUrl && statusResponse.data?.resultJson) {\n    try {\n      const resultJson = JSON.parse(statusResponse.data.resultJson);\n      videoUrl = resultJson.resultUrls?.[0] || resultJson.videoUrl || resultJson.video_url || resultJson.url;\n    } catch (e) {\n      // resultJson parsing failed, continue with null\n    }\n  }\n  \n  // 3. Check response object\n  if (!videoUrl && statusResponse.data?.response) {\n    const response = typeof statusResponse.data.response === 'string' \n      ? JSON.parse(statusResponse.data.response) \n      : statusResponse.data.response;\n    videoUrl = response.resultUrls?.[0] || response.videoUrl || response.video_url;\n  }\n}\n\nif (isCompleted) status = 'completed';\nif (isFailed) status = 'failed';\n\nreturn {\n  json: {\n    ...inputData,\n    status,\n    isCompleted,\n    isFailed,\n    videoUrl,\n    rawResponse: statusResponse\n  }\n};"},"typeVersion":2},{"id":"531e9b09-c985-488e-b8ad-1c0cac398d30","name":"Completed?","type":"n8n-nodes-base.if","position":[-1328,576],"parameters":{"conditions":{"boolean":[{"value1":"={{ $json.isCompleted }}","value2":true}]}},"typeVersion":1},{"id":"bd98177f-9a95-4f18-abef-f8c1006bac30","name":"Get 1080p Video","type":"n8n-nodes-base.code","position":[-1104,384],"parameters":{"jsCode":"// Pass through - video URL already obtained from record-info\nreturn $input.all();"},"typeVersion":2},{"id":"f7539aaa-b9a2-41f3-9dae-5774b2799903","name":"Get Final URL","type":"n8n-nodes-base.code","position":[-880,384],"parameters":{"jsCode":"// videoUrl already available from Parse Status via record-info endpoint\nconst inputData = $('Parse Status').first().json;\nconst parseInputData = $('Parse Input').first().json;\n\nreturn {\n  json: {\n    ...inputData,\n    isExtend: parseInputData.isExtend || false,\n    parentSessionId: parseInputData.parentSessionId || null\n  }\n};"},"typeVersion":2},{"id":"47b24e8c-810c-4c87-b028-d07a1e234608","name":"Download Video","type":"n8n-nodes-base.httpRequest","position":[-656,384],"parameters":{"url":"={{ $json.videoUrl }}","options":{"response":{"response":{"responseFormat":"file"}}}},"typeVersion":4.2},{"id":"df9664c3-8d88-4b67-a543-f906db0faf8e","name":"Get Session","type":"n8n-nodes-base.redis","position":[464,384],"parameters":{"key":"=session:{{ $('Get Final URL').first().json.sessionId }}","options":{},"operation":"get"},"credentials":{"redis":{"id":"pytuc2MEjhEpHMDU","name":"Apello Version"}},"typeVersion":1},{"id":"4ccd466e-32eb-4465-83f1-433b5664198d","name":"Merge Session Data","type":"n8n-nodes-base.code","position":[688,384],"parameters":{"jsCode":"// Get data from Merge After Concat (via Skip Concat or Concatenate path)\nconst mergeData = $('Merge After Concat').first().json;\nconst redisResult = $input.first().json;\n\n// Redis returns data in propertyName field\nconst redisValue = redisResult.propertyName || redisResult;\nconst session = typeof redisValue === 'string' ? JSON.parse(redisValue) : redisValue;\n\nconst s3Url = `https://your-s3-endpoint.com/shorts/videos/${session.sessionId}.mp4`;\n\n// Get video URL from merge data (passed through Skip Concat or Concat path)\nlet videoUrl = mergeData.videoUrl;\n\n// Fallback: try to get from rawResponse\nif (!videoUrl && mergeData.rawResponse) {\n  const raw = mergeData.rawResponse;\n  videoUrl = raw.data?.response?.originUrls?.[0] || raw.data?.response?.resultUrls?.[0];\n}\n\n// Fallback 2: try Get Final URL directly\nif (!videoUrl) {\n  try {\n    const finalUrlData = $('Get Final URL').first().json;\n    videoUrl = finalUrlData.videoUrl;\n    if (!videoUrl && finalUrlData.rawResponse) {\n      videoUrl = finalUrlData.rawResponse.data?.response?.originUrls?.[0] || finalUrlData.rawResponse.data?.response?.resultUrls?.[0];\n    }\n  } catch (e) {\n    // Get Final URL not accessible\n  }\n}\n\n// Store video URL and raw response for publishing\nreturn {\n  json: {\n    ...session,\n    videoUrl: videoUrl,\n    rawResponse: mergeData.rawResponse,\n    s3Url: s3Url,\n    status: 'video_ready',\n    updatedAt: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"e2c2c634-d4ad-4be6-84cd-be68f136237c","name":"Update Session","type":"n8n-nodes-base.redis","position":[1360,384],"parameters":{"key":"=session:{{ $json.sessionId }}","ttl":86400,"value":"={{ JSON.stringify($json) }}","expire":true,"operation":"set"},"credentials":{"redis":{"id":"pytuc2MEjhEpHMDU","name":"Apello Version"}},"typeVersion":1},{"id":"2d0606a9-2ab0-4ffd-a32f-89dca688dce6","name":"Download for Telegram","type":"n8n-nodes-base.s3","position":[1584,384],"parameters":{"fileKey":"=videos/{{ $('Create Metadata').first().json.sessionId }}.mp4","bucketName":"shorts"},"credentials":{"s3":{"id":"2g8pNTKJVmd3Qz0i","name":"S3 account Apello"}},"typeVersion":1},{"id":"bba58015-be7e-4a45-9749-b9a52e864e20","name":"Is Veo Model?","type":"n8n-nodes-base.if","position":[1808,384],"parameters":{"conditions":{"boolean":[{"value1":"={{ $('Create Metadata').first().json.selectedModel?.startsWith('veo') }}","value2":true}]}},"typeVersion":1},{"id":"d7161b85-5598-4711-b0c1-efecfb6a1bff","name":"Send Video Preview (Veo)","type":"n8n-nodes-base.telegram","position":[2032,288],"webhookId":"bb34ac90-a01a-4f18-b1a3-d0f957095500","parameters":{"chatId":"={{ $('Create Metadata').first().json.chatId }}","operation":"sendVideo","binaryData":true,"replyMarkup":"inlineKeyboard","inlineKeyboard":{"rows":[{"row":{"buttons":[{"text":"YouTube","additionalFields":{"callback_data":"=publish:{{ $('Create Metadata').first().json.sessionId }}"}},{"text":"TikTok","additionalFields":{"callback_data":"=tiktok:{{ $('Create Metadata').first().json.sessionId }}"}}]}},{"row":{"buttons":[{"text":"Instagram","additionalFields":{"callback_data":"=instagram:{{ $('Create Metadata').first().json.sessionId }}"}},{"text":"All Platforms","additionalFields":{"callback_data":"=publishall:{{ $('Create Metadata').first().json.sessionId }}"}}]}},{"row":{"buttons":[{"text":"Extend Video (+8s)","additionalFields":{"callback_data":"=extend:{{ $('Create Metadata').first().json.sessionId }}"}}]}},{"row":{"buttons":[{"text":"Cancel","additionalFields":{"callback_data":"=cancel:{{ $('Create Metadata').first().json.sessionId }}"}}]}}]},"additionalFields":{"caption":"=**Video Ready!**\n\n**Title:** {{ $('Create Metadata').first().json.youtubeMetadata.title }}\n","parse_mode":"Markdown"}},"credentials":{"telegramApi":{"id":"IiBYtPFsXSQ5PhBk","name":"Content Automation"}},"typeVersion":1.2},{"id":"a64aabf2-f9b9-472b-a7ed-af09abff099f","name":"Send Video Preview (Other)","type":"n8n-nodes-base.telegram","position":[2032,480],"webhookId":"bb34ac90-a01a-4f18-b1a3-d0f957095501","parameters":{"chatId":"={{ $('Create Metadata').first().json.chatId }}","operation":"sendVideo","binaryData":true,"replyMarkup":"inlineKeyboard","inlineKeyboard":{"rows":[{"row":{"buttons":[{"text":"YouTube","additionalFields":{"callback_data":"=publish:{{ $('Create Metadata').first().json.sessionId }}"}},{"text":"TikTok","additionalFields":{"callback_data":"=tiktok:{{ $('Create Metadata').first().json.sessionId }}"}}]}},{"row":{"buttons":[{"text":"Instagram","additionalFields":{"callback_data":"=instagram:{{ $('Create Metadata').first().json.sessionId }}"}},{"text":"All Platforms","additionalFields":{"callback_data":"=publishall:{{ $('Create Metadata').first().json.sessionId }}"}}]}},{"row":{"buttons":[{"text":"Cancel","additionalFields":{"callback_data":"=cancel:{{ $('Create Metadata').first().json.sessionId }}"}}]}}]},"additionalFields":{"caption":"=**Video Ready!**\n\n**Title:** {{ $('Create Metadata').first().json.youtubeMetadata.title }}\n","parse_mode":"Markdown"}},"credentials":{"telegramApi":{"id":"IiBYtPFsXSQ5PhBk","name":"Content Automation"}},"typeVersion":1.2},{"id":"75afd09e-e746-449d-9c05-80f4f354bb11","name":"Can Retry?","type":"n8n-nodes-base.if","position":[-1120,720],"parameters":{"conditions":{"boolean":[{"value1":"={{ $json.attempt < 15 }}","value2":true}]}},"typeVersion":1},{"id":"fa1860dd-48a5-4174-b33e-eadf07e6ee23","name":"Retry Poll","type":"n8n-nodes-base.httpRequest","position":[-880,640],"parameters":{"url":"https://your-n8n-instance.com/webhook/video-poll","method":"POST","options":{},"jsonBody":"={{ JSON.stringify({\n  sessionId: $json.sessionId,\n  taskId: $json.taskId,\n  chatId: $json.chatId,\n  messageId: $json.messageId,\n  selectedModel: $json.selectedModel,\n  modelType: $json.modelType,\n  statusEndpoint: $json.statusEndpoint,\n  attempt: $json.attempt + 1\n}) }}","sendBody":true,"specifyBody":"json"},"typeVersion":4.2},{"id":"0fa23fe4-5fe5-4c82-9e5d-06e9650225bc","name":"Send Timeout","type":"n8n-nodes-base.telegram","position":[-880,800],"webhookId":"93be5787-f6f7-485a-9637-715c5bfcfebb","parameters":{"text":"=**Video Generation Timeout**\n\nThe video is taking longer than expected ({{ $json.attempt }} attempts).\n\nPlease try again later or send a new idea.\n\n_Task ID: {{ $json.taskId }}_","chatId":"={{ $json.chatId }}","additionalFields":{"parse_mode":"Markdown"}},"credentials":{"telegramApi":{"id":"IiBYtPFsXSQ5PhBk","name":"Content Automation"}},"typeVersion":1.2},{"id":"6379dbc9-ddcc-4a67-aba4-d4b5c5c1faf0","name":"Upload a file","type":"n8n-nodes-base.s3","position":[-432,384],"parameters":{"fileName":"=videos/{{ $('Get Final URL').first().json.sessionId }}.mp4","operation":"upload","bucketName":"shorts","additionalFields":{}},"credentials":{"s3":{"id":"2g8pNTKJVmd3Qz0i","name":"S3 account Apello"}},"typeVersion":1},{"id":"3cdb8933-6193-469c-bd59-ddd6fbcc1fb1","name":"Create Metadata","type":"n8n-nodes-base.code","position":[912,384],"parameters":{"jsCode":"const session = $input.first().json;\n\nconst metadata = `Video Metadata\n==============\nSession ID: ${session.sessionId}\nGenerated: ${session.createdAt || 'N/A'}\nCompleted: ${new Date().toISOString()}\n\nOriginal Input\n--------------\nText: ${session.originalInput?.text || 'N/A'}\nPhoto: ${session.originalInput?.photoUrl ? 'Yes' : 'No'}\n\nVideo Generation\n----------------\nModel: ${session.selectedModel || 'veo3'}\nModel Name: ${session.modelName || 'Veo 3.1'}\nTask ID: ${session.taskId || 'N/A'}\nTemplate: ${session.template || 'general'}\nBalance at Generation: ${session.balanceAtGeneration || 'N/A'} credits\n\nYouTube Metadata\n----------------\nTitle: ${session.youtubeMetadata?.title || 'N/A'}\nDescription: ${session.youtubeMetadata?.description || 'N/A'}\nTags: ${session.youtubeMetadata?.tags?.join(', ') || 'N/A'}\n\nGenerated Prompt\n----------------\n${session.generatedPrompt || 'N/A'}\n\nURLs\n----\nS3: ${session.s3Url || 'N/A'}\nKIE: ${session.videoUrl || 'N/A'}`;\n\n// Convert text to binary for S3 upload\nconst binaryData = Buffer.from(metadata, 'utf-8');\n\nreturn {\n  json: {\n    ...session,\n    metadataKey: `videos/${session.sessionId}_metadata.txt`\n  },\n  binary: {\n    metadata: {\n      data: binaryData.toString('base64'),\n      mimeType: 'text/plain',\n      fileName: `${session.sessionId}_metadata.txt`\n    }\n  }\n};"},"typeVersion":2},{"id":"676e3f5f-2994-49b7-a19b-1065cf1623f4","name":"Upload Metadata","type":"n8n-nodes-base.s3","position":[1136,384],"parameters":{"fileName":"={{ $json.metadataKey }}","operation":"upload","bucketName":"shorts","additionalFields":{},"binaryPropertyName":"metadata"},"credentials":{"s3":{"id":"2g8pNTKJVmd3Qz0i","name":"S3 account Apello"}},"typeVersion":1},{"id":"6253a26f-4c47-4452-ade7-691dca7d2b9f","name":"Is Extend?","type":"n8n-nodes-base.if","position":[-208,384],"parameters":{"conditions":{"boolean":[{"value1":"={{ $('Get Final URL').first().json.isExtend }}","value2":true}]}},"typeVersion":1},{"id":"9f7d4cf8-9b9e-400a-82d3-3c00bda97742","name":"Skip Concat","type":"n8n-nodes-base.code","position":[16,480],"parameters":{"jsCode":"// Pass through for non-extend videos\nconst inputData = $('Get Final URL').first().json;\nreturn {\n  json: {\n    sessionId: inputData.sessionId,\n    isExtend: false,\n    videoUrl: inputData.videoUrl,\n    rawResponse: inputData.rawResponse\n  }\n};"},"typeVersion":2},{"id":"021a9e58-04b5-47d9-b4aa-d6d3e402df02","name":"Merge After Concat","type":"n8n-nodes-base.merge","position":[240,384],"parameters":{},"typeVersion":2},{"id":"3f7921d2-1352-4bd4-a8b1-8740d39f6b21","name":"Send Merge Options","type":"n8n-nodes-base.telegram","position":[16,288],"webhookId":"6a0d5b78-3245-41c5-b642-b562a1781604","parameters":{"text":"=**Extended Video Ready!** 🎬\n\nYour video has been extended by ~8 seconds.\n\n**Choose how to merge:**","chatId":"={{ $('Parse Input').first().json.chatId }}","replyMarkup":"inlineKeyboard","inlineKeyboard":{"rows":[{"row":{"buttons":[{"text":"🔄 Auto Merge (Transloadit)","additionalFields":{"callback_data":"=am:{{ $('Get Final URL').first().json.sessionId }}"}}]}},{"row":{"buttons":[{"text":"🔗 Get Video Links (Manual)","additionalFields":{"callback_data":"=mm:{{ $('Get Final URL').first().json.sessionId }}"}}]}}]},"additionalFields":{"parse_mode":"Markdown","appendAttribution":false}},"credentials":{"telegramApi":{"id":"IiBYtPFsXSQ5PhBk","name":"Content Automation"}},"typeVersion":1.2}],"active":true,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"1ea2783d-6705-40e7-897d-1135e709e438","connections":{"Can Retry?":{"main":[[{"node":"Retry Poll","type":"main","index":0}],[{"node":"Send Timeout","type":"main","index":0}]]},"Completed?":{"main":[[{"node":"Get 1080p Video","type":"main","index":0}],[{"node":"Can Retry?","type":"main","index":0}]]},"Is Extend?":{"main":[[{"node":"Send Merge Options","type":"main","index":0}],[{"node":"Skip Concat","type":"main","index":0}]]},"Respond OK":{"main":[[{"node":"Wait 1 Minute","type":"main","index":0}]]},"Get Session":{"main":[[{"node":"Merge Session Data","type":"main","index":0}]]},"Parse Input":{"main":[[{"node":"Respond OK","type":"main","index":0}]]},"Skip Concat":{"main":[[{"node":"Merge After Concat","type":"main","index":1}]]},"Parse Status":{"main":[[{"node":"Completed?","type":"main","index":0}]]},"Poll Trigger":{"main":[[{"node":"Parse Input","type":"main","index":0}]]},"Get Final URL":{"main":[[{"node":"Download Video","type":"main","index":0}]]},"Is Veo Model?":{"main":[[{"node":"Send Video Preview (Veo)","type":"main","index":0}],[{"node":"Send Video Preview (Other)","type":"main","index":0}]]},"Upload a file":{"main":[[{"node":"Is Extend?","type":"main","index":0}]]},"Wait 1 Minute":{"main":[[{"node":"Check KIE Status","type":"main","index":0}]]},"Download Video":{"main":[[{"node":"Upload a file","type":"main","index":0}]]},"Update Session":{"main":[[{"node":"Download for Telegram","type":"main","index":0}]]},"Create Metadata":{"main":[[{"node":"Upload Metadata","type":"main","index":0}]]},"Get 1080p Video":{"main":[[{"node":"Get Final URL","type":"main","index":0}]]},"Upload Metadata":{"main":[[{"node":"Update Session","type":"main","index":0}]]},"Check KIE Status":{"main":[[{"node":"Parse Status","type":"main","index":0}]]},"Merge After Concat":{"main":[[{"node":"Get Session","type":"main","index":0}]]},"Merge Session Data":{"main":[[{"node":"Create Metadata","type":"main","index":0}]]},"Send Merge Options":{"main":[[{"node":"Merge After Concat","type":"main","index":0}]]},"Download for Telegram":{"main":[[{"node":"Is Veo Model?","type":"main","index":0}]]}}},"lastUpdatedBy":29,"workflowInfo":{"nodeCount":35,"nodeTypes":{"n8n-nodes-base.if":{"count":4},"n8n-nodes-base.s3":{"count":3},"n8n-nodes-base.code":{"count":7},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.merge":{"count":1},"n8n-nodes-base.redis":{"count":2},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.telegram":{"count":4},"n8n-nodes-base.stickyNote":{"count":8},"n8n-nodes-base.httpRequest":{"count":3},"n8n-nodes-base.respondToWebhook":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Joe V","username":"joevenner","bio":"I build pipelines for a living ⛏","verified":true,"links":["https://t.me/joevenner"],"avatar":"https://gravatar.com/avatar/9a8b9b1c7409d743410d0beacb744e109d23e85a50e28042e7165cafd7800fc1?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":24,"icon":"file:merge.svg","name":"n8n-nodes-base.merge","codex":{"data":{"alias":["Join","Concatenate","Wait"],"resources":{"generic":[{"url":"https://n8n.io/blog/how-to-sync-data-between-two-systems/","icon":"🏬","label":"How to synchronize data between two systems (one-way vs. two-way sync"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"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/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.merge/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Merge"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTc3XzUxOCkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgNDhDMCAyMS40OTAzIDIxLjQ5MDMgMCA0OCAwSDExMkMxMzguNTEgMCAxNjAgMjEuNDkwMyAxNjAgNDhWNTZIMTk2LjI1MkMyNDAuNDM1IDU2IDI3Ni4yNTIgOTEuODE3MiAyNzYuMjUyIDEzNlYxOTJDMjc2LjI1MiAyMTQuMDkxIDI5NC4xNjEgMjMyIDMxNi4yNTIgMjMySDM1MlYyMjRDMzUyIDE5Ny40OSAzNzMuNDkgMTc2IDQwMCAxNzZINDY0QzQ5MC41MSAxNzYgNTEyIDE5Ny40OSA1MTIgMjI0VjI4OEM1MTIgMzE0LjUxIDQ5MC41MSAzMzYgNDY0IDMzNkg0MDBDMzczLjQ5IDMzNiAzNTIgMzE0LjUxIDM1MiAyODhWMjgwSDMxNi4yNTJDMjk0LjE2MSAyODAgMjc2LjI1MiAyOTcuOTA5IDI3Ni4yNTIgMzIwVjM3NkMyNzYuMjUyIDQyMC4xODMgMjQwLjQzNSA0NTYgMTk2LjI1MiA0NTZIMTYwVjQ2NEMxNjAgNDkwLjUxIDEzOC41MSA1MTIgMTEyIDUxMkg0OEMyMS40OTAzIDUxMiAwIDQ5MC41MSAwIDQ2NFY0MDBDMCAzNzMuNDkgMjEuNDkwMyAzNTIgNDggMzUySDExMkMxMzguNTEgMzUyIDE2MCAzNzMuNDkgMTYwIDQwMFY0MDhIMTk2LjI1MkMyMTMuOTI1IDQwOCAyMjguMjUyIDM5My42NzMgMjI4LjI1MiAzNzZWMzIwQzIyOC4yNTIgMjk0Ljc4NCAyMzguODU5IDI3Mi4wNDQgMjU1Ljg1MyAyNTZDMjM4Ljg1OSAyMzkuOTU2IDIyOC4yNTIgMjE3LjIxNiAyMjguMjUyIDE5MlYxMzZDMjI4LjI1MiAxMTguMzI3IDIxMy45MjUgMTA0IDE5Ni4yNTIgMTA0SDE2MFYxMTJDMTYwIDEzOC41MSAxMzguNTEgMTYwIDExMiAxNjBINDhDMjEuNDkwMyAxNjAgMCAxMzguNTEgMCAxMTJWNDhaTTEwNCA0OEMxMDguNDE4IDQ4IDExMiA1MS41ODE3IDExMiA1NlYxMDRDMTEyIDEwOC40MTggMTA4LjQxOCAxMTIgMTA0IDExMkg1NkM1MS41ODE3IDExMiA0OCAxMDguNDE4IDQ4IDEwNFY1NkM0OCA1MS41ODE3IDUxLjU4MTcgNDggNTYgNDhIMTA0Wk00NTYgMjI0QzQ2MC40MTggMjI0IDQ2NCAyMjcuNTgyIDQ2NCAyMzJWMjgwQzQ2NCAyODQuNDE4IDQ2MC40MTggMjg4IDQ1NiAyODhINDA4QzQwMy41ODIgMjg4IDQwMCAyODQuNDE4IDQwMCAyODBWMjMyQzQwMCAyMjcuNTgyIDQwMy41ODIgMjI0IDQwOCAyMjRINDU2Wk0xMTIgNDA4QzExMiA0MDMuNTgyIDEwOC40MTggNDAwIDEwNCA0MDBINTZDNTEuNTgxNyA0MDAgNDggNDAzLjU4MiA0OCA0MDhWNDU2QzQ4IDQ2MC40MTggNTEuNTgxNyA0NjQgNTYgNDY0SDEwNEMxMDguNDE4IDQ2NCAxMTIgNDYwLjQxOCAxMTIgNDU2VjQwOFoiIGZpbGw9IiM1NEI4QzkiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTc3XzUxOCI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Merge","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":33,"icon":"file:redis.svg","name":"n8n-nodes-base.redis","codex":{"data":{"resources":{"generic":[{"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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.redis/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/redis/"}]},"categories":["Development","Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Redis"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiNBNDFFMTEiIGQ9Ik01Ny42NTYgNDMuOTljLTMuMjAxIDEuNjgzLTE5Ljc4NyA4LjU2MS0yMy4zMTggMTAuNDE3cy01LjQ5NCAxLjgzOC04LjI4My40OTRjLTIuNzktMS4zNDMtMjAuNDQ5LTguNTM1LTIzLjYyOS0xMC4wNjdDLjgzNCA0NC4wNjYuMDAyIDQzLjQyMi4wMDIgNDIuODExdi02LjExN3MyMi45OC01LjA0NSAyNi42OS02LjM4OCA0Ljk5NS0xLjM5IDguMTU0LS4yMjVjMy4xNiAxLjE2NSAyMi4wMzUgNC42MDMgMjUuMTU0IDUuNzU2djYuMDMyYzAgLjYwNS0uNzIgMS4yODMtMi4zNSAyLjEyNHoiLz48cGF0aCBmaWxsPSIjRDgyQzIwIiBkPSJNNTcuNjU2IDM3Ljg3MmMtMy4yMDEgMS42ODUtMTkuNzg3IDguNTYtMjMuMzE4IDEwLjQxN3MtNS40OTQgMS44MzgtOC4yODMuNDk0Yy0yLjc5LTEuMzQzLTIwLjQ0OS04LjUzNC0yMy42My0xMC4wNjhzLTMuMjQzLTIuNTg4LS4xMjItMy44MmwyNC4zODgtOS41MmMzLjcxLTEuMzQgNC45OTQtMS4zOSA4LjE1My0uMjI1czE5LjY0MyA3Ljc4IDIyLjc0NyA4Ljk1MWMzLjEwMyAxLjE3IDMuMjQgMi4wODYuMDM3IDMuNzg2eiIvPjxwYXRoIGZpbGw9IiNBNDFFMTEiIGQ9Ik01Ny42NTYgMzQuMDE1Yy0zLjIwMSAxLjY4My0xOS43ODcgOC41NjEtMjMuMzE4IDEwLjQxN3MtNS40OTQgMS44MzgtOC4yODMuNDk1Yy0yLjc5LTEuMzQ0LTIwLjQ0OS04LjUzNi0yMy42MjktMTAuMDY3Qy44MzQgMzQuMDkyLjAwMiAzMy40NDcuMDAyIDMyLjgzNlYyNi43MnMyMi45OC01LjA0NSAyNi42OS02LjM4N2MzLjcxMS0xLjM0MyA0Ljk5NS0xLjM5IDguMTU0LS4yMjUgMy4xNiAxLjE2NSAyMi4wMzUgNC42MDIgMjUuMTU0IDUuNzU2djYuMDMyYzAgLjYwNS0uNzIgMS4yODMtMi4zNSAyLjEyM3oiLz48cGF0aCBmaWxsPSIjRDgyQzIwIiBkPSJNNTcuNjU2IDI3Ljg5OGMtMy4yMDEgMS42ODUtMTkuNzg3IDguNTYxLTIzLjMxOCAxMC40MTdzLTUuNDk0IDEuODM4LTguMjgzLjQ5NWMtMi43OS0xLjM0NC0yMC40NDktOC41MzQtMjMuNjMtMTAuMDY3LTMuMTgtMS41MzQtMy4yNDMtMi41ODgtLjEyMi0zLjgybDI0LjM4OC05LjUyYzMuNzEtMS4zNDMgNC45OTQtMS4zOSA4LjE1My0uMjI1IDMuMTYgMS4xNjYgMTkuNjQ0IDcuNzg1IDIyLjc2NSA4LjkzNXMzLjI0IDIuMDg1LjAzOCAzLjc4NXoiLz48cGF0aCBmaWxsPSIjQTQxRTExIiBkPSJNNTcuNjU2IDIzLjY3MWMtMy4yMDEgMS42ODMtMTkuNzg3IDguNTYxLTIzLjMxOCAxMC40MTlzLTUuNDk0IDEuODM4LTguMjgzLjQ5NWMtMi43OS0xLjM0NC0yMC40NDktOC41MzUtMjMuNjI5LTEwLjA2OS0xLjU5Mi0uNzY1LTIuNDI0LTEuNDExLTIuNDI0LTIuMDJ2LTYuMTFzMjIuOTgtNS4wNDUgMjYuNjktNi4zODggNC45OTUtMS4zOSA4LjE1NC0uMjI1YzMuMTYgMS4xNjUgMjIuMDM1IDQuNTkxIDI1LjE1NCA1Ljc0NXY2LjAzMmMwIC42MDUtLjcyIDEuMjgzLTIuMzUgMi4xMjN6Ii8+PHBhdGggZmlsbD0iI0Q4MkMyMCIgZD0iTTU3LjY1NiAxNy41NTNjLTMuMjAxIDEuNjg1LTE5Ljc4NyA4LjU2MS0yMy4zMTggMTAuNDE3cy01LjQ5NCAxLjgzOC04LjI4My40OTVjLTIuNzktMS4zNDQtMjAuNDQ5LTguNTM0LTIzLjYzLTEwLjA2OHMtMy4yNDMtMi41ODctLjEyMi0zLjgybDI0LjM4OC05LjUyYzMuNzEtMS4zNDMgNC45OTQtMS4zOSA4LjE1My0uMjI2IDMuMTYgMS4xNjUgMTkuNjQzIDcuNzg1IDIyLjc2NSA4LjkzNnMzLjI0IDIuMDg1LjAzOCAzLjc4NXoiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJtMzEuNDk3IDE1LjAzMi0xLjg4LTMuMTUzLTYuMDAyLS41NDUgNC40OC0xLjYzTDI2Ljc1IDcuMmw0LjE5MiAxLjY1MyAzLjk1NS0xLjMwNS0xLjA3IDIuNTg2IDQuMDMyIDEuNTI0LTUuMTk4LjU0NnptLTEwLjAxNCA2LjI3NSAxMy45MDMtMi4xNTMtNC4yIDYuMjExem0tMTEuMTctNS4xNjdjMC0xLjYxIDMuMzE0LTIuOTA2IDcuNDMxLTIuOTA2IDQuMTE4IDAgNy40MzIgMS4yOTYgNy40MzIgMi45MDZzLTMuMzE0IDIuOTA1LTcuNDMyIDIuOTA1Yy00LjExNyAwLTcuNDMxLTEuMjk1LTcuNDMxLTIuOTA1Ii8+PHBhdGggZmlsbD0iIzdBMEMwMCIgZD0ibTUyLjIzMyAxNS43MTQtOC4yMjQgMy4yNzYtLjAwNy02LjU1NnoiLz48cGF0aCBmaWxsPSIjQUQyMTE1IiBkPSJtNDQuMDEgMTguOTkxLS44OS4zNTMtOC4yMTctMy4yNzYgOS4wOTQtMy42M3oiLz48L2c+PC9zdmc+"},"displayName":"Redis","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":5,"name":"Development"}]},{"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":49,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegram","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"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/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/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"},{"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/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/","icon":"💬","label":"Creating Telegram Bots with n8n, a No-Code Platform"},{"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/app-nodes/n8n-nodes-base.telegram/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Telegram"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":365,"icon":"file:s3.png","name":"n8n-nodes-base.s3","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.s3/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/s3/"}]},"categories":["Development","Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"S3"},"iconData":{"type":"file","fileBuffer":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAMAAAANIilAAAABDlBMVEUAAAATbrMSbbQTbbQSbbQTbrQTbrQUbrQTbrQSbrQTbbQSbbQSbbQTbrMSbbQTbrQTbrQTbbQSbbMTbbQSbbQSbbQSbbQTbrQTbbQTbrQSbrQSbrQSbbQSbbMTbrQUbrQTbbMSbbQSbbQSbbQTbLQTbbQTbbQTbrQSbbQTbbQSbbQTbrQTbrQTbbQSbbQSbbQOarITbbQUbrT///8KaLEQa7MNarISbbN3q9MFZa+81uqfxOFyqNIbc7cUbrWNudsvf7wkd7m10ehin81IjsUIZ7H7/f71+fzw9vvd6vTE2+x9r9VrpNBVlslOksfR4vCnyeORu9uCsdc+iMI8h8Ho8PfL4O+ry+SSvNxnoc6vyMA5AAAAMnRSTlMACARbK/r177Z20ZlGk1HYxb9oYiQVEPfyy41LHBnr6KtlQTsvDOPeraKBem43Hob+sqyldq4AAALoSURBVEjH7ZbndqJAFICHKh1EsPfek4ygbjZuYkmvm+3v/yILKgITiPhrz9mT7989zuctDlfAB/8QLE9WCTbbOVE4uVkqFktNmVNOOlmWqJJ5DITTqKkiI9MwBFpmRLXWCDJxgedicC8xjhdwtFqCg5HJEL769TY8iLbuunkeHghf2MmkcqiskO6wJPowNy15hyZkDnEzgkfFk9a4mVI0s8RYw066mZNEzu68wiuxPb+ywlfsbnNE0lN1WtTW30IKfZHhYimK8joUlYpxjNgXyLWj8Wlv3ck0pMuEhm27wAr1qkSofdairxJStV7AtnViGlGmYTrpbToOLYpMNlHLg1DytUSWKU6sk3HfDc3uumpl2mIvkauRQ72BWTT0IVnLJXpiO9PaTeQIeJGgBdJmiqbTaZpO2QNAkHxy/aBbQtd9sn7YJdGBjw5EMD45jN/IHeCHhQhP99MN9ysTIrCILCFDmXweOfw2EDclIbLWCpXPUbmlAQQluqwAFD66zAOURHQ5AVBIKqpMkQAFa0aVmxh4QzmqXAZvYcPkr4jMBsgC9DG9O91w94DcTyFA1pAF+MUBXYBagNyIw0jEA/8nxWiyCIJQvU+jGSqrgXJ1s6JMczW9X859UzIn7uquBsq6DC2O5y83o9HV86Nrm7PlfFeJrINAmPXBxWjNzcrYtfF0tdwFDAjmyPrs8mG0ZTHbZVuMnmcTZOuiSHZzL458893YJn60ojMndS5ELtBW1acjh9XltuM7K7jdTpAuhMg4B034y3Gv7cxuI6+biMNBCLx19MyRTzc9j+c/1+HtxRjdIug2ceu+ftykMqa+hysRKg8oy75YXNmJlnYiO/zhtPHNqoQahMp52a5z9vR6/ufCgFt5erZhastyPlTGy+vzxrFpuPdr7LDeIjgIpQv30AXhDON7nuUheAesEi+GmcV4BQPvg9crWYaLoS/KTLZSx0EUsAI5yBEq2+t2e6xK5AZkAQP/D38B/zR2KYIltgQAAAAASUVORK5CYII="},"displayName":"S3","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":5,"name":"Development"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"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/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.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"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":31,"name":"Content Creation"},{"id":51,"name":"Multimodal AI"}],"image":[]}}