{"workflow":{"id":14658,"name":"Publish Instagram Reels from Notion with Claude captions and UploadToUrl","views":0,"recentViews":0,"totalViews":0,"createdAt":"2026-04-02T16:25:20.835Z","description":"Streamline your content pipeline by bridging Notion and Instagram with a professional \"review-before-publish\" safeguard. This workflow allows team members to submit content via a simple form, generates AI-optimized captions, and pauses for human approval before going live.\n\n---\n\n## 🎯 What This Workflow Does\n\nThis template manages the end-to-end lifecycle of a Reel, from submission to final community notification:\n\n---\n\n### 📝 Submission & Notion Integration\n\n- **n8n Form Trigger:** Public form to submit a Notion Page ID and select caption tone (Hype, Minimal, Storytelling).\n- **Data Extraction:** Pulls video file, cover image, and metadata (Title, Description, Tags) from Notion.\n- **Validation:** Ensures content is not already published or failed.\n\n---\n\n### 🤖 AI Creative & Media Hosting\n\n- **Claude AI Captions:** Uses Anthropic Claude-Haiku to generate brand-safe, tone-specific captions under 2,200 characters.\n- **Mandatory CDN Hosting:** Uses UploadToURL to convert Notion files into public HTTPS URLs required by Instagram.\n\n---\n\n### 📧 The Approval Gate\n\n- **Email Approval Step:** Sends preview email with:\n  - AI-generated caption  \n  - Video preview link  \n  - Approve / Reject buttons  \n\n---\n\n### 🚀 Publication & Multi-Channel Sync\n\n- **Instagram Publishing:** Polls encoding status before publishing Reel.\n- **Notion Audit Trail:** Updates page with Permalink, Post ID, and Published status.\n- **Discord Alerts:** Sends notifications for success, rejection, or failure.\n\n---\n\n## ✨ Key Features\n\n- **Human-in-the-Loop:** Combines AI automation with manual approval.\n- **High-Quality AI Captions:** Uses Claude for nuanced storytelling.\n- **CDN Media Bridge:** UploadToURL ensures valid public media URLs.\n- **Error Resiliency:** Handles encoding failures with retries and alerts.\n\n---\n\n## 🔧 Setup Requirements\n\n### Required Credentials\n\n- **Notion:** Integration token  \n- **Instagram Graph API:** Business/Creator account token  \n- **Anthropic API:** For Claude captions  \n- **UploadToURL:** API key  \n\n---\n\n### Environment Variables\n\n- `IG_USER_ID`  \n- `IG_ACCESS_TOKEN`  \n- `NOTION_API_KEY`  \n- `ANTHROPIC_API_KEY`  \n- `APPROVER_EMAIL`  \n- `DISCORD_WEBHOOK_URL`  \n\n---\n\nEmpower your content team today. Import this template to turn your Notion database into a high-powered social media command center!","workflow":{"meta":{"instanceId":"277842713620d9f5554de3b1518b865a152c8c4db680008bd8aec536fc18b4a8"},"nodes":[{"id":"5a92d031-b62b-4f1c-814e-53bff74c56ff","name":"Sticky Nodes 1 to 3","type":"n8n-nodes-base.stickyNote","position":[368,1808],"parameters":{"color":7,"width":740,"height":580,"content":"### 📝📖✅ Nodes 1–3 — Form, Read Notion, Validate\n\n**n8n Form – Submit Reel Request** presents a built-in web form with two fields: Notion Page ID (the page containing the video) and Caption Tone (dropdown: hype / minimal / storytelling). Anyone with the form URL can submit — no n8n account needed.\n\n**HTTP – Read Notion Page** calls the Notion API (`GET /v1/pages/{page_id}`) to retrieve the full page properties: Title, Video URL, Cover URL, Description, Tags, and Status. Requires a Notion integration token with read access to the database.\n\n**Code – Validate & Extract** checks that Video URL is present and that the page Status property is not already Published or Failed. Extracts all fields into a clean flat object and throws a descriptive error early if data is missing — before any CDN upload or API credit is spent."},"typeVersion":1},{"id":"eabcf3a3-8bdd-4f8e-9a45-6c10102dda16","name":"Sticky Nodes 4 to 6","type":"n8n-nodes-base.stickyNote","position":[1120,1808],"parameters":{"color":7,"width":788,"height":580,"content":"### 🤖⬇️☁️ Nodes 4–6 — Claude Caption, Download Video, Upload Video\n\n**Code – Claude AI Caption** sends the page Title, Description, Tags, and selected tone to Anthropic's Messages API (claude-haiku-3-5). Returns a brand-safe caption under 2,200 characters with a CTA and hashtag block. Falls back to a static template if the API call fails, so the workflow never stalls on an AI error.\n\n**HTTP – Download Video Binary** fetches the raw video file from the Video URL stored in Notion as a binary stream, stored under the property name `videoData`.\n\n**Upload to URL – Video CDN** pushes the binary to a public CDN. Instagram's Graph API for Reels requires a direct public HTTPS video URL — it explicitly rejects binary uploads, base64 strings, and private signed URLs."},"typeVersion":1},{"id":"97d97282-7a86-4c0d-94df-c69967393dbc","name":"Sticky Nodes 7 to 9","type":"n8n-nodes-base.stickyNote","position":[1936,1680],"parameters":{"color":7,"width":788,"height":676,"content":"### ⬇️☁️📸 Nodes 7–9 — Download Cover, Upload Cover, Create IG Container\n\n**HTTP – Download Cover Binary** fetches the thumbnail image binary from the Cover URL stored in the Notion page. If no Cover URL exists the node is skipped via the `cover_url` empty check in the container body builder.\n\n**Upload to URL – Cover CDN** generates a second public CDN URL for the cover image. Supplying a specific `cover_url` to Instagram ensures a polished branded thumbnail frame instead of an auto-selected video frame.\n\n**HTTP – IG Create Reel Container** POSTs to `/v19.0/{ig_user_id}/media` with `media_type=REELS`, `video_url`, `cover_url`, `caption`, and `share_to_feed=true`. Instagram begins asynchronous encoding and returns a `container_id`. No publish happens yet — the approver must confirm first."},"typeVersion":1},{"id":"399303bb-ca48-433c-b741-3a3e9e20befa","name":"Sticky Nodes 10 to 12","type":"n8n-nodes-base.stickyNote","position":[2768,1728],"parameters":{"color":7,"width":780,"height":580,"content":"### 📧⏸️🔁 Nodes 10–12 — Email Preview, Wait for Approval, Poll Encoding\n\n**Gmail – Send Preview Email** emails the approver (APPROVER_EMAIL) an HTML preview containing the AI-generated caption, video CDN URL, and two buttons: **Approve** (resumes the webhook wait) and **Reject** (also resumes but routes to the reject branch). The email includes the live Approve URL generated by the Wait node.\n\n**Wait – Approval Webhook** pauses execution indefinitely until the approver clicks Approve or Reject. n8n generates a unique resume URL per execution — the Approve button in the email hits this URL to resume. The workflow holds state across the pause without consuming execution time.\n\n**HTTP – Poll Container Status** checks `status_code` on the container (`IN_PROGRESS` / `FINISHED` / `ERROR`). Called in a loop with a 20-second wait between each attempt for up to 15 tries before the error branch fires."},"typeVersion":1},{"id":"41cc9886-61d5-494b-8c19-2a3560a50cdb","name":"Sticky Nodes 13 to 17","type":"n8n-nodes-base.stickyNote","position":[3616,1728],"parameters":{"color":7,"width":1584,"height":580,"content":"### ✅📤🔗📋💬 Nodes 13–17 — Gate, Publish, Permalink, Update Notion, Discord\n\n**IF – Approved?** checks the query param `action` on the resume URL. `action=approve` routes true; `action=reject` routes false to a Notion update that marks the page Rejected and sends a Discord alert.\n\n**IG – Publish Reel** calls `/v19.0/{ig_user_id}/media_publish` with `creation_id = container_id`. Returns the live Instagram Post ID. The Reel is now live.\n\n**HTTP – Fetch Reel Permalink** immediately retrieves `id, permalink, timestamp, media_type` from the Graph API for accurate logging.\n\n**HTTP – Update Notion Page** PATCHes the original Notion page via the API: sets Status to Published, writes Post ID, Permalink, and Published At as page properties.\n\n**Discord – Notify Team** POSTs a formatted embed to the team Discord channel via webhook with title, permalink, post ID, and timestamp. No bot setup required — a simple incoming webhook URL is enough."},"typeVersion":1},{"id":"10918b35-34b6-4f6b-bd1d-021c29e3179e","name":"Sticky Error Branch","type":"n8n-nodes-base.stickyNote","position":[3984,2416],"parameters":{"color":7,"width":660,"height":340,"content":"### ⚠️ Error Branch — Encoding Failure & Rejection Handler\n\n**Encoding failure** (after 15 poll attempts): Updates Notion page Status to `Failed` via PATCH, then POSTs a Discord alert with creator, page ID, and last status code so the team can investigate without opening n8n.\n\n**Approval rejected**: Updates Notion page Status to `Rejected`, posts a Discord message so the team knows the submission was declined and can follow up with the submitter."},"typeVersion":1},{"id":"b861d568-c7f3-4982-baba-5103dcb41794","name":"n8n Form Submit Reel Request","type":"n8n-nodes-base.formTrigger","position":[512,2112],"webhookId":"0b7dfc60-b237-439d-8f3f-1c5a28a7d746","parameters":{"options":{"respondWithOptions":{"values":{}}},"formTitle":"Publish Instagram Reel","formFields":{"values":[{"fieldLabel":"Notion Page ID","placeholder":"e.g. 1a2b3c4d-5e6f-7890-abcd-ef1234567890","requiredField":true},{"fieldType":"dropdown","fieldLabel":"Caption Tone","fieldOptions":{"values":[{"option":"storytelling"},{"option":"hype"},{"option":"minimal"}]},"requiredField":true}]},"formDescription":"Submit a Notion page to publish as an Instagram Reel. An approver will review before it goes live."},"typeVersion":2.2},{"id":"163eff77-09c4-4f6a-b252-80a457247d74","name":"HTTP Read Notion Page","type":"n8n-nodes-base.httpRequest","position":[720,2112],"parameters":{"url":"=https://api.notion.com/v1/pages/{{ $json['Notion Page ID'] }}","options":{},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"Authorization","value":"=Bearer {{ $env.NOTION_API_KEY }}"},{"name":"Notion-Version","value":"2022-06-28"}]}},"typeVersion":4.2},{"id":"75eb020e-4b90-4f09-b295-a41d8b8408a6","name":"Code Validate and Extract","type":"n8n-nodes-base.code","position":[928,2112],"parameters":{"jsCode":"const page = $input.item.json;\nconst props = page.properties || {};\nconst formData = $('n8n Form Submit Reel Request').item.json;\n\nfunction text(prop) {\n  if (!prop) return '';\n  if (prop.type === 'title' && prop.title) return prop.title.map(function(t){ return t.plain_text; }).join('');\n  if (prop.type === 'rich_text' && prop.rich_text) return prop.rich_text.map(function(t){ return t.plain_text; }).join('');\n  if (prop.type === 'url') return prop.url || '';\n  if (prop.type === 'select' && prop.select) return prop.select.name || '';\n  if (prop.type === 'multi_select' && prop.multi_select) return prop.multi_select.map(function(s){ return s.name; }).join(', ');\n  return '';\n}\n\nconst status = text(props['Status']);\nif (status === 'Published') throw new Error('Notion page is already Published. Aborting to prevent duplicate post.');\nif (status === 'Failed')    throw new Error('Notion page is marked Failed. Fix the video before resubmitting.');\nif (status === 'Rejected')  throw new Error('Notion page was previously Rejected.');\n\nconst videoUrl = text(props['Video URL']);\nif (!videoUrl) throw new Error('Notion page has no Video URL property. Cannot publish.');\n\nreturn {\n  notion_page_id: page.id,\n  title:          text(props['Title']),\n  video_url:      videoUrl,\n  cover_url:      text(props['Cover URL']) || '',\n  description:    text(props['Description']) || '',\n  tags:           text(props['Tags']) || '',\n  caption_tone:   formData['Caption Tone'] || 'storytelling',\n  ig_user_id:     $env.IG_USER_ID\n};"},"typeVersion":2},{"id":"138738c4-622a-4c3d-aee0-e83e1bde75ec","name":"Code Claude AI Caption","type":"n8n-nodes-base.code","position":[1136,2112],"parameters":{"jsCode":"const d = $input.item.json;\nconst tone = d.caption_tone || 'storytelling';\n\nconst toneGuide = {\n  hype:         'Energetic, punchy, 1–2 fire emojis, very short sentences. High energy.',\n  minimal:      'Clean and minimal. No emojis. One powerful sentence max.',\n  storytelling: 'Warm, narrative, and personal. Makes the viewer feel something real.'\n};\n\nconst tagBlock = d.tags\n  ? d.tags.split(',').map(function(t){\n      t = t.trim(); return t.startsWith('#') ? t : '#' + t;\n    }).join(' ')\n  : '#reels #instagram #content #fyp';\n\nlet finalCaption;\ntry {\n  const res = await fetch('https://api.anthropic.com/v1/messages', {\n    method: 'POST',\n    headers: {\n      'Content-Type':      'application/json',\n      'x-api-key':         $env.ANTHROPIC_API_KEY,\n      'anthropic-version': '2023-06-01'\n    },\n    body: JSON.stringify({\n      model:      'claude-haiku-4-5',\n      max_tokens: 400,\n      messages: [{\n        role: 'user',\n        content: [\n          'Write an Instagram Reel caption.',\n          'Title: ' + d.title,\n          'Description: ' + (d.description || 'none'),\n          'Tags to include: ' + tagBlock,\n          'Tone: ' + tone + ' — ' + (toneGuide[tone] || ''),\n          'End with a short CTA to follow or save.',\n          'Max 2200 characters. Output ONLY the caption text, no preamble.'\n        ].join('\\n')\n      }]\n    })\n  });\n  const ai = await res.json();\n  finalCaption = (ai.content && ai.content[0] && ai.content[0].text)\n    ? ai.content[0].text.trim()\n    : null;\n} catch(e) {\n  finalCaption = null;\n}\n\nif (!finalCaption) {\n  finalCaption = (d.title ? d.title + '\\n\\n' : '') +\n    (d.description ? d.description.trim() + '\\n\\n' : '') +\n    'Follow for more.\\n\\n' + tagBlock;\n}\n\nif (finalCaption.length > 2200) finalCaption = finalCaption.substring(0, 2196) + '...';\n\nreturn { ...d, final_caption: finalCaption };"},"typeVersion":2},{"id":"fe3e93dc-8042-431c-aa20-cf97b49683fa","name":"HTTP Download Video Binary","type":"n8n-nodes-base.httpRequest","position":[1344,2112],"parameters":{"url":"={{ $json.video_url }}","options":{"response":{"response":{"responseFormat":"file","outputPropertyName":"videoData"}}}},"typeVersion":4.2},{"id":"346669ee-91e7-4aa3-a3d2-f0a936c3e868","name":"Upload to URL Video CDN","type":"n8n-nodes-uploadtourl.uploadToUrl","position":[1552,2112],"parameters":{},"typeVersion":1},{"id":"ea2c8b9b-aef3-43cf-ad37-016908523b68","name":"Code Store Video CDN URL","type":"n8n-nodes-base.code","position":[1760,2112],"parameters":{"jsCode":"const upload = $input.item.json;\nconst prev = $('Code Claude AI Caption').item.json;\nconst publicVideoUrl = upload.public_url || upload.url || upload.file_url || upload.cdn_url || '';\nif (!publicVideoUrl) throw new Error('Video CDN upload returned no public URL. Keys: ' + JSON.stringify(Object.keys(upload)));\nreturn { ...prev, public_video_url: publicVideoUrl };"},"typeVersion":2},{"id":"04823c0b-9e68-4b03-87ea-bd4767b37672","name":"HTTP Download Cover Binary","type":"n8n-nodes-base.httpRequest","position":[1968,2112],"parameters":{"url":"={{ $json.cover_url }}","options":{"response":{"response":{"responseFormat":"file","outputPropertyName":"coverData"}}}},"typeVersion":4.2},{"id":"2c34a822-1f79-4ca8-b22c-4c2302ab453d","name":"Upload to URL Cover CDN","type":"n8n-nodes-uploadtourl.uploadToUrl","position":[2176,2112],"parameters":{},"typeVersion":1},{"id":"c2aea54e-eae2-4fbe-8cf8-ced2fc5fd166","name":"Code Merge CDN URLs","type":"n8n-nodes-base.code","position":[2384,2112],"parameters":{"jsCode":"const coverUpload = $input.item.json;\nconst videoData = $('Code Store Video CDN URL').item.json;\nconst publicCoverUrl = coverUpload.public_url || coverUpload.url || coverUpload.file_url || coverUpload.cdn_url || '';\nreturn {\n  notion_page_id:   videoData.notion_page_id,\n  title:            videoData.title,\n  ig_user_id:       videoData.ig_user_id,\n  final_caption:    videoData.final_caption,\n  public_video_url: videoData.public_video_url,\n  public_cover_url: publicCoverUrl,\n  retry_count:      0\n};"},"typeVersion":2},{"id":"c9c20fdd-44c2-4d1e-bd55-66caf5ceccac","name":"HTTP IG Create Reel Container","type":"n8n-nodes-base.httpRequest","position":[2592,2112],"parameters":{"url":"=https://graph.facebook.com/v19.0/{{ $json.ig_user_id }}/media","method":"POST","options":{},"sendQuery":true,"queryParameters":{"parameters":[{"name":"media_type","value":"REELS"},{"name":"video_url","value":"={{ $json.public_video_url }}"},{"name":"cover_url","value":"={{ $json.public_cover_url }}"},{"name":"caption","value":"={{ $json.final_caption }}"},{"name":"share_to_feed","value":"true"},{"name":"access_token","value":"={{ $env.IG_ACCESS_TOKEN }}"}]}},"typeVersion":4.2},{"id":"4f7cac2f-2a23-41c2-95ee-4a966f42dec3","name":"Gmail Send Preview Email","type":"n8n-nodes-base.gmail","position":[2800,2112],"webhookId":"d9712fbb-1d0a-4f39-aea6-d721299d68c5","parameters":{"sendTo":"={{ $env.APPROVER_EMAIL }}","message":"=<h2>Reel Pending Your Approval</h2><p><strong>Title:</strong> {{ $('Code Merge CDN URLs').item.json.title }}</p><p><strong>Caption Preview:</strong></p><pre style=\"background:#f4f4f4;padding:12px;border-radius:6px;\">{{ $('Code Merge CDN URLs').item.json.final_caption }}</pre><p><strong>Video:</strong> <a href=\"{{ $('Code Merge CDN URLs').item.json.public_video_url }}\">Preview video →</a></p><br><p><a href=\"{{ $resumeUrl }}?action=approve\" style=\"background:#22c55e;color:white;padding:12px 24px;border-radius:6px;text-decoration:none;font-weight:bold;\">✅ Approve & Publish</a>&nbsp;&nbsp;<a href=\"{{ $resumeUrl }}?action=reject\" style=\"background:#ef4444;color:white;padding:12px 24px;border-radius:6px;text-decoration:none;font-weight:bold;\">❌ Reject</a></p>","options":{},"subject":"=🎬 Reel Approval Required — {{ $('Code Merge CDN URLs').item.json.title }}"},"typeVersion":2.1},{"id":"e397a7fb-f4a2-49e5-b083-1469b3116e9f","name":"Wait for Approval","type":"n8n-nodes-base.wait","position":[2960,2000],"webhookId":"wait-approval-reel-001","parameters":{"resume":"webhook","options":{}},"typeVersion":1.1},{"id":"7981b5dd-ddc0-49c9-b97b-540db45f396f","name":"IF Approved","type":"n8n-nodes-base.if","position":[3088,2032],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"c-approve","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.query.action }}","rightValue":"approve"}]}},"typeVersion":2.2},{"id":"e74d8408-02ab-429a-9c12-52439244c17a","name":"HTTP Notion Mark Rejected","type":"n8n-nodes-base.httpRequest","position":[3248,2160],"parameters":{"url":"=https://api.notion.com/v1/pages/{{ $('Code Merge CDN URLs').item.json.notion_page_id }}","method":"PATCH","options":{},"jsonBody":"={\"properties\":{\"Status\":{\"select\":{\"name\":\"Rejected\"}}}}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"=Bearer {{ $env.NOTION_API_KEY }}"},{"name":"Notion-Version","value":"2022-06-28"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2},{"id":"475a110c-3b16-4a99-a38c-29560923b68f","name":"Discord Notify Rejected","type":"n8n-nodes-base.httpRequest","position":[3392,2176],"parameters":{"url":"={{ $env.DISCORD_WEBHOOK_URL }}","method":"POST","options":{},"jsonBody":"={\"content\":\"❌ **Reel Rejected**\\nTitle: {{ $('Code Merge CDN URLs').item.json.title }}\\nNotion Page: {{ $('Code Merge CDN URLs').item.json.notion_page_id }}\\nThe approver declined this submission.\"}","sendBody":true,"specifyBody":"json"},"typeVersion":4.2},{"id":"3ee4e041-0963-42b1-bf1a-66af9e63133e","name":"Wait Poll Buffer","type":"n8n-nodes-base.wait","position":[3280,2016],"webhookId":"wait-poll-buffer-001","parameters":{"unit":"seconds","amount":20},"typeVersion":1},{"id":"2d3d8e0e-d579-4315-946b-7b457005821c","name":"HTTP Poll Container Status","type":"n8n-nodes-base.httpRequest","position":[3424,2016],"parameters":{"url":"=https://graph.facebook.com/v19.0/{{ $('HTTP IG Create Reel Container').item.json.id }}","options":{},"sendQuery":true,"queryParameters":{"parameters":[{"name":"fields","value":"status_code,status"},{"name":"access_token","value":"={{ $env.IG_ACCESS_TOKEN }}"}]}},"typeVersion":4.2},{"id":"4812b08b-d217-4abd-9cea-03c90eb2f836","name":"Set Increment Retry","type":"n8n-nodes-base.set","position":[3840,2112],"parameters":{"options":{},"assignments":{"assignments":[{"id":"r1","name":"retry_count","type":"number","value":"={{ ($('Code Merge CDN URLs').item.json.retry_count || 0) + 1 }}"},{"id":"r2","name":"status_code","type":"string","value":"={{ $json.status_code }}"},{"id":"r3","name":"container_id","type":"string","value":"={{ $('HTTP IG Create Reel Container').item.json.id }}"},{"id":"r4","name":"notion_page_id","type":"string","value":"={{ $('Code Merge CDN URLs').item.json.notion_page_id }}"},{"id":"r5","name":"ig_user_id","type":"string","value":"={{ $('Code Merge CDN URLs').item.json.ig_user_id }}"},{"id":"r6","name":"title","type":"string","value":"={{ $('Code Merge CDN URLs').item.json.title }}"},{"id":"r7","name":"public_video_url","type":"string","value":"={{ $('Code Merge CDN URLs').item.json.public_video_url }}"},{"id":"r8","name":"public_cover_url","type":"string","value":"={{ $('Code Merge CDN URLs').item.json.public_cover_url }}"}]}},"typeVersion":3.4},{"id":"02b0a34e-e501-418e-9484-3d5e98d7505f","name":"IF Encoding Finished","type":"n8n-nodes-base.if","position":[4048,2112],"parameters":{"options":{},"conditions":{"options":{"leftValue":"","caseSensitive":false,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"c-finished","operator":{"type":"string","operation":"equals"},"leftValue":"={{ $json.status_code }}","rightValue":"FINISHED"}]}},"typeVersion":2.2},{"id":"11f6bb1c-990a-452e-9d86-c2771678a9ca","name":"Code Retry or Fail","type":"n8n-nodes-base.code","position":[4032,2592],"parameters":{"jsCode":"const d = $input.item.json;\nif (d.retry_count < 15) {\n  return {\n    retry_count:      d.retry_count,\n    status_code:      d.status_code,\n    container_id:     d.container_id,\n    notion_page_id:   d.notion_page_id,\n    ig_user_id:       d.ig_user_id,\n    title:            d.title,\n    public_video_url: d.public_video_url,\n    public_cover_url: d.public_cover_url\n  };\n}\nthrow new Error(\n  'Reel encoding failed after 15 attempts.' +\n  ' Status: ' + d.status_code +\n  ' | Notion: ' + d.notion_page_id +\n  ' | Title: ' + d.title\n);"},"typeVersion":2},{"id":"760debb1-e03f-4ca2-90dc-5f4cee557d83","name":"HTTP Notion Mark Failed","type":"n8n-nodes-base.httpRequest","position":[4256,2592],"parameters":{"url":"=https://api.notion.com/v1/pages/{{ $('Set Increment Retry').item.json.notion_page_id }}","method":"PATCH","options":{},"jsonBody":"={\"properties\":{\"Status\":{\"select\":{\"name\":\"Failed\"}}}}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"=Bearer {{ $env.NOTION_API_KEY }}"},{"name":"Notion-Version","value":"2022-06-28"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2},{"id":"fb298ab6-72ad-483c-92c8-0126fdefaf09","name":"Discord Notify Encoding Failed","type":"n8n-nodes-base.httpRequest","position":[4464,2592],"parameters":{"url":"={{ $env.DISCORD_WEBHOOK_URL }}","method":"POST","options":{},"jsonBody":"={\"content\":\"⚠️ **Reel Encoding Failed**\\nTitle: {{ $('Set Increment Retry').item.json.title }}\\nStatus after 15 attempts: {{ $('Set Increment Retry').item.json.status_code }}\\nNotion page has been marked Failed. Please check the video file.\"}","sendBody":true,"specifyBody":"json"},"typeVersion":4.2},{"id":"98fde062-dfac-4279-a13e-918574c7e02e","name":"HTTP Fetch Reel Permalink","type":"n8n-nodes-base.httpRequest","position":[4464,2112],"parameters":{"url":"=https://graph.facebook.com/v19.0/{{ $('IG Publish Reel1').item.json.id }}","options":{},"sendQuery":true,"queryParameters":{"parameters":[{"name":"fields","value":"id,permalink,timestamp,media_type"},{"name":"access_token","value":"={{ $env.IG_ACCESS_TOKEN }}"}]}},"typeVersion":4.2},{"id":"9a2b0d85-c36b-40c4-bea1-af55a656d86d","name":"HTTP Notion Mark Published","type":"n8n-nodes-base.httpRequest","position":[4672,2112],"parameters":{"url":"=https://api.notion.com/v1/pages/{{ $('Set Increment Retry').item.json.notion_page_id }}","method":"PATCH","options":{},"jsonBody":"={\"properties\":{\"Status\":{\"select\":{\"name\":\"Published\"}},\"Post ID\":{\"rich_text\":[{\"text\":{\"content\":\"{{ $('IG Publish Reel1').item.json.id }}\"}}]},\"Permalink\":{\"url\":\"{{ $('HTTP Fetch Reel Permalink').item.json.permalink }}\"},\"Published At\":{\"date\":{\"start\":\"{{ $('HTTP Fetch Reel Permalink').item.json.timestamp }}\"}}}}","sendBody":true,"sendHeaders":true,"specifyBody":"json","headerParameters":{"parameters":[{"name":"Authorization","value":"=Bearer {{ $env.NOTION_API_KEY }}"},{"name":"Notion-Version","value":"2022-06-28"},{"name":"Content-Type","value":"application/json"}]}},"typeVersion":4.2},{"id":"d53fc635-a0a6-463b-bd73-c01cc38e3f99","name":"Discord Notify Published","type":"n8n-nodes-base.httpRequest","position":[4880,2112],"parameters":{"url":"={{ $env.DISCORD_WEBHOOK_URL }}","method":"POST","options":{},"jsonBody":"={\"embeds\":[{\"title\":\"🎬 Reel Live — {{ $('Set Increment Retry').item.json.title }}\",\"url\":\"{{ $('HTTP Fetch Reel Permalink').item.json.permalink }}\",\"color\":5763719,\"fields\":[{\"name\":\"Post ID\",\"value\":\"{{ $('IG Publish Reel1').item.json.id }}\",\"inline\":true},{\"name\":\"Published At\",\"value\":\"{{ $('HTTP Fetch Reel Permalink').item.json.timestamp }}\",\"inline\":true},{\"name\":\"Permalink\",\"value\":\"{{ $('HTTP Fetch Reel Permalink').item.json.permalink }}\"}]}]}","sendBody":true,"specifyBody":"json"},"typeVersion":4.2},{"id":"64c25481-b8c8-41b4-bc4f-72df390d2493","name":"Template Overview1","type":"n8n-nodes-base.stickyNote","position":[-160,1184],"parameters":{"width":500,"height":500,"content":"Instagram Reel Publisher — Notion + Approval Gate + Discord\n\nA content team member fills in an n8n Form with a Notion page ID and caption tone. The workflow reads the video, cover, and metadata from Notion, generates an AI caption via Claude, uploads the video to a CDN, then PAUSES and emails a preview to the approver. Only after the approver clicks the Approve link does the Reel publish. On success it updates Notion and posts to Discord. On encoding failure it alerts Discord and marks the Notion page Failed.\n\nFlow:\nForm → Read Notion → Validate → AI Caption → Download video → Upload CDN → Download cover → Upload CDN → Create IG container → Email preview + wait for approval → Poll encoding → Publish → Fetch permalink → Update Notion → Discord notify\n\nRequired env vars:\nIG_USER_ID, IG_ACCESS_TOKEN,\nNOTION_API_KEY, NOTION_DATABASE_ID,\nANTHROPIC_API_KEY, APPROVER_EMAIL,\nDISCORD_WEBHOOK_URL"},"typeVersion":1},{"id":"72d2469c-67cf-4190-9e6c-a098e3084f18","name":"IG Publish Reel1","type":"n8n-nodes-base.httpRequest","position":[4256,2112],"parameters":{"url":"=https://graph.facebook.com/v19.0/{{ $('Set Increment Retry').item.json.ig_user_id }}/media_publish","method":"POST","options":{},"sendQuery":true,"queryParameters":{"parameters":[{"name":"creation_id","value":"={{ $('Set Increment Retry').item.json.container_id }}"},{"name":"access_token","value":"={{ $env.IG_ACCESS_TOKEN }}"}]}},"typeVersion":4.2}],"pinData":{},"connections":{"IF Approved":{"main":[[{"node":"Wait Poll Buffer","type":"main","index":0}],[{"node":"HTTP Notion Mark Rejected","type":"main","index":0}]]},"IG Publish Reel1":{"main":[[{"node":"HTTP Fetch Reel Permalink","type":"main","index":0}]]},"Wait Poll Buffer":{"main":[[{"node":"HTTP Poll Container Status","type":"main","index":0}]]},"Wait for Approval":{"main":[[{"node":"IF Approved","type":"main","index":0}]]},"Code Retry or Fail":{"main":[[{"node":"Wait Poll Buffer","type":"main","index":0},{"node":"HTTP Notion Mark Failed","type":"main","index":0}]]},"Code Merge CDN URLs":{"main":[[{"node":"HTTP IG Create Reel Container","type":"main","index":0}]]},"Set Increment Retry":{"main":[[{"node":"IF Encoding Finished","type":"main","index":0}]]},"IF Encoding Finished":{"main":[[{"node":"IG Publish Reel1","type":"main","index":0}],[{"node":"Code Retry or Fail","type":"main","index":0}]]},"HTTP Read Notion Page":{"main":[[{"node":"Code Validate and Extract","type":"main","index":0}]]},"Code Claude AI Caption":{"main":[[{"node":"HTTP Download Video Binary","type":"main","index":0}]]},"HTTP Notion Mark Failed":{"main":[[{"node":"Discord Notify Encoding Failed","type":"main","index":0}]]},"Upload to URL Cover CDN":{"main":[[{"node":"Code Merge CDN URLs","type":"main","index":0}]]},"Upload to URL Video CDN":{"main":[[{"node":"Code Store Video CDN URL","type":"main","index":0}]]},"Code Store Video CDN URL":{"main":[[{"node":"HTTP Download Cover Binary","type":"main","index":0}]]},"Gmail Send Preview Email":{"main":[[{"node":"Wait for Approval","type":"main","index":0}]]},"Code Validate and Extract":{"main":[[{"node":"Code Claude AI Caption","type":"main","index":0}]]},"HTTP Fetch Reel Permalink":{"main":[[{"node":"HTTP Notion Mark Published","type":"main","index":0}]]},"HTTP Notion Mark Rejected":{"main":[[{"node":"Discord Notify Rejected","type":"main","index":0}]]},"HTTP Download Cover Binary":{"main":[[{"node":"Upload to URL Cover CDN","type":"main","index":0}]]},"HTTP Download Video Binary":{"main":[[{"node":"Upload to URL Video CDN","type":"main","index":0}]]},"HTTP Notion Mark Published":{"main":[[{"node":"Discord Notify Published","type":"main","index":0}]]},"HTTP Poll Container Status":{"main":[[{"node":"Set Increment Retry","type":"main","index":0}]]},"n8n Form Submit Reel Request":{"main":[[{"node":"HTTP Read Notion Page","type":"main","index":0}]]},"HTTP IG Create Reel Container":{"main":[[{"node":"Gmail Send Preview Email","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":34,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.set":{"count":1},"n8n-nodes-base.code":{"count":5},"n8n-nodes-base.wait":{"count":2},"n8n-nodes-base.gmail":{"count":1},"n8n-nodes-base.stickyNote":{"count":7},"n8n-nodes-base.formTrigger":{"count":1},"n8n-nodes-base.httpRequest":{"count":13},"n8n-nodes-uploadtourl.uploadToUrl":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Jitesh Dugar","username":"jiteshdugar","bio":"AI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.","verified":true,"links":["https://www.linkedin.com/in/jiteshdugar"],"avatar":"https://gravatar.com/avatar/edaa3abb99806b0586dced559d0a5417f24a507e7c4464a63960f0638a4b1b90?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":356,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmail","codex":{"data":{"alias":["email","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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with 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-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/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"transform\"]","defaults":{"name":"Gmail"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"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":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"}]},{"id":1225,"icon":"file:form.svg","name":"n8n-nodes-base.formTrigger","codex":{"data":{"alias":["table","submit","post"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.formtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Other Trigger Nodes"]}}},"group":"[\"trigger\"]","defaults":{"name":"On form submission"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwQjdCQyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzQuOTc4IDM3LjczMmExLjU2IDEuNTYgMCAwIDEtMS41NjIgMS41NjNINi4yNmExLjU2IDEuNTYgMCAwIDEtMS41NjMtMS41NjNWOS42MDdjMC0uNDA1LjE1Ny0uNzk0LjQzOC0xLjA4Nmw2LjMwNC02LjUzMXY1LjM0NEg4LjIxM2ExLjE3MiAxLjE3MiAwIDEgMCAwIDIuMzQzaDQuNDNhMS4xNyAxLjE3IDAgMCAwIDEuMTcxLTEuMTcxVi4yMzJoMTkuNjAyYTEuNTYgMS41NiAwIDAgMSAxLjU2MiAxLjU2M3YxMC4zMjdsLTIuODYgMi44Ni04LjI1MiA4LjI3NmE0MTMuMDA2IDQxMy4wMDYgMCAwIDEtMS42NTQgMS42NjJsLS4zMzcuMzM3YTIgMiAwIDAgMC0uNTU3IDEuMDhMMjAuMyAzMS45MjJjLS4xMDguNjM4LS4yMTUgMS4wNzkuMjExIDEuNDE4LjQwMy4zMi45LjE3NCAxLjU0LjA2Nmw1LjQwOC0uOTI4YTIgMiAwIDAgMCAxLjA4LS41NTZsNi40NC02LjQyOXptLTI0LjAzLTIxLjI2NWExLjE4IDEuMTggMCAwIDAgMS4xNzEgMS4xNzJoMTMuMTYzYTEuMTcyIDEuMTcyIDAgMSAwIDAtMi4zNDRIMTIuMTE5YTEuMTcgMS4xNyAwIDAgMC0xLjE3MiAxLjE3Mm03LjI5NCAxNC43NjZhMS4xNyAxLjE3IDAgMCAwLTEuMTcyLTEuMTcySDEyLjEyYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNC45NTFhMS4xNyAxLjE3IDAgMCAwIDEuMTcyLTEuMTcybS44Ni03LjM5MWExLjE3IDEuMTcgMCAwIDAtMS4xNzItMS4xNzJoLTUuODExYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNS44MWExLjE2NCAxLjE2NCAwIDAgMCAxLjE3My0xLjE3MSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iIzAwQjdCQyIgZD0ibTMzLjUzMiAxNi4zOTcgNC4yODktNC4yODkgMy43NTggMy43MSAxLjYxNy0xLjYxNiAyLjI1OCAyLjI1N2MuMjE4LjIxOC4zNC41MTMuMzQzLjgyLS4wMDIuMzExLS4xMjUuNjA4LS4zNDQuODNsLTYuODA0IDYuNzk2YTEuMTMgMS4xMyAwIDAgMS0uODI4LjM0MyAxLjE1IDEuMTUgMCAwIDEtLjgyOC0uMzQzIDEuMTggMS4xOCAwIDAgMSAwLTEuNjU3bDUuOTc2LTUuOTY4LTEuMzEyLTEuMzEzLTEuMzgzIDEuNDE0LTEzLjE0OSAxMy4xMjUtNC42MTcuNzgyLjc4Mi00LjYxNy4zMzYtLjMzNyAyLjU2MiAyLjU1NWExLjEgMS4xIDAgMCAwIC44MjguMzQ0Yy4zMTIuMDA1LjYxMi0uMTIuODI4LS4zNDRhMS4xOCAxLjE4IDAgMCAwIDAtMS42NTZsLTIuNTYyLTIuNTYyek00NC43MzYgMTIuMjRjMCAuNDE0LS4xNjMuODEtLjQ1NCAxLjEwMmwtLjkyMi45MTQtMy44NTItMy44MjguOTMtLjkzYTEuNTYzIDEuNTYzIDAgMCAxIDIuMjAzIDBsMS42NCAxLjY0MWMuMjkxLjI5My40NTUuNjkuNDU1IDEuMTAyIi8+PC9zdmc+"},"displayName":"n8n Form Trigger","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":33,"name":"Social Media"},{"id":51,"name":"Multimodal AI"}],"image":[]}}