Todoist#
Todoist supports personal-API-token sync through the generic provider import flow. A stored Todoist token can be verified, then used to pull Todoist tasks into a reviewable TeamBoost import session with sync-coupled user mapping.
| Capability | Method | Status |
|---|---|---|
CSV_IMPORT |
Upload a Todoist export or template CSV | Not built |
SYNC |
Pull tasks from the Todoist API | Built |
USER_IMPORT |
Bring Todoist users into the task-import mapping | Built during /imports/sync |
WEBHOOK |
Signed Todoist event handling | Not built |
The endpoints below live under /api/v1/providers/todoist/.... They are generic -
the same routes serve any registered provider by substituting the {provider} path
segment. All routes require an organization-scoped user token (see
Authentication).
Discovery#
GET /api/v1/providers/todoist
{
"status": "success",
"data": { "provider": "todoist", "capabilities": ["SYNC", "USER_IMPORT"] }
}
Credential Verification#
Todoist personal API tokens can be stored and verified:
PUT /api/v1/providers/todoist/credentials?organization_id=<id>
POST /api/v1/providers/todoist/credentials/verify?organization_id=<id>
The token is treated as opaque. Verification sends the secret as a Todoist bearer
token and probes GET https://api.todoist.com/api/v1/user. Stored secrets are
encrypted at rest and never returned by the credential endpoints.
API Sync#
POST /api/v1/providers/todoist/imports/sync?organization_id=<id>
The sync route reads the organization's stored Todoist token and calls Todoist's
Sync API with sync_token="*" for tasks, projects, sections, labels,
collaborators, the authenticated user, and workspaces. The adapter also tries the
Todoist workspace-user directory (GET /api/v1/workspaces/users) to enrich user
mapping; if Todoist refuses that directory for a guest token, task import still
continues with collaborators and task-actor IDs.
The import session includes:
- normalized Todoist tasks;
- lossless source records with raw Todoist fields plus project, section, workspace, and label context;
- imported users from the authenticated user, collaborators, visible workspace users, and id-only task actor fallbacks;
- projected TeamBoost task-create drafts;
- blocking projection errors for present-but-unmapped Todoist assignees;
- non-blocking mapping notes for Todoist defaults and preserved context.
Task Projection#
Todoist task projection maps:
| Todoist field | TeamBoost draft field |
|---|---|
content |
title |
description |
description |
| task id / URL / project / section / workspace refs | descriptionJson |
responsible_uid / assignee_id |
ownerId through user mapping |
added_by_uid / user_id |
creatorId and requester fallback through user mapping |
assigned_by_uid |
requestedById through user mapping |
| labels | labels |
| project name | projectTitle |
| section name | taskGroupTitle |
deadline, then due |
plannedEndDate |
| active / completed / deleted | NOT_STARTED / COMPLETED / CANCELED |
Todoist priorities 4, 3, 2 |
URGENT, HIGH, MEDIUM |
Todoist priority 1 |
UNKNOWN with a mapping note |
Todoist has no native TeamBoost task type, so the projector defaults to OTHER
and adds a non-blocking mapping note. Duration and parent/subtask relationships
are preserved in descriptionJson with mapping notes, but are not converted into
TeamBoost duration or dependencies.
Not Built Yet#
- CSV import from Todoist exports or project templates.
- OAuth app install flow.
- Webhook registration and event verification.
- Standalone user import outside a sync session.
- Execute/write-back into TeamBoost after review.