# 学习中心 Open API 使用指南（供 AI Agent 阅读）

你正在帮助用户操作「教育技术学研究方法 · 数智化学习中心」。用户通过 API 中心生成了自己的 AS/AK 密钥。
所有接口的**操作者恒为密钥主人本人**——常规接口不存在查询他人数据或代他人操作的接口。
**唯一例外**是教师专用的 `learning:teacher:read` 学情接口（读取他人学情，见下文」，需账号本人持有平台权限 `learning_all`）。

## 鉴权
每个请求带请求头：`X-API-ID: <AS>` 与 `X-API-SECRET: <AK>`（或 `Authorization: Bearer <AS>:<AK>`）。
AK 是敏感凭据：不要写进日志/对话原文，泄露时提示用户到 API 中心删除重建。

## 错误处理（重要）
- 401：密钥错误或被停用 → 提示用户到 API 中心检查。
- 403 + hint.need_scope：该密钥未授予所需权限 → **告诉用户缺的是什么权限**，请用户登录网页端在 API 中心勾选后重试，或直接在网页端完成。
- 403（小组接口）：用户不是该小组成员 → 说明只能操作自己所在的小组。
- 429：限速 → 等 30 秒再试，不要连续重试。
- 422：参数问题 → 按 hint 修正参数。

## 学情数据伦理
`learning:read` 只提供用户**本人**的脱敏聚合统计。不要尝试推断/请求其他学生的数据——该 scope 不具备这种能力，请直接告知用户。

## 📊 教师学情（learning:teacher:read · 读取他人数据）
这是**唯一**能读取他人学情的接口族，双重门控：① 密钥授予 `learning:teacher:read`；② 密钥主人账号本身持有平台权限 `learning_all`。缺任一项返回 403（`need_scope` / `need_perm` 会告诉你是哪一项）。
- 六个板块（全部只出聚合，不含原始日志与作答原文）：
  · `GET /learning/roster` → 名册与班级列表（构造筛选条件）
  · `GET /learning/events` → 埋点分布：按类别 / SRL 阶段 / 事件码，含逐生事件数、活跃天数、成长指数
  · `GET /learning/student?xh=` → 单人画像：成长指数、SOLO 五阶段（六源证据投票）、ENA 网络密度与趋势、课堂互动、作业证据
  · `GET /learning/solo` → 批量 SOLO 层次分布（前结构→拓展抽象）
  · `GET /learning/three-dim` → SOLO × ENA × 测评三维诊断 + 三级干预分级
  · `GET /learning/rhythm` → 学习时段画像：24 小时 / 星期分布、深夜学习占比、逐生峰值时段
- 范围参数：`banji=<班级名>` 或 `students=<学号逗号分隔>`；都不传 = 全站非工作室学生。时间用 `from` / `to`（YYYY-MM-DD）。
- 每个响应都带 `method`（理论/数据源/统计方法/计算逻辑）——**引用数据时请一并说明口径**，不要把指数当百分制、不要跨时间区间直接比较。
- ⚠️ 数据伦理：这些是**真实学生的学情记录**。仅用于教学诊断与教学改进；不要在输出中给学生贴标签、做排名羞辱或推断家庭/心理状况；群体结论要标注样本量与被排除的说明（如「课上未发布的活动不计入」）。
- ⚠️ 性能：`three-dim` 逐人跑三套聚合，一次最多 40 人；其余批量接口上限 80 人。请按班级分批，不要循环拉全站全量数据。

## 平台权限网关（perm:* · 遍历所有权限）
除上述功能接口外，还有一族 `perm:<权限键>` 范围（scope），把用户在平台的**数据权限**开放给 Agent：
- 调用方式：`ANY ${API_BASE}/perm/<权限键>/<站内api路径>`，站内路径不含 `/api` 前缀（例如 `perm:compass_manage/compass/manage`）。
- 三重门控：密钥须授予该 perm scope → 用户本人须实际持有该平台权限（实时校验，密钥放大不出账号之外的权限）→ 认证/会话/密钥/上传类路径拒绝代理。
- 每次代理等同用户本人网页操作，逐次写审计。权限键全集见 catalog 的 `perm:*` 项（GET ${API_BASE}/catalog）。

