文档

API 参考

每个端点都限定在已认证的账户范围内,REST API 使用网页应用设置的会话 Cookie 进行认证。脚本和智能体请改用 MCP 端点。

所有请求和响应均为 JSON。每个 /api/* 路由都使用 POST /api/auth/login 设置的会话 Cookie 进行认证:

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.txt

MCP 令牌不能用于 REST API 的认证。Authorization: Bearer <mcp-token> 请求头只在一个路由上被接受,即 GET /api/events,这样智能体就能用它已有的凭证订阅变更。其他所有 /api/* 路由遇到 bearer 令牌都会返回 401。

这是有意为之,而非疏漏:这样即使 MCP 令牌泄露,也无法操控账户的整个 REST 接口。脚本和智能体应改为调用 POST /mcp,这才是该令牌的用途。

curl -X GET https://trydone.app/api/events \
  -H "Authorization: Bearer <your-generated-mcp-token>"

认证与账户

POST/api/auth/signup
创建账户(邮箱 + 密码,可选附带 `ref` 推荐码)。
GET/api/referrals
你的推荐链接、通过它加入的人,以及距离下一次奖励的进度。
POST/api/auth/login
开始一个会话并设置 Cookie。开启 2FA 时会改为返回一个质询,需在 /api/auth/2fa/verify 完成。
POST/api/auth/magic-link
向某个邮箱地址发送一次性登录链接。
POST/api/auth/magic-link/verify
用魔法链接令牌换取真正的会话。无需密码。
POST/api/auth/2fa/verify
2FA 登录的第 2 步:用质询和验证码换取真正的会话。无需会话。
POST/api/auth/logout
结束当前会话。
GET/api/auth/me
当前用户(包括邮箱是否已确认),以及是否存在 MCP 令牌。
GET/api/bootstrap
一次请求返回当前用户和所有列表(任务、项目、目标、依赖、标签、任务↔标签),即网页客户端的轮询请求。
PATCH/api/auth/profile
更新个人资料:姓名、时区、头像。
POST/api/auth/password/verify
验证当前密码(修改密码的第 1 步)。
POST/api/auth/password
设置新密码,要求此会话近期调用过 /password/verify(第 2 步)。
POST/api/auth/forgot-password
请求发送密码重置邮件。
POST/api/auth/reset-password
使用邮件中的令牌完成重置。
POST/api/auth/verify-email
使用邮件中的令牌确认邮箱地址。无需会话。
POST/api/auth/resend-verification
向已登录的账户重新发送确认邮件。
POST/api/auth/mcp-token
生成(或重新生成)账户的完全访问 MCP 令牌。
DELETE/api/auth/mcp-token
撤销完全访问 MCP 令牌。
GET/api/mcp-tokens
列出账户的 MCP 令牌(完全访问、只读、单项目)。
POST/api/mcp-tokens
签发一个限定范围的 MCP 令牌(只读或单个项目)。
DELETE/api/mcp-tokens/:id
撤销一个限定范围的 MCP 令牌。
GET/api/auth/2fa
双重验证是否已开启,以及还剩多少个恢复码。
POST/api/auth/2fa/setup
开始 TOTP 注册,返回密钥以及二维码所编码的 otpauth:// URI。不会开启 2FA。
POST/api/auth/2fa/enable
用实时验证码确认注册。返回恢复码,这是它们唯一一次以明文出现。
DELETE/api/auth/2fa
关闭双重验证。
POST/api/auth/2fa/recovery-codes
签发一组新的恢复码,旧的随即失效。
GET/api/auth/connections
列出你已授权访问的 OAuth 客户端。
DELETE/api/auth/connections/:clientId
撤销某个 OAuth 客户端的访问权限。
DELETE/api/auth/account
删除账户及其中的一切。需要当前密码。

任务

GET/api/tasks
列出任务:可按状态、优先级、项目、父任务筛选,并搜索标题/备注。
POST/api/tasks
创建任务。
POST/api/tasks/quick
根据一段原始的快速记录文本创建任务。
POST/api/tasks/import
导入来自 Todoist、TickTick、Asana、Trello 或 Notion 的 CSV 导出文件(或通用 CSV)。
GET/api/tasks/:id
获取单个任务。
PATCH/api/tasks/:id
更新任务。
DELETE/api/tasks/:id
删除任务(级联到子任务):移入回收站,而非彻底删除。
POST/api/tasks/bulk-assign
把一组任务 id(最多 200 个)分配给某个用户或 AI 智能体。
POST/api/tasks/bulk-delete
一次调用把一组任务 id 移入回收站。
POST/api/tasks/bulk-move
一次调用把一组任务 id 移入某个项目(或移出项目)。
POST/api/tasks/:id/decompose
根据一组标题把任务拆分为子任务。
POST/api/tasks/:id/approve
批准智能体提议的完成(pending_approval → done)。
POST/api/tasks/:id/reject
拒绝一个 pending_approval 任务,可附带反馈(→ in_progress)。
POST/api/tasks/:id/approve-plan
批准提议的计划(plan_proposed → in_progress)。
POST/api/tasks/:id/reject-plan
拒绝提议的计划,可附带反馈。
GET/api/tasks/:id/evidence
一次批准需要你信任的依据:标准完成进度、相对预算的开销、凭据、交付物和追踪链接。
GET/api/tasks/:id/runs
针对单个任务记录的智能体运行。
GET/api/tasks/:id/decisions
智能体在此任务上搁置待答的问题。
POST/api/tasks/:id/pause
让所有智能体停止处理这一个任务,直到恢复为止。
POST/api/tasks/:id/resume
重新启动已暂停的任务。仅限人工操作:没有对应的 MCP 工具。
POST/api/resurface
让重新浮现日期已到的任务结束等待。

回收站

GET/api/trash
列出已删除的任务,最近的在前。
POST/api/tasks/:id/restore
恢复已删除的任务(以及随它一起删除的子任务)。
DELETE/api/trash/:id
永久删除回收站中的一个任务。
DELETE/api/trash
清空回收站。

标签

GET/api/tags
列出标签。
POST/api/tags
创建标签。
DELETE/api/tags/:id
删除标签(并从所有带有它的任务上移除)。
GET/api/task-tags
列出账户中所有的任务↔标签对应关系。
POST/api/tasks/:id/tags
给任务添加标签。
DELETE/api/tasks/:id/tags/:tagId
从任务上移除标签。

依赖

GET/api/dependencies
列出账户中所有的“被阻塞于”关系。
GET/api/tasks/:id/dependencies
列出某个任务的阻塞项。
POST/api/tasks/:id/dependencies
添加阻塞项(会检查循环依赖)。
DELETE/api/tasks/:id/dependencies/:blockerId
移除阻塞项。

动态

GET/api/tasks/:id/comments
列出任务的动态(评论 + 状态历史)。
POST/api/tasks/:id/comments
添加一条评论,作者可以是你或 AI 智能体。
GET/api/activity
整个看板的动态栏:你能看到的所有任务上发生了什么,最新的在前。?limit= 限制条数。
GET/api/claude-shipped
智能体工作动态:Claude 实际交付了什么。?days=1|7|30 设置时间范围。

摘要与回顾

GET/api/digest
已逾期、今天到期、停滞以及最近完成的任务。
GET/api/review
每周回顾汇总。
GET/api/stats
完成趋势、连续天数,以及按优先级/项目划分的未完成任务分布。

目标

GET/api/goals
列出目标。
POST/api/goals
创建目标。
PATCH/api/goals/:id
更新目标。
DELETE/api/goals/:id
删除目标。
POST/api/goals/:id/breakdown
在目标下创建一个分配给 Claude 的拆解任务,即“提议步骤”操作。

记录收件箱

GET/api/capture
智能体提议、等待分拣的任务,以及接受/忽略的健康度数据。?state=pending|accepted|dismissed|all。
POST/api/capture/sweep
扫描日历中值得建议的事项,并将它们存为建议。
POST/api/capture/:id/accept
把一条建议变成真正的任务。该任务始终以设有关卡的状态开始(agent_ok: false)。
POST/api/capture/:id/dismiss
忽略一条建议,不创建任何内容。

清单整理

GET/api/grooming
陈旧任务清查:已经沉寂的未完成工作,并附上供你决断的依据。?days= 设置阈值,?limit= 限制条数。
GET/api/grooming/proposals
打包的整理提议。?state=open|resolved|all。
POST/api/grooming/items/:id/approve
应用某一项提议的处理方式。
POST/api/grooming/items/:id/dismiss
拒绝某一项,任务保持原样。

自主权与智能体

GET/api/autonomy
自主权台账:按项目和标签类别列出 agent_ok 是在哪里赢得的。只读,不授予任何权限。
POST/api/autonomy/revoke
收回某个类别的授权,把其中的任务重新置于审批关卡之后。
GET/api/agents
智能体名册:每个具名智能体做过什么。?days= 设置时间范围。仅包含计数和时间戳。
GET/api/fleet
智能体集群的实时状态:此刻谁在处理什么。
GET/api/projects/:id/rejections
某个项目中最近的拒绝记录,自主权衰减即以此为依据。
GET/api/decisions
整个看板上智能体正在等待的所有未决决策。
POST/api/decisions/:id/answer
回答一个搁置的决策,并解除其任务的阻塞。

触发器

GET/api/triggers
所有要求智能体立即开始、但仍在等待连接的未决请求,来自点击“立即运行”或 @claude 提及。
DELETE/api/triggers/:id
在触发器尚未被认领时将其撤回。
GET/api/trigger-webhook
是否为 trigger.created 设置了出站 webhook、它最近的投递结果,以及 needs_rotation:对于在投递改用密钥本身签名之前注册的 webhook,该值为 true,应替换该 webhook 以获取新密钥。
PUT/api/trigger-webhook
设置或替换 webhook URL。签名密钥仅在创建时返回一次。每次投递都带有 X-Done-Signature:以该密钥为键,对 X-Done-Timestamp 的值、一个英文句点和原始请求体计算出的十六进制 HMAC-SHA256。
DELETE/api/trigger-webhook
移除 webhook。

例行任务与预算

GET/api/routine
定时例行任务达到后即停止的上限。
PATCH/api/routine
更新这些上限。
GET/api/routine/night
今晚预算的已用开销。?since= 可覆盖默认的 12 小时窗口。

项目

GET/api/projects
列出项目。
POST/api/projects
创建项目。
PATCH/api/projects/:id
更新项目。
DELETE/api/projects/:id
删除项目。

工作区与共享

GET/api/workspaces
列出你所属的工作区。
POST/api/workspaces/:id/pause
停止一块看板:在恢复之前,不会再有智能体从中领到工作。
POST/api/workspaces/:id/resume
重新启动已停止的看板。仅限人工操作:没有对应的 MCP 工具。
GET/api/workspaces/:id/members
列出工作区的成员。
DELETE/api/workspaces/:id/members/:memberId
从工作区移除一名成员。
POST/api/invites
邀请某人加入工作区或单个项目,并通过邮件把链接发给对方。需要对方的邮箱地址。
POST/api/invites/accept
兑换邀请令牌以加入。

智能体运行

GET/api/runs
最近的智能体运行,以及状态/工具调用/token 用量的汇总统计。

日历与 Google 同步

GET/api/calendar
日历/日程设置以及 ICS 订阅令牌。
PUT/api/calendar
更新日历和可安排时段的设置。
POST/api/calendar/token
生成可订阅的 ICS 订阅令牌。
DELETE/api/calendar/token
撤销 ICS 订阅令牌。
POST/api/calendar/oauth/start
开始连接 Google Calendar,返回需要让浏览器前往的授权同意 URL。
GET/api/calendar/writeback
“规划我的一天”是否把专注时段回写到一个由 Done 管理的日历,以及是哪一个。
POST/api/calendar/writeback/sync
立即校准回写日历,而不必等到每晚的例行同步。
DELETE/api/calendar/writeback
关闭回写,并不再改动该日历。
GET/api/google/accounts
列出已连接的 Google Calendar 账户。
POST/api/google/sync
从 Google Calendar 同步忙碌时段。
DELETE/api/google/accounts/:id
断开一个 Google 账户。
GET/api/calendar/events
列出某个日期范围内已缓存的日历日程(标题、参与者)。
GET/api/calendar/matches
建议的任务↔日程匹配,可按任务、按日程或按日期范围查询。
GET/api/tasks/:id/calendar-links
列出与任务关联的日历日程。
POST/api/tasks/:id/calendar-links
把任务关联到它所对应的日历日程。
DELETE/api/tasks/:id/calendar-links/:eventId
解除任务与日历日程的关联。

通知与实时更新

GET/api/notifications
获取通知偏好设置(邮件摘要)。
PUT/api/notifications
更新通知偏好设置。
GET/api/events
任务和动态变更的服务器推送事件流。用最后一帧的 id(Last-Event-ID 或 ?cursor=)重新连接,即可重放你错过的任务变更和动态。
GET/api/export
把任务导出为 CSV 或 Markdown。
PUT/api/view-prefs
保存视图偏好(排序、分组、哪些侧栏处于展开状态)。
PUT/api/saved-views
替换账户的已保存视图。
GET/api/widget
供主屏幕小组件使用的精简看板快照。支持 ?limit=、?days=,以及用于传递设备本地“今天”的 X-Client-Date 请求头。

MCP

POST/mcp
远程 MCP 端点:基于 Streamable HTTP 的 JSON-RPC。参见“MCP 设置”。