{"formatVersion":"1","kind":"dock_integration","slug":"todoist-rest-api","title":"Todoist REST API","summary":"Import a Harbor-safe Todoist starter set for project discovery, active task listing, and approval-friendly task creation.","description":"A Dock-hosted Todoist REST API starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe Todoist action set for listing projects, listing active tasks, and creating a task with explicit approval. Tokens remain local to Harbor Node.","version":"0.1.0","publisher":{"slug":"todoist","name":"Todoist","websiteUrl":"https://developer.todoist.com/rest/v1/"},"category":"Work Management","tags":["todoist","tasks","projects","productivity","planning"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. Todoist reads use typed input.query values and writes use input.body JSON payloads."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"Todoist REST API","description":"Todoist REST API connection managed locally through Harbor.","baseUrl":"https://api.todoist.com/rest/v1/","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Bearer"}],"actionTemplates":[{"slug":"list-projects","label":"List Projects","description":"List Todoist projects visible to the authenticated user.","method":"GET","path":"/projects","approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-tasks","label":"List Tasks","description":"List active Todoist tasks with explicit project, section, and label filters.","method":"GET","path":"/tasks","inputs":{"parameters":[{"name":"project_id","in":"query","schema":{"type":"integer","minimum":1},"description":"Limit returned tasks to a specific Todoist project ID."},{"name":"section_id","in":"query","schema":{"type":"integer","minimum":1},"description":"Limit returned tasks to a specific Todoist section ID."},{"name":"label_id","in":"query","schema":{"type":"integer","minimum":1},"description":"Limit returned tasks to a specific Todoist label ID."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-task","label":"Get Task","description":"Fetch a Todoist task using an explicit task ID.","method":"GET","path":"/tasks/{taskId}","inputs":{"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Todoist task ID."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"create-task","label":"Create Task","description":"Create a Todoist task using a bounded JSON request body under input.body.","method":"POST","path":"/tasks","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"update-task","label":"Update Task","description":"Update a Todoist task using an explicit task ID and a bounded JSON request body.","method":"POST","path":"/tasks/{taskId}","inputs":{"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Todoist task ID."}]},"approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"close-task","label":"Close Task","description":"Close a Todoist task using an explicit task ID.","method":"POST","path":"/tasks/{taskId}/close","inputs":{"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Todoist task ID."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"reopen-task","label":"Reopen Task","description":"Reopen a Todoist task using an explicit task ID.","method":"POST","path":"/tasks/{taskId}/reopen","inputs":{"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Todoist task ID."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"delete-task","label":"Delete Task","description":"Delete a Todoist task using an explicit task ID.","method":"DELETE","path":"/tasks/{taskId}","inputs":{"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string","minLength":1},"description":"Todoist task ID."}]},"approvalMode":"require_approval","requestBodyMode":"none","resultMode":"json_summary"}],"helpText":"Import to Harbor, configure local auth, then validate and test list-projects and list-tasks before enabling create-task. Use project and section IDs as explicit query filters instead of widening into Todoist's full freeform filter grammar. Keep create-task on approval unless your local policy explicitly allows it.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import. Todoist list-tasks uses input.query for typed project, section, and label filters, and create-task uses input.body for the new task payload."}