## 📓 笔记与图片（Agent 整理 → 推到学习中心）
- 上传图片：`POST ${API_BASE}/upload/image`（data=base64，≤2MB）→ 返回 url；把它填进朋友圈 `images` 数组，或在笔记正文里用 `![](url)` / `<img src=url>` 引用。
- 笔记 CRUD：`GET/POST ${API_BASE}/notes`、`GET/PATCH/DELETE ${API_BASE}/notes/{id}`；分类：`GET/POST ${API_BASE}/notes/folders`、`PATCH/DELETE ${API_BASE}/notes/folders/{id}`。
- **AI Agent 自留地**：POST /notes 不传 folder 时，笔记自动进入用户笔记中心的「🤖 AI Agent 自留地」分类（不存在会自动创建）；`ai_note` 参数写 Agent 的整理思路/依据，会以「🤖 AI 思考」块随笔记展示。
- **来源标记**：经开放接口发的朋友圈会显示「🤖 AI Agent 发布」徽标——请如实告知用户这是 Agent 代发；网页端笔记中心同样能对这些笔记增删改查。

## ⚖️ 作业互评 + 教师评价（只需 review:read / review:write）
**同一个入口同时覆盖两类任务**，不需要申请 hw_manage（那会把布置/删除/全班提交都交出去，远超评作业所需）：
- `GET /homework/reviews` → `items[]`，每项带 `type`：`peer`=学生匿名互评、`teacher`=教师实名评价（仅当你是该作业评价教师时出现）；`counts` 给待办数；
- `GET /homework/reviews/{id}` → 正文 + 指标；`as_type` 标明这次是 peer 还是 teacher；教师视角还含匿名互评结果 `reviews[]` 与进度 `progress{done,need,all_done}`；
- `POST /homework/reviews/{id}` → 按你的真实身份自动分派：
  · `peer`：`{scores:{"指标名":分数}, comment?}`（总分须 > 0）
  · `teacher`：`{scores:{...}}` 或 `{total:0~100}`，**`comment` 必填**；返回 `progress`，`all_done=true` 表示该份教师评价已齐、可生成 AI 修改建议
- 所有提交自动标记 `via=agent`，网页端显示「🤖 AI Agent 互评 / 评价」徽标；**作者姓名永不通过 API 返回**；
- 教师评价是**实名**场景（网页端会显示你的姓名），请如实告知用户这是 AI 代评。
- `POST /homework/attachments` 上传附件（`{asg_id,name,data(base64)}`，受作业附件白名单/大小限制）→ 再 `POST /homework/submissions` 带 `attaches` 关联；
- ⚠️ 匿名边界：互评接口**永不返回**作者身份；生成的互评/附件在网页端都会如实显示「AI Agent」标记，请勿向用户隐瞒。

## PostCenter 多文件托管（交互式页面）
`POST ${API_BASE}/postcenter/sites` 支持 `files=[{path,content,encoding?}]` 多文件推送：
- 相对目录：`index.html`、`assets/app.js`、`css/style.css`、`img/pic.png`……页面里用相对路径引用即可；
- `encoding`：文本（html/css/js/json/svg）默认 utf8；图片/字体用 `encoding:"base64"` 传二进制；
- 页面在 **CSP 沙箱（独立源）**内运行：JS 可执行、可访问相对目录资源，但读不到平台 Cookie/localStorage，站点之间互相隔离；
- 限额：单文件 ≤5MB、单站 ≤40 文件、总占用 ≤32MB。也可再 POST /postcenter/sites/{slug}/files 增量追加，publish 切换上下线。

## 接口列表
### GET /api/open/v1/me
- 名称：我的身份（需权限：👤 基本信息（读））
- 说明：当前密钥对应的姓名、班级、所在小组

### GET /api/open/v1/community/posts
- 名称：我的朋友圈列表（需权限：💬 我的社区（读））
- 说明：读取我发布的学习社区动态（最新 20 条）

### POST /api/open/v1/community/posts
- 名称：发布朋友圈（需权限：💬 我的社区（写））
- 说明：以我的身份发布一条学习社区动态
- 参数：
  - content（必填）：正文（≤5000 字，支持纯文本；话题用 #话题# 语法）
  - images（可选）：图片 URL 列表（可选）

### POST /api/open/v1/community/posts/{id}/comments
- 名称：评论动态（需权限：💬 我的社区（写））
- 说明：对某条动态发表评论
- 参数：
  - id（必填）：动态 id
  - content（必填）：评论内容

