<!-- BusyBot node reference — https://busybot.net/tools/todoist/ -->

> Node: Todoist (`todoist`) · Action · v1
> Category: Productivity · Credentials: Todoist OAuth2 (`todoistOAuth2`)
> Updated: 2026-08-16

# Todoist

> Manage tasks, projects, sections, comments, labels, and reminders in Todoist

## Overview

Todoist is a task management and productivity application. This tool provides full CRUD operations for tasks (create, get, get many, update, delete, close, reopen, move, quick add), projects (create, get, get many, update, delete, archive, unarchive, get collaborators), sections (create, get, get many, update, delete), comments (create, get, get many, update, delete), labels (create, get, get many, update, delete), and reminders (create, update, delete, get many). Uses the Todoist REST API v1 for most operations and the Sync API v9 for task move, quick add, and reminder operations. Supports OAuth2 authentication with automatic token refresh.

**Category:** Productivity  
**Tool Name:** `todoist`  
**Version:** 1

**Appearance:** Icon: `si-todoist` | Color: `#E44332`

## Node Type

**Action** — processes input items and produces output

## Input / Output

| Direction | Port(s) |
|-----------|--------|
| Input | `Input` |
| Output | `Output`, `Error` |

## Credentials

This tool requires **Todoist OAuth2** credentials.
See the [Credentials Guide](https://busybot.net/credentials/todoist-oauth2/) for setup instructions.

### Resources

| Resource | Value |
|----------|-------|
| Task | `task` |
| Project | `project` |
| Section | `section` |
| Comment | `comment` |
| Label | `label` |
| Reminder | `reminder` |

### Operations

**Task** (`task`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Close | `close` | Mark a task complete. |
| Create | `create` | Create a new task. |
| Delete | `delete` | Delete a task. |
| Get | `get` | Retrieve a single task. |
| Get Many | `getAll` | Retrieve many tasks. |
| Move | `move` | Move a task to another project, section or parent task. |
| Quick Add | `quickAdd` | Create a task from a natural-language phrase. |
| Reopen | `reopen` | Reopen a closed task. |
| Update | `update` | Update a task's fields. |

**Project** (`project`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Archive | `archive` | Archive a project. |
| Create | `create` | Create a new project. |
| Delete | `delete` | Delete a project. |
| Get | `get` | Retrieve a single project. |
| Get Collaborators | `getCollaborators` | Retrieve the collaborators on a project. |
| Get Many | `getAll` | Retrieve many projects. |
| Unarchive | `unarchive` | Restore an archived project. |
| Update | `update` | Update a project's fields. |

**Section** (`section`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new section in a project. |
| Delete | `delete` | Delete a section. |
| Get | `get` | Retrieve a single section. |
| Get Many | `getAll` | Retrieve many sections. |
| Update | `update` | Update a section's fields. |

**Comment** (`comment`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Add a comment to a task. |
| Delete | `delete` | Delete a comment. |
| Get | `get` | Retrieve a single comment. |
| Get Many | `getAll` | Retrieve many comments. |
| Update | `update` | Update a comment's content. |

**Label** (`label`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Create a new label. |
| Delete | `delete` | Delete a label. |
| Get | `get` | Retrieve a single label. |
| Get Many | `getAll` | Retrieve many labels. |
| Update | `update` | Update a label's fields. |

**Reminder** (`reminder`)

| Operation | Value | Description |
|-----------|-------|-------------|
| Create | `create` | Attach a reminder to a task. |
| Delete | `delete` | Delete a reminder. |
| Get Many | `getAll` | Retrieve many reminders. |
| Update | `update` | Update a reminder's due date or settings. |

### Parameters

`Reminder: Get Many` takes no parameters of its own — see All Operations.

#### Task: Close

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID (`taskId`) | `string` | Yes | — | The ID of the task. |

#### Task: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID (`project`) | `string` | Yes | — | The project ID. Find in Todoist: click on the project, copy from the URL (e.g., https://app.todoist.com/app/project/2302163813). |
| Label Names | `string` | No | — | Comma-separated list of label names to assign to the task (e.g., "shopping, urgent"). Labels are created automatically if they do not exist. |
| Content (`content`) | `string` | Yes | — | Task content (the task title/name). |
| Additional Fields (`options`) | `collection` | No | `{}` | Optional task fields to send with the create call. |
| — Description | `string` | No | — | A description for the task. |
| — Due Date Time | `string` | No | — | Specific date and time in RFC3339 format in UTC (e.g., 2023-01-15T10:30:00Z). |
| — Due String | `string` | No | — | Human defined task due date (e.g., "next Monday", "Tomorrow"). Value is set using local (not UTC) time. |
| — Due String Locale | `string` | No | — | 2-letter code specifying language in case due_string is not written in English. |
| — Section ID | `string` | No | — | Section ID to place the task in. |
| — Parent Task ID | `string` | No | — | Parent task ID to make this task a sub-task. |
| — Priority | `number` | No | `1` | Task priority from 1 (normal) to 4 (urgent). |
| — Order | `number` | No | `0` | Non-zero integer used to sort tasks under the same parent. |
| — Due Date | `string` | No | — | Specific date in YYYY-MM-DD format. |
| — Assignee ID | `string` | No | — | Responsible user ID (for shared tasks). |
| — Duration | `number` | No | `0` | Positive integer for task duration (must be used with Duration Unit). |
| — Duration Unit | `options` | No | `minute` | Unit of time for duration (must be used with Duration). |
| | | | | Options: `minute`, `day` |
| — Deadline Date | `string` | No | — | Specific deadline date in YYYY-MM-DD format. |

#### Task: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID (`taskId`) | `string` | Yes | — | The ID of the task. |

#### Task: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID (`taskId`) | `string` | Yes | — | The ID of the task. |

#### Task: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All (`returnAll`) | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit (`limit`) | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |
| Filters (`filters`) | `collection` | No | `{}` | Narrow the tasks that are returned. |
| — Project ID | `string` | No | — | Filter tasks by project ID. |
| — Section ID | `string` | No | — | Filter tasks by section ID. |
| — Label | `string` | No | — | Filter tasks by label name. |
| — Filter | `string` | No | — | Filter by any supported Todoist filter expression (see https://todoist.com/help/articles/introduction-to-filters-V98wIH). |
| — Lang | `string` | No | — | IETF language tag defining what language filter is written in, if different from default English. |
| — IDs | `string` | No | — | A comma-separated list of task IDs to retrieve. |
| — Parent ID | `string` | No | — | Filter tasks by parent task ID. |

#### Task: Move

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID (`taskId`) | `string` | Yes | — | The ID of the task. |
| Project ID (`project`) | `string` | Yes | — | The project ID. Find in Todoist: click on the project, copy from the URL (e.g., https://app.todoist.com/app/project/2302163813). |
| Additional Fields (`options`) | `collection` | No | `{}` | Optional destination fields for the move. |
| — Section ID | `string` | No | — | The destination section ID. The task becomes the last root task of the section. |
| — Parent Task ID | `string` | No | — | The destination parent task ID. The task becomes the last child of the parent task. |

#### Task: Quick Add

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Text | `string` | Yes | — | Natural language text for quick adding a task (e.g., "Buy milk @Grocery #shopping tomorrow"). Can include due date, project (#name), label (@name), assignee (+name), priority (p1-p4), deadline ({in 3 days}), or description (// text). |
| Additional Fields (`options`) | `collection` | No | `{}` | Optional fields to send alongside the quick-add text. |
| — Note | `string` | No | — | The content of the note |
| — Reminder | `string` | No | — | The date of the reminder, added in free form text |
| — Auto Reminder | `boolean` | No | `false` | When enabled, the default reminder will be added to the new item if it has a due date with time set |

#### Task: Reopen

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID (`taskId`) | `string` | Yes | — | The ID of the task. |

#### Task: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID (`taskId`) | `string` | Yes | — | The ID of the task. |
| Update Fields (`updateFields`) | `collection` | No | `{}` | The task fields to change. Fields you leave out keep their current value. |
| — Content | `string` | No | — | Task content. |
| — Description | `string` | No | — | A description for the task. |
| — Due Date Time | `string` | No | — | Specific date and time in RFC3339 format in UTC. |
| — Due String | `string` | No | — | Human defined task due date (e.g., "next Monday", "Tomorrow"). |
| — Due String Locale | `string` | No | — | 2-letter code specifying language in case due_string is not written in English. |
| — Label Names | `string` | No | — | Comma-separated list of label names. |
| — Priority | `number` | No | `1` | Task priority from 1 (normal) to 4 (urgent). |
| — Order | `number` | No | `0` | Non-zero integer used to sort tasks under the same parent. |
| — Due Date | `string` | No | — | Specific date in YYYY-MM-DD format. |
| — Assignee ID | `string` | No | — | Responsible user ID (for shared tasks). |
| — Duration | `number` | No | `0` | Positive integer for task duration. |
| — Duration Unit | `options` | No | `minute` | Unit of time for duration. |
| | | | | Options: `minute`, `day` |
| — Deadline Date | `string` | No | — | Specific deadline date in YYYY-MM-DD format. |

#### Project: Archive

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID (`projectId`) | `string` | Yes | — | The project ID. |

#### Project: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name (`name`) | `string` | Yes | — | Name of the project. |
| Additional Fields (`projectOptions`) | `collection` | No | `{}` | Optional project fields to send with the create call. |
| — Color | `options` | No | — | The color of the project. |
| | | | | Options: `berry_red`, `red`, `orange`, `yellow`, `olive_green`, `lime_green`, `green`, `mint_green`, `teal`, `sky_blue`, `light_blue`, `blue`, `grape`, `violet`, `lavender`, `magenta`, `salmon`, `charcoal`, `grey`, `taupe` |
| — Is Favorite | `boolean` | No | `false` | Whether the project is a favorite. |
| — Parent ID | `string` | No | — | Parent project ID. |
| — View Style | `options` | No | `list` | The default view style of the project. |
| | | | | Options: `list`, `board` |

#### Project: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID (`projectId`) | `string` | Yes | — | The project ID. |

#### Project: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID (`projectId`) | `string` | Yes | — | The project ID. |

#### Project: Get Collaborators

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID (`projectId`) | `string` | Yes | — | The project ID. |

#### Project: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All (`returnAll`) | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit (`limit`) | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Project: Unarchive

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID (`projectId`) | `string` | Yes | — | The project ID. |

#### Project: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID (`projectId`) | `string` | Yes | — | The project ID. |
| Update Fields (`projectUpdateFields`) | `collection` | No | `{}` | The project fields to change. Fields you leave out keep their current value. |
| — Name | `string` | No | — | Name of the project. |
| — Color | `options` | No | — | The color of the project. |
| | | | | Options: `berry_red`, `red`, `orange`, `yellow`, `olive_green`, `lime_green`, `green`, `mint_green`, `teal`, `sky_blue`, `light_blue`, `blue`, `grape`, `violet`, `lavender`, `magenta`, `salmon`, `charcoal`, `grey`, `taupe` |
| — Is Favorite | `boolean` | No | `false` | Whether the project is a favorite. |
| — View Style | `options` | No | `list` | The default view style of the project. |
| | | | | Options: `list`, `board` |

#### Section: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Project ID (`sectionProject`) | `string` | Yes | — | The project ID to add the section to. |
| Name (`sectionName`) | `string` | Yes | — | Name of the section. |
| Additional Fields (`sectionOptions`) | `collection` | No | `{}` | Optional section fields to send with the create call. |
| — Order | `number` | No | `0` | The order of the section. |

#### Section: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Section ID | `string` | Yes | — | The section ID. |

#### Section: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Section ID | `string` | Yes | — | The section ID. |

#### Section: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Filters (`sectionFilters`) | `collection` | No | `{}` | Narrow the sections that are returned. |
| — Project ID | `string` | No | — | Filter sections by project ID. |

#### Section: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Section ID | `string` | Yes | — | The section ID. |
| Update Fields (`sectionUpdateFields`) | `collection` | No | `{}` | The section fields to change. Fields you leave out keep their current value. |
| — Name | `string` | No | — | Name of the section. |

#### Comment: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID (`commentTaskId`) | `string` | Yes | — | The ID of the task to comment on. |
| Content (`commentContent`) | `string` | Yes | — | Comment content. |

#### Comment: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Comment ID | `string` | Yes | — | The comment ID. |

#### Comment: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Comment ID | `string` | Yes | — | The comment ID. |

#### Comment: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Filters (`commentFilters`) | `collection` | No | `{}` | Narrow the comments that are returned. |
| — Task ID | `string` | No | — | Filter comments by task ID. |
| — Project ID | `string` | No | — | Filter comments by project ID. |

#### Comment: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Comment ID | `string` | Yes | — | The comment ID. |
| Update Fields (`commentUpdateFields`) | `collection` | No | `{}` | The comment fields to change. |
| — Content | `string` | No | — | Comment content. |

#### Label: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Name (`labelName`) | `string` | Yes | — | Name of the label. |
| Additional Fields (`labelOptions`) | `collection` | No | `{}` | Optional label fields to send with the create call. |
| — Color | `options` | No | — | The color of the label. |
| | | | | Options: `berry_red`, `red`, `orange`, `yellow`, `olive_green`, `lime_green`, `green`, `mint_green`, `teal`, `sky_blue`, `light_blue`, `blue`, `grape`, `violet`, `lavender`, `magenta`, `salmon`, `charcoal`, `grey`, `taupe` |
| — Order | `number` | No | `0` | Label order. |
| — Is Favorite | `boolean` | No | `false` | Whether the label is a favorite. |

#### Label: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Label ID | `string` | Yes | — | The label ID. |

#### Label: Get

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Label ID | `string` | Yes | — | The label ID. |

#### Label: Get Many

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Return All (`returnAll`) | `boolean` | No | `false` | Whether to return all results or only up to a given limit. |
| Limit (`limit`) | `number` | No | `50` | Max number of results to return. _(shown when Return All is `false`)_ |

#### Label: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Label ID | `string` | Yes | — | The label ID. |
| Update Fields (`labelUpdateFields`) | `collection` | No | `{}` | The label fields to change. Fields you leave out keep their current value. |
| — Name | `string` | No | — | Name of the label. |
| — Color | `options` | No | — | The color of the label. |
| | | | | Options: `berry_red`, `red`, `orange`, `yellow`, `olive_green`, `lime_green`, `green`, `mint_green`, `teal`, `sky_blue`, `light_blue`, `blue`, `grape`, `violet`, `lavender`, `magenta`, `salmon`, `charcoal`, `grey`, `taupe` |
| — Order | `number` | No | `0` | Label order. |
| — Is Favorite | `boolean` | No | `false` | Whether the label is a favorite. |

#### Reminder: Create

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Task ID (`itemId`) | `string` | Yes | — | The ID of the task to attach the reminder to. |
| Due Date Type | `options` | Yes | `natural_language` | How to specify when the reminder should trigger. |
| | | | | Options: `natural_language`, `full_day`, `floating_time`, `fixed_timezone` |
| Natural Language Representation | `string` | Yes | — | Human-readable date and time. _(shown when Due Date Type is `natural_language`)_ |
| Date | `string` | Yes | — | Full-day date in YYYY-MM-DD format. _(shown when Due Date Type is `full_day`)_ |
| Date Time | `string` | Yes | — | Date and time in ISO format. _(shown when Due Date Type is `floating_time`, `fixed_timezone`)_ |
| Timezone | `string` | Yes | — | Timezone for the fixed timezone date. _(shown when Due Date Type is `fixed_timezone`)_ |
| Additional Fields (`reminderOptions`) | `collection` | No | `{}` | Optional reminder fields to send with the create call. |
| — Type | `options` | No | `absolute` | The reminder type. |
| | | | | Options: `absolute`, `relative` |
| — Minute Offset | `number` | No | `0` | Minutes before the task due date. |
| — Notify User ID | `string` | No | — | User ID to notify (for shared tasks). |

#### Reminder: Delete

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Reminder ID | `string` | Yes | — | The reminder ID. |

#### Reminder: Update

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Reminder ID | `string` | Yes | — | The reminder ID. |
| Update Fields (`reminderUpdateFields`) | `collection` | No | `{}` | The reminder fields to change. Fields you leave out keep their current value. |
| — Due | `json` | No | `{}` | Due date object with fields: string (natural language), date (YYYY-MM-DD), datetime (ISO), timezone. |
| — Type | `options` | No | `absolute` | The reminder type. |
| | | | | Options: `absolute`, `relative` |
| — Minute Offset | `number` | No | `0` | Minutes before the task due date. |
| — Notify User ID | `string` | No | — | User ID to notify (for shared tasks). |

#### All Operations

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| Todoist Account | `credential` | No | — | Connect your Todoist account via OAuth2. |
| Max Concurrency | `number` | No | `10` | Maximum number of items to process concurrently. |

## Output Data

One output item per input item — this node never fans out, whatever the operation. The rest of the item JSON passes through unchanged and binary data is forwarded.

What the response adds to the item depends on what the operation returns:

| Operations | What lands on the item |
|------------|------------------------|
| `Task: Create`, `Task: Get`, `Task: Quick Add`, `Project: Create`, `Project: Get`, `Section: Create`, `Section: Get`, `Comment: Create`, `Comment: Get`, `Label: Create`, `Label: Get` | The returned record's own fields, merged in at the top level of the item JSON. |
| `Task: Get Many`, `Project: Get Many`, `Project: Get Collaborators`, `Section: Get Many`, `Comment: Get Many`, `Label: Get Many`, `Reminder: Get Many` | `_todoistResults` — the whole array of records, nested on the item — plus `_todoistResultCount`, its length. An empty result set gives `_todoistResults: []` and `_todoistResultCount: 0`. |
| `Task: Update`, `Task: Delete`, `Task: Close`, `Task: Reopen`, `Task: Move`, `Project: Update`, `Project: Delete`, `Project: Archive`, `Project: Unarchive`, `Section: Update`, `Section: Delete`, `Comment: Update`, `Comment: Delete`, `Label: Update`, `Label: Delete`, `Reminder: Create`, `Reminder: Update`, `Reminder: Delete` | `success: true`. These calls return no record of their own. |

Anything that comes back in a shape other than a record or a list also lands as `success: true`.

**List operations do not produce one item per record.** Add a Split Out node on `_todoistResults` when you want downstream nodes to see one record at a time.

Reference the result downstream by expression — `{{ $json._todoistResultCount }}` after a list operation, or the record's own fields such as `{{ $json.id }}` after a single-record operation.

## Usage Examples

- Create a new task in Todoist with a due date
- Get all tasks from a Todoist project
- Move a task to a different section
- Create a project in Todoist
- Add a comment to a task
- Close a completed task
- Quick add a task using natural language

## Example Configuration

Create a task with labels, a due string and a duration:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "task",
    "operation": "create",
    "project": "2302163813",
    "content": "Review quarterly reports",
    "labels": "work, urgent",
    "options": {
      "description": "Review Q1 financial reports and prepare summary",
      "dueString": "next Friday at 2pm",
      "priority": 2,
      "duration": 120,
      "durationUnit": "minute"
    }
  }
}
```

Create a task from a natural-language phrase:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "task",
    "operation": "quickAdd",
    "text": "Buy groceries @Errands #shopping tomorrow at 10am",
    "options": {
      "note": "Don't forget milk and bread",
      "reminder": "tomorrow at 9am",
      "auto_reminder": true
    }
  }
}
```

Read a page of tasks that are due today or overdue in one project:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "task",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "filters": {
      "projectId": "2302163813",
      "filter": "today | overdue",
      "lang": "en"
    }
  }
}
```

Update a task's content, priority, labels and due date:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "task",
    "operation": "update",
    "taskId": "7654321",
    "updateFields": {
      "content": "Updated task name",
      "priority": 3,
      "labels": "urgent, high-priority",
      "dueString": "next Monday"
    }
  }
}
```

Move a task into another project's section:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "task",
    "operation": "move",
    "taskId": "7654321",
    "project": "2302163814",
    "options": {
      "section": "section_id_123"
    }
  }
}
```

Create a board-style project:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "project",
    "operation": "create",
    "name": "Q1 Marketing Campaign",
    "projectOptions": {
      "color": "blue",
      "is_favorite": true,
      "view_style": "board"
    }
  }
}
```

Rename a project and change its color:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "project",
    "operation": "update",
    "projectId": "2302163813",
    "projectUpdateFields": {
      "name": "Q1 Marketing Campaign - Updated",
      "color": "green",
      "is_favorite": false
    }
  }
}
```

Add a section to a project:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "section",
    "operation": "create",
    "sectionProject": "2302163813",
    "sectionName": "In Progress",
    "sectionOptions": {
      "order": 1
    }
  }
}
```

Comment on a task:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "comment",
    "operation": "create",
    "commentTaskId": "7654321",
    "commentContent": "Great progress on this task! Let's review tomorrow."
  }
}
```

Read the comments on one task:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "comment",
    "operation": "getAll",
    "commentFilters": {
      "task_id": "7654321"
    }
  }
}
```

