Rote API 接口速览(v2)

July 6, 2026 · View on GitHub

本文档为精简版,仅保留 v2 接口与必要说明;所有 v1/兼容与冗长示例已移除。

基础信息

  • 基础 URL: /v2/api
  • 响应格式: JSON
  • 认证方式: 会话/JWT/API Key(按接口要求)

标准响应

{ "code": 0, "message": "success", "data": null }

接口一览

1) 系统

路径方法认证描述
/healthGET健康检查

2) 认证

路径方法认证描述
/auth/registerPOST用户注册
/auth/loginPOST用户登录
/auth/passwordPUT登录修改密码(仅本地账户)
/auth/refreshPOST刷新 Token
/auth/oauth/:providerGET发起 OAuth 授权(动态路由,支持多个提供商)
/auth/oauth/:provider/callbackGET/POSTOAuth 回调处理(根据提供商决定 GET 或 POST)
/auth/oauth/:provider/bindGET登录绑定 OAuth 账户到现有账户
/auth/oauth/:provider/bindDELETE登录解绑 OAuth 账户
/auth/oauth/:provider/bind/mergePOST登录确认合并账户并绑定 OAuth

3) 用户

路径方法认证描述
/users/:usernameGET获取用户信息
/users/me/profileGET登录获取我的资料
/users/me/profilePUT登录更新我的资料
/users/me/settingsGET登录获取我的设置
/users/me/settingsPUT登录更新我的设置
/users/me/tagsGET登录获取我的标签
/users/me/heatmapGET登录活跃热力图
/users/me/statisticsGET登录统计信息
/users/me/exportGET登录导出数据
/users/meDELETE登录删除账户

4) RSS

路径方法认证描述
/rss/:usernameGET用户公开笔记 RSS
/rss/publicGET全站公开笔记 RSS

5) 笔记

路径方法认证描述
/notesPOST登录创建笔记
/notesGET登录我的笔记列表
/notes/batchPOST登录批量获取笔记
/notes/:idGET动态笔记详情(公开/私有由服务端控制)
/notes/:idPUT登录更新笔记
/notes/:idDELETE登录删除笔记
/notes/randomGET随机笔记
/notes/publicGET所有公开笔记
/notes/users/:usernameGET指定用户公开笔记

查询参数(通用):skip, limit, archived, tag

6) 搜索

路径方法认证描述
/notes/searchGET登录搜索我的笔记
/notes/search/publicGET搜索公开笔记
/notes/search/users/:usernameGET搜索指定用户公开笔记

参数:keyword(必填),可选 skip/limit/archived/tag

7) Memory

路径方法认证描述
/ai/statusGET登录获取 AI/向量能力启用状态
/ai/searchPOST登录语义搜索我的 Rote 内容
/ai/related-notesPOST登录查找与笔记/文章相关的内容
/ai/chatPOST登录基于 Rote 上下文对话
/ai/chat/streamPOST登录基于 Rote 上下文流式对话
/ai/providersGET管理获取内置模型供应商预设
/ai/vector/statusGET管理检测 pgvector 状态
/ai/vector/enablePOST管理创建 pgvector extension/索引
/ai/index/backfillPOST管理为存量数据创建向量任务
/ai/index/processPOST管理立即处理一批向量任务
/ai/index/retry-failedPOST管理重试失败的向量任务
/ai/index/pausePOST管理暂停后台向量任务
/ai/index/resumePOST管理恢复后台向量任务
/ai/index/clearPOST管理清空向量索引和任务

AI 与向量存储默认关闭,需要管理员在后台配置供应商并显式启用。 /ai/status 不返回供应商配置或 API Key。/ai/related-notes 可传 sourceTypes 限制返回 rotearticle/ai/search 支持 timeRangetagssemanticScopesourceTypesstatearchived 等过滤参数;semanticScope 会增强语义检索,不作为数据库硬过滤。 /ai/chat/stream 返回 text/event-stream,事件包括 thinkingplanclarificationsourcesdeltadoneerrorthinking 可带 phase: "planning" | "answer",用于折叠展示模型思考过程;正式回答仍由 delta 输出。当收到 clarification 时,客户端可把返回的 pendingPlan 连同用户补充回答再次提交到 /ai/chat/stream

