{"workflow":{"id":11715,"name":"Sync tasks between Todoist and Notion with Redis-powered 2-way logic","views":127,"recentViews":0,"totalViews":127,"createdAt":"2025-12-11T17:07:04.940Z","description":"# Purpose\n\nThis solution enables you to manage all your Notion and Todoist tasks from different workspaces as well as your calendar events in a single place. This is 2 way sync with partial support for recurring \n\n# How it works\n\n- The realtime sync consists of two workflows, both triggered by a registered webhook from either Notion or Todoist.\n- To avoid overwrites by lately arriving webhook calls, every time the current task is retrieved from both sides.\n- Redis is used to prevent from endless loops, since an update in one system triggers another webhook call again. Using the ID of the task, the trigger is being locked down for 80 seconds.\n- Depending on the detected changes, the other side is updated accordingly .Generally Notion is treaded as the main source. Using an \"Obsolete\" Status, it is guaranteed, that tasks never get deleted entirely by accident.\n- The Todoist ID is stored in the Notion task, so they stay linked together\n- An additional full sync workflow daily fixes inconsistencies, if any of them occurred, since webhooks cannot be trusted entirely.\n- Since Todoist requires a more complex setup, a tiny workflow helps with activating the webhook.\n- Another tiny workflow helps generating a global config, which is used by all workflows for mapping purposes.\n\n# Mapping (Notion &gt;&gt; Todoist)\n\n- Name: Task Name\n- Priority: Priority (1: do first, 2: urgent, 3: important, 4: unset)\n- Due: Date\n- Status: Section (Done: completed, Obsolete: deleted)\n- &lt;page_link&gt;: Description (read-only)\n- Todoist ID: &lt;task_id&gt;\n\n# Current limitations\n\n- Changes on the same task cannot be made simultaneously in both systems within a 15-20 second time frame.\n- Subtasks are not linked automatically to their parent yet.\n- Tasks names do not support URL’s yet.\n\n## Credentials\n\nFollow the video: \n\n- Setup credentials for Notion (access token), Todoist (access token) and Redis.\n\n### Todoist\n\n- Follow this video to get Todoist to obtain API Token.\n    \n    [Todoist Credentials.mp4](attachment:c9b434dc-98e8-44b9-b74f-a459395ef6a2:Todoist_Credentials.mp4)\n    \n\n### Notion\n\n- Follow this video to get Notion Integration Secret.\n\n[]()\n\n### Redis\n\n- Follow this video to get Redis\n\n[]()\n\n# Setup\n\n*The setup involves quite a lot of steps, yet many of them can be automated for business internal purposes.*\n\nJust follow the video or do the following steps:\n\n- Setup credentials for Notion (access token), Todoist (access token) and Redis - you can also create empty credentials and populate these later during further setup\n- Clone this workflow by clicking the \"Use workflow\" button and then choosing your n8n instance - otherwise you need to map the credentials of many nodes.\n- Follow the instructions described within the bundle of sticky notes on the top left of the workflow\n\n# How to use\n\n- You can apply changes (create, update, delete) to tasks both in Notion and Todoist which then get synced over within a couple of seconds (this is handled by the differential realtime sync)\n- The daily running full sync, resolves possible discrepancies in Todoist.\n\nThis workflow incorporates ideas and techniques inspired by Mario (https://n8n.io/creators/octionic/) whose expertise with specific nodes helped shape parts of this automation. Significant enhancements and customizations have been made to deliver a unique and improved solution.\n\n\n","workflow":{"meta":{"instanceId":"3d99487a7c6bdb160b6791f50f0710054ab55548aa4924b78955b57aa39ef75a"},"nodes":[{"id":"b526db31-7760-4613-90fd-334b81929281","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[6912,1872],"parameters":{"color":7,"width":336,"height":384,"content":"## Task"},"typeVersion":1},{"id":"1d540d5b-0313-424d-82b5-14ccd393b270","name":"SwitchT","type":"n8n-nodes-base.switch","position":[6928,2416],"parameters":{"rules":{"values":[{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"748078c7-1dfd-4ce8-a3ac-67328bc95fad","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $('Map Todoist to Notion1').item.json.start_date }}","rightValue":""}]}},{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"93690b35-61c9-4db5-a797-4bf626863590","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $('Map Todoist to Notion1').item.json.end_date}}","rightValue":""}]}},{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"49ac08e0-91ca-4f74-ba9d-be09ef128be6","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"={{ $('Map Todoist to Notion1').item.json.end_date}}","rightValue":""}]}}]},"options":{}},"typeVersion":3.3},{"id":"2d7a0c01-9b27-4418-a255-74b93809a1b5","name":"Create task in NotionT4","type":"n8n-nodes-base.httpRequest","position":[7104,2544],"parameters":{"url":"=https://api.notion.com/v1/pages/","method":"POST","options":{},"sendBody":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"properties[\"Task Name\"].title[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.task_name }}"},{"name":"properties.TodoistID.rich_text[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}"},{"name":"properties.Priority.select.name","value":"={{ $('Map Todoist to Notion1').item.json.priority }}"},{"name":"properties.Section.select.name","value":"={{ $('Map Todoist to Notion1').item.json.section_name }}"},{"name":"properties.Recurrence.rich_text[0].text.content","value":"={{$('Map Todoist to Notion1').item.json.recurrence ?  $('Map Todoist to Notion1').item.json.recurrence :\"\" }}"},{"name":"=properties.Due.date.start","value":"={{$('Map Todoist to Notion1').item.json.start_date || ''}}"},{"name":"parent.database_id","value":"={{ $('GlobalsT1').item.json.database_id }}"},{"name":"properties.Due.date.end","value":"={{$('Map Todoist to Notion1').item.json.end_date || ''}}"},{"name":"properties.Created.date.start","value":"={{ $('Map Todoist to Notion1').item.json.created_at }}"},{"name":"properties.Tasks.relation","value":"={{ [{ id: $json.id }] }}"}]},"nodeCredentialType":"notionApi"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":4.2},{"id":"6f982d2c-b073-405e-a1d6-75858813646a","name":"Create task in NotionT5","type":"n8n-nodes-base.httpRequest","position":[7104,2432],"parameters":{"url":"=https://api.notion.com/v1/pages/","method":"POST","options":{},"sendBody":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"properties[\"Task Name\"].title[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.task_name }}"},{"name":"properties.TodoistID.rich_text[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}"},{"name":"properties.Priority.select.name","value":"={{ $('Map Todoist to Notion1').item.json.priority }}"},{"name":"properties.Section.select.name","value":"={{ $('Map Todoist to Notion1').item.json.section_name }}"},{"name":"properties.Recurrence.rich_text[0].text.content","value":"={{$('Map Todoist to Notion1').item.json.recurrence ?  $('Map Todoist to Notion1').item.json.recurrence :\"\" }}"},{"name":"=properties.Due.date.start","value":"={{$('Map Todoist to Notion1').item.json.start_date || ''}}"},{"name":"parent.database_id","value":"={{ $('GlobalsT1').item.json.database_id }}"},{"name":"properties.Created.date.start","value":"={{ $('Map Todoist to Notion1').item.json.created_at || ''}}"},{"name":"properties.Tasks.relation","value":"={{ [{ id: $json.id }] }}"}]},"nodeCredentialType":"notionApi"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":4.2},{"id":"fdc202d0-229a-4d70-ad23-392219eb569c","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[6912,2288],"parameters":{"color":7,"width":336,"height":384,"content":"## Sub Task"},"typeVersion":1},{"id":"c443abb7-b099-4b86-8870-f281134ce8fe","name":"If","type":"n8n-nodes-base.if","position":[6576,2208],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"8136cff2-dd62-44bf-813f-475049b55ea6","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $('Get Todoist Task').item.json.parent_id }}","rightValue":""}]}},"typeVersion":2.2},{"id":"ab4a7cb7-cf33-4815-8db6-1c41663cabf0","name":"Todoist Webhook1","type":"n8n-nodes-base.webhook","position":[-272,4640],"webhookId":"acc652be-11e2-410c-8d2b-82185e396336","parameters":{"path":"todoist-webhook","options":{},"httpMethod":"POST"},"typeVersion":2},{"id":"4b3346d2-106b-495d-ac4e-97922ebd0381","name":"Mark as Done in Notion1","type":"n8n-nodes-base.notion","position":[7184,4592],"parameters":{"pageId":{"__rl":true,"mode":"id","value":"={{ $json.id }}"},"options":{},"resource":"databasePage","operation":"update","propertiesUi":{"propertyValues":[{"key":"Status|checkbox","checkboxValue":true}]}},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"retryOnFail":true,"typeVersion":2.2,"waitBetweenTries":3000},{"id":"af868353-86e8-441e-81d7-2286b35e3e0d","name":"Mark as Obsolete in Notion1","type":"n8n-nodes-base.notion","position":[6608,6352],"parameters":{"pageId":{"__rl":true,"mode":"id","value":"={{ $json.id }}"},"options":{},"resource":"databasePage","operation":"update","propertiesUi":{"propertyValues":[{"key":"Section|select","selectValue":"Obsolete"}]}},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"retryOnFail":true,"typeVersion":2.2,"waitBetweenTries":3000},{"id":"7558a068-bd64-4b6d-862f-781cbca8e8fd","name":"Only continue if not locked1","type":"n8n-nodes-base.filter","position":[832,4640],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"1f5f7a62-ec48-439f-a037-849810e77e70","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $json.item }}","rightValue":" SmallExecuted"}]}},"typeVersion":2.2},{"id":"453c11c8-c938-44e2-af68-b316796c225a","name":"Check if Todoist ID is locked1","type":"n8n-nodes-base.redis","position":[608,4640],"parameters":{"key":"=lock_{{ $json.body.event_data.id }}","keyType":"string","options":{},"operation":"get","propertyName":"item"},"credentials":{"redis":{"id":"kK0ILhKyRSI5532Q","name":"Redis account"}},"typeVersion":1},{"id":"948602fd-5d30-4671-90ab-7ba2fa4169e8","name":"Check if creating flag exists","type":"n8n-nodes-base.redis","position":[5936,2384],"parameters":{"key":"=creating_for_{{ $('Todoist Trigger1').item.json.body.event_data.id }}","keyType":"string","options":{},"operation":"get","propertyName":"item"},"credentials":{"redis":{"id":"kK0ILhKyRSI5532Q","name":"Redis account"}},"typeVersion":1},{"id":"51ba746e-4b48-4bac-968e-f1272f5f4376","name":"Only continue if flag does not exist","type":"n8n-nodes-base.filter","position":[6160,2384],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"6b3359cb-c8fc-4663-b2a9-e367ad4fcba5","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $json.item }}","rightValue":"={{ null }}"}]}},"typeVersion":2.2},{"id":"cdc93992-e768-451d-b7d5-4d9fb3841e00","name":"Set creating flag","type":"n8n-nodes-base.redis","position":[6384,2384],"parameters":{"key":"=creating_for_{{ $('Todoist Trigger1').item.json.body.event_data.id }}","ttl":10,"value":"={{ $now.toISO() }}","expire":true,"keyType":"string","operation":"set"},"credentials":{"redis":{"id":"kK0ILhKyRSI5532Q","name":"Redis account"}},"typeVersion":1},{"id":"76345f5a-1f6f-4cc7-a154-6d46a1b685b6","name":"Get Notion Task","type":"n8n-nodes-base.notion","position":[5936,6352],"parameters":{"limit":1,"filters":{"conditions":[{"key":"TodoistID|rich_text","condition":"equals","richTextValue":"={{ $('Todoist Trigger1').item.json.body.event_data.id }}"}]},"options":{},"resource":"databasePage","matchType":"allFilters","operation":"getAll","databaseId":{"__rl":true,"mode":"id","value":"={{ $('GlobalsT1').first().json.database_id }}"},"filterType":"manual"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":2.2,"alwaysOutputData":true},{"id":"6d0ad2a0-5be9-4998-a8d3-5fdc84cfdadd","name":"Notion Task found","type":"n8n-nodes-base.filter","position":[6160,6352],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"d644079f-b140-42b3-85c5-f1283a6d21d8","operator":{"type":"object","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json }}","rightValue":""}]}},"typeVersion":2.2},{"id":"ae69ff78-00a6-4dd4-8033-0fe1b4fa3902","name":"Switch by Event1","type":"n8n-nodes-base.switch","position":[6208,4464],"parameters":{"rules":{"values":[{"outputKey":"item:updated","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"4ffd3f5d-dc24-47cb-a4df-1a6f6a6dc2b9","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $('Todoist Trigger1').item.json.body.event_name }}","rightValue":"item:updated"}]},"renameOutput":true},{"outputKey":"item:completed","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"d5290195-6595-4c91-af86-6df724bb0980","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $('Todoist Trigger1').item.json.body.event_name }}","rightValue":"item:completed"}]},"renameOutput":true},{"outputKey":"item:uncompleted","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"e047ade5-ce68-4bc8-b799-7130bd0eb917","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $('Todoist Trigger1').item.json.body.event_name }}","rightValue":"item:uncompleted"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.2},{"id":"d6d8067d-4c99-4a7c-a655-253a212ee883","name":"Execution Data5","type":"n8n-nodes-base.executionData","position":[4448,4608],"parameters":{"dataToSave":{"values":[{"key":"task_name","value":"={{ $('Get Todoist Task').item.json.content }}"}]}},"typeVersion":1},{"id":"cc9d6c3a-cd77-42e5-a49a-c4b73706c117","name":"Execution Data6","type":"n8n-nodes-base.executionData","position":[7728,2384],"parameters":{"dataToSave":{"values":[{"key":"notion_id","value":"={{ $json.id }}"}]}},"typeVersion":1},{"id":"4b47993a-e9ac-4ad3-9007-24e5d49ccde8","name":"Execution Data7","type":"n8n-nodes-base.executionData","position":[5968,4480],"parameters":{"dataToSave":{"values":[{"key":"notion_id","value":"={{ $('Notion Task not found1').item.json.id }}"}]}},"typeVersion":1},{"id":"c2e49cfd-384f-43a5-a5f9-8f6eb712a4d1","name":"Execution Data8","type":"n8n-nodes-base.executionData","position":[6400,6352],"parameters":{"dataToSave":{"values":[{"key":"notion_id","value":"={{ $json.id }}"},{"key":"task_name","value":"={{ $json.name }}"}]}},"typeVersion":1},{"id":"a0db317f-4a83-493d-b13e-af0269171abd","name":"Sticky Note24","type":"n8n-nodes-base.stickyNote","position":[4384,4496],"parameters":{"color":7,"width":220,"height":280,"content":"Store more information, which was not available earlier"},"typeVersion":1},{"id":"d0493464-c46f-4fa8-aa05-9dfa76141c85","name":"Sticky Note33","type":"n8n-nodes-base.stickyNote","position":[7424,2304],"parameters":{"color":7,"width":220,"height":240,"content":"Set focussed flag, so it remains in Todoist even after updating in Notion"},"typeVersion":1},{"id":"1fead4b5-3100-44f3-a320-26b06fccf32d","name":"Sticky Note38","type":"n8n-nodes-base.stickyNote","position":[5840,1856],"parameters":{"color":7,"width":2520,"height":840,"content":"**Create Notion page** if it does not exist"},"typeVersion":1},{"id":"75ac90e4-735f-4751-8800-acf588cc2f5f","name":"Sticky Note39","type":"n8n-nodes-base.stickyNote","position":[5888,3840],"parameters":{"color":7,"width":1612,"height":1060,"content":"**Update Notion page** if it needs to be changed"},"typeVersion":1},{"id":"ea371181-1a82-46bc-9bcb-84d4ebdcbfe7","name":"Sticky Note40","type":"n8n-nodes-base.stickyNote","position":[544,4528],"parameters":{"color":7,"width":440,"height":280,"content":"Checking for a cached flag in Redis, to prevent overrides and endless loops."},"typeVersion":1},{"id":"524f0c35-0160-44ea-88c4-5c66eaf4293d","name":"Sticky Note41","type":"n8n-nodes-base.stickyNote","position":[4608,4496],"parameters":{"color":7,"width":220,"height":280,"content":"Retrieve Notion page, so it can be compared against"},"typeVersion":1},{"id":"dffbaa62-3e70-4277-a1ad-a8816fc636f2","name":"Sticky Note42","type":"n8n-nodes-base.stickyNote","position":[5904,4368],"parameters":{"color":7,"width":236,"height":280,"content":"Store more information, which was not available earlier"},"typeVersion":1},{"id":"a8bea9ce-60af-46d1-886b-c2d8f95f878e","name":"Sticky Note43","type":"n8n-nodes-base.stickyNote","position":[-112,4528],"parameters":{"color":7,"width":204,"height":280,"content":"Following nodes reference to this node, so the trigger can easily be replaced\n\n"},"typeVersion":1},{"id":"3bdb6122-92bd-49b0-87b6-136a2388d6ff","name":"Sticky Note44","type":"n8n-nodes-base.stickyNote","position":[5888,2304],"parameters":{"color":7,"width":660,"height":240,"content":"This prevents the creation of duplicates in Notion, by storing a special flag in Redis containing the Todoist ID"},"typeVersion":1},{"id":"9ed4ce34-b4c0-4803-9c4a-74ec6dc062a1","name":"Sticky Note54","type":"n8n-nodes-base.stickyNote","position":[992,4528],"parameters":{"color":7,"width":188,"height":280,"content":"Using the event type from Todoist is the only option to actually recognize, if a task was deleted"},"typeVersion":1},{"id":"01ffa6f9-3403-4971-bd16-ebc5c5371771","name":"Sticky Note55","type":"n8n-nodes-base.stickyNote","position":[4160,4496],"parameters":{"color":7,"width":220,"height":280,"content":"The mapping is more advanced and also includes fall-back values for edge-cases"},"typeVersion":1},{"id":"80caae41-5897-4dc9-9057-c84b00db76ce","name":"Sticky Note60","type":"n8n-nodes-base.stickyNote","position":[4832,4496],"parameters":{"color":7,"width":220,"height":280,"content":"Previous node always returns output data, since it uses a filter to retrieve a matching item"},"typeVersion":1},{"id":"8e4cdbc4-817d-4975-9cac-8060ebe2bd28","name":"Sticky Note61","type":"n8n-nodes-base.stickyNote","position":[7664,2304],"parameters":{"color":7,"width":220,"height":240,"content":"Store more information, which was not available earlier"},"typeVersion":1},{"id":"8f0df50d-950b-4251-b326-24950a49c7a2","name":"Sticky Note62","type":"n8n-nodes-base.stickyNote","position":[9984,4304],"parameters":{"color":7,"width":220,"height":280,"content":"The Notion ID is being cached in Redis for 15 seconds, so the other Diff sync does not get triggered."},"typeVersion":1},{"id":"8959fafd-ee6d-4cd0-9798-7d0d596f4c96","name":"Sticky Note63","type":"n8n-nodes-base.stickyNote","position":[5872,6240],"parameters":{"color":7,"width":940,"height":304,"content":"**Delete Notion page** if Todoist task has been deleted"},"typeVersion":1},{"id":"c17dc3e0-4688-4454-a8b7-f525bc531456","name":"Sticky Note64","type":"n8n-nodes-base.stickyNote","position":[6336,6256],"parameters":{"color":7,"width":220,"height":260,"content":"Store more information, which was not available earlier"},"typeVersion":1},{"id":"ba9aa684-e05d-4118-aee6-2a43a6725f9d","name":"End here1","type":"n8n-nodes-base.noOp","position":[3280,4592],"parameters":{},"typeVersion":1},{"id":"8386b48c-ee02-42af-abf8-257ad7d9501a","name":"Wait","type":"n8n-nodes-base.wait","position":[3152,4704],"webhookId":"0b893aaa-3773-4d19-8cd3-d2e5f49cf036","parameters":{},"typeVersion":1.1},{"id":"2432b777-8af8-474e-af98-254fe56a5e83","name":"Catch known error","type":"n8n-nodes-base.if","position":[2880,4608],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"6a379b06-0b04-4ae4-9bf9-394bd40744b7","operator":{"type":"string","operation":"contains"},"leftValue":"={{ $json.error }}","rightValue":"could not be found"}]}},"typeVersion":2.2},{"id":"2e5a3809-8c87-498e-80be-d939e726e8b6","name":"If tries left","type":"n8n-nodes-base.if","position":[2176,4672],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"b18f784a-4386-4ced-a9e1-ce5a21ad036e","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $json.tries }}","rightValue":3}]}},"typeVersion":2.2},{"id":"2ac68b41-e5e5-4417-bd5c-62ee415ced4d","name":"Retry limit reached","type":"n8n-nodes-base.stopAndError","position":[2384,4688],"parameters":{"errorMessage":"Retry limit reached"},"typeVersion":1},{"id":"06d394c0-5d7d-4798-a0ca-09ffedcca2f8","name":"Sticky Note45","type":"n8n-nodes-base.stickyNote","position":[8112,2304],"parameters":{"color":7,"width":220,"height":240,"content":"Overwrite description with Notion URL"},"typeVersion":1},{"id":"93b63943-00e6-44e2-b721-5cafc5039acd","name":"Turn Markdown into Notion Blocks2","type":"n8n-nodes-base.code","position":[7728,2128],"parameters":{"mode":"runOnceForEachItem","jsCode":"// Get the markdown from the input\nconst markdown = $('Get Todoist Task').item.json.description || '';\n\n// Split the markdown into lines and remove empty lines\nconst lines = markdown.split('\\n').filter(line => line.trim());\n\n// Initialize result array\nconst result = [];\n\n// Helper function to split long text into chunks\nfunction splitIntoChunks(text, maxLength) {\n    const chunks = [];\n    let remaining = text;\n    \n    while (remaining.length > maxLength) {\n        // Find the last space before maxLength\n        let splitIndex = remaining.lastIndexOf(' ', maxLength);\n        // If no space found, force split at maxLength\n        if (splitIndex === -1) splitIndex = maxLength;\n        \n        chunks.push(remaining.substring(0, splitIndex).trim());\n        remaining = remaining.substring(splitIndex).trim();\n    }\n    \n    if (remaining.length > 0) {\n        chunks.push(remaining);\n    }\n    \n    return chunks;\n}\n\nfor (const line of lines) {\n    const trimmedLine = line.trim();\n    \n    // Skip if empty line\n    if (!trimmedLine) continue;\n    \n    // Check for different types of markdown elements\n    if (trimmedLine.startsWith('# ')) {\n        result.push({\n            type: 'heading_1',\n            content: trimmedLine.substring(2).trim()\n        });\n    }\n    else if (trimmedLine.startsWith('## ')) {\n        result.push({\n            type: 'heading_2',\n            content: trimmedLine.substring(3).trim()\n        });\n    }\n    else if (trimmedLine.startsWith('### ')) {\n        result.push({\n            type: 'heading_3',\n            content: trimmedLine.substring(4).trim()\n        });\n    }\n    else if (trimmedLine.match(/^\\d+\\./)) {\n        result.push({\n            type: 'numbered_list_item',\n            content: trimmedLine.replace(/^\\d+\\.\\s*/, '').trim()\n        });\n    }\n    else if (trimmedLine.startsWith('- ')) {\n        result.push({\n            type: 'bulleted_list_item',\n            content: trimmedLine.substring(2).trim()\n        });\n    }\n    else {\n        // For paragraphs, check if they need to be split\n        if (trimmedLine.length > 2000) {\n            const chunks = splitIntoChunks(trimmedLine, 2000);\n            for (const chunk of chunks) {\n                result.push({\n                    type: 'paragraph',\n                    content: chunk\n                });\n            }\n        } else {\n            result.push({\n                type: 'paragraph',\n                content: trimmedLine\n            });\n        }\n    }\n}\n\n// Return the result in the format n8n expects\nreturn { blocks: result };\n"},"typeVersion":2},{"id":"01150a0b-77f1-4c01-a78c-cd1862f4f16f","name":"Handle each block separately2","type":"n8n-nodes-base.splitOut","position":[7952,2128],"parameters":{"options":{},"fieldToSplitOut":"blocks"},"typeVersion":1},{"id":"839841e2-40d6-4f32-a62c-ad3e6e7434a9","name":"Append Notion Block2","type":"n8n-nodes-base.notion","position":[8176,2128],"parameters":{"blockId":{"__rl":true,"mode":"id","value":"={{ $('Create task in Notion1').item.json.id }}"},"blockUi":{"blockValues":[{"type":"={{ $json.type }}","textContent":"={{ $json.content }}"}]},"resource":"block"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":2.2},{"id":"eeea44d4-135d-4a27-9969-3d54a570a765","name":"Sticky Note46","type":"n8n-nodes-base.stickyNote","position":[7664,2048],"parameters":{"color":7,"width":660,"height":240,"content":"Copy task description initially to Notion, before it get's replaced in Todoist by the Notion URL"},"typeVersion":1},{"id":"9e181778-5ff9-483f-8ee3-debc6efe6b74","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[7888,2304],"parameters":{"color":7,"width":220,"height":240,"content":"Store more information, which was not available earlier"},"typeVersion":1},{"id":"372c9011-dc53-4a5a-94d3-be63e4e9eb8d","name":"Update task in Notion","type":"n8n-nodes-base.httpRequest","position":[7088,3904],"parameters":{"url":"=https://api.notion.com/v1/pages/{{ $json.id }}","method":"PATCH","options":{},"sendBody":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"properties[\"Task Name\"].title[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.task_name }}"},{"name":"=properties.TodoistID.rich_text[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}"},{"name":"properties.Priority.select.name","value":"={{ $('Map Todoist to Notion1').item.json.priority }}"},{"name":"properties.Section.select.name","value":"={{ $('Map Todoist to Notion1').item.json.section_name }}"},{"name":"properties.Recurrence.rich_text[0].text.content","value":"={{$('Map Todoist to Notion1').item.json.recurrence ?  $('Map Todoist to Notion1').item.json.recurrence :\"\" }}"}]},"nodeCredentialType":"notionApi"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":4.2},{"id":"22828897-2217-4ddc-8c4a-6941519ecd44","name":"Create task in Notion1","type":"n8n-nodes-base.noOp","position":[7488,2384],"parameters":{},"typeVersion":1},{"id":"491ae343-55bb-4b36-bb8b-75bcadca46c4","name":"Update task in Notion4","type":"n8n-nodes-base.httpRequest","position":[7088,4032],"parameters":{"url":"=https://api.notion.com/v1/pages/{{ $json.id }}","method":"PATCH","options":{},"sendBody":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"properties[\"Task Name\"].title[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.task_name }}"},{"name":"properties.TodoistID.rich_text[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}"},{"name":"properties.Due.date.start","value":"={{$('Map Todoist to Notion1').item.json.start_date || ''}}"},{"name":"properties.Priority.select.name","value":"={{ $('Map Todoist to Notion1').item.json.priority }}"},{"name":"properties.Section.select.name","value":"={{ $('Map Todoist to Notion1').item.json.section_name }}"},{"name":"properties.Recurrence.rich_text[0].text.content","value":"={{$('Map Todoist to Notion1').item.json.recurrence ?  $('Map Todoist to Notion1').item.json.recurrence :\"\" }}"}]},"nodeCredentialType":"notionApi"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":4.2},{"id":"c79ed5df-eb12-44f8-88c3-a9d287f86113","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[2112,4448],"parameters":{"color":7,"width":1496,"height":456,"content":"Todoist webhooks can arrive late. To ensure the data is up to date, the payload must be retrieved again. Triggers on deletion can overlap, thus try 3 times, then just stop.\nUsing advanced retry logic, since the \"Get many tasks\" endpoint does not return completed tasks.\nNo more retries needed, if Task does not exist."},"typeVersion":1},{"id":"52aa03c3-d146-450a-befe-ba16bdef27c0","name":"Execution Data9","type":"n8n-nodes-base.executionData","position":[384,4640],"parameters":{"dataToSave":{"values":[{"key":"database_id","value":"={{ $json.database_id }}"},{"key":"project_id","value":"={{ $json.project_id }}"},{"key":"todoist_id","value":"={{ $('Todoist Trigger1').item.json.body.event_data.id }}"},{"key":"source","value":"Todoist"}]}},"typeVersion":1},{"id":"c7e1befb-f6b1-45dc-a6d1-ee20bcf12dea","name":"Sticky Note65","type":"n8n-nodes-base.stickyNote","position":[320,4528],"parameters":{"color":7,"width":220,"height":280,"content":"Store relevant information in highlighted execution data, in case of debugging"},"typeVersion":1},{"id":"494bacd3-c7d7-444d-a738-83c85f191ffe","name":"If event is not deleted1","type":"n8n-nodes-base.if","position":[1040,4640],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"4fb65ecf-dbb9-4bd1-a5a8-614441aa2963","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Todoist Trigger1').item.json.body.event_name }}","rightValue":"item:deleted"}]}},"typeVersion":2.2},{"id":"d7da5574-5ad5-42c0-a3fa-afe08351a5bf","name":"Sticky Note66","type":"n8n-nodes-base.stickyNote","position":[96,4448],"parameters":{"width":220,"height":360,"content":"## Set Globals\nUse Sync Setup Helper Workflow to generate the JSON and paste it in every Globals Nodes\n"},"typeVersion":1},{"id":"0604da8f-a4e0-44f8-b20a-525695c4e4ee","name":"Sticky Note68","type":"n8n-nodes-base.stickyNote","position":[-336,4448],"parameters":{"width":220,"height":360,"content":"## Register Webhook in Todoist App\nGrab the URL from here and add it to the Todosit developer app as described in the setup instructions\n"},"typeVersion":1},{"id":"f0800a46-41e6-4856-87b5-3d65130e86d8","name":"Get many database pages1","type":"n8n-nodes-base.notion","position":[4672,4608],"parameters":{"filters":{"conditions":[{"key":"TodoistID|rich_text","condition":"equals","richTextValue":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}"}]},"options":{},"resource":"databasePage","operation":"getAll","databaseId":{"__rl":true,"mode":"id","value":"={{ $('GlobalsT1').item.json.database_id }}"},"filterType":"manual"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"retryOnFail":false,"typeVersion":2.2,"alwaysOutputData":true},{"id":"b4ce7da3-5bc3-446f-838d-032a326f2ee2","name":"Sticky Note69","type":"n8n-nodes-base.stickyNote","position":[9984,4032],"parameters":{"color":7,"width":220,"height":280,"content":"The Notion ID is being cached in Redis for 15 seconds, so the other Diff sync does not get triggered."},"typeVersion":1},{"id":"29f83518-853d-4adc-80e1-72d72fd80b85","name":"Url","type":"n8n-nodes-base.code","position":[7952,2384],"parameters":{"jsCode":"const notionUrl = $('Create task in Notion1').first().json.url;\nconst modifiedUrl = notionUrl.replace(\"https://\", \"notion://\");\nreturn { json: { url: modifiedUrl } };"},"typeVersion":2},{"id":"a4e33fa0-3683-4898-b920-00c7f6ffd274","name":"Todoist Trigger1","type":"n8n-nodes-base.noOp","position":[-64,4640],"parameters":{},"typeVersion":1},{"id":"c39919c4-4c03-4b45-8378-4d30037a0c53","name":"Update task in Notion5","type":"n8n-nodes-base.httpRequest","position":[7088,4160],"parameters":{"url":"=https://api.notion.com/v1/pages/{{ $json.id }}","method":"PATCH","options":{},"sendBody":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"properties[\"Task Name\"].title[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.task_name }}"},{"name":"=properties.TodoistID.rich_text[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}"},{"name":"properties.Due.date.start","value":"={{$('Map Todoist to Notion1').item.json.start_date || ''}}"},{"name":"properties.Priority.select.name","value":"={{ $('Map Todoist to Notion1').item.json.priority }}"},{"name":"properties.Section.select.name","value":"={{ $('Map Todoist to Notion1').item.json.section_name }}"},{"name":"properties.Recurrence.rich_text[0].text.content","value":"={{$('Map Todoist to Notion1').item.json.recurrence ?  $('Map Todoist to Notion1').item.json.recurrence :\"\" }}"},{"name":"properties.Due.date.end","value":"={{$('Map Todoist to Notion1').item.json.end_date}}"}]},"nodeCredentialType":"notionApi"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":4.2},{"id":"8e9fc76f-5315-473d-bbb4-b1a790c4ebfe","name":"Create task in Notion Refference1","type":"n8n-nodes-base.noOp","position":[7344,4032],"parameters":{},"typeVersion":1},{"id":"23332f6f-1349-40ac-9d4d-10beb69d20ae","name":"Differences exist3","type":"n8n-nodes-base.filter","position":[6832,4032],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"or","conditions":[{"id":"db8871d6-7f3f-468e-9a6e-3975c9f003f5","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.task_name }}","rightValue":"={{ $json.name }}"},{"id":"df493beb-52a8-47f7-90c6-fb5786b1deed","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.priority }}","rightValue":"={{ $json.property_priority }}"},{"id":"7d8b21ff-b9fe-41c7-b9da-246781e83edf","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.section_name }}","rightValue":"={{ $json.property_section }}"},{"id":"96fd2891-1aba-4b32-82cd-41ad2df2b23a","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.start_date }}","rightValue":"={{ $json.property_due.start }}"},{"id":"440877f3-7d9f-4111-b7c2-4ce01f28d21e","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.recurrence || '' }}","rightValue":"={{ $json.property_recurrence }}"}]}},"typeVersion":2.2},{"id":"a2edaac9-05f9-4a8a-8bf1-3aab7f06015e","name":"Turn Markdown into Notion Blocks3","type":"n8n-nodes-base.code","position":[6832,4432],"parameters":{"mode":"runOnceForEachItem","jsCode":"const markdownFull = $('Get Todoist Task').item.json.description || '';\n\n// Extract the first line as is\nconst firstLine = markdownFull.split('\\n')[0];\n\n// Extract the rest of the lines (everything except the first line)\nconst markdown = markdownFull.split('\\n').slice(1).join('\\n');\n\n// Split the markdown into lines and remove empty lines\nconst lines = markdown.split('\\n').filter(line => line.trim());\n\n// Initialize result array\nconst result = [];\n\n// Helper function to split long text into chunks\nfunction splitIntoChunks(text, maxLength) {\n    const chunks = [];\n    let remaining = text;\n    \n    while (remaining.length > maxLength) {\n        // Find the last space before maxLength\n        let splitIndex = remaining.lastIndexOf(' ', maxLength);\n        // If no space found, force split at maxLength\n        if (splitIndex === -1) splitIndex = maxLength;\n        \n        chunks.push(remaining.substring(0, splitIndex).trim());\n        remaining = remaining.substring(splitIndex).trim();\n    }\n    \n    if (remaining.length > 0) {\n        chunks.push(remaining);\n    }\n    \n    return chunks;\n}\n\nfor (const line of lines) {\n    const trimmedLine = line.trim();\n    \n    // Skip if empty line\n    if (!trimmedLine) continue;\n    \n    // Check for different types of markdown elements\n    if (trimmedLine.startsWith('# ')) {\n        result.push({\n            type: 'heading_1',\n            content: trimmedLine.substring(2).trim()\n        });\n    }\n    else if (trimmedLine.startsWith('## ')) {\n        result.push({\n            type: 'heading_2',\n            content: trimmedLine.substring(3).trim()\n        });\n    }\n    else if (trimmedLine.startsWith('### ')) {\n        result.push({\n            type: 'heading_3',\n            content: trimmedLine.substring(4).trim()\n        });\n    }\n    else if (trimmedLine.match(/^\\d+\\./)) {\n        result.push({\n            type: 'numbered_list_item',\n            content: trimmedLine.replace(/^\\d+\\.\\s*/, '').trim()\n        });\n    }\n    else if (trimmedLine.startsWith('- ')) {\n        result.push({\n            type: 'bulleted_list_item',\n            content: trimmedLine.substring(2).trim()\n        });\n    }\n    else {\n        // For paragraphs, check if they need to be split\n        if (trimmedLine.length > 2000) {\n            const chunks = splitIntoChunks(trimmedLine, 2000);\n            for (const chunk of chunks) {\n                result.push({\n                    type: 'paragraph',\n                    content: chunk\n                });\n            }\n        } else {\n            result.push({\n                type: 'paragraph',\n                content: trimmedLine\n            });\n        }\n    }\n}\n\n// Return the result in the format n8n expects\nreturn { blocks: result };\n"},"typeVersion":2},{"id":"1a9a3208-3a1c-4f2d-a480-b23fb88dc444","name":"Handle each block separately3","type":"n8n-nodes-base.splitOut","position":[7008,4432],"parameters":{"options":{},"fieldToSplitOut":"blocks"},"typeVersion":1},{"id":"2318938a-1a46-4a03-8d7d-1db5290ea01e","name":"Append Notion Block3","type":"n8n-nodes-base.notion","position":[7184,4432],"parameters":{"blockId":{"__rl":true,"mode":"id","value":"={{ $('Link or Content?1').item.json.id}}"},"blockUi":{"blockValues":[{"type":"={{ $json.type }}","textContent":"={{ $json.content }}"}]},"resource":"block"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":2.2},{"id":"9357b310-34fb-4e37-88c7-a55ef964781b","name":"Sticky Note47","type":"n8n-nodes-base.stickyNote","position":[6800,4384],"parameters":{"color":7,"width":676,"height":208,"content":"Copy task description initially to Notion, before it get's replaced in Todoist by the Notion URL"},"typeVersion":1},{"id":"2027fbec-d843-4977-a5f9-7b19a5677b17","name":"Link or Content?1","type":"n8n-nodes-base.switch","position":[6528,4432],"parameters":{"rules":{"values":[{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"136bcee4-8d5d-4944-be27-2103cb7c87d4","operator":{"type":"string","operation":"equals"},"leftValue":"={{ \n  (() => {\n    const desc = $('Get Todoist Task').item.json.description || '';\n    const lines = desc.split('\\n');\n    if (lines.length > 1) {\n      const hasContentAfterFirst = lines.slice(1).some(line => line.trim().length > 0);\n      return hasContentAfterFirst ? 'true' : 'false';\n    }\n    return 'false';\n  })()\n}}","rightValue":"true"}]}}]},"options":{}},"typeVersion":3.3},{"id":"fce780cc-8fd9-4ad7-92fc-553c0a4f969e","name":"Differences exist4","type":"n8n-nodes-base.filter","position":[6832,4160],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"or","conditions":[{"id":"db8871d6-7f3f-468e-9a6e-3975c9f003f5","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.task_name }}","rightValue":"={{ $json.name }}"},{"id":"df493beb-52a8-47f7-90c6-fb5786b1deed","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.priority }}","rightValue":"={{ $json.property_priority }}"},{"id":"7d8b21ff-b9fe-41c7-b9da-246781e83edf","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.section_name }}","rightValue":"={{ $json.property_section }}"},{"id":"96fd2891-1aba-4b32-82cd-41ad2df2b23a","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $json.property_due.start }}","rightValue":"={{ $json.property_due.start }}"},{"id":"e599ba61-9c03-4ffc-adfe-36bfdc81b974","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.end_date }}","rightValue":"={{ $json.property_due.end }}"},{"id":"f7552033-2a4e-44d0-b223-78776fa87101","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.recurrence || ''}}","rightValue":"={{ $json.property_recurrence }}"}]}},"typeVersion":2.2},{"id":"db751bf9-8488-497f-bb9f-61e227e2063c","name":"Differences exist5","type":"n8n-nodes-base.filter","position":[6832,3904],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"or","conditions":[{"id":"db8871d6-7f3f-468e-9a6e-3975c9f003f5","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.task_name }}","rightValue":"={{ $json.name }}"},{"id":"df493beb-52a8-47f7-90c6-fb5786b1deed","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.priority }}","rightValue":"={{ $json.property_priority }}"},{"id":"7d8b21ff-b9fe-41c7-b9da-246781e83edf","operator":{"type":"string","operation":"notEquals"},"leftValue":"={{ $('Map Todoist to Notion1').item.json.section_name }}","rightValue":"={{ $json.property_section }}"}]}},"typeVersion":2.2},{"id":"56d5ae7a-bd4f-487a-b5fa-54dd2ffa2dee","name":"Update Description in Todoist6","type":"n8n-nodes-base.todoist","position":[7344,4432],"parameters":{"taskId":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}","operation":"update","updateFields":{"description":"={{ $('Get Todoist Task').item.json.description.split('\\n')[0].trim() }}"}},"credentials":{"todoistApi":{"id":"OU0Scpt6RKeD51Xc","name":"Todoist account"}},"typeVersion":2.1},{"id":"28f2965b-65c7-4154-943a-1ce3892e94e5","name":"Map Todoist to Notion1","type":"n8n-nodes-base.code","position":[4224,4608],"parameters":{"mode":"runOnceForEachItem","jsCode":"const globals = $('GlobalsT1').item.json;\nlet eventData = $json;\nlet output = {};\n\noutput.todoist_id = eventData.id;//Todoist Task ID\noutput.task_name = eventData.content;//Todoist Task Name\n\n// Completion status\nif($json.checked == false){\noutput.status = eventData.checked=false;\n}\nelse if($json.is_completed == true){\noutput.status = eventData.checked=true;\n}\n// Completion status\n\n//Priority\nconst priorityMap = {\n  \"1\": \"4\",\n  \"2\": \"3\",\n  \"3\": \"2\",\n  \"4\": \"1\"\n};\nconst priorityKey = String(eventData.priority);\noutput.priority = priorityMap.hasOwnProperty(priorityKey) ? priorityMap[priorityKey] : \"4\";\n//Priority\n\n//Section\nfor (let i = 0; i < globals.sections.length; i++){\n    if(eventData.section_id === globals.sections[i].Section_id)\n    {\n        output.section_name = globals.sections[i].Section_name;\n        break;\n    }\n    else{\n      output.section_name = \"Inbox\"\n    }\n}\n//Section\n\n//Start Date\nif (eventData.due !== null){\noutput.start_date = eventData.due.date;\n if (eventData.due.date && eventData.due.date.includes(\"T\")) {\n  const { DateTime } = require('luxon');\n  const utcDate = DateTime.fromISO(eventData.due.date);\n  const istDate = utcDate.setZone(globals.timezone);\n  output.start_date = istDate;\n  }\n}\n//Start Date\n\n//End Date , Recurring\nif(eventData.due != null){\nif(eventData.due.is_recurring == true){\n  const extractBoth = (str) => {\n  const dayMatch = str.match(/every\\s+([^@]+?)(?:\\s+(?:ending|at|starting)\\s+|$)/i);\n  const dateMatch = str.match(/ending\\s+([\\d-]+)/);\n  const timeMatch = str.match(/at\\s+(\\w+)/);\n      \n  return {\n    day: dayMatch ? dayMatch[1].trim() : null,\n    date: dateMatch ? dateMatch[1] : null,\n    time: timeMatch ? timeMatch[1] : null\n  };\n  };\n\n  const dueString = eventData.due.string || \"\";\n  const result = extractBoth(dueString);\n  const endDate = result.date;\n  const day = result.day;\n//Recurrence\nfunction normalizeDayName(day) {\n  const dayLower = day.toLowerCase();\n  const daysMap = {\n    mon: \"monday\", monday: \"monday\",\n    tue: \"tuesday\", tuesday: \"tuesday\",\n    wed: \"wednesday\", wednesday: \"wednesday\",\n    thu: \"thursday\", thursday: \"thursday\",\n    fri: \"friday\", friday: \"friday\",\n    sat: \"saturday\", saturday: \"saturday\",\n    sun: \"sunday\", sunday: \"sunday\"\n  };\n  return daysMap[dayLower] || null;\n}\n\nfunction parseDays(input) {\n  // Split by common separators, comma prioritized but allow spaces, semicolons, etc.\n  const parts = input.split(/[\\s,;]+/).map(s => s.trim()).filter(Boolean);\n  const result = [];\n\n  for (const part of parts) {\n    // Check if it's a known day name\n    const normalizedDay = normalizeDayName(part);\n    if (normalizedDay) {\n      result.push(normalizedDay);\n      continue;\n    }\n\n    // Check for numeric day with suffix removal (1st, 22nd, 3rd, etc.)\n    const numericPart = part.replace(/(st|nd|rd|th)$/i, '');\n    const dayNum = parseInt(numericPart, 10);\n    if (!isNaN(dayNum) && dayNum >= 1 && dayNum <= 31) {\n      result.push(dayNum.toString());\n    }\n  }\n  \n  return result;\n}\n\nfunction parseRecurrence(day) {\n  if (!day || typeof day !== 'string') return \"\";\n\n  const singleKeywords = [\"day\", \"week\", \"month\", \"year\"];\n  const inputLower = day.toLowerCase();\n\n  // Check for keywords that represent period units\n  if (singleKeywords.includes(inputLower)) {\n    return inputLower;\n  }\n\n  // Otherwise parse as list or single day/date\n  const daysArray = parseDays(day);\n  if (daysArray.length > 0) {\n    return daysArray.join(\",\");\n  }\n\n  return \"\";\n}\noutput.recurrence = \"every \" + parseRecurrence(day);\n\n//Recurrence  \n\n//End Date\nif(endDate){\n      output.end_date = endDate;\n      if(eventData.due.date !== undefined){\n        output.end_date = endDate;\n        if(eventData.due.date && eventData.due.date.includes(\"T\")) {\n          const { DateTime } = require('luxon');\n          const utcDate = DateTime.fromISO(eventData.due.date);\n          const istDate = utcDate.setZone(globals.timezone);\n          const endtime = eventData.due.date.substring(String(istDate).indexOf(\"T\")) + \"+05:30\";\n        output.end_date = endDate + endtime ;\n        }\n      }\n}\n//End Date  \n}\n}\n//End Date, Recurring\n\noutput.created_at = eventData.added_at;\n\nreturn { json: output };"},"typeVersion":2},{"id":"f739ac58-5985-4e59-90a2-626503e5b9d9","name":"GlobalsT1","type":"n8n-nodes-base.set","position":[160,4640],"parameters":{"mode":"raw","options":{},"jsonOutput":"{\"database_id\":\"2926158c-6d1c-8185-ace4-cb4a80d54b96\",\n\"project_id\":\"6V97FCWRxfm7JwgV\",\n\"sections\":[{\"Section_id\":\"6c3vRHhC6c7MHmQV\",\"Section_name\":\"Recurring\"},{\"Section_id\":\"6c42q6w6F7rqH4c3\",\"Section_name\":\"Reminders\"},{\"Section_id\":\"6c42q5pW663M8CmV\",\"Section_name\":\"Study\"},{\"Section_id\":\"6c4rH8QmWCPgchPV\",\"Section_name\":\"Notepad\"}],\n\"timezone\":\"Asia/Kolkata\"}","includeOtherFields":true},"executeOnce":true,"typeVersion":3.4},{"id":"11a78427-de87-446d-9482-769db8c57fc8","name":"SwitchT3","type":"n8n-nodes-base.switch","position":[6928,2000],"parameters":{"rules":{"values":[{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"748078c7-1dfd-4ce8-a3ac-67328bc95fad","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $('Map Todoist to Notion1').item.json.start_date }}","rightValue":""}]}},{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"93690b35-61c9-4db5-a797-4bf626863590","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $('Map Todoist to Notion1').item.json.end_date}}","rightValue":""}]}},{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"49ac08e0-91ca-4f74-ba9d-be09ef128be6","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"={{ $('Map Todoist to Notion1').item.json.end_date}}","rightValue":""}]}}]},"options":{}},"typeVersion":3.3},{"id":"942b9bc3-5eae-41ab-85e7-18b1ec2e3a5b","name":"SwitchT4","type":"n8n-nodes-base.switch","position":[6528,4016],"parameters":{"rules":{"values":[{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"748078c7-1dfd-4ce8-a3ac-67328bc95fad","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $('Map Todoist to Notion1').item.json.start_date }}","rightValue":""}]}},{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"93690b35-61c9-4db5-a797-4bf626863590","operator":{"type":"string","operation":"notExists","singleValue":true},"leftValue":"={{ $('Map Todoist to Notion1').item.json.end_date }}","rightValue":""}]}},{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"49ac08e0-91ca-4f74-ba9d-be09ef128be6","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"={{ $('Map Todoist to Notion1').item.json.end_date }}","rightValue":""}]}}]},"options":{}},"typeVersion":3.3},{"id":"6394f95b-98db-4258-9fdf-3765d40f11c4","name":"Create task in NotionT6","type":"n8n-nodes-base.httpRequest","position":[7104,2128],"parameters":{"url":"=https://api.notion.com/v1/pages/","method":"POST","options":{},"sendBody":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"properties[\"Task Name\"].title[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.task_name }}"},{"name":"properties.TodoistID.rich_text[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}"},{"name":"properties.Priority.select.name","value":"={{ $('Map Todoist to Notion1').item.json.priority }}"},{"name":"properties.Section.select.name","value":"={{ $('Map Todoist to Notion1').item.json.section_name }}"},{"name":"properties.Recurrence.rich_text[0].text.content","value":"={{$('Map Todoist to Notion1').item.json.recurrence ?  $('Map Todoist to Notion1').item.json.recurrence :\"\" }}"},{"name":"=properties.Due.date.start","value":"={{$('Map Todoist to Notion1').item.json.start_date || ''}}"},{"name":"parent.database_id","value":"={{ $('GlobalsT1').item.json.database_id }}"},{"name":"properties.Due.date.end","value":"={{$('Map Todoist to Notion1').item.json.end_date || ''}}"},{"name":"properties.Created.date.start","value":"={{ $('Map Todoist to Notion1').item.json.created_at }}"}]},"nodeCredentialType":"notionApi"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":4.2},{"id":"6abf5d79-06a5-4177-bc7e-e6e467d893b3","name":"Create task in NotionT7","type":"n8n-nodes-base.httpRequest","position":[7104,2016],"parameters":{"url":"=https://api.notion.com/v1/pages/","method":"POST","options":{},"sendBody":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"properties[\"Task Name\"].title[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.task_name }}"},{"name":"properties.TodoistID.rich_text[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}"},{"name":"properties.Priority.select.name","value":"={{ $('Map Todoist to Notion1').item.json.priority }}"},{"name":"properties.Section.select.name","value":"={{ $('Map Todoist to Notion1').item.json.section_name }}"},{"name":"properties.Recurrence.rich_text[0].text.content","value":"={{$('Map Todoist to Notion1').item.json.recurrence ?  $('Map Todoist to Notion1').item.json.recurrence :\"\" }}"},{"name":"=properties.Due.date.start","value":"={{$('Map Todoist to Notion1').item.json.start_date || ''}}"},{"name":"parent.database_id","value":"={{ $('GlobalsT1').item.json.database_id }}"},{"name":"properties.Created.date.start","value":"={{ $('Map Todoist to Notion1').item.json.created_at || ''}}"}]},"nodeCredentialType":"notionApi"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":4.2},{"id":"6ba43f1c-0ce5-4e05-b45d-afe35e11d508","name":"Create task in NotionT8","type":"n8n-nodes-base.httpRequest","position":[7104,1888],"parameters":{"url":"=https://api.notion.com/v1/pages/","method":"POST","options":{},"sendBody":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"properties[\"Task Name\"].title[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.task_name }}"},{"name":"properties.TodoistID.rich_text[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}"},{"name":"properties.Priority.select.name","value":"={{ $('Map Todoist to Notion1').item.json.priority }}"},{"name":"properties.Section.select.name","value":"={{ $('Map Todoist to Notion1').item.json.section_name }}"},{"name":"parent.database_id","value":"={{ $('GlobalsT1').item.json.database_id }}"},{"name":"properties.Created.date.start","value":"={{ $('Map Todoist to Notion1').item.json.created_at }}"}]},"nodeCredentialType":"notionApi"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":4.2},{"id":"8fd9fd90-5f92-45bf-a186-0bb4d1980dae","name":"Update tries","type":"n8n-nodes-base.set","position":[3440,4704],"parameters":{"options":{},"assignments":{"assignments":[{"id":"df3c9b29-afa6-4e08-868d-5b7e8202eefa","name":"tries","type":"number","value":"={{ $('Set tries').item.json.tries + 1 }}"}]}},"typeVersion":3.4},{"id":"a6e77fa6-4205-49a4-b863-e65e464e416a","name":"Set tries","type":"n8n-nodes-base.set","position":[2304,4544],"parameters":{"options":{},"assignments":{"assignments":[{"id":"cd93a7f6-4c06-4e8a-8d0d-e812c5ec4bc5","name":"tries","type":"number","value":"={{ $json.tries || 0 }}"}]},"includeOtherFields":true},"typeVersion":3.4},{"id":"eeaf4eaf-f404-464f-9095-f09974b4818a","name":"Get Todoist Task","type":"n8n-nodes-base.httpRequest","onError":"continueErrorOutput","position":[2624,4544],"parameters":{"url":"=https://api.todoist.com/api/v1/tasks/{{ $('Todoist Trigger1').item.json.body.event_data.id }}","options":{},"authentication":"predefinedCredentialType","nodeCredentialType":"todoistApi"},"credentials":{"todoistApi":{"id":"OU0Scpt6RKeD51Xc","name":"Todoist account"}},"retryOnFail":true,"typeVersion":4.2},{"id":"00a7011c-4fb0-490b-a02d-8891fe1d0221","name":"Update Description in Todoist1","type":"n8n-nodes-base.httpRequest","position":[8176,2384],"parameters":{"url":"=https://api.todoist.com/api/v1/tasks/{{ $('Map Todoist to Notion1').item.json.todoist_id }}","method":"POST","options":{},"sendQuery":true,"authentication":"predefinedCredentialType","queryParameters":{"parameters":[{"name":"description","value":"={{ \"[↗ Open in Notion](\" +  $json.url + \")\" }}"}]},"nodeCredentialType":"todoistApi"},"credentials":{"todoistApi":{"id":"OU0Scpt6RKeD51Xc","name":"Todoist account"}},"retryOnFail":true,"typeVersion":4.2,"waitBetweenTries":3000},{"id":"91fa2527-2ba1-418a-a2cb-6dbbc2af68c1","name":"Notion Task not found1","type":"n8n-nodes-base.if","position":[4880,4608],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"27ce7ba1-43e5-4534-a759-1bafb979c190","operator":{"type":"object","operation":"empty","singleValue":true},"leftValue":"={{ $json }}","rightValue":""}]}},"typeVersion":2.2},{"id":"b083e902-a107-4a9e-af2c-20a17ea7d539","name":"Mark as not Done in Notion1","type":"n8n-nodes-base.notion","position":[7184,4752],"parameters":{"pageId":{"__rl":true,"mode":"id","value":"={{ $json.id }}"},"options":{},"resource":"databasePage","operation":"update","propertiesUi":{"propertyValues":[{"key":"Status|checkbox"}]}},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"retryOnFail":true,"typeVersion":2.2,"waitBetweenTries":3000},{"id":"71769c9a-df79-4518-9616-3ad8e41fef1b","name":"Has not been completed?1","type":"n8n-nodes-base.if","position":[6816,4640],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"04574da4-7def-496e-95c0-e7cde30e18d7","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $('Get Todoist Task').item.json.checked }}","rightValue":""}]}},"typeVersion":2.2},{"id":"8c2c7faa-a9ca-476a-9351-903b09249b08","name":"Require Completion?1","type":"n8n-nodes-base.switch","position":[6528,4688],"parameters":{"rules":{"values":[{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"14f834fb-e87c-400f-9b34-1ab49372a04c","operator":{"type":"boolean","operation":"notEquals"},"leftValue":"={{ $('Get Todoist Task').item.json.checked }}","rightValue":"={{ $json.property_status}}"}]}},{"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"e1e6a12f-497f-4f6c-b6a6-8016725ca764","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $('Get Todoist Task').item.json.checked }}","rightValue":false}]}}]},"options":{}},"typeVersion":3.3},{"id":"ab30e1b4-0e02-45b6-bc46-b31105e0d929","name":"Update Due in Notion when recurring1","type":"n8n-nodes-base.httpRequest","position":[6816,4784],"parameters":{"url":"=https://api.notion.com/v1/pages/{{ $json.id }}","method":"PATCH","options":{},"sendBody":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"properties.Due.date.start","value":"={{$('Map Todoist to Notion1').item.json.start_date || ''}}"}]},"nodeCredentialType":"notionApi"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":4.2},{"id":"a983cbf0-3c09-41ce-b622-86e07ec20b67","name":"Lock Todoist ID","type":"n8n-nodes-base.redis","position":[10048,4144],"parameters":{"key":"=lock_{{ $json.id }}","ttl":100,"value":"=SmallExecuted","expire":true,"keyType":"string","operation":"set"},"credentials":{"redis":{"id":"kK0ILhKyRSI5532Q","name":"Redis account"}},"typeVersion":1},{"id":"7332fa1d-df28-4dd5-94de-3a3f090b758d","name":"Lock Notion ID","type":"n8n-nodes-base.redis","position":[10048,4416],"parameters":{"key":"=lock_{{ $json.id }}","ttl":100,"value":"=Executed","expire":true,"keyType":"string","operation":"set"},"credentials":{"redis":{"id":"kK0ILhKyRSI5532Q","name":"Redis account"}},"typeVersion":1},{"id":"a24125db-6911-448a-8c70-5e947535cebb","name":"Get many database pages","type":"n8n-nodes-base.notion","position":[6720,2432],"parameters":{"filters":{"conditions":[{"key":"TodoistID|rich_text","condition":"equals","richTextValue":"={{ $('Get Todoist Task').item.json.parent_id }}"}]},"options":{},"resource":"databasePage","operation":"getAll","databaseId":{"__rl":true,"mode":"id","value":"={{ $('GlobalsT1').item.json.database_id }}"},"filterType":"manual"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"retryOnFail":false,"typeVersion":2.2,"alwaysOutputData":true},{"id":"7285b10e-61e7-4760-9ea7-02293cee49e7","name":"Create task in NotionT","type":"n8n-nodes-base.httpRequest","position":[7104,2304],"parameters":{"url":"=https://api.notion.com/v1/pages/","method":"POST","options":{},"sendBody":true,"authentication":"predefinedCredentialType","bodyParameters":{"parameters":[{"name":"properties[\"Task Name\"].title[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.task_name }}"},{"name":"properties.TodoistID.rich_text[0].text.content","value":"={{ $('Map Todoist to Notion1').item.json.todoist_id }}"},{"name":"properties.Priority.select.name","value":"={{ $('Map Todoist to Notion1').item.json.priority }}"},{"name":"properties.Section.select.name","value":"={{ $('Map Todoist to Notion1').item.json.section_name }}"},{"name":"parent.database_id","value":"={{ $('GlobalsT1').item.json.database_id }}"},{"name":"properties.Created.date.start","value":"={{ $('Map Todoist to Notion1').item.json.created_at }}"},{"name":"properties.Tasks.relation","value":"={{ [{ id: $json.id }] }}"}]},"nodeCredentialType":"notionApi"},"credentials":{"notionApi":{"id":"kYVrt6NWiSgs9Qsf","name":"Notion account"}},"typeVersion":4.2},{"id":"10914044-3e2b-47a1-a678-cf235f076a82","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-352,4336],"parameters":{"color":7,"width":1536,"height":560,"content":"#Processing Data Coming from webhooks"},"typeVersion":1},{"id":"ba8011a5-578d-47bd-b8fb-9609ffe377d3","name":"Verify security token","type":"n8n-nodes-base.if","position":[288,1392],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"286fafb0-a200-4963-a19f-e63162c484b4","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $('OAuth redirect').first().json.query.state }}","rightValue":"={{ $json.state }}"}]}},"typeVersion":2.2},{"id":"09f60d21-882c-4ea6-81c9-1909e35f23d9","name":"Get variables","type":"n8n-nodes-base.code","position":[64,1392],"parameters":{"mode":"runOnceForEachItem","jsCode":"const staticData = $getWorkflowStaticData('global');\n$input.item.json.clientID = staticData.clientID;\n$input.item.json.clientSecret = staticData.clientSecret;\n$input.item.json.state = staticData.state;\n\nreturn $input.item;"},"typeVersion":2},{"id":"c054dbc4-d903-4f3f-90f2-088f2f994ba1","name":"Exchange Tokens","type":"n8n-nodes-base.httpRequest","onError":"continueErrorOutput","position":[512,1328],"parameters":{"url":"https://todoist.com/oauth/access_token","method":"POST","options":{},"sendBody":true,"contentType":"form-urlencoded","bodyParameters":{"parameters":[{"name":"client_id","value":"={{ $json.clientID }}"},{"name":"client_secret","value":"={{ $json.clientSecret }}"},{"name":"code","value":"={{ $('OAuth redirect').first().json.query.code }}"}]}},"typeVersion":4.2},{"id":"8d5603e7-0e26-456c-afdc-58867b03c713","name":"Respond with success","type":"n8n-nodes-base.respondToWebhook","position":[736,1280],"parameters":{"options":{},"respondWith":"text","responseBody":"=Developer App activated successfully. The window can be closed now."},"typeVersion":1.1},{"id":"c1a9abba-8326-495c-9ea7-c77cddc26d37","name":"Respond with error","type":"n8n-nodes-base.respondToWebhook","position":[736,1488],"parameters":{"options":{},"respondWith":"text","responseBody":"Something went wrong."},"typeVersion":1.1},{"id":"ef97d01c-722b-4ae8-a49b-d47558c64a3c","name":"OAuth redirect","type":"n8n-nodes-base.webhook","position":[-160,1392],"webhookId":"7aee8b09-29e3-4e12-9b66-c6e8ab080bf7","parameters":{"path":"Todoist-outh","options":{},"httpMethod":["GET"],"responseMode":"responseNode","multipleMethods":true},"typeVersion":2},{"id":"798918a0-a485-4e54-b205-c5d2aacf5c83","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-240,-96],"parameters":{"width":1008,"height":560,"content":"# 0. Start here\n### Notion\n- A database must already exist (get a basic template [here](https://steadfast-banjo-d1f.notion.site/17682b476c848086b002de766879aa71)) with the following properties (case matters!):\n  - Text: \"Name\"\n  - Status: \"Status\", containing at least the options \"Backlog\", \"In progress\", \"Done\", \"Obsolete\"\n  - Select: \"Priority\", containing the options \"do first\", \"urgent\", \"important\"\n  - Date: \"Due\"\n  - Checkbox: \"Focus\"\n  - Text: \"Todoist ID\"\n### Todoist\n- A project must already exist with the same sections like defined as Status in Notion (except Done and Obsolete)\n### Redis\n- Create a [Free Redis Cloud](https://redis.io/try-free/) instance or self-host\n### Setup credentials in n8n\n- Notion: https://docs.n8n.io/integrations/builtin/credentials/notion/\n- Todoist: https://docs.n8n.io/integrations/builtin/credentials/todoist/\n- Redis: https://docs.n8n.io/integrations/builtin/credentials/redis/\n### Clone workflow\n- Clone this workflow into your n8n environment and map the credentials (beware, Todoist credentials are also used in HTTP request nodes)\n- Check for every yellow sticky notes. They show instructions which need to be done once"},"typeVersion":1},{"id":"43b7d610-0f77-4dba-ab02-01cebfc77877","name":"Get projects","type":"n8n-nodes-base.httpRequest","position":[896,656],"parameters":{"url":"https://api.todoist.com/api/v1/projects","options":{},"authentication":"predefinedCredentialType","nodeCredentialType":"todoistApi"},"credentials":{"todoistApi":{"id":"LL4iqiT5YonbX4QA","name":"Todoist account 2"}},"typeVersion":4.2},{"id":"4a493a61-4c49-4b9f-9bd7-5dc957f5e4ee","name":"Get sections","type":"n8n-nodes-base.httpRequest","position":[1776,656],"parameters":{"url":"https://api.todoist.com/api/v1/sections","options":{},"sendQuery":true,"authentication":"predefinedCredentialType","queryParameters":{"parameters":[{"name":"project_id","value":"={{ $json.project_id }}"}]},"nodeCredentialType":"todoistApi"},"credentials":{"todoistApi":{"id":"LL4iqiT5YonbX4QA","name":"Todoist account 2"}},"typeVersion":4.2},{"id":"721d9599-ce3e-47a5-ad2c-6ef5cfa764ca","name":"Get Notion Databases","type":"n8n-nodes-base.notion","position":[32,656],"parameters":{"resource":"database","operation":"getAll"},"credentials":{"notionApi":{"id":"oLbJr0V5NVyBKka2","name":"Notion account 2"}},"typeVersion":2.2},{"id":"2a42b5b6-f035-40d2-b391-9e1b9c271542","name":"Prep Dropdown","type":"n8n-nodes-base.code","position":[256,656],"parameters":{"jsCode":"let dropDownValues = [];\n\nfor (const item of $input.all()) {\n  if (item.json.name == \"Inbox\") continue;\n  dropDownValues.push({\"option\": item.json.name});\n}\n\nreturn { \"options\": JSON.stringify(dropDownValues) };"},"typeVersion":2},{"id":"34f792b0-8c06-4eec-87b0-350408b46851","name":"Prep Dropdown1","type":"n8n-nodes-base.code","position":[1104,656],"parameters":{"jsCode":"let dropDownValues = [];\nconst results =  $input.first().json.results;\nfor (const project of results) {\n  dropDownValues.push({ option: project.name});\n}\n\nreturn { options: JSON.stringify(dropDownValues)};\n\n"},"typeVersion":2},{"id":"c92a0468-e02b-4fd4-a589-4d40baba3d04","name":"Generate config","type":"n8n-nodes-base.code","position":[2192,656],"parameters":{"jsCode":"let sections = [];\nconst results = $('Get sections').first().json.results;\nfor (const item of results) {\n  sections.push({ Section_id: item.id, Section_name: item.name }); \n}\n\nreturn { json: \n{\n  \"database_id\": $('Get Notion Database ID').first().json.database_id,\n  \"project_id\": $('Get Todoist Project ID').first().json.project_id,\n  \"sections\": sections,\n  \"timezone\": $input.first().json['Select your Timezone']\n}  \n};"},"typeVersion":2},{"id":"0f6566fb-8d92-45fc-9347-826ea125db5e","name":"Choose Notion Database","type":"n8n-nodes-base.form","position":[480,656],"webhookId":"971affb1-c55c-4025-9b4b-743c8f3fcfcf","parameters":{"options":{"buttonLabel":"Continue"},"defineForm":"json","jsonOutput":"=[\n   {\n      \"fieldLabel\": \"Select Notion Database\",\n      \"fieldType\": \"dropdown\",\n      \"requiredField\": true,\n      \"fieldOptions\": {\n        \"values\": {{ $json.options }}\n      }\n   }\n]"},"typeVersion":1},{"id":"6bec9d32-c1d4-4f3c-99c2-b81afb2e6f2e","name":"Choose Todoist Project","type":"n8n-nodes-base.form","position":[1328,656],"webhookId":"971affb1-c55c-4025-9b4b-743c8f3fcfcf","parameters":{"options":{"buttonLabel":"Continue"},"defineForm":"json","jsonOutput":"=[\n   {\n      \"fieldLabel\": \"Select Todoist Project\",\n      \"fieldType\": \"dropdown\",\n      \"requiredField\": true,\n      \"fieldOptions\": {\n        \"values\": {{ $json.options}}\n      }\n   }\n]"},"typeVersion":1},{"id":"03fc4820-6708-460d-9fc8-3b011c156d76","name":"Get Notion Database ID","type":"n8n-nodes-base.code","position":[688,656],"parameters":{"jsCode":"let database_id = null;\n\nfor (const item of $('Get Notion Databases').all()) {\n  if (item.json.name == $('Choose Notion Database').first().json['Select Notion Database']) {\n    database_id = item.json.id;\n  }\n}\n\nreturn { json: { database_id: database_id } };"},"typeVersion":2},{"id":"86632401-df19-4262-b1e3-a340ee58123a","name":"Get Todoist Project ID","type":"n8n-nodes-base.code","position":[1552,656],"parameters":{"jsCode":"let project_id = null;\nconst results = $('Get projects').first().json.results;\nfor (const item of results) {\n  if (item.name == $('Choose Todoist Project').first().json['Select Todoist Project']) {\n    project_id = item.id;\n  }\n}\n\nreturn { json: { project_id: project_id } };\n\n"},"typeVersion":2},{"id":"c9ea15c9-35fb-485f-9041-b35f38b0345a","name":"On form submission","type":"n8n-nodes-base.formTrigger","position":[-192,656],"webhookId":"3a17b768-d9f8-4d66-bdb2-49d3c8318784","parameters":{"options":{},"formTitle":"Setup Helper","formDescription":"This is helper for setup."},"typeVersion":2.3},{"id":"2cb99bb9-03cd-4ee5-9af7-809326a96823","name":"Form","type":"n8n-nodes-base.form","position":[2400,656],"webhookId":"f4e43a9b-1553-4020-91c9-0bd868d18dce","parameters":{"options":{},"operation":"completion","completionTitle":"Copy this to the Globals Nodes","completionMessage":"={{ $json.toJsonString() }}"},"typeVersion":2.3},{"id":"1a451ac6-f37c-45d5-a78c-6f5cc31bca49","name":"Generate security token","type":"n8n-nodes-base.crypto","position":[64,1056],"parameters":{"action":"generate","dataPropertyName":"state"},"typeVersion":1},{"id":"aec2d265-781e-4334-bfd3-22702bd9a655","name":"Store variables","type":"n8n-nodes-base.code","position":[288,1056],"parameters":{"mode":"runOnceForEachItem","jsCode":"const staticData = $getWorkflowStaticData('global');\nstaticData.clientID = $('Todoist Webhook Setup Helper').first().json['Client ID'];\nstaticData.clientSecret = $('Todoist Webhook Setup Helper').first().json['Client secret'];\nstaticData.state = $json.state;\n\nreturn $input.item;"},"typeVersion":2},{"id":"f6435ad8-95dd-49f9-8d79-e9d41b1f23be","name":"Redirect to Auth Page","type":"n8n-nodes-base.form","position":[512,1056],"webhookId":"41b4bc95-2938-4a53-a051-7a3079001329","parameters":{"options":{},"operation":"completion","redirectUrl":"=https://todoist.com/oauth/authorize?client_id={{ $json['Client ID'] }}&scope=task:add,data:read_write,data:delete&state={{ $json.state }}","respondWith":"redirect"},"typeVersion":1},{"id":"a9315bc1-c278-478a-8a89-5b0265d7d2f0","name":"Todoist Webhook Setup Helper","type":"n8n-nodes-base.formTrigger","position":[-160,1056],"webhookId":"feb96ecb-a7c0-41d3-9368-2299cdce492e","parameters":{"options":{},"formTitle":"Todoist Webhook Setup Helper","formFields":{"values":[{"fieldLabel":"Client ID","requiredField":true},{"fieldLabel":"Client secret","requiredField":true}]},"responseMode":"lastNode","formDescription":"This tool helps activating the Todoist Webhook for a registered Developer App by connecting to the App vie OAuth."},"typeVersion":2.2},{"id":"1c2c7b83-5469-4b7c-b65d-55fc507f253e","name":"Choose Timezone","type":"n8n-nodes-base.form","position":[1984,656],"webhookId":"971affb1-c55c-4025-9b4b-743c8f3fcfcf","parameters":{"options":{},"defineForm":"json","jsonOutput":"[\n{\n  \"fieldLabel\": \"Select your Timezone\",\n  \"fieldType\": \"text\",\n  \"requiredField\": true,\n  \"placeholder\": \"America/New_York\"\n  },\n{\n    \"fieldType\": \"html\",\n    \"fieldLabel\": \"Timezone Help\",\n    \"html\": \"<p>Find your timezone at: <a href='https://www.iana.org/time-zones' target='_blank'>IANA Time Zones</a></p>\"\n  }\n]"},"typeVersion":1},{"id":"7f743ebd-5a89-43f3-895e-edb75c159298","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[-240,544],"parameters":{"width":2832,"height":320,"content":"# 1. Generate config JSON for Globals Nodes"},"typeVersion":1},{"id":"b739ff69-fd6c-46d7-ab71-1bf249d7c6af","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[-240,928],"parameters":{"width":1152,"height":720,"content":"\n# 2. Activate Todoist Webhook"},"typeVersion":1}],"pinData":{},"connections":{"If":{"main":[[{"node":"SwitchT3","type":"main","index":0}],[{"node":"Get many database pages","type":"main","index":0}]]},"Url":{"main":[[{"node":"Update Description in Todoist1","type":"main","index":0}]]},"Wait":{"main":[[{"node":"Update tries","type":"main","index":0}]]},"SwitchT":{"main":[[{"node":"Create task in NotionT","type":"main","index":0}],[{"node":"Create task in NotionT5","type":"main","index":0}],[{"node":"Create task in NotionT4","type":"main","index":0}]]},"SwitchT3":{"main":[[{"node":"Create task in NotionT8","type":"main","index":0}],[{"node":"Create task in NotionT7","type":"main","index":0}],[{"node":"Create task in NotionT6","type":"main","index":0}]]},"SwitchT4":{"main":[[{"node":"Differences exist5","type":"main","index":0}],[{"node":"Differences exist3","type":"main","index":0}],[{"node":"Differences exist4","type":"main","index":0}]]},"GlobalsT1":{"main":[[{"node":"Execution Data9","type":"main","index":0}]]},"Set tries":{"main":[[{"node":"Get Todoist Task","type":"main","index":0}]]},"Get projects":{"main":[[{"node":"Prep Dropdown1","type":"main","index":0}]]},"Get sections":{"main":[[{"node":"Choose Timezone","type":"main","index":0}]]},"Update tries":{"main":[[{"node":"If tries left","type":"main","index":0}]]},"Get variables":{"main":[[{"node":"Verify security token","type":"main","index":0}]]},"If tries left":{"main":[[{"node":"Set tries","type":"main","index":0}],[{"node":"Retry limit reached","type":"main","index":0}]]},"Prep Dropdown":{"main":[[{"node":"Choose Notion Database","type":"main","index":0}]]},"OAuth redirect":{"main":[[{"node":"Get variables","type":"main","index":0}]]},"Prep Dropdown1":{"main":[[{"node":"Choose Todoist Project","type":"main","index":0}]]},"Choose Timezone":{"main":[[{"node":"Generate config","type":"main","index":0}]]},"Exchange Tokens":{"main":[[{"node":"Respond with success","type":"main","index":0}],[{"node":"Respond with error","type":"main","index":0}]]},"Execution Data5":{"main":[[{"node":"Get many database pages1","type":"main","index":0}]]},"Execution Data6":{"main":[[{"node":"Url","type":"main","index":0},{"node":"Lock Notion ID","type":"main","index":0}]]},"Execution Data7":{"main":[[{"node":"Switch by Event1","type":"main","index":0}]]},"Execution Data8":{"main":[[{"node":"Mark as Obsolete in Notion1","type":"main","index":0}]]},"Execution Data9":{"main":[[{"node":"Check if Todoist ID is locked1","type":"main","index":0}]]},"Generate config":{"main":[[{"node":"Form","type":"main","index":0}]]},"Get Notion Task":{"main":[[{"node":"Notion Task found","type":"main","index":0}]]},"Store variables":{"main":[[{"node":"Redirect to Auth Page","type":"main","index":0}]]},"Get Todoist Task":{"main":[[{"node":"Map Todoist to Notion1","type":"main","index":0}],[{"node":"Catch known error","type":"main","index":0}]]},"Switch by Event1":{"main":[[{"node":"Link or Content?1","type":"main","index":0},{"node":"SwitchT4","type":"main","index":0}],[{"node":"Require Completion?1","type":"main","index":0}],[{"node":"Require Completion?1","type":"main","index":0}]]},"Todoist Trigger1":{"main":[[{"node":"GlobalsT1","type":"main","index":0}]]},"Todoist Webhook1":{"main":[[{"node":"Todoist Trigger1","type":"main","index":0}]]},"Catch known error":{"main":[[{"node":"End here1","type":"main","index":0}],[{"node":"Wait","type":"main","index":0}]]},"Link or Content?1":{"main":[[{"node":"Turn Markdown into Notion Blocks3","type":"main","index":0}]]},"Notion Task found":{"main":[[{"node":"Execution Data8","type":"main","index":0}]]},"Set creating flag":{"main":[[{"node":"If","type":"main","index":0}]]},"Differences exist3":{"main":[[{"node":"Update task in Notion4","type":"main","index":0}]]},"Differences exist4":{"main":[[{"node":"Update task in Notion5","type":"main","index":0}]]},"Differences exist5":{"main":[[{"node":"Update task in Notion","type":"main","index":0}]]},"On form submission":{"main":[[{"node":"Get Notion Databases","type":"main","index":0}]]},"Append Notion Block2":{"main":[[{"node":"Lock Notion ID","type":"main","index":0}]]},"Append Notion Block3":{"main":[[{"node":"Update Description in Todoist6","type":"main","index":0}]]},"Get Notion Databases":{"main":[[{"node":"Prep Dropdown","type":"main","index":0}]]},"Require Completion?1":{"main":[[{"node":"Has not been completed?1","type":"main","index":0}],[{"node":"Update Due in Notion when recurring1","type":"main","index":0}]]},"Update task in Notion":{"main":[[{"node":"Create task in Notion Refference1","type":"main","index":0}]]},"Verify security token":{"main":[[{"node":"Exchange Tokens","type":"main","index":0}],[{"node":"Respond with error","type":"main","index":0}]]},"Choose Notion Database":{"main":[[{"node":"Get Notion Database ID","type":"main","index":0}]]},"Choose Todoist Project":{"main":[[{"node":"Get Todoist Project ID","type":"main","index":0}]]},"Create task in Notion1":{"main":[[{"node":"Execution Data6","type":"main","index":0},{"node":"Turn Markdown into Notion Blocks2","type":"main","index":0}]]},"Create task in NotionT":{"main":[[{"node":"Create task in Notion1","type":"main","index":0}]]},"Get Notion Database ID":{"main":[[{"node":"Get projects","type":"main","index":0}]]},"Get Todoist Project ID":{"main":[[{"node":"Get sections","type":"main","index":0}]]},"Map Todoist to Notion1":{"main":[[{"node":"Execution Data5","type":"main","index":0}]]},"Notion Task not found1":{"main":[[{"node":"Check if creating flag exists","type":"main","index":0}],[{"node":"Execution Data7","type":"main","index":0}]]},"Update task in Notion4":{"main":[[{"node":"Create task in Notion Refference1","type":"main","index":0}]]},"Update task in Notion5":{"main":[[{"node":"Create task in Notion Refference1","type":"main","index":0}]]},"Create task in NotionT4":{"main":[[{"node":"Create task in Notion1","type":"main","index":0}]]},"Create task in NotionT5":{"main":[[{"node":"Create task in Notion1","type":"main","index":0}]]},"Create task in NotionT6":{"main":[[{"node":"Create task in Notion1","type":"main","index":0}]]},"Create task in NotionT7":{"main":[[{"node":"Create task in Notion1","type":"main","index":0}]]},"Create task in NotionT8":{"main":[[{"node":"Create task in Notion1","type":"main","index":0}]]},"Generate security token":{"main":[[{"node":"Store variables","type":"main","index":0}]]},"Get many database pages":{"main":[[{"node":"SwitchT","type":"main","index":0}]]},"Mark as Done in Notion1":{"main":[[{"node":"Lock Notion ID","type":"main","index":0}]]},"Get many database pages1":{"main":[[{"node":"Notion Task not found1","type":"main","index":0}]]},"Has not been completed?1":{"main":[[{"node":"Mark as Done in Notion1","type":"main","index":0}],[{"node":"Mark as not Done in Notion1","type":"main","index":0}]]},"If event is not deleted1":{"main":[[{"node":"Set tries","type":"main","index":0}],[{"node":"Get Notion Task","type":"main","index":0}]]},"Mark as Obsolete in Notion1":{"main":[[{"node":"Lock Notion ID","type":"main","index":0}]]},"Only continue if not locked1":{"main":[[{"node":"If event is not deleted1","type":"main","index":0}]]},"Todoist Webhook Setup Helper":{"main":[[{"node":"Generate security token","type":"main","index":0}]]},"Check if creating flag exists":{"main":[[{"node":"Only continue if flag does not exist","type":"main","index":0}]]},"Handle each block separately2":{"main":[[{"node":"Append Notion Block2","type":"main","index":0}]]},"Handle each block separately3":{"main":[[{"node":"Append Notion Block3","type":"main","index":0}]]},"Check if Todoist ID is locked1":{"main":[[{"node":"Only continue if not locked1","type":"main","index":0}]]},"Update Description in Todoist1":{"main":[[{"node":"Lock Todoist ID","type":"main","index":0}]]},"Update Description in Todoist6":{"main":[[{"node":"Lock Todoist ID","type":"main","index":0}]]},"Create task in Notion Refference1":{"main":[[{"node":"Lock Notion ID","type":"main","index":0}]]},"Turn Markdown into Notion Blocks2":{"main":[[{"node":"Handle each block separately2","type":"main","index":0}]]},"Turn Markdown into Notion Blocks3":{"main":[[{"node":"Handle each block separately3","type":"main","index":0}]]},"Only continue if flag does not exist":{"main":[[{"node":"Set creating flag","type":"main","index":0}]]},"Update Due in Notion when recurring1":{"main":[[{"node":"Lock Notion ID","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":119,"nodeTypes":{"n8n-nodes-base.if":{"count":7},"n8n-nodes-base.set":{"count":3},"n8n-nodes-base.code":{"count":11},"n8n-nodes-base.form":{"count":5},"n8n-nodes-base.noOp":{"count":4},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.redis":{"count":5},"n8n-nodes-base.crypto":{"count":1},"n8n-nodes-base.filter":{"count":6},"n8n-nodes-base.notion":{"count":9},"n8n-nodes-base.switch":{"count":6},"n8n-nodes-base.todoist":{"count":1},"n8n-nodes-base.webhook":{"count":2},"n8n-nodes-base.splitOut":{"count":2},"n8n-nodes-base.stickyNote":{"count":31},"n8n-nodes-base.formTrigger":{"count":2},"n8n-nodes-base.httpRequest":{"count":15},"n8n-nodes-base.stopAndError":{"count":1},"n8n-nodes-base.executionData":{"count":5},"n8n-nodes-base.respondToWebhook":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Yuvraj Singh","username":"yuvrajsingh","bio":"","verified":true,"links":[""],"avatar":"https://gravatar.com/avatar/78658f85a3bdfab8ea5052e88926afd5738c4e73a16cfc04371d1121e550de49?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":26,"icon":"fa:arrow-right","name":"n8n-nodes-base.noOp","codex":{"data":{"alias":["nothing"],"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/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/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/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/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.noop/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"organization\"]","defaults":{"name":"No Operation, do nothing","color":"#b0b0b0"},"iconData":{"icon":"arrow-right","type":"icon"},"displayName":"No Operation, do nothing","typeVersion":1,"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":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":68,"icon":"file:todoist.svg","name":"n8n-nodes-base.todoist","codex":{"data":{"resources":{"generic":[{"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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.todoist/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/todoist/"}]},"categories":["Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"Todoist"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0U0NDMzMiIgZD0iTTUyLjUgMGgtNDVBNy41MiA3LjUyIDAgMCAwIDAgNy41djQ1QzAgNTYuNjI1IDMuMzc0IDYwIDcuNSA2MGg0NWM0LjEyNiAwIDcuNS0zLjM3NSA3LjUtNy41di00NUM2MCAzLjM3NSA1Ni42MjYgMCA1Mi41IDAiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNMTIuMTIxIDI5LjU4MmMxLS42NzMgMjIuNDY5LTE1LjA1NSAyMi45Ni0xNS4zODguNDktLjMyOS41MTgtMS4zNDEtLjAzNi0xLjcwNy0uNTUtLjM2NS0xLjU5My0xLjA1Ni0xLjk4LTEuMzIxYTEuNTkgMS41OSAwIDAgMC0xLjc3MS4wMjVBMjYzOTEgMjYzOTEgMCAwIDEgMTIuMDYyIDI0LjA2Yy0uNzM3LjQ4Ni0xLjY0Mi40OTQtMi4zNzMgMEwwIDE3LjUwN3Y1LjU3YzIuMzU2IDEuNjAxIDguMjIyIDUuNTc2IDkuNjQyIDYuNTEyLjg0OC41NTUgMS42Ni41NDMgMi40ODEtLjAwNyIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0xMi4xMjEgMzkuMTI4YzEtLjY3MyAyMi40NjktMTUuMDU1IDIyLjk2LTE1LjM4OS40OS0uMzI5LjUxOC0xLjM0LS4wMzYtMS43MDdhMjM0IDIzNCAwIDAgMS0xLjk4LTEuMzIgMS41OSAxLjU5IDAgMCAwLTEuNzcxLjAyNGMtLjI3NS4xODUtMTguNjIgMTIuNDY3LTE5LjIzMiAxMi44Ny0uNzM3LjQ4Ni0xLjY0Mi40OTQtMi4zNzMgMEwwIDI3LjA1MnY1LjU3YzIuMzU2IDEuNjAyIDguMjIyIDUuNTc2IDkuNjQyIDYuNTEyLjg0OC41NTYgMS42Ni41NDMgMi40ODEtLjAwNiIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0xMi4xMjEgNDguNjc0YzEtLjY3MyAyMi40NjktMTUuMDU2IDIyLjk2LTE1LjM5LjQ5LS4zMjguNTE4LTEuMzQtLjAzNi0xLjcwNy0uNTUtLjM2My0xLjU5My0xLjA1NS0xLjk4LTEuMzJhMS41OSAxLjU5IDAgMCAwLTEuNzcxLjAyNGMtLjI3NS4xODUtMTguNjIgMTIuNDY3LTE5LjIzMiAxMi44Ny0uNzM3LjQ4Ni0xLjY0Mi40OTUtMi4zNzMgMEwwIDM2LjU5OHY1LjU3MWMyLjM1NiAxLjYwMSA4LjIyMiA1LjU3NiA5LjY0MiA2LjUxMi44NDguNTU1IDEuNjYuNTQzIDIuNDgxLS4wMDYiLz48L2c+PC9zdmc+"},"displayName":"Todoist","typeVersion":2,"nodeCategories":[{"id":4,"name":"Productivity"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"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/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/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/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":264,"icon":"fa:key","name":"n8n-nodes-base.crypto","codex":{"data":{"alias":["Encrypt","SHA","Hash"],"details":"The Crypto node allows you to hash and Hmac string in a specified format and sign a string using a private key. Use this node when you want to encrypt your data.","resources":{"generic":[{"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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.crypto/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Crypto","color":"#408000"},"iconData":{"icon":"key","type":"icon"},"displayName":"Crypto","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":487,"icon":"file:notion.svg","name":"n8n-nodes-base.notion","codex":{"data":{"resources":{"generic":[{"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 "}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.notion/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/notion/"}]},"categories":["Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"output\"]","defaults":{"name":"Notion"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik03LjU4Mjc2IDYuOTc2NzlDOC44MjA0NyA3Ljk4MjM4IDkuMjg0NzkgNy45MDU2NiAxMS42MDkxIDcuNzUwNTdMMzMuNTIwNiA2LjQzNDg4QzMzLjk4NTMgNi40MzQ4OCAzMy41OTg5IDUuOTcxMjcgMzMuNDQzOSA1Ljg5NDIzTDI5LjgwNDkgMy4yNjM0OEMyOS4xMDc2IDIuNzIyMTMgMjguMTc4NiAyLjEwMjE3IDI2LjM5ODIgMi4yNTcyNkw1LjE4MTE1IDMuODA0NzZDNC40MDczNiAzLjg4MTQ4IDQuMjUyODIgNC4yNjgzNyA0LjU2MDk2IDQuNTc4NDdMNy41ODI3NiA2Ljk3Njc5Wk04Ljg5ODI5IDEyLjA4MzNWMzUuMTM4MUM4Ljg5ODI5IDM2LjM3NzEgOS41MTc0NiAzNi44NDA3IDEwLjkxMSAzNi43NjRMMzQuOTkxOSAzNS4zNzA2QzM2LjM4NjIgMzUuMjkzOSAzNi41NDE1IDM0LjQ0MTcgMzYuNTQxNSAzMy40MzUyVjEwLjUzNTFDMzYuNTQxNSA5LjUzMDE5IDM2LjE1NDkgOC45ODgyOSAzNS4zMDE0IDkuMDY1NjRMMTAuMTM2NyAxMC41MzUxQzkuMjA3OTkgMTAuNjEzMSA4Ljg5ODIxIDExLjA3NzcgOC44OTgyMSAxMi4wODMzSDguODk4MjlaTTMyLjY3MDggMTMuMzJDMzIuODI1MiAxNC4wMTcgMzIuNjcwOCAxNC43MTMzIDMxLjk3MjUgMTQuNzkxN0wzMC44MTIzIDE1LjAyMjlWMzIuMDQzNEMyOS44MDQ5IDMyLjU4NDggMjguODc1OSAzMi44OTQ0IDI4LjEwMTggMzIuODk0NEMyNi44NjI1IDMyLjg5NDQgMjYuNTUyMSAzMi41MDcyIDI1LjYyMzcgMzEuMzQ3NEwxOC4wMzQzIDE5LjQzMjlWMzAuOTYwNUwyMC40MzU5IDMxLjUwMjRDMjAuNDM1OSAzMS41MDI0IDIwLjQzNTkgMzIuODk0NCAxOC40OTgzIDMyLjg5NDRMMTMuMTU2OCAzMy4yMDQyQzEzLjAwMTYgMzIuODk0NCAxMy4xNTY4IDMyLjEyMTQgMTMuNjk4NiAzMS45NjY1TDE1LjA5MjUgMzEuNTgwMlYxNi4zMzg1TDEzLjE1NzIgMTYuMTgzNEMxMy4wMDE5IDE1LjQ4NjQgMTMuMzg4NSAxNC40ODE0IDE0LjQ3MzMgMTQuNDAzNUwyMC4yMDM1IDE0LjAxNzJMMjguMTAxOCAyNi4wODY4VjE1LjQwOTdMMjYuMDg4MSAxNS4xNzg2QzI1LjkzMzUgMTQuMzI2NSAyNi41NTIxIDEzLjcwNzggMjcuMzI2NSAxMy42MzExTDMyLjY3MDggMTMuMzJaTTMuMzk5NzMgMS43MTU5OEwyNS40Njg4IDAuMDkwNzQ1N0MyOC4xNzkgLTAuMTQxNjg4IDI4Ljg3NjMgMC4wMTQwMjQ1IDMwLjU3OTYgMS4yNTEzNUwzNy42MjQzIDYuMjAyNzZDMzguNzg2NyA3LjA1NDIxIDM5LjE3NDIgNy4yODYwMiAzOS4xNzQyIDguMjE0MTlWMzUuMzcwNkMzOS4xNzQyIDM3LjA3MjYgMzguNTU0MiAzOC4wNzkxIDM2LjM4NjUgMzguMjMzMUwxMC43NTc3IDM5Ljc4MDdDOS4xMzA0OSAzOS44NTgzIDguMzU2MDcgMzkuNjI2NCA3LjUwMzkyIDM4LjU0MjZMMi4zMTYwOCAzMS44MTE3QzEuMzg2NTggMzAuNTcyNiAxIDI5LjY0NTcgMSAyOC41NjEzVjQuNDIyODNDMSAzLjAzMTA1IDEuNjIwMTkgMS44NzAwNSAzLjM5OTczIDEuNzE1OThWMS43MTU5OFoiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgo="},"displayName":"Notion","typeVersion":2,"nodeCategories":[{"id":4,"name":"Productivity"}]},{"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":528,"icon":"fa:exclamation-triangle","name":"n8n-nodes-base.stopAndError","codex":{"data":{"alias":["Throw error","Error","Exception"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.stopanderror/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"input\"]","defaults":{"name":"Stop and Error","color":"#ff0000"},"iconData":{"icon":"exclamation-triangle","type":"icon"},"displayName":"Stop and Error","typeVersion":1,"nodeCategories":[{"id":7,"name":"Utility"},{"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"}]},{"id":844,"icon":"fa:filter","name":"n8n-nodes-base.filter","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The Filter node can be used to filter items based on a condition. If the condition is met, the item will be passed on to the next node. If the condition is not met, the item will be omitted. Conditions can be combined together by AND(meet all conditions), or OR(meet at least one condition).","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.filter/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Filter","color":"#229eff"},"iconData":{"icon":"filter","type":"icon"},"displayName":"Filter","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":846,"icon":"fa:tasks","name":"n8n-nodes-base.executionData","codex":{"data":{"alias":["Filter","_Set","Data"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executiondata/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Execution Data","color":"#29A568"},"iconData":{"icon":"tasks","type":"icon"},"displayName":"Execution Data","typeVersion":1,"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"}]},{"id":1239,"icon":"file:splitOut.svg","name":"n8n-nodes-base.splitOut","codex":{"data":{"alias":["Split","Nested","Transform","Array","List","Item"],"details":"","resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitout/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Split Out"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjOUI2REQ1IiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQ4MCAxNDhjMC02LjYyNy01LjM3My0xMi0xMi0xMkgzMjJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjRjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxNDZjNi42MjcgMCAxMi01LjM3MyAxMi0xMnptMCA5NmMwLTYuNjI3LTUuMzczLTEyLTEyLTEySDMyMmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnYyNGMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDE0NmM2LjYyNyAwIDEyLTUuMzczIDEyLTEyem0wIDk2YzAtNi42MjctNS4zNzMtMTItMTItMTJIMzIyYy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTQ2YzYuNjI3IDAgMTItNS4zNzMgMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBkPSJNNDM4IDc2YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMzA5Ljc4M2MtMTcuNjczIDAtMzIgMTQuMzI3LTMyIDMydjU2YzAgMjYuOTc4LTEwLjI3MiA1MS41NTctMjcuMTE5IDcwLjAzOS01LjA1NSA1LjU0NS01LjA1NSAxNC4zNzcgMCAxOS45MjIgMTYuODQ3IDE4LjQ4MiAyNy4xMTkgNDMuMDYxIDI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMySDQyNmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJIMzA5Ljc4M2MtNDQuMTgzIDAtODAtMzUuODE3LTgwLTgwdi01NmMwLTMwLjkyOC0yNS4wNzItNTYtNTYtNTZhNS43ODMgNS43ODMgMCAwIDEtNS43ODMtNS43ODN2LTM2LjQzNGE1Ljc4MyA1Ljc4MyAwIDAgMSA1Ljc4My01Ljc4M2MzMC45MjggMCA1Ni0yNS4wNzIgNTYtNTZ2LTU2YzAtNDQuMTgzIDM1LjgxNy04MCA4MC04MEg0MjZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMzYgMjQ0YzAtNi42MjctNS4zNzMtMTItMTItMTJIMTJjLTYuNjI3IDAtMTIgNS4zNzMtMTIgMTJ2MjRjMCA2LjYyNyA1LjM3MyAxMiAxMiAxMmgxMTJjNi42MjcgMCAxMi01LjM3MyAxMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik01MTIgMEgwdjUxMmg1MTJ6Ii8+PC9jbGlwUGF0aD48L2RlZnM+PC9zdmc+"},"displayName":"Split Out","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1274,"icon":"file:form.svg","name":"n8n-nodes-base.form","codex":{"data":{"alias":["_Form","form","table","submit","post","page","step","stage","multi"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.form/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Form"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NiIgaGVpZ2h0PSI0MCIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwQjdCQyIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzQuOTc4IDM3LjczMmExLjU2IDEuNTYgMCAwIDEtMS41NjIgMS41NjNINi4yNmExLjU2IDEuNTYgMCAwIDEtMS41NjMtMS41NjNWOS42MDdjMC0uNDA1LjE1Ny0uNzk0LjQzOC0xLjA4Nmw2LjMwNC02LjUzMXY1LjM0NEg4LjIxM2ExLjE3MiAxLjE3MiAwIDEgMCAwIDIuMzQzaDQuNDNhMS4xNyAxLjE3IDAgMCAwIDEuMTcxLTEuMTcxVi4yMzJoMTkuNjAyYTEuNTYgMS41NiAwIDAgMSAxLjU2MiAxLjU2M3YxMC4zMjdsLTIuODYgMi44Ni04LjI1MiA4LjI3NmE0MTMuMDA2IDQxMy4wMDYgMCAwIDEtMS42NTQgMS42NjJsLS4zMzcuMzM3YTIgMiAwIDAgMC0uNTU3IDEuMDhMMjAuMyAzMS45MjJjLS4xMDguNjM4LS4yMTUgMS4wNzkuMjExIDEuNDE4LjQwMy4zMi45LjE3NCAxLjU0LjA2Nmw1LjQwOC0uOTI4YTIgMiAwIDAgMCAxLjA4LS41NTZsNi40NC02LjQyOXptLTI0LjAzLTIxLjI2NWExLjE4IDEuMTggMCAwIDAgMS4xNzEgMS4xNzJoMTMuMTYzYTEuMTcyIDEuMTcyIDAgMSAwIDAtMi4zNDRIMTIuMTE5YTEuMTcgMS4xNyAwIDAgMC0xLjE3MiAxLjE3Mm03LjI5NCAxNC43NjZhMS4xNyAxLjE3IDAgMCAwLTEuMTcyLTEuMTcySDEyLjEyYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNC45NTFhMS4xNyAxLjE3IDAgMCAwIDEuMTcyLTEuMTcybS44Ni03LjM5MWExLjE3IDEuMTcgMCAwIDAtMS4xNzItMS4xNzJoLTUuODExYTEuMTcyIDEuMTcyIDAgMSAwIDAgMi4zNDNoNS44MWExLjE2NCAxLjE2NCAwIDAgMCAxLjE3My0xLjE3MSIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iIzAwQjdCQyIgZD0ibTMzLjUzMiAxNi4zOTcgNC4yODktNC4yODkgMy43NTggMy43MSAxLjYxNy0xLjYxNiAyLjI1OCAyLjI1N2MuMjE4LjIxOC4zNC41MTMuMzQzLjgyLS4wMDIuMzExLS4xMjUuNjA4LS4zNDQuODNsLTYuODA0IDYuNzk2YTEuMTMgMS4xMyAwIDAgMS0uODI4LjM0MyAxLjE1IDEuMTUgMCAwIDEtLjgyOC0uMzQzIDEuMTggMS4xOCAwIDAgMSAwLTEuNjU3bDUuOTc2LTUuOTY4LTEuMzEyLTEuMzEzLTEuMzgzIDEuNDE0LTEzLjE0OSAxMy4xMjUtNC42MTcuNzgyLjc4Mi00LjYxNy4zMzYtLjMzNyAyLjU2MiAyLjU1NWExLjEgMS4xIDAgMCAwIC44MjguMzQ0Yy4zMTIuMDA1LjYxMi0uMTIuODI4LS4zNDRhMS4xOCAxLjE4IDAgMCAwIDAtMS42NTZsLTIuNTYyLTIuNTYyek00NC43MzYgMTIuMjRjMCAuNDE0LS4xNjMuODEtLjQ1NCAxLjEwMmwtLjkyMi45MTQtMy44NTItMy44MjguOTMtLjkzYTEuNTYzIDEuNTYzIDAgMCAxIDIuMjAzIDBsMS42NCAxLjY0MWMuMjkxLjI5My40NTUuNjkuNDU1IDEuMTAyIi8+PC9zdmc+"},"displayName":"n8n Form","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":43,"name":"Personal Productivity"}],"image":[]}}