> ## Documentation Index
> Fetch the complete documentation index at: https://lava.so/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Todoist

> Todoist task management API for creating, reading, updating, and completing tasks, projects, sections, labels, and comments.

Todoist task management API for creating, reading, updating, and completing tasks, projects, sections, labels, and comments. Best for syncing task state, automating task creation from other tools, or building productivity workflows on top of a personal or team task list.

15 example endpoints available through Lava's AI Gateway. See the [Todoist API docs](https://developer.todoist.com/api/v1/) for full documentation.

<Warning>This provider requires your own credentials — connect your API key or OAuth account before use.</Warning>

<Info>This is a **catch-all provider** — any valid URL under `https://api.todoist.com` is supported. Todoist API v1 endpoints. All paths start with /api/v1 (tasks, projects, sections, comments, labels, workspaces, invitations). Construct URL as [https://api.todoist.com/api/v1/\&#123;resource\&#125](https://api.todoist.com/api/v1/\&#123;resource\&#125);. See [https://developer.todoist.com/api/v1/](https://developer.todoist.com/api/v1/) for full reference. The endpoints below are curated examples.</Info>

## Endpoints

### List active tasks. Supports filters: project\_id, section\_id, label, filter (Todoist filter syntax), ids.

**GET** `https://api.todoist.com/api/v1/tasks` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/tasks', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Ftasks" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Create a new task. Requires content (title). Optional: description, project\_id, section\_id, labels, priority (1-4), due\_string, due\_date.

**POST** `https://api.todoist.com/api/v1/tasks` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/tasks', {
      body: {
    "content": "New task from Lava",
    "description": "Created via the gateway",
    "priority": 2
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Ftasks" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"content":"New task from Lava","description":"Created via the gateway","priority":2}'
    ```
  </Tab>
</Tabs>

### Get a single task by ID.

**GET** `https://api.todoist.com/api/v1/tasks/{task_id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/tasks/{task_id}', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Ftasks%2F%7Btask_id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Update a task. Only fields in the body are modified: content, description, labels, priority, due\_string, due\_date, assignee\_id.

**POST** `https://api.todoist.com/api/v1/tasks/{task_id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/tasks/{task_id}', { body: {"content":"Updated task title","priority":3} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Ftasks%2F%7Btask_id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"content":"Updated task title","priority":3}'
    ```
  </Tab>
</Tabs>

### Mark a task as complete.

**POST** `https://api.todoist.com/api/v1/tasks/{task_id}/close` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/tasks/{task_id}/close', { method: 'POST' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Ftasks%2F%7Btask_id%7D%2Fclose" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json"
    ```
  </Tab>
</Tabs>

### Reopen a completed task.

**POST** `https://api.todoist.com/api/v1/tasks/{task_id}/reopen` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/tasks/{task_id}/reopen', { method: 'POST' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Ftasks%2F%7Btask_id%7D%2Freopen" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json"
    ```
  </Tab>
</Tabs>

### Delete a task.

**DELETE** `https://api.todoist.com/api/v1/tasks/{task_id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/tasks/{task_id}', { method: 'DELETE' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X DELETE "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Ftasks%2F%7Btask_id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json"
    ```
  </Tab>
</Tabs>

### List all projects.

**GET** `https://api.todoist.com/api/v1/projects` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/projects', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Fprojects" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Create a new project. Requires name. Optional: parent\_id, color, is\_favorite, view\_style.

**POST** `https://api.todoist.com/api/v1/projects` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/projects', { body: {"name":"New project from Lava"} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Fprojects" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"name":"New project from Lava"}'
    ```
  </Tab>
</Tabs>

### Get a single project by ID.

**GET** `https://api.todoist.com/api/v1/projects/{project_id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/projects/{project_id}', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Fprojects%2F%7Bproject_id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List sections. Optional project\_id filter to scope to a single project.

**GET** `https://api.todoist.com/api/v1/sections?project_id={project_id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/sections?project_id={project_id}', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Fsections%3Fproject_id%3D%7Bproject_id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Create a section in a project. Requires name and project\_id.

**POST** `https://api.todoist.com/api/v1/sections` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/sections', { body: {"name":"New section","project_id":"{project_id}"} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Fsections" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"name":"New section","project_id":"{project_id}"}'
    ```
  </Tab>
</Tabs>

### List comments. Requires either task\_id or project\_id query param.

**GET** `https://api.todoist.com/api/v1/comments?task_id={task_id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/comments?task_id={task_id}', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Fcomments%3Ftask_id%3D%7Btask_id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Add a comment to a task or project. Requires content and either task\_id or project\_id.

**POST** `https://api.todoist.com/api/v1/comments` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/comments', {
      body: {
    "task_id": "{task_id}",
    "content": "Comment from Lava gateway."
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Fcomments" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"task_id":"{task_id}","content":"Comment from Lava gateway."}'
    ```
  </Tab>
</Tabs>

### List all personal labels.

**GET** `https://api.todoist.com/api/v1/labels` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.todoist.com/api/v1/labels', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.todoist.com%2Fapi%2Fv1%2Flabels" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

## Next Steps

<CardGroup cols={2}>
  <Card title="All Providers" icon="grid" href="/gateway/supported-providers">
    Browse all supported AI providers
  </Card>

  <Card title="Forward Proxy" icon="route" href="/gateway/forward-proxy">
    Learn how to construct proxy URLs and authenticate requests
  </Card>
</CardGroup>