8) 反应(Reactions)

路径方法认证描述
/reactionsPOST添加反应(支持登录/匿名)
/reactions/:roteid/:typeDELETE删除反应(匿名需 visitorId

字段:type(emoji), roteid, visitorId?, visitorInfo?, metadata?

9) 通知

路径方法认证描述
/notificationsPOST登录创建通知

10) 订阅

路径方法认证描述
/subscriptionsPOST登录添加订阅
/subscriptionsGET登录获取我的订阅
/subscriptions/test-allPOST登录测试所有端点
/subscriptions/:idPUT登录更新订阅
/subscriptions/:idDELETE登录删除订阅
/subscriptions/:id/notifyPOST触发通知

11) API Keys

路径方法认证描述
/api-keysPOST登录生成 API Key
/api-keysGET登录列出 API Key
/api-keys/:idPUT登录更新 API Key
/api-keys/:idDELETE登录删除 API Key

11) 附件

路径方法认证描述
/attachmentsPOST登录服务器中转上传(兼容)
/attachmentsDELETE登录批量删除
/attachments/:idDELETE登录删除单个
/attachments/presignPOST登录获取直传预签名链接
/attachments/finalizePOST登录直传完成回调入库
/attachments/sortPUT登录更新附件排序

直传要点:仅允许 users/<uid>/... 命名空间;finalize 幂等;优先使用直传。

12) 变更记录(Change Log)

路径方法认证描述
/changes/origin/:originidGET登录按原始笔记 ID 查询
/changes/rote/:roteidGET登录按当前笔记 ID 查询
/changes/userGET登录我的全部变更
/changes/afterGET登录指定时间之后的变更

字段:originid, roteid?, action(CREATE/UPDATE/DELETE), userid, createdAt

13) OpenKey(API Key 访问)

路径方法认证描述
/openkey/notes/createGETAPI Key创建笔记(兼容)
/openkey/notesPOSTAPI Key创建笔记
/openkey/notesGETAPI Key获取笔记列表
/openkey/notes/searchGETAPI Key搜索笔记
/openkey/notes/:idGETAPI Key获取单篇笔记详情
/openkey/notes/:idPUTAPI Key修改单篇笔记
/openkey/notes/:idDELETEAPI Key删除单篇笔记
/openkey/articlesPOSTAPI Key创建文章(需要 SENDARTICLE)

鉴权:通过 openkey 传入(推荐)

  • GET:?openkey=<API_KEY>
  • POST:请求体中包含 {"openkey":"<API_KEY>"}

14) 站点

路径方法认证描述
/site/sitemapGET标准 XML Sitemap
/site/statusGET站点状态
/site/config-statusGET系统配置状态(引导)

15) 管理端(Admin)

路径方法认证描述
/admin/statusGET初始化状态与检查项
/admin/setupPOST初始化(安装向导)
/admin/settingsGET管理员获取配置(可分组)
/admin/settingsPUT管理员更新配置(系统配置需超管)
/admin/settings/testPOST初始化后需管理员测试配置连接
/admin/settings/regenerate-keysPOST超级管理员重生成安全密钥
/admin/settings/detect-urlsGET管理员自动检测 API/前端 URL
/admin/settings/update-urlsPOST管理员更新站点 URL 配置
/admin/refresh-cachePOST刷新配置缓存(测试)
/admin/usersGET管理员用户列表(分页/筛选/搜索)
/admin/users/:userIdGET管理员用户详情
/admin/users/:userId/rolePUT超级管理员更新用户角色
/admin/users/:userId/certificationPUT管理员认证用户
/admin/users/:userId/certificationDELETE管理员取消用户认证
/admin/users/:userIdDELETE超级管理员删除用户
/admin/roles/statsGET管理员角色统计

通过 Authorization: Bearer <accessToken> 鉴权,并基于 role 判定权限。

请求体结构参考(精简)

以下为常用可写接口的请求体示例(字段后缀 ? 表示可选)。

