{
  "openruna_format": "flow-graph-v1",
  "title": "Realtime Notion Todoist 2-way Sync Template",
  "slug": "realtime-notion-todoist-2-way-sync-template",
  "source_filename": "1897_Webhook_Filter_Sync_Webhook.json",
  "nodes": [
    {
      "id": "Get projects",
      "name": "Get projects",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Get sections",
      "name": "Get sections",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Get Notion Databases",
      "name": "Get Notion Databases",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Prep Dropdown",
      "name": "Prep Dropdown",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Prep Dropdown1",
      "name": "Prep Dropdown1",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Generate config",
      "name": "Generate config",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Choose Notion Database",
      "name": "Choose Notion Database",
      "integration": "form",
      "kind": "action"
    },
    {
      "id": "Choose Todoist Project",
      "name": "Choose Todoist Project",
      "integration": "form",
      "kind": "action"
    },
    {
      "id": "Verify security token",
      "name": "Verify security token",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Generate security token",
      "name": "Generate security token",
      "integration": "crypto",
      "kind": "action"
    },
    {
      "id": "Store variables",
      "name": "Store variables",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Get variables",
      "name": "Get variables",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Redirect to Auth Page",
      "name": "Redirect to Auth Page",
      "integration": "form",
      "kind": "action"
    },
    {
      "id": "OAuth redirect",
      "name": "OAuth redirect",
      "integration": "webhook",
      "kind": "trigger"
    },
    {
      "id": "Exchange Tokens",
      "name": "Exchange Tokens",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Respond with success",
      "name": "Respond with success",
      "integration": "respondToWebhook",
      "kind": "action"
    },
    {
      "id": "Respond with error",
      "name": "Respond with error",
      "integration": "respondToWebhook",
      "kind": "action"
    },
    {
      "id": "Get Notion Database ID",
      "name": "Get Notion Database ID",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Get Todoist Project ID",
      "name": "Get Todoist Project ID",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Notion-Todoist Sync Setup Helper",
      "name": "Notion-Todoist Sync Setup Helper",
      "integration": "form",
      "kind": "trigger"
    },
    {
      "id": "Todoist Webhook Setup Helper",
      "name": "Todoist Webhook Setup Helper",
      "integration": "form",
      "kind": "trigger"
    },
    {
      "id": "Return config JSON",
      "name": "Return config JSON",
      "integration": "form",
      "kind": "action"
    },
    {
      "id": "Todoist",
      "name": "Todoist",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Notion",
      "name": "Notion",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Compare Datasets",
      "name": "Compare Datasets",
      "integration": "compareDatasets",
      "kind": "action"
    },
    {
      "id": "Exists/Completed in Notion",
      "name": "Exists/Completed in Notion",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Get Todoist Task",
      "name": "Get Todoist Task",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "If Todoist ID exists",
      "name": "If Todoist ID exists",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Store Todoist ID",
      "name": "Store Todoist ID",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Mark as Incomplete in Todoist",
      "name": "Mark as Incomplete in Todoist",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Mark as Completed in Todoist",
      "name": "Mark as Completed in Todoist",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Delete Task in Todoist",
      "name": "Delete Task in Todoist",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Loop Over Items",
      "name": "Loop Over Items",
      "integration": "splitInBatches",
      "kind": "logic"
    },
    {
      "id": "Get Notion Task",
      "name": "Get Notion Task",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Update Task in Todoist",
      "name": "Update Task in Todoist",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Pick Todoist Fields",
      "name": "Pick Todoist Fields",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Map Notion to Todoist",
      "name": "Map Notion to Todoist",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Update task in Todoist before closing",
      "name": "Update task in Todoist before closing",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Map Notion to Todoist1",
      "name": "Map Notion to Todoist1",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Handle empty dates",
      "name": "Handle empty dates",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Handle empty dates1",
      "name": "Handle empty dates1",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Handle empty dates2",
      "name": "Handle empty dates2",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Create task in Todoist",
      "name": "Create task in Todoist",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Add project ID",
      "name": "Add project ID",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Lock Todoist ID",
      "name": "Lock Todoist ID",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Generate UUID",
      "name": "Generate UUID",
      "integration": "crypto",
      "kind": "action"
    },
    {
      "id": "Update section (Sync API)",
      "name": "Update section (Sync API)",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Status changed",
      "name": "Status changed",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Aggregate",
      "name": "Aggregate",
      "integration": "aggregate",
      "kind": "logic"
    },
    {
      "id": "Prepare Batching Items",
      "name": "Prepare Batching Items",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Loop Over Items1",
      "name": "Loop Over Items1",
      "integration": "splitInBatches",
      "kind": "logic"
    },
    {
      "id": "Status is Done",
      "name": "Status is Done",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Lock Todoist ID1",
      "name": "Lock Todoist ID1",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Lock Todoist ID2",
      "name": "Lock Todoist ID2",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Update task in Todoist",
      "name": "Update task in Todoist",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Get mapped item",
      "name": "Get mapped item",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Get mapped item1",
      "name": "Get mapped item1",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Schedule Trigger",
      "name": "Schedule Trigger",
      "integration": "schedule",
      "kind": "trigger"
    },
    {
      "id": "Prepare summary data",
      "name": "Prepare summary data",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Prepare summary data1",
      "name": "Prepare summary data1",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Merge",
      "name": "Merge",
      "integration": "merge",
      "kind": "logic"
    },
    {
      "id": "Prepare summary data2",
      "name": "Prepare summary data2",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Filter out status changes",
      "name": "Filter out status changes",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Map Todoist to Notion",
      "name": "Map Todoist to Notion",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Map summary fields",
      "name": "Map summary fields",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Convert to HTML Table",
      "name": "Convert to HTML Table",
      "integration": "html",
      "kind": "action"
    },
    {
      "id": "Generate email body",
      "name": "Generate email body",
      "integration": "html",
      "kind": "action"
    },
    {
      "id": "Get mapped item2",
      "name": "Get mapped item2",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Gmail",
      "name": "Gmail",
      "integration": "gmail",
      "kind": "action"
    },
    {
      "id": "Merge summary",
      "name": "Merge summary",
      "integration": "merge",
      "kind": "logic"
    },
    {
      "id": "Globals",
      "name": "Globals",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Execute Workflow Trigger",
      "name": "Execute Workflow Trigger",
      "integration": "executeWorkflow",
      "kind": "trigger"
    },
    {
      "id": "Differences exist1",
      "name": "Differences exist1",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Requires completion change1",
      "name": "Requires completion change1",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Create task in Notion",
      "name": "Create task in Notion",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Update task in Notion",
      "name": "Update task in Notion",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Mark as Done in Notion",
      "name": "Mark as Done in Notion",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Mark as Obsolete in Notion",
      "name": "Mark as Obsolete in Notion",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Mark as In Progress in Notion",
      "name": "Mark as In Progress in Notion",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Only continue if not locked",
      "name": "Only continue if not locked",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Lock Notion ID",
      "name": "Lock Notion ID",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Check if Todoist ID is locked",
      "name": "Check if Todoist ID is locked",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Update Description in Todoist",
      "name": "Update Description in Todoist",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Description has changed in Todoist",
      "name": "Description has changed in Todoist",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Update Description in Todoist1",
      "name": "Update Description in Todoist1",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Generate UUID1",
      "name": "Generate UUID1",
      "integration": "crypto",
      "kind": "action"
    },
    {
      "id": "Update section (Sync API)1",
      "name": "Update section (Sync API)1",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Get Backlog Section ID",
      "name": "Get Backlog Section ID",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Notion Task not found",
      "name": "Notion Task not found",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Check if creating flag exists1",
      "name": "Check if creating flag exists1",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Only continue if flag does not exist1",
      "name": "Only continue if flag does not exist1",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Set creating flag1",
      "name": "Set creating flag1",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Neither focussed nor planned1",
      "name": "Neither focussed nor planned1",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Mark as Focussed in Notion",
      "name": "Mark as Focussed in Notion",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Todoist trigger reference",
      "name": "Todoist trigger reference",
      "integration": "noOp",
      "kind": "logic"
    },
    {
      "id": "Get Notion Task2",
      "name": "Get Notion Task2",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Notion Task found1",
      "name": "Notion Task found1",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Switch by Event",
      "name": "Switch by Event",
      "integration": "switch",
      "kind": "logic"
    },
    {
      "id": "If event is not :deleted",
      "name": "If event is not :deleted",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Execution Data",
      "name": "Execution Data",
      "integration": "executionData",
      "kind": "action"
    },
    {
      "id": "Execution Data1",
      "name": "Execution Data1",
      "integration": "executionData",
      "kind": "action"
    },
    {
      "id": "Execution Data2",
      "name": "Execution Data2",
      "integration": "executionData",
      "kind": "action"
    },
    {
      "id": "Execution Data3",
      "name": "Execution Data3",
      "integration": "executionData",
      "kind": "action"
    },
    {
      "id": "Execution Data4",
      "name": "Execution Data4",
      "integration": "executionData",
      "kind": "action"
    },
    {
      "id": "Globals1",
      "name": "Globals1",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Map Todoist to Notion1",
      "name": "Map Todoist to Notion1",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Get Todoist Task1",
      "name": "Get Todoist Task1",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Get Notion Task1",
      "name": "Get Notion Task1",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Requires completion change",
      "name": "Requires completion change",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Has been completed?",
      "name": "Has been completed?",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Differences exist",
      "name": "Differences exist",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Only continue if not locked1",
      "name": "Only continue if not locked1",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Check if Notion ID is locked",
      "name": "Check if Notion ID is locked",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Get Notion task",
      "name": "Get Notion task",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Check if creating flag exists",
      "name": "Check if creating flag exists",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Only continue if flag does not exist",
      "name": "Only continue if flag does not exist",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Set creating flag",
      "name": "Set creating flag",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Todoist ID exists?",
      "name": "Todoist ID exists?",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Get todoist ID",
      "name": "Get todoist ID",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Todoist ID exists",
      "name": "Todoist ID exists",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Get todoist ID1",
      "name": "Get todoist ID1",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Status changed but not empty",
      "name": "Status changed but not empty",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Status is Obsolete?",
      "name": "Status is Obsolete?",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Status is not Done",
      "name": "Status is not Done",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Neither focussed nor planned",
      "name": "Neither focussed nor planned",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Notion trigger reference",
      "name": "Notion trigger reference",
      "integration": "noOp",
      "kind": "logic"
    },
    {
      "id": "Notion Webhook",
      "name": "Notion Webhook",
      "integration": "webhook",
      "kind": "trigger"
    },
    {
      "id": "Store Todoist ID1",
      "name": "Store Todoist ID1",
      "integration": "notion",
      "kind": "action"
    },
    {
      "id": "Mark as Completed in Todoist1",
      "name": "Mark as Completed in Todoist1",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Update task in Todoist1",
      "name": "Update task in Todoist1",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Globals2",
      "name": "Globals2",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Mark as Incomplete in Todoist1",
      "name": "Mark as Incomplete in Todoist1",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Generate UUID2",
      "name": "Generate UUID2",
      "integration": "crypto",
      "kind": "action"
    },
    {
      "id": "Update section (Sync API)2",
      "name": "Update section (Sync API)2",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Lock Todoist ID4",
      "name": "Lock Todoist ID4",
      "integration": "redis",
      "kind": "action"
    },
    {
      "id": "Delete Task in Todoist2",
      "name": "Delete Task in Todoist2",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Map Notion to Todoist2",
      "name": "Map Notion to Todoist2",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Get Todoist Task2",
      "name": "Get Todoist Task2",
      "integration": "todoist",
      "kind": "action"
    },
    {
      "id": "Create task in Todoist1",
      "name": "Create task in Todoist1",
      "integration": "httpRequest",
      "kind": "action"
    },
    {
      "id": "Execution Data5",
      "name": "Execution Data5",
      "integration": "executionData",
      "kind": "action"
    },
    {
      "id": "Execution Data6",
      "name": "Execution Data6",
      "integration": "executionData",
      "kind": "action"
    },
    {
      "id": "Todoist Webhook",
      "name": "Todoist Webhook",
      "integration": "webhook",
      "kind": "trigger"
    },
    {
      "id": "Execute Workflow",
      "name": "Execute Workflow",
      "integration": "executeWorkflow",
      "kind": "action"
    },
    {
      "id": "Extract IDs",
      "name": "Extract IDs",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Split out Notion changes",
      "name": "Split out Notion changes",
      "integration": "splitOut",
      "kind": "logic"
    },
    {
      "id": "Body is array?",
      "name": "Body is array?",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Switch by project",
      "name": "Switch by project",
      "integration": "switch",
      "kind": "logic"
    },
    {
      "id": "Webhook",
      "name": "Webhook",
      "integration": "webhook",
      "kind": "trigger"
    },
    {
      "id": "Switch",
      "name": "Switch",
      "integration": "switch",
      "kind": "logic"
    },
    {
      "id": "Execute Workflow1",
      "name": "Execute Workflow1",
      "integration": "executeWorkflow",
      "kind": "action"
    },
    {
      "id": "Due date empty",
      "name": "Due date empty",
      "integration": "filter",
      "kind": "logic"
    },
    {
      "id": "Has not been completed?",
      "name": "Has not been completed?",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "End here",
      "name": "End here",
      "integration": "noOp",
      "kind": "logic"
    },
    {
      "id": "Retry limit reached",
      "name": "Retry limit reached",
      "integration": "stopAndError",
      "kind": "action"
    },
    {
      "id": "Set tries",
      "name": "Set tries",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Update tries",
      "name": "Update tries",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Wait",
      "name": "Wait",
      "integration": "wait",
      "kind": "logic"
    },
    {
      "id": "Catch known error",
      "name": "Catch known error",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "If tries left",
      "name": "If tries left",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Retry limit reached1",
      "name": "Retry limit reached1",
      "integration": "stopAndError",
      "kind": "action"
    },
    {
      "id": "Set tries1",
      "name": "Set tries1",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Update tries1",
      "name": "Update tries1",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Wait1",
      "name": "Wait1",
      "integration": "wait",
      "kind": "logic"
    },
    {
      "id": "Catch known error1",
      "name": "Catch known error1",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "If tries left1",
      "name": "If tries left1",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Set tries2",
      "name": "Set tries2",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Update tries2",
      "name": "Update tries2",
      "integration": "set",
      "kind": "logic"
    },
    {
      "id": "Wait2",
      "name": "Wait2",
      "integration": "wait",
      "kind": "logic"
    },
    {
      "id": "Catch known error2",
      "name": "Catch known error2",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "If tries left2",
      "name": "If tries left2",
      "integration": "if",
      "kind": "logic"
    },
    {
      "id": "Retry limit reached2",
      "name": "Retry limit reached2",
      "integration": "stopAndError",
      "kind": "action"
    },
    {
      "id": "Turn Markdown into Notion Blocks",
      "name": "Turn Markdown into Notion Blocks",
      "integration": "code",
      "kind": "logic"
    },
    {
      "id": "Handle each block separately",
      "name": "Handle each block separately",
      "integration": "splitOut",
      "kind": "logic"
    },
    {
      "id": "Append Notion Block",
      "name": "Append Notion Block",
      "integration": "notion",
      "kind": "action"
    }
  ],
  "edges": [
    {
      "from": "Wait",
      "to": "Update tries"
    },
    {
      "from": "Merge",
      "to": "Loop Over Items1"
    },
    {
      "from": "Merge",
      "to": "Merge summary"
    },
    {
      "from": "Wait1",
      "to": "Update tries1"
    },
    {
      "from": "Wait2",
      "to": "Update tries2"
    },
    {
      "from": "Notion",
      "to": "Map Notion to Todoist"
    },
    {
      "from": "Switch",
      "to": "Execute Workflow"
    },
    {
      "from": "Switch",
      "to": "Execute Workflow1"
    },
    {
      "from": "Todoist",
      "to": "Pick Todoist Fields"
    },
    {
      "from": "Webhook",
      "to": "Switch"
    },
    {
      "from": "Aggregate",
      "to": "Update section (Sync API)"
    },
    {
      "from": "Set tries",
      "to": "Get Todoist Task"
    },
    {
      "from": "Set tries1",
      "to": "Get Todoist Task2"
    },
    {
      "from": "Set tries2",
      "to": "Get Todoist Task1"
    },
    {
      "from": "Extract IDs",
      "to": "Notion trigger reference"
    },
    {
      "from": "Get projects",
      "to": "Prep Dropdown1"
    },
    {
      "from": "Get sections",
      "to": "Generate config"
    },
    {
      "from": "Update tries",
      "to": "If tries left"
    },
    {
      "from": "Generate UUID",
      "to": "Prepare Batching Items"
    },
    {
      "from": "Get variables",
      "to": "Verify security token"
    },
    {
      "from": "If tries left",
      "to": "Set tries"
    },
    {
      "from": "If tries left",
      "to": "Retry limit reached"
    },
    {
      "from": "Merge summary",
      "to": "Filter out status changes"
    },
    {
      "from": "Prep Dropdown",
      "to": "Choose Notion Database"
    },
    {
      "from": "Update tries1",
      "to": "If tries left1"
    },
    {
      "from": "Update tries2",
      "to": "If tries left2"
    },
    {
      "from": "Add project ID",
      "to": "If Todoist ID exists"
    },
    {
      "from": "Body is array?",
      "to": "Split out Notion changes"
    },
    {
      "from": "Body is array?",
      "to": "Notion trigger reference"
    },
    {
      "from": "Due date empty",
      "to": "Mark as Focussed in Notion"
    },
    {
      "from": "Execution Data",
      "to": "Check if Todoist ID is locked"
    },
    {
      "from": "Generate UUID1",
      "to": "Update section (Sync API)1"
    },
    {
      "from": "Generate UUID2",
      "to": "Update section (Sync API)2"
    },
    {
      "from": "Get todoist ID",
      "to": "Lock Todoist ID4"
    },
    {
      "from": "If tries left1",
      "to": "Set tries1"
    },
    {
      "from": "If tries left1",
      "to": "Retry limit reached1"
    },
    {
      "from": "If tries left2",
      "to": "Set tries2"
    },
    {
      "from": "If tries left2",
      "to": "Retry limit reached2"
    },
    {
      "from": "Notion Webhook",
      "to": "Body is array?"
    },
    {
      "from": "OAuth redirect",
      "to": "Get variables"
    },
    {
      "from": "Prep Dropdown1",
      "to": "Choose Todoist Project"
    },
    {
      "from": "Status changed",
      "to": "Get mapped item1"
    },
    {
      "from": "Status is Done",
      "to": "Mark as Completed in Todoist"
    },
    {
      "from": "Status is Done",
      "to": "Delete Task in Todoist"
    },
    {
      "from": "Exchange Tokens",
      "to": "Respond with success"
    },
    {
      "from": "Exchange Tokens",
      "to": "Respond with error"
    },
    {
      "from": "Execution Data1",
      "to": "Get Notion Task1"
    },
    {
      "from": "Execution Data2",
      "to": "Update Description in Todoist"
    },
    {
      "from": "Execution Data2",
      "to": "Lock Notion ID"
    },
    {
      "from": "Execution Data3",
      "to": "Switch by Event"
    },
    {
      "from": "Execution Data4",
      "to": "Mark as Obsolete in Notion"
    },
    {
      "from": "Execution Data5",
      "to": "Check if Notion ID is locked"
    },
    {
      "from": "Execution Data6",
      "to": "Status is Obsolete?"
    },
    {
      "from": "Generate config",
      "to": "Return config JSON"
    },
    {
      "from": "Get Notion Task",
      "to": "Loop Over Items"
    },
    {
      "from": "Get Notion task",
      "to": "Map Notion to Todoist2"
    },
    {
      "from": "Get mapped item",
      "to": "Merge"
    },
    {
      "from": "Get todoist ID1",
      "to": "Lock Todoist ID4"
    },
    {
      "from": "Loop Over Items",
      "to": "Exists/Completed in Notion"
    },
    {
      "from": "Loop Over Items",
      "to": "Get Notion Task"
    },
    {
      "from": "Store variables",
      "to": "Redirect to Auth Page"
    },
    {
      "from": "Switch by Event",
      "to": "Differences exist1"
    },
    {
      "from": "Switch by Event",
      "to": "Description has changed in Todoist"
    },
    {
      "from": "Switch by Event",
      "to": "Requires completion change1"
    },
    {
      "from": "Switch by Event",
      "to": "Requires completion change1"
    },
    {
      "from": "Todoist Webhook",
      "to": "Switch by project"
    },
    {
      "from": "Compare Datasets",
      "to": "Handle empty dates2"
    },
    {
      "from": "Compare Datasets",
      "to": "Handle empty dates"
    },
    {
      "from": "Compare Datasets",
      "to": "Loop Over Items"
    },
    {
      "from": "Get Notion Task1",
      "to": "Notion Task not found"
    },
    {
      "from": "Get Notion Task2",
      "to": "Notion Task found1"
    },
    {
      "from": "Get Todoist Task",
      "to": "Mark as Incomplete in Todoist"
    },
    {
      "from": "Get Todoist Task",
      "to": "Catch known error"
    },
    {
      "from": "Get mapped item1",
      "to": "Merge"
    },
    {
      "from": "Get mapped item2",
      "to": "Merge summary"
    },
    {
      "from": "Loop Over Items1",
      "to": "Generate UUID"
    },
    {
      "from": "Schedule Trigger",
      "to": "Notion"
    },
    {
      "from": "Schedule Trigger",
      "to": "Todoist"
    },
    {
      "from": "Schedule Trigger",
      "to": "Globals"
    },
    {
      "from": "Store Todoist ID",
      "to": "Get mapped item2"
    },
    {
      "from": "Catch known error",
      "to": "Create task in Todoist"
    },
    {
      "from": "Catch known error",
      "to": "Wait"
    },
    {
      "from": "Differences exist",
      "to": "Update task in Todoist1"
    },
    {
      "from": "Get Todoist Task1",
      "to": "Map Todoist to Notion1"
    },
    {
      "from": "Get Todoist Task1",
      "to": "Catch known error2"
    },
    {
      "from": "Get Todoist Task2",
      "to": "Differences exist"
    },
    {
      "from": "Get Todoist Task2",
      "to": "Requires completion change"
    },
    {
      "from": "Get Todoist Task2",
      "to": "Status changed but not empty"
    },
    {
      "from": "Get Todoist Task2",
      "to": "Catch known error1"
    },
    {
      "from": "Set creating flag",
      "to": "Create task in Todoist1"
    },
    {
      "from": "Switch by project",
      "to": "Todoist trigger reference"
    },
    {
      "from": "Todoist ID exists",
      "to": "Delete Task in Todoist2"
    },
    {
      "from": "Catch known error1",
      "to": "Status is not Done"
    },
    {
      "from": "Catch known error1",
      "to": "Wait1"
    },
    {
      "from": "Catch known error2",
      "to": "End here"
    },
    {
      "from": "Catch known error2",
      "to": "Wait2"
    },
    {
      "from": "Differences exist1",
      "to": "Update task in Notion"
    },
    {
      "from": "Differences exist1",
      "to": "Due date empty"
    },
    {
      "from": "Handle empty dates",
      "to": "Update Task in Todoist"
    },
    {
      "from": "Map summary fields",
      "to": "Convert to HTML Table"
    },
    {
      "from": "Notion Task found1",
      "to": "Execution Data4"
    },
    {
      "from": "Set creating flag1",
      "to": "Get Backlog Section ID"
    },
    {
      "from": "Status is not Done",
      "to": "Check if creating flag exists"
    },
    {
      "from": "Todoist ID exists?",
      "to": "Set tries1"
    },
    {
      "from": "Todoist ID exists?",
      "to": "Check if creating flag exists"
    },
    {
      "from": "Append Notion Block",
      "to": "Lock Notion ID"
    },
    {
      "from": "Generate email body",
      "to": "Gmail"
    },
    {
      "from": "Handle empty dates1",
      "to": "Update task in Todoist before closing"
    },
    {
      "from": "Handle empty dates2",
      "to": "Add project ID"
    },
    {
      "from": "Has been completed?",
      "to": "Mark as Completed in Todoist1"
    },
    {
      "from": "Has been completed?",
      "to": "Mark as Incomplete in Todoist1"
    },
    {
      "from": "Pick Todoist Fields",
      "to": "Compare Datasets"
    },
    {
      "from": "Status is Obsolete?",
      "to": "Todoist ID exists"
    },
    {
      "from": "Status is Obsolete?",
      "to": "Neither focussed nor planned"
    },
    {
      "from": "Get Notion Databases",
      "to": "Prep Dropdown"
    },
    {
      "from": "If Todoist ID exists",
      "to": "Set tries"
    },
    {
      "from": "If Todoist ID exists",
      "to": "Create task in Todoist"
    },
    {
      "from": "Prepare summary data",
      "to": "Merge summary"
    },
    {
      "from": "Convert to HTML Table",
      "to": "Generate email body"
    },
    {
      "from": "Create task in Notion",
      "to": "Execution Data2"
    },
    {
      "from": "Create task in Notion",
      "to": "Turn Markdown into Notion Blocks"
    },
    {
      "from": "Map Notion to Todoist",
      "to": "Compare Datasets"
    },
    {
      "from": "Map Todoist to Notion",
      "to": "Map summary fields"
    },
    {
      "from": "Notion Task not found",
      "to": "Check if creating flag exists1"
    },
    {
      "from": "Notion Task not found",
      "to": "Execution Data3"
    },
    {
      "from": "Prepare summary data1",
      "to": "Merge summary"
    },
    {
      "from": "Prepare summary data2",
      "to": "Merge summary"
    },
    {
      "from": "Update task in Notion",
      "to": "Lock Notion ID"
    },
    {
      "from": "Verify security token",
      "to": "Exchange Tokens"
    },
    {
      "from": "Verify security token",
      "to": "Respond with error"
    },
    {
      "from": "Choose Notion Database",
      "to": "Get Notion Database ID"
    },
    {
      "from": "Choose Todoist Project",
      "to": "Get Todoist Project ID"
    },
    {
      "from": "Create task in Todoist",
      "to": "Store Todoist ID"
    },
    {
      "from": "Create task in Todoist",
      "to": "Lock Todoist ID"
    },
    {
      "from": "Delete Task in Todoist",
      "to": "Prepare summary data2"
    },
    {
      "from": "Get Backlog Section ID",
      "to": "Generate UUID1"
    },
    {
      "from": "Get Backlog Section ID",
      "to": "Create task in Notion"
    },
    {
      "from": "Get Notion Database ID",
      "to": "Get projects"
    },
    {
      "from": "Get Todoist Project ID",
      "to": "Get sections"
    },
    {
      "from": "Map Notion to Todoist1",
      "to": "Handle empty dates1"
    },
    {
      "from": "Map Notion to Todoist2",
      "to": "Execution Data6"
    },
    {
      "from": "Map Todoist to Notion1",
      "to": "Execution Data1"
    },
    {
      "from": "Mark as Done in Notion",
      "to": "Lock Notion ID"
    },
    {
      "from": "Prepare Batching Items",
      "to": "Aggregate"
    },
    {
      "from": "Update Task in Todoist",
      "to": "Status changed"
    },
    {
      "from": "Update Task in Todoist",
      "to": "Lock Todoist ID2"
    },
    {
      "from": "Update Task in Todoist",
      "to": "Prepare summary data"
    },
    {
      "from": "Update task in Todoist",
      "to": "Get mapped item"
    },
    {
      "from": "Create task in Todoist1",
      "to": "Store Todoist ID1"
    },
    {
      "from": "Create task in Todoist1",
      "to": "Lock Todoist ID4"
    },
    {
      "from": "Delete Task in Todoist2",
      "to": "Get todoist ID1"
    },
    {
      "from": "Generate security token",
      "to": "Store variables"
    },
    {
      "from": "Has not been completed?",
      "to": "Mark as In Progress in Notion"
    },
    {
      "from": "Has not been completed?",
      "to": "Neither focussed nor planned1"
    },
    {
      "from": "Has not been completed?",
      "to": "Mark as Done in Notion"
    },
    {
      "from": "Update task in Todoist1",
      "to": "Get todoist ID"
    },
    {
      "from": "If event is not :deleted",
      "to": "Set tries2"
    },
    {
      "from": "If event is not :deleted",
      "to": "Get Notion Task2"
    },
    {
      "from": "Notion trigger reference",
      "to": "Globals2"
    },
    {
      "from": "Notion trigger reference",
      "to": "Execution Data5"
    },
    {
      "from": "Split out Notion changes",
      "to": "Extract IDs"
    },
    {
      "from": "Filter out status changes",
      "to": "Map Todoist to Notion"
    },
    {
      "from": "Todoist trigger reference",
      "to": "Execution Data"
    },
    {
      "from": "Todoist trigger reference",
      "to": "Globals1"
    },
    {
      "from": "Update section (Sync API)",
      "to": "Loop Over Items1"
    },
    {
      "from": "Exists/Completed in Notion",
      "to": "Map Notion to Todoist1"
    },
    {
      "from": "Exists/Completed in Notion",
      "to": "Delete Task in Todoist"
    },
    {
      "from": "Mark as Focussed in Notion",
      "to": "Lock Notion ID"
    },
    {
      "from": "Mark as Obsolete in Notion",
      "to": "Lock Notion ID"
    },
    {
      "from": "Requires completion change",
      "to": "Has been completed?"
    },
    {
      "from": "Update section (Sync API)2",
      "to": "Get todoist ID"
    },
    {
      "from": "Only continue if not locked",
      "to": "If event is not :deleted"
    },
    {
      "from": "Requires completion change1",
      "to": "Has not been completed?"
    },
    {
      "from": "Check if Notion ID is locked",
      "to": "Only continue if not locked1"
    },
    {
      "from": "Handle each block separately",
      "to": "Append Notion Block"
    },
    {
      "from": "Mark as Completed in Todoist",
      "to": "Prepare summary data1"
    },
    {
      "from": "Neither focussed nor planned",
      "to": "Todoist ID exists"
    },
    {
      "from": "Neither focussed nor planned",
      "to": "Todoist ID exists?"
    },
    {
      "from": "Only continue if not locked1",
      "to": "Get Notion task"
    },
    {
      "from": "Status changed but not empty",
      "to": "Generate UUID2"
    },
    {
      "from": "Todoist Webhook Setup Helper",
      "to": "Generate security token"
    },
    {
      "from": "Check if Todoist ID is locked",
      "to": "Only continue if not locked"
    },
    {
      "from": "Check if creating flag exists",
      "to": "Only continue if flag does not exist"
    },
    {
      "from": "Mark as Completed in Todoist1",
      "to": "Get todoist ID"
    },
    {
      "from": "Mark as In Progress in Notion",
      "to": "Lock Notion ID"
    },
    {
      "from": "Mark as Incomplete in Todoist",
      "to": "Update task in Todoist"
    },
    {
      "from": "Mark as Incomplete in Todoist",
      "to": "Lock Todoist ID"
    },
    {
      "from": "Neither focussed nor planned1",
      "to": "Mark as Focussed in Notion"
    },
    {
      "from": "Check if creating flag exists1",
      "to": "Only continue if flag does not exist1"
    },
    {
      "from": "Mark as Incomplete in Todoist1",
      "to": "Get todoist ID"
    },
    {
      "from": "Notion-Todoist Sync Setup Helper",
      "to": "Get Notion Databases"
    },
    {
      "from": "Turn Markdown into Notion Blocks",
      "to": "Handle each block separately"
    },
    {
      "from": "Description has changed in Todoist",
      "to": "Update Description in Todoist1"
    },
    {
      "from": "Only continue if flag does not exist",
      "to": "Set creating flag"
    },
    {
      "from": "Only continue if flag does not exist1",
      "to": "Set creating flag1"
    },
    {
      "from": "Update task in Todoist before closing",
      "to": "Status is Done"
    },
    {
      "from": "Update task in Todoist before closing",
      "to": "Lock Todoist ID1"
    }
  ]
}