Create a favorite label:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "label",
    "operation": "create",
    "labelName": "High Priority",
    "labelOptions": {
      "color": "red",
      "is_favorite": true,
      "order": 1
    }
  }
}
```

Attach a reminder described in plain English:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "reminder",
    "operation": "create",
    "itemId": "7654321",
    "dueDateType": "natural_language",
    "natural_language_representation": "tomorrow at 9am",
    "reminderOptions": {
      "type": "absolute",
      "minute_offset": 0
    }
  }
}
```

Attach a reminder pinned to a specific timezone:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "reminder",
    "operation": "create",
    "itemId": "7654321",
    "dueDateType": "fixed_timezone",
    "datetime": "2024-01-15T09:00:00",
    "timezone": "America/New_York",
    "reminderOptions": {
      "type": "absolute"
    }
  }
}
```

Create a recurring daily task:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "task",
    "operation": "create",
    "project": "2302163813",
    "content": "Daily standup meeting",
    "options": {
      "dueString": "every day at 9am",
      "priority": 2
    }
  }
}
```

Pull every task in a project that is due today:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "task",
    "operation": "getAll",
    "returnAll": true,
    "filters": {
      "projectId": "2302163813",
      "filter": "today"
    }
  }
}
```

Pull every task carrying one label:

```json
{
  "type": "todoist",
  "parameters": {
    "resource": "task",
    "operation": "getAll",
    "returnAll": true,
    "filters": {
      "labelId": "urgent"
    }
  }
}
```

### Error Handling

| Mode | Behavior |
|------|----------|
| **stop** | Halts workflow on first error |
| **continue** | Skips failed items, passes successful ones through |
| **errorPort** | Routes failed items to Error output port |

## Tips

Todoist tool for managing tasks, projects, sections, comments, labels, and reminders via the Todoist REST and Sync APIs.