Can an AI agent use Todoist?

As of 6 Oct 2026, an AI agent can't use Todoist on its own: Invisible Cloudflare Turnstile on sign-up form.

Level 1 · Needs a personAgents can't get in on their own.
  • Find: Some docs for agents: An OpenAPI and an MCP server.
  • Access: Can't sign up.
  • Use: Work not reached.
  • Pay: Payment not reached.
  • Leave: Leaving not reached.

To reach L2 · Gets in: let an agent sign up on its own.

With an account set up by a person: not measured yet.

What the levels mean

Driven 6 Oct 2026Same level in 4 drives in a rowRules of 15 Oct 2026Claim this page

Written and checked by our agents from this drive's record. How we write.

Who gets in

  • Agents on a serverTurned away when they send the sign-up form.
  • Signed agentsThe sign-up page opens. The check on the form still applies.
  • Agents in a person's browserNot measured yet.

Sign-up page checked 13 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from

What an agent can do in Todoist.

On its own

  • Read the full product documentation and technical reference without an account
  • Look up how the login and connection system works without an account
  • Register itself as a technical client type, though this still needs a working account to use

What it can't, and why

  • Create a Todoist accountAn invisible robot check on the sign-up page rejected the automated attempt
  • Get a working login key or tokenEvery way to get one requires an account that could not be created
  • Add, schedule, organize or complete any taskNo account or login key was ever obtained
Blocked

Can an AI agent sign up for Todoist on its own?

No. Sign-up: blocked. No API sign-up. The email form at app.todoist.com/auth/signup runs an invisible Cloudflare Turnstile that rejected our agent's browser ('Captcha verification failed. Please try again.'), with no visible challenge shown. Other routes are Google, Facebook or Apple accounts only, which we have no account for.

Official server · a new agent can't get in alone

Does Todoist have an MCP server, and can an agent connect to it?

Yes. Todoist has an official MCP server. The server is hosted and signs an agent in with OAuth.

A new agent can't get in on its own: in the drive of 6 Oct 2026, our agent stopped at sign up (it was blocked).

What the drive found

APIOpenAPIMCP · officialCLISDK–llms.txtWebhooks–Sandbox

Not reached in this drive: the API key, deleting the account and paying. Every checkpoint, in detail

For the team behind Todoist.

Where agents stop in Todoist today, and the fixes that get them further, highest impact first.

Stops at sign up

The fixes, highest impact first

  1. Let signed agents through sign-upStep-by-step guide
  2. Add an agent-friendly sign-up routeStep-by-step guide
  3. Offer the device flow for tokensStep-by-step guide
2 more fixes
  1. Accept the API's own resource indicator
  2. Publish llms.txt and markdown docs Step-by-step guide
  • Claim it free and reply next to the result.
  • A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
  • Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
See the example report
Details

Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.

Already claimed it? Open it in your dashboard.

Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.

Embed the badge on your site

Driven · L1 · Needs a person badge

Behind the level.

Our agent couldn't get into Todoist, so the work, its reliability and the crash test aren't measured. The part scores are what it could judge from the outside.

Part scores · level history

Part scores

Agent-ready setup

  • llms.txt: not found
  • OpenAPI: found
  • MCP server: found
  • CLI: found

Not measured in this drive: Holds up, Docs match (part of an Audit).

Level history

  1. 1 Oct 20263 drivesL1Needs a person
  2. 6 Oct 2026L1Needs a person

For agents and builders.

The drive as data, every checkpoint and all 39 attempts.

How an agent connects · 4 tips
  • You need a human to create the account: the email sign-up form runs an invisible Cloudflare Turnstile.
  • Once an account exists, use the official MCP server https://ai.todoist.net/mcp (OAuth via todoist.com, CIMD or DCR) or the REST API v1 with a personal token from Settings > Integrations.
  • Use resource=https://ai.todoist.net/mcp at /oauth/authorize; resource=https://api.todoist.com is refused with invalid_target.
  • Failed unauthenticated calls raise Retry-After quickly (5 s to 129 s); do not loop on 401s.
Every checkpoint, in detail · 9 checkpoints
  1. DocsHeadlessNo llms.txt, no markdown version.
  2. Sign upBlockedNo API sign-up. The email form at app.todoist.com/auth/signup runs an invisible Cloudflare Turnstile that rejected our agent's browser ('Captcha verification failed. Please try again.'), with no visible challenge shown. Other routes are Google, Facebook or Apple accounts only, which we have no account for.
  3. VerifyNot reachedNot reached: no account was created and no mail arrived.
  4. KeyNot reachedDynamic client registration works headless (POST todoist.com/oauth/register 201), but every token path (OAuth code + PKCE, personal token in settings, td auth login) needs a logged-in account. No device flow, no agent registration. The AS refused resource=https://api.todoist.com (invalid_target), the value in the API's own PRM.
  5. First callNot reachedGET /api/v1/tasks answers 401 JSON with Retry-After; no token could be obtained.
  6. First actionNot reachedNot reached: no credentials.
  7. PayNot reachedNo 402, x402, MPP, UCP or registry listing found. The OpenAPI documents Stripe-hosted flows (usage_billing/top_up creates a hosted Stripe Checkout session; cancel_plan_with_redirect_to_stripe). The Pro upgrade checkout itself was not reached because no account could be created; from the docs only.
  8. CancelNot reachedNo plan was started. Docs: POST /api/v1/payments/cancel_plan_with_redirect_to_stripe returns a URL for a hosted cancellation flow, so cancelling ends in a web page.
  9. DeleteNot reachedNo account was created, so there was nothing to delete. No account-deletion operation found in the API reference.
