Skip to content

分享链接 API

分享链接通过一个公开、不可猜测的 URL 将单个待办分组暴露给团队外部的人——无需 Prism 账号。每个链接都携带自己的精细能力(查看、创建、编辑、完成、删除、评论、重排序)以及可选的邮箱允许列表。链接还可生成只读的徽章待办清单 SVG,便于嵌入 README 和仪表盘。

分享链接管理端点需要已认证会话和 manage_set_links 权限。/api/shared/:token 下的公开端点无需会话——访问完全由令牌和链接的能力控制。


链接对象

json
{
  "id": "link-uuid",
  "setId": "set-uuid",
  "setName": "Sprint 12",
  "token": "32charhextoken",
  "name": "Public roadmap",
  "canView": true,
  "canCreate": false,
  "canEdit": false,
  "canComplete": false,
  "canDelete": false,
  "canComment": false,
  "canReorder": false,
  "allowedEmails": "",
  "createdBy": "creator-user-id",
  "createdAt": "2026-06-01T10:00:00.000Z"
}
字段类型说明
idstring(UUID)链接的内部标识符(用于更新/删除)。
setIdstring(UUID)该链接暴露的分组。
setNamestring分组名称。仅团队级列表端点会返回。
tokenstring公开的、URL 安全的令牌。用于 /api/shared/:token
namestring链接的可读标签。
canViewboolean允许读取分组及其待办事项。默认值为 true
canCreateboolean允许通过公开 API 创建待办事项。
canEditboolean允许编辑待办事项标题。
canCompleteboolean允许切换完成状态。
canDeleteboolean允许删除待办事项。
canCommentboolean为未来的公开评论功能保留。
canReorderboolean允许重新排序待办事项。
allowedEmailsstring逗号分隔的邮箱允许列表。为空 = 不限制。
createdBystring(UUID)创建该链接的用户。
createdAtstring(ISO 8601)创建时间戳。

列出某个特定分组的所有分享链接。

需要身份验证: 是 — 团队成员

响应:

json
{ "links": [ /* 链接对象 */ ] }

列出团队中所有分组的分享链接,每条都附带其 setName。供团队级管理面板使用。

需要身份验证: 是 — 团队成员

响应:

json
{ "links": [ /* 链接对象,每条都带 setName */ ] }

POST /api/teams/:teamId/sets/:setId/share-links

为分组创建新的分享链接。token 由服务端随机生成。

需要身份验证: 是 — manage_set_links 权限

请求体(所有字段均为可选):

json
{
  "name": "Public roadmap",
  "canView": true,
  "canCreate": false,
  "canEdit": false,
  "canComplete": false,
  "canDelete": false,
  "canComment": false,
  "canReorder": false,
  "allowedEmails": "alice@example.com, bob@example.com"
}

canView 默认为 true;其他所有能力默认为 falseallowedEmails 是逗号分隔的列表——非空时,公开请求必须提供匹配的 email

响应(201):

json
{ "link": { /* 链接对象 */ } }

错误响应:

状态码error原因
403"No permission to manage set links"缺少 manage_set_links 权限。

更新链接的名称、能力或邮箱允许列表。仅更新提供的字段。

需要身份验证: 是 — manage_set_links 权限

请求体(所有字段均为可选):与创建相同的结构。

响应:

json
{ "ok": true }

错误响应:

状态码error原因
400"No updates"未提供任何可识别的字段。
403"No permission to manage set links"缺少 manage_set_links 权限。

永久删除分享链接。令牌立即失效;底层分组和待办事项不受影响。

需要身份验证: 是 — manage_set_links 权限

响应:

json
{ "ok": true }

公开端点

以下端点无需会话。授权由 token 和链接的能力标志决定。当链接设置了 allowedEmails 限制时,调用方必须传入匹配的 emailGET/DELETE 作为查询参数,POST/PATCH 放在 JSON 请求体中)。

GET /api/shared/:token

获取分享的分组、其待办事项以及该链接授予的能力。

