API 参考 / me
POST /api/v1/me/notifications/read · markMyNotificationsRead
中央面「跨项目标记已读」:把当前用户在【所有有成员关系的项目】里的通知标记为已读。与 GET /me/notifications 对称,对每个成员项目在其自己的 TenantTx/RLS 内先 catch-up 投影再标记 (不跨库裸 SQL、不建聚合表),有界并发 fan-out。actor 从会话取,绝不信任前端传入的用户 id。 两种模式:all=true 标记全部未读;all=false + 非空 ids 只标记指定的几条(B-00277,中央面铃铛点开 单条即已读)。中央面拿不到「这条通知属于哪个项目」的可信上下文,故【不在中央面消歧】——同一份 id 子集下发给每个成员项目,各项目只标记确实属于它、且属于当前用户的行(RLS + user_id 双重过滤), 不属于的 id 匹配不到、无副作用。all=false 且 ids 为空时返回 422。 部分失败可见:某项目业务库不可达 / 出错时 【不静默跳过】——计入 failedProjectCount 返回,调用方据此给出可见告警并提示重试,绝不当作全部成功。
PAT 只看得到 token 绑定的那一个项目(B-00328):API Token 在哪个项目设置页创建就只对 哪个项目生效,而本端点是跨项目聚合——因此用 PAT 调用时,聚合范围收敛到 token 所属项目 (不是拒绝调用:Agent 用 PAT 读自己项目的东西是正当用法)。会话 cookie 调用方不受影响, 仍聚合全部成员项目。
鉴权:项目 API Token(Authorization: Bearer wfp_…)。详见 Agent 接入。
all(必填)idsunreadCount(必填)failedProjectCount(必填)401:Problem 错误响应422:Problem 错误响应curl -X POST "https://workflow.games/api/v1/me/notifications/read" \
-H "Authorization: Bearer wfp_…" \
-H "content-type: application/json" \
--data '{"all":true,"ids":["018f3c2e-0000-7000-8000-000000000000"]}'HTTP/1.1 200
{
"unreadCount": 1,
"failedProjectCount": 1
}合同真值:OpenAPI 3.1(0.1.0)。
相关:Agent 接入指南 · 使用指南 · API 参考索引