Integrate Todoist task management with Kestra workflows. Create, list, and complete tasks programmatically as part of your automation pipelines.
Creates a new task in Todoist.
Parameters:
apiToken(required): Your Todoist API tokencontent(required): Task title/contenttaskDescription(optional): Detailed descriptionpriority(optional): Task priority (1-4, where 1 is highest)projectId(optional): ID of the project to add the task todueString(optional): Human-readable due date (e.g., "tomorrow", "next Monday")
Outputs:
taskId: ID of the created task
Retrieves a list of tasks from Todoist.
Parameters:
apiToken(required): Your Todoist API tokenprojectId(optional): Filter by project ID - cannot be used together with filter parameterfilter(optional): Custom filter (e.g., "today", "overdue", "priority 1") - cannot be used together with projectId parameterlimit(optional): Maximum number of tasks to return per page. If not set, all tasks will be fetched by automatically paginating through all results. If set, only that many tasks will be returned (defaults to 50 per page). Both /api/v1/tasks and /api/v1/tasks/filter endpoints support this parameter
Outputs:
tasks: List of task objectscount: Number of tasks retrieved
Retrieves details of a specific task.
Parameters:
apiToken(required): Your Todoist API tokentaskId(required): ID of the task to retrieve
Outputs:
task: Complete task objecttaskId: Task IDcontent: Task content
Marks a task as completed.
Parameters:
apiToken(required): Your Todoist API tokentaskId(required): ID of the task to complete
Outputs:
taskId: ID of the completed tasksuccess: Boolean indicating success
- A Todoist account (free or premium)
- Todoist API token
-
Get your Todoist API token:
- Go to https://todoist.com/app/settings/integrations/developer
- Scroll to the "API token" section
- Copy your API token
-
Configure the secret in Kestra:
- In Kestra UI, go to Namespaces
- Select your namespace
- Go to Secrets tab
- Add a new secret with key
TODOIST_API_TOKENand your token as the value
Or for local development, use environment variables (see Development section below)
id: create-task
namespace: demo.todoist
tasks:
- id: create_task
type: io.kestra.plugin.todoist.CreateTask
apiToken: "{{ secret('TODOIST_API_TOKEN') }}"
content: "Review deployment"
taskDescription: "Check production deployment status"
priority: 3
dueString: "today"id: list-tasks
namespace: demo.todoist
tasks:
- id: list_tasks
type: io.kestra.plugin.todoist.ListTasks
apiToken: "{{ secret('TODOIST_API_TOKEN') }}"
filter: "today"id: complete-task
namespace: demo.todoist
tasks:
- id: create_task
type: io.kestra.plugin.todoist.CreateTask
apiToken: "{{ secret('TODOIST_API_TOKEN') }}"
content: "Automated task"
- id: complete_task
type: io.kestra.plugin.todoist.CompleteTask
apiToken: "{{ secret('TODOIST_API_TOKEN') }}"
taskId: "{{ outputs.create_task.taskId }}"- Java 21
- Docker
- Todoist API token
export TODOIST_API_TOKEN=your_token_here
./gradlew test./gradlew shadowJar-
Setup secrets:
# Create .env.secrets with your API token echo "TODOIST_API_TOKEN=your_token_here" > .env.secrets # Encode it for Kestra while IFS='=' read -r key value; do echo "SECRET_$key=$(echo -n "$value" | base64)"; done < .env.secrets > .env_encoded
-
Build and start:
./gradlew shadowJar docker compose up -d
-
Access Kestra: http://localhost:8080
-
Create a flow: Go to Flows → Create and paste an example from above
-
Making changes: After modifying plugin code:
./gradlew shadowJar docker compose restart
docker compose downApache 2.0 © Kestra Technologies