开始使用
鉴权与权限
REST API 只认一种凭证:工作区管理员在设置页签发的长期 Bearer 凭证。它代表整个工作区,权限在签发时就钉死 —— scope 决定能调哪些端点,发布落点决定内容最远能推到哪一档。
怎么带凭证
Authorization: Bearer popkit_it_••••••••每个请求都带这个头。凭证以 popkit_it_ 开头;没带、拼错、已停用、已过期都回 401(unauthenticated),并带 WWW-Authenticate: Bearer realm="popkit-api"。不要把凭证放进前端代码、公开仓库或 URL。
OAuth 访问令牌(AI 客户端经授权页拿到的那种)在这里不能用,它们属于 MCP 端点。两条路的能力一致,只是面向的调用方不同。
签发、到期与撤销
- 位置:popkit → 设置 → 「接入外部系统」 → 「长期凭证」。只有工作区管理员能签发;个人空间由本人签发。
- 签发时选:名称、scope、发布落点、有效期(长期有效或 N 天)。密钥只在签发那一刻显示一次,库里只存哈希,丢了只能吊销重发。
- 撤销 / 停用即时生效:每个请求都重新查库校验,下一次调用就 401。设了到期的凭证会在到期前 7 天 / 1 天提醒管理员。
- 凭证归因到签发它的人:他离开工作区、被移出或被封禁,凭证随之失效(
workspace_not_found)。 - 审计:所有经凭证发生的写动作(发布、排期、改期、回复、送审)在工作区审计里记为「经外部系统 <凭证名>」,并按凭证落调用流水。
scope 与端点
凭证缺少端点要求的 scope 时回 403(forbidden,params.scope 说明缺哪个)。签发者的工作区角色同样要允许该动作 —— scope 只能收窄,不能越过角色矩阵。
| scope | 含义 | 端点 |
|---|---|---|
| workspace:read | 工作区信息、成员数与配额余量 | GET /workspace |
| accounts:read | 已连接的社交账号与授权状态 | GET /accounts |
| posts:read | 草稿、排期与发布记录 | GET /posts、GET /posts/{postId}、POST /posts/precheck |
| posts:write | 创建和修改草稿、上传媒体 | POST /posts、PATCH /posts/{postId}、POST /posts/{postId}/reschedule、POST /posts/{postId}/cover-suggestions、POST /posts/{postId}/cover、POST /media |
| approvals:write | 把草稿提交审批 | POST /posts/{postId}/submit |
| schedule:write | 安排定时发布 | POST /posts、PATCH /posts/{postId}、POST /posts/{postId}/reschedule、POST /posts/{postId}/publish |
| publish:execute | 立即对外发布内容 | POST /posts、PATCH /posts/{postId}、POST /posts/{postId}/confirm、POST /posts/{postId}/publish |
| comments:read | 查看已发布内容收到的评论 | GET /comments |
| comments:write | 以工作区的社交账号回复评论 | POST /comments/{commentId}/replies |
| analytics:read | 数据指标与趋势 | GET /analytics/summary |
| ideas:read | 查看选题库 | GET /ideas |
| ideas:write | 往选题库写入选题 | POST /ideas、PATCH /ideas/{ideaId} |
发布落点(三档)
写内容的端点用 action 决定落点:draft 存草稿、schedule 定时、publish 立即外发。凭证签发时逐档勾选,默认一档都不给;请求的档位不在白名单里回 403(params.action)。
| 落点 | 需要的 scope | 含义与护栏 |
|---|---|---|
| draft | posts:write | 只落草稿,预检只提示不拦。 |
| schedule | schedule:write | 到点由跑批发出;走月配额与硬预检。 |
| publish | publish:execute | 立即外发;硬预检 + 频控 + 每凭证日上限(默认 20 条/天,可按凭证调)。 |
长期凭证默认是预授权模式(无人值守,action: "publish" 一步到位)。若凭证被设为两步确认,新建 / 修改会先落草稿并回 confirm.token,十分钟内调 确认发布 才真正外发。响应里有没有 confirm 字段就是判断依据。
安全建议
- 一个系统一枚凭证,按最小权限勾 scope;读数据的报表脚本不要拿带发布权的钥匙。
- 把凭证放在密钥管理 / 环境变量里,轮换时先签新的再停旧的。
- 写操作永远带
Idempotency-Key:网络重试不会变成重复发布。 - 看到
needs_reauth/no_account,是账号侧要人处理,不要用程序反复重试。