认证

// POST /v2/api/auth/register
{ "username": "john", "email": "john@example.com", "password": "P@ssw0rd" }

// POST /v2/api/auth/login
{ "username": "john", "password": "P@ssw0rd" }

// PUT /v2/api/auth/password
{ "oldpassword": "old", "newpassword": "newStrongPass" }

注意

  • OAuth 用户(通过第三方登录)不能使用密码登录,也不能修改密码
  • OAuth 登录流程:访问 /auth/oauth/:provider 发起授权(:provider 为提供商名称,如 githubapple),完成后重定向到回调地址
  • 支持的提供商:GitHub、Apple 等(可通过配置启用)
  • 账户绑定:已登录的用户可以将 OAuth 账户绑定到现有账户,实现多种登录方式
  • 账户合并:如果 OAuth 账户已被其他用户使用,可以合并账户,将源账户的数据迁移到目标账户
  • 解绑限制:如果用户没有设置密码且是纯 OAuth 用户,则不允许解绑,避免账户被锁定

笔记

// POST /v2/api/notes
{ "title": "新笔记", "content": "内容", "tags": ["tag1"], "state": "public" }

// PUT /v2/api/notes/:id
{ "title?": "更新标题", "content?": "更新内容", "tags?": ["tag1"], "state?": "private", "archived?": false }

反应(Reactions)

// POST /v2/api/reactions
{
  "type": "👍",
  "roteid": "<note-id>",
  "visitorId?": "fp_xxx",
  "visitorInfo?": { "browser": "Chrome" },
  "metadata?": { "source": "web" }
}

通知

// POST /v2/api/notifications
{
  "title": "更新通知",
  "body": "你有一条新消息",
  "target": { "type": "user", "id": "<user-id>" }
}

订阅

// POST /v2/api/subscriptions
{ "endpoint": "https://push.example", "keys": { "p256dh": "...", "auth": "..." }, "platform?": "web" }

// PUT /v2/api/subscriptions/:id
{ "enabled?": true, "label?": "我的订阅" }

订阅说明

  • 一个用户可以有多个订阅(不同设备/浏览器)
  • 每个 endpoint 只能有一个订阅(唯一约束)
  • endpoint 已存在时,会自动更新现有订阅而不是创建新订阅
  • 错误响应:
    • 409: "Subscription endpoint already exists" - endpoint 已存在
    • 409: "Username or email already exists" - 用户相关唯一约束错误

API Keys

// POST /v2/api/api-keys
{}

// PUT /v2/api/api-keys/:id
{ "permissions": ["SENDROTE", "GETROTE"] }

附件直传

// POST /v2/api/attachments/presign
{ "files": [ { "filename": "a.jpg", "contentType": "image/jpeg", "size": 12345 } ] }

// POST /v2/api/attachments/finalize
{ "noteId?": "<note-id>", "attachments": [ { "uuid": "<uuid>", "originalKey": "users/<uid>/uploads/<uuid>.jpg", "compressedKey?": "users/<uid>/compressed/<uuid>.webp", "size": 12345, "mimetype": "image/jpeg", "hash?": "sha256" } ] }

// PUT /v2/api/attachments/sort
{ "roteId": "<note-id>", "attachmentIds": ["att-1", "att-2"] }

OpenKey(API Key)

// POST /v2/api/openkey/notes
{
  "title": "来自 API Key",
  "content": "...",
  "tags?": ["api"],
  "state?": "public"
}

管理端设置

// PUT /v2/api/admin/settings
{ "group": "site", "values": { "siteUrl": "https://example.com", "apiUrl": "https://api.example.com" } }

// POST /v2/api/admin/settings/test
{ "targets": ["database", "r2", "webpush"] }

// POST /v2/api/admin/settings/update-urls
{ "siteUrl": "https://example.com", "apiUrl": "https://api.example.com" }

错误码(精简)

HTTP业务码描述
2000成功
400400请求参数错误
401401未授权/需要登录
403403权限不足
404404资源不存在
500500服务器内部错误

最后更新:2025-12-02