← All integrations

Todoist

Let an agent keep a to-do list without the run of it. It reads and filters tasks, creates, updates, completes, moves and comments, and deleting a task or moving it to another project can wait for a person.

Todoistsecret · TODOIST
host
api.todoist.com
connect
API key, per user
  • Create task

    todoist-create-task

  • Update task

    todoist-update-task

  • Close task

    todoist-close-task

  • Reopen task

    todoist-reopen-task

writes are off until switched on

Reads and writes in Todoist. Writes are off until you switch them on.

Each one is a named operation from the pack. Reads change nothing.

Writes

  • Create task

    read back

    todoist-create-task

    Create one task. With no project_id it goes to the user's Inbox. A due date can be natural language (due_string: "tomorrow at 12:00", "every monday") or a date (due_date).

  • Update task

    read back

    todoist-update-task

    Change one task's content, description, labels, priority, due date or deadline; only the fields given change. labels replaces the whole list.

  • Close task

    acknowledged

    todoist-close-task

    Complete one task, as the Todoist app does. A regular task moves to history with its subtasks; a recurring task moves to its next date and stays active. Undo with reopen-task.

  • Reopen task

    read back

    todoist-reopen-task

    Reopen one completed task. Any completed parent tasks and sections come back too, at the end of their list.

  • Move task to project

    read back

    todoist-move-task-to-project

    Move one task, with its subtasks, to another project, outside any section. A shared project's members can then see it.

  • Move task to section

    read back

    todoist-move-task-to-section

    Move one task, with its subtasks, into a section. A section in another project moves it to that project too.

  • Delete task

    acknowledged

    todoist-delete-task

    Delete one task and all of its subtasks. It cannot be restored through the API.

  • Add comment

    read back

    todoist-add-comment

    Add one comment to a task, as the token's user. Nobody is notified by the call itself.

  • Create section

    read back

    todoist-create-section

    Create one section in a project, at the end.

  • Delete section

    acknowledged

    todoist-delete-section

    Delete one section and every task in it. The tasks are not counted separately: the impact is one section.

Reads

  • List projects

    todoist-list-projects

    List the user's active projects, 50 per page, with each one's id, name, parent_id, is_shared, is_archived and inbox_project. Todoist returns next_cursor when there are more; pass it as cursor for the next page.

  • Get project

    todoist-get-project

    Get one project by id: name, description, parent_id, color, view style, is_shared and is_archived.

  • List sections

    todoist-list-sections

    List active sections, 50 per page, with id, project_id, name and section_order. Give project_id for one project's sections; leave it out for all of them. Todoist returns next_cursor when there are more; pass it as cursor.

  • Get section

    todoist-get-section

    Get one section by id: name, description, project_id, section_order and is_archived.

  • List labels

    todoist-list-labels

    List the user's personal labels, 100 per page, with id, name, color and is_favorite. Tasks name labels by name, not id. Shared labels that exist only on other people's tasks are not listed. Todoist returns next_cursor when there are more; pass it as cursor.

  • List tasks

    todoist-list-tasks

    List active (not completed) tasks, 25 per page, with id, content, description, project_id, section_id, parent_id, labels, priority, due and deadline. Narrow by project_id, section_id, parent_id (its subtasks) or one label name; with none, every active task is listed. Todoist returns next_cursor when there are more; pass it as cursor with the same other inputs. Long task descriptions can cut a page at 64 KB.

  • Filter tasks

    todoist-filter-tasks

    List active tasks that match a Todoist filter query, 25 per page, for example "today | overdue", "#Work & p1" or "assigned to: me". One query at a time: the comma operator is not supported. Todoist returns next_cursor when there are more; pass it as cursor with the same query.

  • Get task

    todoist-get-task

    Get one active task by id: content, description, project_id, section_id, parent_id, labels, priority (4 is urgent), due, deadline, duration, responsible_uid, checked and updated_at. A completed or deleted task answers 404; use list-completed-tasks for completed ones.

  • List completed tasks

    todoist-list-completed-tasks

    List tasks completed between since and until, 25 per page, with id, content, project_id and completed_at. The range may be at most 3 months. Narrow by project_id or a filter query. Todoist returns next_cursor when there are more; pass it as cursor with the same other inputs.

  • List task comments

    todoist-list-task-comments

    List the comments on one task, 20 per page, with id, content, posted_uid, posted_at and file_attachment. Todoist returns next_cursor when there are more; pass it as cursor. A comment can be up to 15,000 characters, so a page of long comments can be cut at 64 KB.

How do users connect? Each one brings their own Todoist.

  1. 1.Call for the userYour server invokes the action for the signed-in user. Without a Todoist connection, the SDK throws EndUserNotConnectedError with a connect link.
  2. 2.The user pastes a keyThe link opens a form that shows where in Todoist's settings to create the key. The link lasts 10 minutes and works once.
  3. 3.Anlyon checks itThe key is checked with Todoist before it is kept, and bound to api.todoist.com. It is never shown back.
  4. 4.Your server confirmsYour server confirms the connection for the user who is signed in, and the call goes through.

Guardrails. Suggested limits and approvals, for you to review.

Suggested limits

  • 100 tasks created a day
  • 200 task updates a day
  • 100 tasks completed a day
  • 50 tasks reopened a day
  • 50 tasks moved to a project a day
  • 100 tasks moved to a section a day
  • 20 tasks deleted a day
  • 200 comments a day
  • 20 sections created a day
  • 10 sections deleted a day

Suggested approvals

  • A person approves deleting a task
  • A person approves deleting a section
  • A person approves moving a task to another project

What the key must allow

  • Your API token, from Todoist's developer settings
  • It has no scopes and can do anything you can do in Todoist

Good to know

  • The token has no narrower permissions. The daily limits and the approval rules are what narrow the agent.
  • Completing a recurring task keeps it active, so a completion is acknowledged rather than read back.

For your own account

  1. 1.In Todoist, open Settings, Integrations, Developer, and copy your API token.
  2. 2.In Anlyon, open Actions, then Integrations, choose Todoist and paste the token.
  3. 3.Anlyon checks the token with Todoist before storing it. It becomes a secret named TODOIST, bound to api.todoist.com.

Todoist in your code. For one of your users, or for your own account.

Act for one of your users from your server, or connect your company's own Todoist with the CLI.

todoist.ts
import { Client, EndUserNotConnectedError } from "@anlyonhq/sdk";const anlyon = new Client({ apiKey: process.env.ANLYON_API_KEY! });try {  const { data } = await anlyon    .forUser(session.userId)    .actions.invoke("todoist-create-task", {      content: "Send the Acme renewal quote"    });  return { status: "done", grade: data.grade };} catch (error) {  if (error instanceof EndUserNotConnectedError) {    // The user connects their own Todoist, then you call again.    return { status: "connect_required", url: error.connectUrl };  }  throw error;}

Let your agent act for your users, safely.

A few lines of server code, then send a user a connect link. Nothing to host.

$ claude mcp add --transport http anlyon https://api.anlyon.com/mcp