Todoist

Your Todoist, in two nodes on one connected credential. The action runs 30 operations on tasks, projects, sections, labels and comments, and can also be an AI toolkit. The trigger fires a flow when a task is added, completed or changed, a comment is posted, a project or section changes, or a reminder goes off.

Setup

Connect Todoist under Settings → Credentials, or straight from the node: name the credential, sign in to Todoist and approve the HostWebhook app. It asks to read, add, change and delete your tasks and projects.

The credential remembers which Todoist account it belongs to. Reconnecting it to a different account is refused, because every trigger on it would start listening somewhere else.


Operations

Tasks

ValueIn the dropdownWhat it does
createTaskCreate taskAdds a task to a project (or the Inbox), with its due date, priority and labels.
quickAddTaskQuick Add taskCreates a task from one line, the way Todoist's Quick Add reads it: date, #project, /section, @labels and p1–p4.
getTaskGet taskReads one active task by its ID.
listTasksList tasksActive tasks, optionally only from one project, section or label.
filterTasksSearch tasks with a filterActive tasks that match a Todoist filter, like “today | overdue” or “#Work & p1”.
updateTaskUpdate taskChanges a task. Only the fields you fill in change.
completeTaskComplete taskMarks a task as done. A recurring task moves to its next date instead.
reopenTaskReopen taskMarks a completed task as not done.
moveTaskMove taskMoves a task to another project, section or under another task. Pick one of the three.
deleteTaskDelete taskDeletes a task and its sub-tasks for good. Todoist has no trash.
listCompletedTasksList completed tasksTasks completed between two dates (a window of up to 3 months).

Projects

ValueIn the dropdownWhat it does
createProjectCreate projectCreates a project, optionally inside another one.
getProjectGet projectReads one project.
listProjectsList projectsAll active projects of the account.
updateProjectUpdate projectRenames or changes a project. Only the fields you fill in change.
archiveProjectArchive projectArchives a project with its tasks. It can be unarchived.
unarchiveProjectUnarchive projectBrings back an archived project.
deleteProjectDelete projectDeletes a project with all its sections and tasks, for good.

Sections

ValueIn the dropdownWhat it does
createSectionCreate sectionAdds a section to a project.
listSectionsList sectionsThe sections of a project, or of all projects.
updateSectionUpdate sectionRenames a section.
deleteSectionDelete sectionDeletes a section and all its tasks, for good.

Labels

ValueIn the dropdownWhat it does
createLabelCreate labelCreates a personal label.
listLabelsList labelsThe personal labels of the account.
updateLabelUpdate labelRenames or recolors a personal label. Tasks keep it under its new name.
deleteLabelDelete labelDeletes a personal label and removes it from every task.

Comments

ValueIn the dropdownWhat it does
addCommentAdd commentAdds a comment to a task or to a project. Fill in one of the two.
listCommentsList commentsThe comments of a task or of a project. Fill in one of the two.
updateCommentUpdate commentReplaces the text of a comment.
deleteCommentDelete commentDeletes a comment for good.

Filling in the fields

  • Project, Section and the Label you edit or delete are picked from your account. To type an ID or a template ({{payload.projectId}}), use the picker's footer.
  • Changing the Project clears the Section: a section only exists in its own project.
  • Labels on a task are names. Pick them from your account or type them; a name that isn't one of your labels still goes on the task, but Todoist doesn't add it to your labels list.
  • Deadline, Duration and Reminder need Todoist Pro or Business. On the free plan Todoist refuses the deadline and ignores the duration without saying so.
  • Priority reads as in Todoist: P1 is urgent, P4 is normal.
  • Due takes plain words — tomorrow at 5pm, every Monday — or a date like 2026-10-20. In another language, set Language of the due date (es for mañana a las 5).
  • Quick Add task reads one line like Todoist does: Pay rent tomorrow #Home @bills p1.
  • Move task goes to one place only: a project, a section or a parent task. The node warns if more than one is filled in.

Lists come back as { tasks: [...], count, hasMore } (or projects, sections, labels, comments): 50 unless you set Max results, up to 200, and the next node runs once per item.

⚠Writes run for real, Run Test too. Todoist has no trash: a deleted task, project, section, label or comment is gone, and deleting a project or a section also deletes its tasks.

AI toolkit mode

Once the credential is picked, the node asks for a Mode. AI toolkit turns it into 30 tools that an AI Node — or an MCP client, through one of your MCP servers — calls by name: an assistant that reads today's tasks, adds the ones from an email and completes what's done.

ToolArguments
create_todoist_taskcontent · description? · project_id? · section_id? · parent_id? · labels? · priority? · due? · due_lang? · deadline? · duration? · duration_unit? · assignee_id?
quick_add_todoist_tasktext · note? · reminder?
get_todoist_tasktask_id
list_todoist_tasksproject_id? · section_id? · label? · limit?
search_todoist_tasksquery · lang? · limit?
update_todoist_tasktask_id · content? · description? · labels? · priority? · due? · due_lang? · deadline? · duration? · duration_unit? · assignee_id?
complete_todoist_tasktask_id
reopen_todoist_tasktask_id
move_todoist_tasktask_id · project_id? · section_id? · parent_id?
delete_todoist_tasktask_id — blocked by default
list_completed_todoist_taskssince · until · project_id? · section_id? · filter? · limit?
create_todoist_projectname · description? · parent_id? · color? · is_favorite? · view_style?
get_todoist_projectproject_id
list_todoist_projectslimit?
update_todoist_projectproject_id · name? · description? · color? · is_favorite? · view_style?
archive_todoist_projectproject_id
unarchive_todoist_projectproject_id
delete_todoist_projectproject_id — blocked by default
create_todoist_sectionproject_id · name · description?
list_todoist_sectionsproject_id? · limit?
update_todoist_sectionsection_id · name? · description?
delete_todoist_sectionsection_id — blocked by default
create_todoist_labelname · color? · is_favorite?
list_todoist_labelslimit?
update_todoist_labellabel_id · name? · color? · is_favorite?
delete_todoist_labellabel_id — blocked by default
add_todoist_commenttask_id? · project_id? · content
list_todoist_commentstask_id? · project_id? · limit?
update_todoist_commentcomment_id · content
delete_todoist_commentcomment_id — blocked by default