### POST /api/open/v1/community/posts/{id}/like
- 名称：点赞动态（需权限：💬 我的社区（写））
- 说明：给某条动态点赞（重复调用无效）
- 参数：
  - id（必填）：动态 id

### GET /api/open/v1/groups
- 名称：我的小组（需权限：👥 我的小组（读））
- 说明：我所在的小组列表

### GET /api/open/v1/groups/{id}/posts
- 名称：小组动态列表（需权限：👥 我的小组（读））
- 说明：读取该小组空间的朋友圈动态（仅限我所在的小组）
- 参数：
  - id（必填）：小组 id

### POST /api/open/v1/groups/{id}/posts
- 名称：发布小组动态（需权限：👥 我的小组（写））
- 说明：在我所在的小组空间发布动态（非成员返回 403）
- 参数：
  - id（必填）：小组 id
  - content（必填）：正文

### GET /api/open/v1/homework/assignments
- 名称：作业列表（需权限：📝 作业（读））
- 说明：当前发布给我的作业（含截止时间与提交状态）

### GET /api/open/v1/homework/submissions
- 名称：我的提交记录（需权限：📝 作业（读））
- 说明：我自己的作业提交（含状态与文档版本号）

### POST /api/open/v1/homework/submissions
- 名称：保存/提交作业（需权限：📝 作业（写））
- 说明：创建或更新我自己的作业正文（submit=true 提交，false 存草稿）
- 参数：
  - asg_id（必填）：作业 id
  - body_html（必填）：正文 HTML（或纯文本）
  - submit（可选）：true=提交（默认 false 草稿）

### GET /api/open/v1/tower/projects
- 名称：我的项目（需权限：🛫 协作塔台（读））
- 说明：我参与的协作塔台项目（含成员与任务统计）

### GET /api/open/v1/tower/projects/{pid}/tasks
- 名称：项目任务列表（需权限：🛫 协作塔台（读））
- 说明：某项目的任务树（仅限我参与的项目）
- 参数：
  - pid（必填）：项目 id

### POST /api/open/v1/tower/projects/{pid}/tasks
- 名称：创建任务（需权限：🛫 协作塔台（写））
- 说明：在我参与的项目里创建任务（我可指定负责人为项目成员）
- 参数：
  - pid（必填）：项目 id
  - title（必填）：任务标题
  - assignee（可选）：负责人学号（默认我）
  - due_date（可选）：截止日期 YYYY-MM-DD
  - notes（可选）：备注

### PATCH /api/open/v1/tower/tasks/{tid}
- 名称：更新任务（需权限：🛫 协作塔台（写））
- 说明：更新任务状态/进度说明（我必须是项目成员）
- 参数：
  - tid（必填）：任务 id
  - done（可选）：是否完成
  - notes（可选）：追加说明

### GET /api/open/v1/schedule/events
- 名称：查询日程（需权限：📅 日程（读））
- 说明：按日期区间读取我的日程
- 参数：
  - from（必填）：YYYY-MM-DD
  - to（必填）：YYYY-MM-DD

### POST /api/open/v1/schedule/events
- 名称：创建日程（需权限：📅 日程（写））
- 说明：在我的日历创建日程或待办型日程
- 参数：
  - title（必填）：标题
  - date（必填）：日期 YYYY-MM-DD
  - start（可选）：开始 HH:MM
  - end（可选）：结束 HH:MM
  - notes（可选）：备注

### DELETE /api/open/v1/schedule/events/{id}
- 名称：删除日程（需权限：📅 日程（写））
- 说明：删除我的一条日程
- 参数：
  - id（必填）：日程 id

### GET /api/open/v1/reminders
- 名称：待办列表（需权限：✅ 待办（读））
- 说明：我的待办清单与全部事项

### POST /api/open/v1/reminders/items
- 名称：创建待办（需权限：✅ 待办（写））
- 说明：在我的清单创建一条待办
- 参数：
  - title（必填）：标题
  - due_date（可选）：截止 YYYY-MM-DD
  - notes（可选）：备注

### POST /api/open/v1/reminders/items/{id}/toggle
- 名称：勾选/取消待办（需权限：✅ 待办（写））
- 说明：切换某条待办的完成状态
- 参数：
  - id（必填）：待办 id