查询参数:

参数说明
email仅当链接设置了邮箱允许列表时必填。

响应:

json
{
  "set": { "id": "set-uuid", "name": "Sprint 12" },
  "permissions": {
    "canView": true,
    "canCreate": false,
    "canEdit": false,
    "canComplete": false,
    "canDelete": false,
    "canComment": false,
    "canReorder": false
  },
  "requiresEmail": false,
  "todos": [
    {
      "id": "uuid",
      "userId": "creator-uuid",
      "parentId": null,
      "title": "First todo",
      "completed": false,
      "sortOrder": 1,
      "commentCount": 0,
      "assignees": [],
      "createdAt": "2026-06-01T10:00:00.000Z",
      "updatedAt": "2026-06-01T10:00:00.000Z"
    }
  ]
}

当链接受邮箱限制时,requiresEmailtrue,提示公开页面在授予访问前先要求输入邮箱。

错误响应:

状态码error原因
403"Access denied"requiresEmail: true邮箱限制生效但未提供 / 提供了无效邮箱。
404"Share link not found"未知令牌。
404"Set not found"底层分组已被删除。

POST /api/shared/:token/todos

通过链接创建待办事项。需要 canCreate

请求体:

json
{ "title": "New todo", "parentId": null, "email": "alice@example.com" }

公开创建的待办事项以合成用户 ID "shared" 存储。

响应(201): { "todo": { /* 待办事项对象 */ } }

错误响应: 400 标题为空;403 "Access denied""This link does not allow creating todos"404 链接或父项未找到;409 同级标题重复。


PATCH /api/shared/:token/todos/:id

更新待办事项的 titlecompletedsortOrder。每个字段需要相应的能力(canEditcanCompletecanReorder)。

请求体:

json
{ "completed": true, "email": "alice@example.com" }

响应: { "ok": true }

错误响应: 400 标题为空;403 "Access denied" 或针对被禁止字段的 "This link does not allow ..." 消息;404 链接或待办事项未找到;409 同级标题重复。


DELETE /api/shared/:token/todos/:id

删除待办事项。需要 canDelete

查询参数: email(当链接受邮箱限制时)。

响应: { "ok": true }

错误响应: 403 "Access denied""This link does not allow deleting"404 链接或待办事项未找到。


POST /api/shared/:token/todos/reorder

批量更新排序。需要 canReorder

请求体:

json
{
  "items": [
    { "id": "uuid-1", "sortOrder": 1 },
    { "id": "uuid-2", "sortOrder": 2 }
  ],
  "email": "alice@example.com"
}

响应: { "ok": true }

错误响应: 400 items 为空;403 "Access denied""This link does not allow reordering"404 链接未找到。


可嵌入的 SVG

这些端点直接渲染图片(Content-Type: image/svg+xml),并缓存 60 秒。它们始终是只读的,忽略能力标志和邮箱限制——任何持有令牌的人都能渲染它们。

GET /api/shared/:token/badge.svg

一个 shields.io 风格的进度徽章,显示 completed/total

查询参数:

参数默认值说明
styleflatflatflat-square
label分组名称左侧标签文字。
messagedone/total右侧消息文字。
color自动(按进度)右侧背景色。
labelColor#555左侧背景色。

对于未知令牌或已删除的分组,返回 404 徽章("not found")。

GET /api/shared/:token/todo-list.svg

将分组的待办事项渲染为清单图片,遵循分组的分离已完成排序和子待办嵌套。

查询参数:

参数默认值说明
themelightlightdark
title分组名称标题文字(传空可隐藏)。
width自动宽度(px),限制在 2001000
fontSize自动字号(px),限制在 1024
maxItems全部最大行数,限制在 1100
showProgresstrue设为 false 可隐藏进度摘要。
bgColor主题覆盖背景色。
textColor主题覆盖文字颜色。
checkColor主题覆盖复选框/对勾颜色。
borderColor主题覆盖边框颜色。

UI 操作流程和嵌入示例参见分享链接指南