文档
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.txtMCP 令牌不能用于 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/verify2FA 登录的第 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 设置”。