Skip to content

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.