The attempt log · 39 attempts
Attempt log
CapabilityRouteResultEvidence
robots.txt / aipref: Read robots.txt on todoist.com, app.todoist.com, developer.todoist.com, api.todoist.comapidone ✓todoist.com robots: User-Agent * Allow /; Disallow /app/, /api/, /auth/ ... no Content-Usage or Content-signal lines. app.todoist.com: Disallow / with Allow /auth/login, /auth/signup, /auth/password. developer.todoist.com: Disallow / Allow /$ Allow /api/v1/. api.todoist.com/robots.txt 404 (no rules).
docs + OpenAPI: Fetch API reference and its specapidone ✓https://developer.todoist.com/api/v1/ (Redoc) embeds OpenAPI 'openapi':'3.1.0', info.version 1, server https://api.todoist.com/, 78 paths / 108 operations, plus Sync endpoint, Webhooks, MCP and CLI sections. Saved openapi.json.
llms.txt / markdown: llms.txt and markdown docsapifailed ✓todoist.com/llms.txt 301 -> 404 HTML; developer.todoist.com/llms.txt 404. Accept: text/markdown on developer docs and todoist.com returned text/html, no Vary: Accept. developer.todoist.com/api/v1.md 404.
agent cards: AI catalog, A2A card, server cardapifailed ✓todoist.com/.well-known/ai-catalog.json, agent-card.json, agent.json, ucp: 404 HTML. ai.todoist.net/mcp/server-card 404 JSON; ai.todoist.net/.well-known/ai-catalog.json 404.
MCP server/discover: POST server/discover to https://ai.todoist.net/mcp unauthenticatedapipartial ✓401 {"message":"Missing or invalid authorization header"}, WWW-Authenticate: Bearer resource_metadata="https://ai.todoist.net/.well-known/oauth-protected-resource/mcp"; PRM 200 JSON resource https://ai.todoist.net/mcp, authorization_servers [https://todoist.com], scopes data:read_write.
OAuth AS metadata: Read RFC 8414 metadata and API PRMapidone ✓todoist.com/.well-known/oauth-authorization-server: client_id_metadata_document_supported true, registration_endpoint https://todoist.com/oauth/register, grant_types authorization_code+refresh_token, S256 only, resource_parameter_supported true; no device_authorization_endpoint, no agent_auth block. api.todoist.com/.well-known/oauth-protected-resource 200 JSON.
Sign up: Create a free account with email+password at app.todoist.com/auth/signupbrowserblocked ✓No documented API sign-up (OpenAPI has none). Browser form: filled email the agent's inbox + password, clicked 'Sign up with Email' -> page error 'Captcha verification failed. Please try again.' No visible widget (pw: visible_challenge false). Auth bundle vendors~authentication~app.*.js loads Cloudflare Turnstile ('cf-turnstile-script', window.turnstile.getResponse).
Get API credentials: Register an OAuth client (DCR) and start authorization code + PKCE flowapiblocked ✓POST https://todoist.com/oauth/register -> 201 client_id tdd_1939…, token_endpoint_auth_method none (DCR works headless). Authorize with resource=https://api.todoist.com -> redirect error=invalid_target; with resource=https://ai.todoist.net/mcp -> app.todoist.com/auth/login. Personal token lives at app.todoist.com/app/settings/integrations (docs). All paths need a logged-in account, which we could not create (Turnstile on sign-up).
First API call: GET /api/v1/tasksapiblocked ✓401 {"error":"Unauthorized","error_code":477,"error_tag":"UNAUTHORIZED","http_code":401}, retry-after 5; with a dummy bearer 401 + WWW-Authenticate: Bearer error="invalid_token", resource_metadata="https://api.todoist.com/.well-known/oauth-protected-resource". No token obtainable without an account.
Pay step probes: 402 / x402 / MPP / UCP / registries / billing APIapidone ✓Unauthenticated calls: no 402 anywhere (401/403/400 JSON). x402./mpp./agents.todoist.com do not resolve. /.well-known/ucp 404. No x-payment-info in OpenAPI. x402 Bazaar and mpp.dev/api/services: 0 mentions of todoist. OpenAPI Billing: POST /api/v1/payments/cancel_plan_with_redirect_to_stripe ('Start a hosted cancellation flow and return the redirect URL'), /payments/reactivate_plan, /payments/get_subscription_info, /usage_billing/top_up ('create a hosted Stripe Checkout session to top up ... Automations wallet', requires active personal Pro). Pricing page: Beginner (free), Pro, Business ('Start for free').
Capture a task from natural language (quick add): Try: Capture a task from natural language (quick add) via POST /api/v1/tasksnoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Capture tasks by speaking (Ramble voice-to-task): Try: Capture tasks by speaking (Ramble voice-to-task) via UInoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Schedule a task with due date, time, and recurrence: Try: Schedule a task with due date, time, and recurrence via POST/POST /api/v1/tasks (due_string/due_date/due_datetime/due_recurring)noneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Set a task deadline (separate from due date): Try: Set a task deadline (separate from due date) via POST/POST /api/v1/tasks (deadline)noneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile; also needs a paid plan per the capability map.
Organize tasks into projects: Try: Organize tasks into projects via POST /api/v1/projects; POST /api/v1/tasks (project_id)noneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Break a task into sub-tasks: Try: Break a task into sub-tasks via POST /api/v1/tasks (parent_id)noneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Prioritize tasks with priority levels: Try: Prioritize tasks with priority levels via POST/POST /api/v1/tasks (priority)noneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Mark a task done / reopen it: Try: Mark a task done / reopen it via POST /api/v1/tasks/{id}/close; POST /api/v1/tasks/{id}/reopennoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
View tasks in List, Board, or Calendar layout: Try: View tasks in List, Board, or Calendar layout via UInoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Build and save a custom filter view: Try: Build and save a custom filter view via POST /api/v1/filtersnoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Tag tasks with labels: Try: Tag tasks with labels via POST /api/v1/labels; POST /api/v1/tasks (labels)noneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Group tasks into sections within a project: Try: Group tasks into sections within a project via POST /api/v1/sectionsnoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Comment on a task or project (with file attachments): Try: Comment on a task or project (with file attachments) via POST /api/v1/commentsnoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Set a reminder on a task: Try: Set a reminder on a task via POST /api/v1/remindersnoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile; also needs a paid plan per the capability map.
Share a project and assign tasks to collaborators: Try: Share a project and assign tasks to collaborators via POST /api/v1/projects/{id}/collaborators; POST /api/v1/tasks (responsible_uid)noneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Start a project from a template (own or shared library): Try: Start a project from a template (own or shared library) via UInoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Reorder/move tasks, sections, and projects (drag-and-drop or API): Try: Reorder/move tasks, sections, and projects (drag-and-drop or API) via POST /api/v1/tasks/{id}/move; POST /api/v1/sections/{id}/reorder; POST /api/v1/projects/{id}/reordernoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Review productivity stats and completed-task activity history: Try: Review productivity stats and completed-task activity history via GET /api/v1/tasks/completed; GET productivity stats endpointnoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Connect calendar and email to create/sync tasks: Try: Connect calendar and email to create/sync tasks via UInoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Get AI-assisted task suggestions and breakdowns (Task Assist): Try: Get AI-assisted task suggestions and breakdowns (Task Assist) via UInoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile; also needs a paid plan per the capability map.
Create a shared team workspace: Try: Create a shared team workspace via POST /api/v1/workspacesnoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile; also needs a paid plan per the capability map.
Create team projects and organize them into folders: Try: Create team projects and organize them into folders via POST /api/v1/projects (workspace_id); POST /api/v1/foldersnoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile; also needs a paid plan per the capability map.
Invite workspace users and set their team role/permissions: Try: Invite workspace users and set their team role/permissions via POST /api/v1/workspaces/{id}/invite; POST workspace user role endpointnoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile; also needs a paid plan per the capability map.
View team activity log across a workspace: Try: View team activity log across a workspace via UInoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile; also needs a paid plan per the capability map.
Automate Todoist via personal API token or OAuth app: Try: Automate Todoist via personal API token or OAuth app via OAuth authorize/token endpointsnoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Drive Todoist through its CLI: Try: Drive Todoist through its CLI via UInoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.
Set up SSO/SCIM and security controls for an organization: Try: Set up SSO/SCIM and security controls for an organization via UInoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile; also needs a paid plan per the capability map.
Manage centralized team billing for a workspace: Try: Manage centralized team billing for a workspace via UInoneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile; also needs a paid plan per the capability map.
Upload a file attachment to a task (size limited by plan): Try: Upload a file attachment to a task (size limited by plan) via POST /api/v1/uploads; POST /api/v1/comments (file_attachment)noneblockedNo account: sign-up blocked by invisible Cloudflare Turnstile, so no API token, OAuth grant or MCP session could be obtained.

Also in Task management.