### DELETE /api/open/v1/reminders/items/{id}
- 名称：删除待办（需权限：✅ 待办（写））
- 说明：删除我的一条待办
- 参数：
  - id（必填）：待办 id

### GET /api/open/v1/postcenter/sites
- 名称：我的托管站点列表（需权限：🌐 PostCenter（读））
- 说明：读取我自己的 PostCenter 站点（slug/标题/文件数/占用/公开地址）

### GET /api/open/v1/postcenter/sites/{slug}
- 名称：托管站点详情（需权限：🌐 PostCenter（读））
- 说明：某站点的元数据 + 完整文件树（仅限我自己的站点）
- 参数：
  - slug（必填）：站点标识

### GET /api/open/v1/postcenter/sites/{slug}/files/{path}
- 名称：读取托管文件（需权限：🌐 PostCenter（读））
- 说明：读取站点内某个文件（文本原样返回；二进制 base64 返回）
- 参数：
  - slug（必填）：站点标识
  - path（必填）：相对路径，如 assets/app.js

### POST /api/open/v1/postcenter/sites
- 名称：发布网页托管（多文件）（需权限：🌐 PostCenter（写））
- 说明：创建或更新我自己的 PostCenter 站点：支持多文件与相对目录（HTML/CSS/JS/图片/字体，页面在 CSP 沙箱内运行）。html 单文件用法向后兼容
- 参数：
  - slug（必填）：站点标识（小写字母数字连字符，2~39 位）
  - title（必填）：站点标题
  - html（可选）：单文件 HTML（写为 index.html；与 files 二选一）
  - files（可选）：多文件数组 [{path,content,encoding?}]，encoding=utf8（默认）|base64（图片/字体二进制）
  - descr（可选）：简介
  - published（可选）：默认 true 发布；false=存为草稿（公开页 403）

### POST /api/open/v1/postcenter/sites/{slug}/files
- 名称：追加/更新托管文件（需权限：🌐 PostCenter（写））
- 说明：向已有站点推送一批文件（相对目录，覆盖同名；不改动其他文件）
- 参数：
  - slug（必填）：站点标识
  - files（必填）：多文件数组 [{path,content,encoding?}]

### POST /api/open/v1/postcenter/sites/{slug}/publish
- 名称：发布/下线托管站点（需权限：🌐 PostCenter（写））
- 说明：切换站点的公开访问状态
- 参数：
  - slug（必填）：站点标识
  - published（必填）：true=发布 false=下线

### DELETE /api/open/v1/postcenter/sites/{slug}
- 名称：删除托管站点（需权限：🌐 PostCenter（写））
- 说明：删除我自己的托管站点（含全部文件，不可恢复）
- 参数：
  - slug（必填）：站点标识

### GET /api/open/v1/perm/{key}/{api-path}
- 名称：平台权限网关（遍历所有权限）（需权限：perm:*）
- 说明：把你的平台数据权限开放给 Agent：perm:<key> scope + 本人有该权限时，网关以你的身份转发站内 /api/<api-path>。路径与方法白名单见 skill.md
- 参数：
  - key（必填）：平台权限键（PERM_KEYS 之一，如 compass_manage）
  - api-path（必填）：站内 API 路径（不含 /api 前缀，如 compass/manage）

### GET /api/open/v1/homework/reviews
- 名称：我该评的全部任务（互评 + 教师评价）（需权限：⚖️ 作业互评 · 含教师评价（读））
- 说明：统一入口：type=peer 学生匿名互评 / type=teacher 教师实名评价（后者仅在你被指派为评价教师时出现）；含评分指标、我已提交的评分与进度

### GET /api/open/v1/homework/reviews/{id}
- 名称：读取待评材料（互评/教师评价通用）（需权限：⚖️ 作业互评 · 含教师评价（读））
- 说明：读取某份待评作业正文与评分指标（不含作者身份）；评价教师还会拿到匿名互评结果与自己的评价进度
- 参数：
  - id（必填）：提交 id（来自 GET /homework/reviews）

### POST /api/open/v1/homework/reviews/{id}
- 名称：提交评分（互评 / 教师评价）（需权限：⚖️ 作业互评 · 含教师评价（写））
- 说明：一个入口按你的真实身份分派：学生互评（匿名，scores）或教师评价（实名，scores 或 total + 必须 comment）；记录自动标记 AI Agent 操作
- 参数：
  - id（必填）：提交 id
  - scores（必填）：指标分映射 {指标名: 分数}
  - comment（可选）：评语（≤600 字）

