Manage tasks, projects, and productivity in Todoist. View tasks, add new items, check completed work, and organize projects.
3f:T1744,
This skill provides access to Todoist via the REST API.
Get your API token:
Set as environment variable:
export TODOIST_TOKEN="your-api-token"
Use this skill when the user:
Base URL: https://api.todoist.com/rest/v2
All requests need:
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Important: Use $(printenv TODOIST_TOKEN) to ensure the token expands correctly in all shell contexts (zsh eval can lose variable values).
Get All Tasks:
curl -s "https://api.todoist.com/rest/v2/tasks" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Get Tasks by Filter:
curl -s -G "https://api.todoist.com/rest/v2/tasks" \
--data-urlencode "filter=today" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Get Single Task:
curl -s "https://api.todoist.com/rest/v2/tasks/{TASK_ID}" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Create Task:
curl -s -X POST "https://api.todoist.com/rest/v2/tasks" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)" \
-H "Content-Type: application/json" \
-d '{
"content": "Task name",
"due_string": "tomorrow",
"priority": 2
}'
Complete Task:
curl -s -X POST "https://api.todoist.com/rest/v2/tasks/{TASK_ID}/close" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Get All Projects:
curl -s "https://api.todoist.com/rest/v2/projects" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Get Project:
curl -s "https://api.todoist.com/rest/v2/projects/{PROJECT_ID}" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Get Sections:
curl -s "https://api.todoist.com/rest/v2/sections" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Get Sections in Project:
curl -s "https://api.todoist.com/rest/v2/sections?project_id={PROJECT_ID}" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Get All Labels:
curl -s "https://api.todoist.com/rest/v2/labels" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Get Comments on Task:
curl -s "https://api.todoist.com/rest/v2/comments?task_id={TASK_ID}" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
Add Comment:
curl -s -X POST "https://api.todoist.com/rest/v2/comments" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)" \
-H "Content-Type: application/json" \
-d '{
"task_id": "TASK_ID",
"content": "Comment text"
}'
The filter parameter accepts Todoist filter syntax:
| Filter | Description |
|---|---|
today | Due today |
tomorrow | Due tomorrow |
overdue | Past due |
7 days or next 7 days | Due in next 7 days |
no date | No due date |
p1 | Priority 1 (urgent) |
@label_name | Has label |
#project_name | In project |
/section_name | In section |
assigned to: me | Assigned to you |
today & p1 | Combine with & |
| `today | tomorrow` |
curl -s -G "https://api.todoist.com/rest/v2/tasks" \
--data-urlencode "filter=today" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)" | jq '.[] | {content, due: .due.string, priority}'
curl -s -G "https://api.todoist.com/rest/v2/tasks" \
--data-urlencode "filter=overdue" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
curl -s -X POST "https://api.todoist.com/rest/v2/tasks" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)" \
-H "Content-Type: application/json" \
-d '{
"content": "Review the PR",
"due_string": "tomorrow",
"priority": 2
}'
# First, find project ID
curl -s "https://api.todoist.com/rest/v2/projects" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)" | jq '.[] | {name, id}'
# Then get tasks
curl -s "https://api.todoist.com/rest/v2/tasks?project_id={PROJECT_ID}" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
curl -s -G "https://api.todoist.com/rest/v2/tasks" \
--data-urlencode "filter=p1 | p2" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)"
curl -s "https://api.todoist.com/rest/v2/projects" \
-H "Authorization: Bearer $(printenv TODOIST_TOKEN)" | jq '.[] | {name, id}'
When creating tasks: