Workflow: develop a modular n8n workflow that supports Datetime Todoist Create Webhook
Integrations: crypto, dateTime, filter, httpRequest, if, itemLists, scheduleTrigger, set, stickyNote, todoist

{"nodes": [{"id": "a39274d0-6709-4e66-95a7-8c0fc4c0e8b1", "name": "if after unsnooze date", "type": "n8n-nodes-base.if", "position": [1840, 500], "parameters": {"conditions": {"dateTime": [{"value1": "={{ DateTime.now() }}", "value2": "={{ $json.unsnoozeDate }}"}]}}, "typeVersion": 1}, {"id": "a4e2d915-4714-41ea-8995-76b7198df675", "name": "at 5am", "type": "n8n-nodes-base.scheduleTrigger", "position": [780, 500], "parameters": {"rule": {"interval": [{"triggerAtHour": 5}]}}, "typeVersion": 1.1}, {"id": "7ad8e2f6-0499-4537-8325-9dffc2d7ea3c", "name": "every 5 min", "type": "n8n-nodes-base.scheduleTrigger", "position": [780, 280], "parameters": {"rule": {"interval": [{"field": "minutes"}]}}, "typeVersion": 1.1}, {"id": "370f380a-923b-4e4f-b025-9e7723662083", "name": "Get snoozed tasks", "type": "n8n-nodes-base.todoist", "position": [980, 500], "parameters": {"filters": {"projectId": "2325216129"}, "operation": "getAll", "returnAll": true}, "credentials": {"todoistApi": {"id": "1", "name": "Todoist account"}}, "retryOnFail": true, "typeVersion": 2, "waitBetweenTries": 5000}, {"id": "f239a87d-0229-4964-bca0-75bbf371626b", "name": "if task is not a subtask", "type": "n8n-nodes-base.if", "position": [1200, 500], "parameters": {"conditions": {"number": [{"value1": "={{ $json.parent_id }}", "operation": "isEmpty"}]}}, "typeVersion": 1}, {"id": "b9b29371-254f-45d1-846c-c2db7efae907", "name": "If task has due date", "type": "n8n-nodes-base.if", "position": [1420, 500], "parameters": {"conditions": {"boolean": [{"value1": "={{ !$json.due }}"}]}}, "typeVersion": 1}, {"id": "1d1fe683-68b5-4a9c-af29-b20a01c2473b", "name": "Get date to unsnooze", "type": "n8n-nodes-base.dateTime", "position": [1640, 500], "parameters": {"options": {"includeInputFields": true}, "duration": 3, "magnitude": "={{ $json.due.date }}", "operation": "subtractFromDate", "outputFieldName": "unsnoozeDate"}, "typeVersion": 2}, {"id": "9e0e3241-d2fd-4bc4-9273-aa5237cbeaa4", "name": "Get inbox tasks to snooze", "type": "n8n-nodes-base.todoist", "position": [980, 280], "parameters": {"filters": {"projectId": "938017196"}, "operation": "getAll", "returnAll": true}, "credentials": {"todoistApi": {"id": "1", "name": "Todoist account"}}, "retryOnFail": true, "typeVersion": 2, "waitBetweenTries": 5000}, {"id": "90e83f5f-dd9f-431d-92b5-cd52a792dee2", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [1220, 220], "parameters": {"color": 5, "width": 390.83694011071975, "height": 182.09360845495712, "content": "### \ud83d\udc68\u200d\ud83c\udfa4 Setup\n1. Add your Todoist creds\n2. Create a Todoist project called `snoozed`\n3. Set the project ids in the relevant nodes\n4. Add due dates to your tasks in Inbox. Watch them disappear to `snoozed`. Set their date to tomorrow, watch it return to inbox."}, "typeVersion": 1}, {"id": "c7a6b401-f518-45ba-a185-c8bf0cd92394", "name": "Set inbox project id", "type": "n8n-nodes-base.set", "position": [2060, 420], "parameters": {"fields": {"values": [{"name": "target_project_id", "type": "numberValue", "numberValue": "2329427682"}]}, "options": {}}, "typeVersion": 3.2}, {"id": "22982318-5036-490a-ba3c-d40db8c3dc89", "name": "If not same project", "type": "n8n-nodes-base.filter", "position": [2280, 500], "parameters": {"conditions": {"number": [{"value1": "={{ parseInt($json.target_project_id) }}", "value2": "={{ parseInt($json.project_id) }}", "operation": "notEqual"}]}}, "typeVersion": 1}, {"id": "62009b22-d0e3-40a0-b7f9-88dc2ec02284", "name": "Set args to move", "type": "n8n-nodes-base.set", "position": [2480, 500], "parameters": {"fields": {"values": [{"name": "args", "type": "objectValue", "objectValue": "={ id: {{ $json.id }}, project_id: {{ $json.target_project_id }} }"}, {"name": "type", "stringValue": "item_move"}]}, "include": "none", "options": {}}, "typeVersion": 3.2}, {"id": "4d628334-12a3-451f-b49e-ce749241e411", "name": "Generate unique uuid for move", "type": "n8n-nodes-base.crypto", "position": [2680, 500], "parameters": {"action": "generate", "dataPropertyName": "uuid"}, "typeVersion": 1}, {"id": "8b6bf7ae-6d15-473d-8f00-5aaa4ea7d2f3", "name": "Merge all items into a list", "type": "n8n-nodes-base.itemLists", "position": [2880, 500], "parameters": {"options": {}, "aggregate": "aggregateAllItemData", "operation": "concatenateItems", "destinationFieldName": "commands"}, "typeVersion": 3.1}, {"id": "7882c3c6-0d24-4fe2-99b6-3e878e4d0dea", "name": "Move the tasks", "type": "n8n-nodes-base.httpRequest", "position": [3080, 500], "parameters": {"url": "https://api.todoist.com/sync/v9/sync", "method": "POST", "options": {}, "sendBody": true, "contentType": "form-urlencoded", "authentication": "predefinedCredentialType", "bodyParameters": {"parameters": [{"name": "commands", "value": "={{ JSON.stringify($json.commands) }}"}]}, "nodeCredentialType": "todoistApi"}, "credentials": {"todoistApi": {"id": "1", "name": "Todoist account"}}, "typeVersion": 4.1}, {"id": "259c337b-38f6-4c2a-8e23-9fe5d154a2aa", "name": "Set snoozed project id", "type": "n8n-nodes-base.set", "position": [2060, 600], "parameters": {"fields": {"values": [{"name": "target_project_id", "type": "numberValue", "numberValue": "2329427688"}]}, "options": {}}, "typeVersion": 3.2}, {"id": "2795502f-cdeb-4b94-a6fe-ef3657bdc091", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [2080, 780], "parameters": {"color": 7, "width": 202, "height": 100, "content": "\ud83d\udc46 Set `snoozed` project id here. You can find it in the URL. "}, "typeVersion": 1}, {"id": "ef6c23d5-386e-48c2-a2ed-eea67fe1f117", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [2060, 260], "parameters": {"color": 7, "width": 202, "height": 100, "content": "\ud83d\udc47\ud83c\udffd Set `inbox` project id here. You can find it in the URL. "}, "typeVersion": 1}, {"id": "6727670f-b340-47cd-b86a-632ef29e2135", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [1660, 660], "parameters": {"color": 7, "width": 202, "height": 100, "content": "\ud83d\udc46\ud83c\udffd Adjust here the timeline to return tasks to Inbox (here set to 3 days before due date)"}, "typeVersion": 1}], "pinData": {}, "connections": {"at 5am": {"main": [[{"node": "Get snoozed tasks", "type": "main", "index": 0}]]}, "every 5 min": {"main": [[{"node": "Get inbox tasks to snooze", "type": "main", "index": 0}]]}, "Set args to move": {"main": [[{"node": "Generate unique uuid for move", "type": "main", "index": 0}]]}, "Get snoozed tasks": {"main": [[{"node": "if task is not a subtask", "type": "main", "index": 0}]]}, "If not same project": {"main": [[{"node": "Set args to move", "type": "main", "index": 0}]]}, "Get date to unsnooze": {"main": [[{"node": "if after unsnooze date", "type": "main", "index": 0}]]}, "If task has due date": {"main": [[{"node": "Get date to unsnooze", "type": "main", "index": 0}]]}, "Set inbox project id": {"main": [[{"node": "If not same project", "type": "main", "index": 0}]]}, "Set snoozed project id": {"main": [[{"node": "If not same project", "type": "main", "index": 0}]]}, "if after unsnooze date": {"main": [[{"node": "Set inbox project id", "type": "main", "index": 0}], [{"node": "Set snoozed project id", "type": "main", "index": 0}]]}, "if task is not a subtask": {"main": [[{"node": "If task has due date", "type": "main", "index": 0}]]}, "Get inbox tasks to snooze": {"main": [[{"node": "if task is not a subtask", "type": "main", "index": 0}]]}, "Merge all items into a list": {"main": [[{"node": "Move the tasks", "type": "main", "index": 0}]]}, "Generate unique uuid for move": {"main": [[{"node": "Merge all items into a list", "type": "main", "index": 0}]]}}}