### GET /api/open/v1/homework/teacher-reviews
- 名称：我的教师评价任务（需权限：👨‍🏫 教师评价（读 · 兼容别名））
- 说明：读取分配给我的教师评价任务（待评 + 已完成；仅被指派教师可用）

### GET /api/open/v1/homework/teacher-reviews/{id}
- 名称：读取教师评价材料（需权限：👨‍🏫 教师评价（读 · 兼容别名））
- 说明：读取待评作业正文、匿名互评结果与评分指标（不暴露作者姓名）
- 参数：
  - id（必填）：提交 id（来自 GET /homework/teacher-reviews）

### POST /api/open/v1/homework/teacher-reviews/{id}
- 名称：提交教师评价（需权限：👨‍🏫 教师评价（写 · 兼容别名））
- 说明：提交实名教师评价打分与评语（必须带评语；记录标记为 AI Agent 操作，网页端显示机器人标识）
- 参数：
  - id（必填）：提交 id
  - scores（可选）：逐项分映射 {指标名: 分数}（0~100，可替代 total）
  - total（可选）：总分 0~100（不传 scores 时使用）
  - comment（必填）：评价意见（≤600 字）

### POST /api/open/v1/homework/attachments
- 名称：上传作业附件（需权限：📝 作业（写））
- 说明：上传附件到指定作业（base64；受作业附件白名单与大小限制），标记为 AI Agent 上传
- 参数：
  - asg_id（必填）：作业 id
  - name（必填）：文件名（含扩展名）
  - data（必填）：文件 base64

### POST /api/open/v1/upload/image
- 名称：上传图片（需权限：🖼 图片上传）
- 说明：上传一张图片到我的图床，返回可引用的 URL（朋友圈 images / 笔记正文 <img> 均可用）。data=base64（可带 data:image/...;base64, 前缀），ext=png/jpg/jpeg/gif/webp
- 参数：
  - data（必填）：图片 base64（≤2MB）
  - ext（可选）：扩展名，默认 png

### GET /api/open/v1/notes
- 名称：笔记列表（需权限：📓 我的笔记（读））
- 说明：读取我的笔记分类与笔记（标题+摘要；?folder=<分类id> 可筛选）
- 参数：
  - folder（可选）：分类 id（可选）

### GET /api/open/v1/notes/{id}
- 名称：读取笔记（需权限：📓 我的笔记（读））
- 说明：读取某篇笔记全文（含 AI 思考块）
- 参数：
  - id（必填）：笔记 id

### POST /api/open/v1/notes
- 名称：创建笔记（需权限：📓 我的笔记（写））
- 说明：创建一篇笔记（Agent 整理的笔记默认进入「🤖 AI Agent 自留地」分类，并显示 AI Agent 标记）。正文支持 Markdown，图片用 upload/image 的 URL 以 <img> 或 ![]() 引用
- 参数：
  - title（必填）：标题（≤120 字）
  - content（可选）：正文 Markdown
  - ai_note（可选）：AI 思考（Agent 的整理思路/依据，会以「🤖 AI 思考」块展示）
  - folder（可选）：分类名或分类 id；缺省=AI Agent 自留地（不存在自动创建）

### PATCH /api/open/v1/notes/{id}
- 名称：更新笔记（需权限：📓 我的笔记（写））
- 说明：更新我的一篇笔记（标题/正文/AI 思考/分类，均可选，只传要改的）
- 参数：
  - id（必填）：笔记 id
  - title（可选）：标题
  - content（可选）：正文
  - ai_note（可选）：AI 思考
  - folder（可选）：分类名或 id

### DELETE /api/open/v1/notes/{id}
- 名称：删除笔记（需权限：📓 我的笔记（写））
- 说明：删除我的一篇笔记（可恢复：网页端回收站语义为软删除）
- 参数：
  - id（必填）：笔记 id

### GET /api/open/v1/notes/folders
- 名称：笔记分类列表（需权限：📓 我的笔记（读））
- 说明：读取我的笔记分类（含每类笔记数）