What you control

  • Blocked tools. The five deletes start blocked. Unblock only what the agent really needs, under Block these tool calls.
  • Characters per call sent to the model. 20,000 by default, anything from 1,000 to 200,000.

What goes back to the model

  • The same response as the operation. Lists return 50 unless the model asks for more, up to 200.
  • Priorities are p1 (urgent) to p4, as in Todoist.
  • Project and section IDs come from the account: the model is told to look them up with list_todoist_projects and list_todoist_sections.
  • Items that don't fit the characters limit are left out whole, with a notes field saying how many.

Testing a tool

⚠Only a tool call picks the tool. In AI toolkit mode, only an AI Node, an MCP client or a voice agent chooses which tool the node runs. Run Test, a flow or a webhook run the operation saved on the node: an operation in their payload that names another tool is refused.
✦To try a tool, call it from an AI Node or from an MCP client. Its arguments look like this:
jsonA tool call
{ "operation": "search_todoist_tasks", "query": "today | overdue" }
⚠A node in toolkit mode is not part of the pipeline. Events arriving through connections made before you switched are refused — the node only runs the tool it is asked for.

The trigger

Pick Todoist as the service on a Trigger node and a Todoist credential. Connecting the HostWebhook app already sends your account's events to HostWebhook, so activating changes nothing in Todoist and never expires.

What fires it

  • Event Trigger takes one or more; pick at least one.
  • Project is optional: only events from that project fire the trigger. Empty = every project.
  • Label, filter and reminder events don't belong to a project, so they always fire.
TaskseventWhen
Task addeditem:addedA new task was created.
Task updateditem:updatedA task changed — its name, due date, priority, labels…
Task completeditem:completedA task was marked as done.
Task reopeneditem:uncompletedA completed task was marked as not done.
Task deleteditem:deletedA task was deleted.
CommentseventWhen
Comment addednote:addedA comment was added to a task or a project.
Comment updatednote:updatedA comment was edited.
Comment deletednote:deletedA comment was deleted.
ProjectseventWhen
Project addedproject:addedA new project was created.
Project updatedproject:updatedA project changed — name, color, favorite…
Project archivedproject:archivedA project was archived.
Project unarchivedproject:unarchivedAn archived project was brought back.
Project deletedproject:deletedA project was deleted.
SectionseventWhen
Section addedsection:addedA new section was created in a project.
Section updatedsection:updatedA section was renamed or moved.
Section archivedsection:archivedA section was archived.
Section unarchivedsection:unarchivedAn archived section was brought back.
Section deletedsection:deletedA section was deleted.
LabelseventWhen
Label addedlabel:addedA new personal label was created.
Label updatedlabel:updatedA label was renamed or recolored.
Label deletedlabel:deletedA label was deleted.
FilterseventWhen
Filter addedfilter:addedA new filter was created.
Filter updatedfilter:updatedA filter was changed.
Filter deletedfilter:deletedA filter was deleted.
ReminderseventWhen
Reminder firedreminder:firedA task reminder went off (Todoist plans with reminders).

What the trigger sends downstream

The item that changed is in object, with Todoist's field names. Task updated also brings the task as it was before, in previous.

{
  "id": "6XR4GqQQCW6Gv9h4",
  "event": "item:completed",
  "label": "Task completed",
  "objectType": "task",
  "projectId": "6XR4H993xv8H5qCR",
  "object": {
    "id": "6XR4GqQQCW6Gv9h4",
    "content": "Send the proposal to Acme",
    "project_id": "6XR4H993xv8H5qCR",
    "labels": ["clients"],
    "priority": 4,
    "due": { "date": "2026-10-13", "string": "Monday" },
    "checked": true,
    "…": "…"
  },
  "initiator": { "id": "2671355", "name": "Sam Rivera", "email": "sam@example.com" },
  "userId": "2671355",
  "triggeredAt": "2026-10-11T15:39:38.000000Z"
}
ℹEach event runs once. Todoist resends what it couldn't deliver — up to 3 times, every 15 minutes —; HostWebhook recognises it and doesn't run the flow again. Events arrive signed with the app's secret, and HostWebhook checks the signature before anything runs.

Trying it out

The trigger's Test push shows what each event you picked will look like — examples with the exact shape this trigger dispatches, so you can write {{payload.object.content}} in the nodes below it from the start. To see a real one, add or complete a task in Todoist.


Gotchas

  • A recurring task doesn't close. Completing it moves it to its next date, and Task completed still fires.
  • Completed tasks aren't in “List tasks”. Use List completed tasks, with a window of up to 3 months.
  • Archived projects aren't in the pickers. To unarchive one, type its ID.
  • Reminders need Todoist Pro or Business. On the free plan, Reminder fired never arrives.
  • A 429 is retried once. Todoist limits how many requests an account makes per minute; a flow that adds many tasks at once can touch it.