API 参考 / changes
GET /api/v1/projects/{projectId}/activity · listProjectActivity
读取项目内近期 ChangeSet/Event 动态流(不按需求过滤),供项目概览动态区(16)用——替代 此前「借一条主线需求活动流」的权宜做法。project 由 {projectId} 路径参数确定(不走 Host); 需 view_project 权限。返回与 /changes 同形状的 ChangeSetList,客户端用 nextSeq 继续拉取。
结果集按调用者 moduleAccess 逐行过滤(B-00216)。 view_project 只是入场券,不是全量可见: 条目按其对象所属模块(需求室 / 子任务 / 甘特排期 / 缺陷·QA / 里程碑)判定归属,调用者对该模块 等级为 none 的条目不下发。此前不过滤,等于权限矩阵把模块关掉、动态流又从后门把单号、 标题与状态流转漏出去。判不出归属的对象条目一律不下发(鉴权场景猜错 = 泄漏); 项目级条目(版本 / 文档 / 项目配置 / 工作流配置 / 接管)本就只由 view_project 把关,照常下发。 因为过滤在取数之后,实际返回条数可能少于 limit——分页请以 nextSeq 为准,不要用「不足 limit」 判定已到末页。归属表见 docs/api/guides/activity.md。
鉴权:项目 API Token(Authorization: Bearer wfp_…)。详见 Agent 接入。
projectId(必填)sinceSeqlimititems(必填)items[].id(必填)items[].seq(必填)items[].actorId(必填)items[].kind(必填)items[].summary(必填)items[].createdAt(必填)items[].events(必填)items[].events[].id(必填)items[].events[].changeSetId(必填)items[].events[].type(必填)items[].events[].payload(必填)items[].events[].occurredAt(必填)nextSeq(必填)403:Problem 错误响应curl -X GET "https://你的项目.workflow.games/api/v1/projects/{projectId}/activity?sinceSeq=…&limit=…" \
-H "Authorization: Bearer wfp_…"HTTP/1.1 200
{
"items": [
{
"id": "018f3c2e-0000-7000-8000-000000000000",
"seq": 1,
"actorId": "018f3c2e-0000-7000-8000-000000000000",
"kind": "示例文本",
"summary": "一段描述文字",
"createdAt": "示例文本",
"events": [
{}
]
}
],
"nextSeq": 1
}合同真值:OpenAPI 3.1(0.1.0)。
相关:Agent 接入指南 · 使用指南 · API 参考索引