Install
openclaw skills install todoist-api-skillManages Todoist tasks, projects, sections, labels, comments, completed-task reports, activity logs, ID migration, project templates, and sync workflows throu...
openclaw skills install todoist-api-skillUse this skill when work involves Todoist data or automation, especially:
Do not use this skill for:
curl or the raw escape hatch--dry-run first for bulk or destructive work.--confirm for bulk closes, moves, repeated comments, and deletes.--output FILE so stdout stays small and predictable.get-task, update-project, or get-comment.quick-add-task.resolve-project, resolve-section, resolve-label.ensure-project, ensure-section, ensure-label.bulk-close-tasks, bulk-move-tasks, bulk-comment-tasks.report-completed or get-completed-tasks.sync.raw.The main script prints structured output to stdout by default.
--format json returns a stable JSON envelope with fields like action, ok, count, next_cursor, matched_count, changed_count, and resolved.--format summary returns a smaller human-readable summary.--output FILE writes the full output to a file and prints a small JSON notice to stdout.This is designed for agent pipelines: stdout stays parseable, stderr carries diagnostics, and retries are built in for transient failures.
scripts/todoist_api.py — main non-interactive Todoist CLIscripts/smoke_test.py — read-only connectivity checkInspect help first:
python3 scripts/todoist_api.py --help
python3 scripts/todoist_api.py get-tasks-by-filter --help
python3 scripts/todoist_api.py bulk-move-tasks --help
python3 scripts/smoke_test.py --help
Set a token:
export TODOIST_API_TOKEN="YOUR_TODOIST_TOKEN"
Read-only smoke test:
python3 scripts/smoke_test.py
Sanity-check access:
python3 scripts/todoist_api.py get-projects --limit 5
python3 scripts/todoist_api.py get-labels --limit 10
Resolve names before writes:
python3 scripts/todoist_api.py resolve-project --name "Inbox"
python3 scripts/todoist_api.py resolve-section --project-name "Client Alpha" --name "Next Actions"
python3 scripts/todoist_api.py resolve-label --name "waiting-on"
python3 scripts/todoist_api.py quick-add-task \
--text "Email Chris tomorrow at 09:00 #Work @follow-up p2"
python3 scripts/todoist_api.py ensure-section \
--project-name "Client Alpha" \
--name "Next Actions"
python3 scripts/todoist_api.py bulk-close-tasks \
--filter "overdue & @errands" \
--dry-run
python3 scripts/todoist_api.py bulk-close-tasks \
--filter "overdue & @errands" \
--confirm
python3 scripts/todoist_api.py bulk-move-tasks \
--filter "#Inbox & !recurring" \
--target-project-name "Work" \
--target-section-name "Next Actions" \
--dry-run
python3 scripts/todoist_api.py report-completed \
--since "2026-03-01T00:00:00Z" \
--until "2026-03-31T23:59:59Z" \
--by completion \
--output reports/march-completed.json
--dry-run.--confirm when needed.Use raw when the public CLI surface does not yet wrap a needed endpoint:
python3 scripts/todoist_api.py raw \
--method GET \
--path /projects/PROJECT_ID/full
Use sync when you need incremental sync or batched commands:
python3 scripts/todoist_api.py sync \
--sync-token '*' \
--resource-types '["all"]'