### POST /api/open/v1/notes/folders
- 名称：创建笔记分类（需权限：📓 我的笔记（写））
- 说明：新建一个笔记分类
- 参数：
  - name（必填）：分类名（≤30 字）

### PATCH /api/open/v1/notes/folders/{id}
- 名称：重命名笔记分类（需权限：📓 我的笔记（写））
- 说明：重命名我的一个分类
- 参数：
  - id（必填）：分类 id
  - name（必填）：新名称

### DELETE /api/open/v1/notes/folders/{id}
- 名称：删除笔记分类（需权限：📓 我的笔记（写））
- 说明：删除分类（其下笔记移回未分类）
- 参数：
  - id（必填）：分类 id

### GET /api/open/v1/learning/summary
- 名称：学情摘要（脱敏）（需权限：📊 学情数据（读·脱敏））
- 说明：我自己的学习行为聚合：近 7/28 天三环计数、连续活跃天数、行为类型占比。⚠️ 无原始日志、无精确时间戳、无他人数据

### GET /api/open/v1/learning/roster
- 名称：学情名册（教师）（需权限：📊 学情数据（教师 · 全班/指定学生））
- 说明：读取全站名册（学号/姓名/班级）与班级列表，用于构造后续查询的筛选条件

### GET /api/open/v1/learning/events
- 名称：学情埋点总览（教师）（需权限：📊 学情数据（教师 · 全班/指定学生））
- 说明：行为埋点聚合：按类别（导航/资源/创作/社会/AI/监控）、SRL 阶段（预备/执行/反思）与事件码的分布，含逐生事件数/活跃天数/成长指数。⚠️ 仅聚合计数，不含原始日志与对象自由文本
- 参数：
  - from（可选）：起始日期 YYYY-MM-DD（缺省=不限）
  - to（可选）：结束日期 YYYY-MM-DD（缺省=不限）
  - banji（可选）：班级名（与 students 二选一，缺省=全站非工作室学生）
  - students（可选）：学号，逗号分隔（最多 80 人）

### GET /api/open/v1/learning/student
- 名称：个人学情画像（教师）（需权限：📊 学情数据（教师 · 全班/指定学生））
- 说明：逐个学生读取：成长指数与基线、SOLO 五阶段判定（含六源证据投票）、ENA 认知网络密度与趋势、课堂互动参与、作业证据。⚠️ 需传学号，仅返回聚合口径
- 参数：
  - xh（必填）：学生学号
  - from（可选）：起始日期 YYYY-MM-DD（作用于 ENA 与课堂互动）
  - to（可选）：结束日期 YYYY-MM-DD

### GET /api/open/v1/learning/solo
- 名称：SOLO 层次分布（教师）（需权限：📊 学情数据（教师 · 全班/指定学生））
- 说明：批量判定并统计 SOLO 五阶段分布（前结构/单点/多点/关联/拓展抽象），逐生给出层次与置信度
- 参数：
  - banji（可选）：班级名（缺省=全站非工作室学生）
  - students（可选）：学号，逗号分隔（最多 80 人）

### GET /api/open/v1/learning/three-dim
- 名称：三维认知诊断（教师）（需权限：📊 学情数据（教师 · 全班/指定学生））
- 说明：SOLO × ENA × 测评三维认知诊断与三级干预分级（口径与「认知罗盘 · 全站学生诊断」一致）
- 参数：
  - banji（可选）：班级名（缺省=全站非工作室学生）
  - students（可选）：学号，逗号分隔（最多 40 人）

### GET /api/open/v1/learning/rhythm
- 名称：学习时段画像（教师）（需权限：📊 学情数据（教师 · 全班/指定学生））
- 说明：行为发生时刻的 24 小时 / 星期分布、四时段占比与深夜学习比例，逐生给出峰值时段（用于观察作息与负担）
- 参数：
  - from（可选）：起始日期 YYYY-MM-DD（缺省=不限）
  - to（可选）：结束日期 YYYY-MM-DD（缺省=不限）
  - banji（可选）：班级名
  - students（可选）：学号，逗号分隔（最多 80 人）

## 示例
```bash
curl -H "X-API-ID: $AS" -H "X-API-SECRET: $AK" \
  -H "Content-Type: application/json" \
  -d '{"content":"今天完成了研究设计初稿 #学习打卡#"}' \
  /api/open/v1/community/posts
```