API reference
Every endpoint is scoped to the authenticated account, and the REST API authenticates with the session cookie the web app sets. Scripts and agents use the MCP endpoint instead.
All requests and responses are JSON. Every /api/* route authenticates with the session cookie set by POST /api/auth/login:
curl -X POST https://trydone.app/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","password":"..."}' \
-c cookies.txt
curl -X GET https://trydone.app/api/tasks -b cookies.txtAn MCP token does not authenticate the REST API. An Authorization: Bearer <mcp-token> header is accepted on exactly one route — GET /api/events, so an agent can subscribe to changes over the credential it already holds. Every other /api/* route answers a bearer token with a 401.
That is deliberate rather than an omission: it keeps a leaked MCP token from driving the account’s whole REST surface. Scripts and agents should talk to POST /mcp instead, which is what the token is for.
curl -X GET https://trydone.app/api/events \
-H "Authorization: Bearer <your-generated-mcp-token>"Auth & account
/api/auth/signup/api/referrals/api/auth/login/api/auth/2fa/verify/api/auth/logout/api/auth/me/api/bootstrap/api/auth/profile/api/auth/password/verify/api/auth/password/api/auth/forgot-password/api/auth/reset-password/api/auth/verify-email/api/auth/resend-verification/api/auth/mcp-token/api/auth/mcp-token/api/mcp-tokens/api/mcp-tokens/api/mcp-tokens/:id/api/auth/2fa/api/auth/2fa/setup/api/auth/2fa/enable/api/auth/2fa/api/auth/2fa/recovery-codes/api/auth/connections/api/auth/connections/:clientId/api/auth/accountTasks
/api/tasks/api/tasks/api/tasks/quick/api/tasks/:id/api/tasks/:id/api/tasks/:id/api/tasks/bulk-assign/api/tasks/bulk-delete/api/tasks/bulk-move/api/tasks/:id/decompose/api/tasks/:id/approve/api/tasks/:id/reject/api/tasks/:id/approve-plan/api/tasks/:id/reject-plan/api/tasks/:id/evidence/api/tasks/:id/runs/api/tasks/:id/decisions/api/resurfaceTrash
/api/trash/api/tasks/:id/restore/api/trash/:id/api/trashTags
/api/tags/api/tags/api/tags/:id/api/task-tags/api/tasks/:id/tags/api/tasks/:id/tags/:tagIdDependencies
/api/dependencies/api/tasks/:id/dependencies/api/tasks/:id/dependencies/api/tasks/:id/dependencies/:blockerIdActivity
/api/tasks/:id/comments/api/tasks/:id/comments/api/activity/api/claude-shippedDigest & review
/api/digest/api/review/api/statsGoals
/api/goals/api/goals/api/goals/:id/api/goals/:id/api/goals/:id/breakdownCapture inbox
/api/capture/api/capture/sweep/api/capture/:id/accept/api/capture/:id/dismissGrooming
/api/grooming/api/grooming/proposals/api/grooming/items/:id/approve/api/grooming/items/:id/dismissAutonomy & agents
/api/autonomy/api/autonomy/revoke/api/agents/api/fleet/api/projects/:id/rejections/api/decisions/api/decisions/:id/answerRoutine & budget
/api/routine/api/routine/api/routine/nightProjects
/api/projects/api/projects/api/projects/:id/api/projects/:idWorkspaces & sharing
/api/workspaces/api/workspaces/:id/members/api/workspaces/:id/members/:memberId/api/invites/api/invites/acceptAgent runs
/api/runsCalendar & Google sync
/api/calendar/api/calendar/api/calendar/token/api/calendar/token/api/calendar/oauth/start/api/google/accounts/api/google/sync/api/google/accounts/:id/api/calendar/events/api/calendar/matches/api/tasks/:id/calendar-links/api/tasks/:id/calendar-links/api/tasks/:id/calendar-links/:eventIdNotifications & live
/api/notifications/api/notifications/api/events/api/export/api/view-prefs/api/saved-views/api/widgetMCP
/mcp