mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-10-31 20:55:35 +08:00
- 内置工具与资源改为 AutoBangumiMCP(MCPServer 子类)上的 @mcp.tool() / @mcp.resource(),参数 schema 由类型注解生成,工具名、描述与参数名不变; 结果仍是一段 JSON 文本,异常返回 is_error 结果 - 插件工具与资源在子类的 list / call / read 中追加与分发,熔断与超时逻辑 不变;mcp 2 不再校验参数,插件工具按 input_schema 用 jsonschema 校验, 不合法的参数不计入熔断 - 传输只保留 Streamable HTTP,以路由挂载在 /mcp(mount 会把 /mcp 重定向到 /mcp/),删除 /mcp/sse 与 /mcp/messages/;会话管理器在应用 lifespan 中运行; 关闭 DNS rebinding 防护,访问控制仍由 IP 白名单与令牌负责 - 更新 MCP 文档、e2e 用例与 4.0 更新日志的破坏性变更
222 lines
13 KiB
Markdown
222 lines
13 KiB
Markdown
# REST API 参考
|
||
|
||
AutoBangumi 在 `/api/v1` 下提供 REST API。WebUI 使用的也是这套接口。
|
||
|
||
**基础 URL:** `http://your-host:7892/api/v1`
|
||
|
||
**交互式文档:** 本页只列出端点和用途。请求与响应的字段以运行中实例的 `http://your-host:7892/docs`(Swagger UI,由 FastAPI 根据代码生成)为准。插件路由不出现在 `/docs` 中。
|
||
|
||
## 认证
|
||
|
||
AB 接受两种凭据:
|
||
|
||
- **浏览器会话**:`POST /auth/login` 以表单字段 `username`、`password` 登录,成功后 AB 设置 HttpOnly Cookie `token`。WebUI 使用这种方式。
|
||
- **API 令牌**:在 设置 → 用户与访问控制 → API 令牌 中创建 `scope=api` 的令牌(或调用 `POST /tokens`),明文只显示一次。请求时带上 `Authorization: Bearer <令牌>`。
|
||
|
||
```bash
|
||
curl -H "Authorization: Bearer $AB_TOKEN" http://your-host:7892/api/v1/status
|
||
```
|
||
|
||
- 请求带 `Authorization` 头时,AB 只校验该令牌,不再看 Cookie。
|
||
- 未认证或凭据无效返回 `401`。
|
||
- 账户管理端点(`/auth/update`、`/users`、`/tokens`、Passkey 的注册与管理)只接受浏览器会话,用 API 令牌访问返回 `403`。
|
||
- 以下端点不需要认证:`/auth/login`、`/passkey/auth/*`、设置向导 `/setup/*`(`GET /setup/status` 始终可用,其它端点在设置完成后返回 `403`)和根路径的 `/health`。
|
||
- `/auth/refresh_token` 与 `/auth/logout` 不看 `Authorization` 头,只使用会话 Cookie。`refresh_token` 没有有效 Cookie 时返回 `401`。登录与 Passkey 登录受 `security.login_whitelist` 限制。
|
||
- 本地开发时,设置环境变量 `AB_DEV_NO_AUTH=1` 可跳过全部认证。不要在生产环境中设置它。
|
||
|
||
## 认证与账户
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `POST` | `/auth/login` | 用户名和密码登录,设置会话 Cookie |
|
||
| `POST` | `/auth/refresh_token` | 延长当前会话 |
|
||
| `POST` | `/auth/logout` | 注销当前会话并清除 Cookie |
|
||
| `GET` | `/auth/me` | 当前用户 |
|
||
| `POST` | `/auth/update` | 修改当前账户,并轮换它的全部会话 |
|
||
| `GET` / `POST` | `/users` | 列出 / 创建用户 |
|
||
| `PATCH` / `DELETE` | `/users/{user_id}` | 修改 / 删除用户 |
|
||
| `GET` / `POST` | `/tokens` | 列出 / 创建 API 令牌(`scope` 为 `api` 或 `mcp`,可设 `expires_at`) |
|
||
| `DELETE` | `/tokens/{token_id}` | 吊销令牌 |
|
||
| `POST` | `/passkey/register/options`、`/passkey/register/verify` | 注册 Passkey |
|
||
| `POST` | `/passkey/auth/options`、`/passkey/auth/verify` | 用 Passkey 登录 |
|
||
| `GET` | `/passkey/list` | 列出当前用户的 Passkey |
|
||
| `POST` | `/passkey/delete` | 删除 Passkey |
|
||
|
||
## 程序
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `GET` | `/status` | 版本、运行状态、是否首次运行 |
|
||
| `POST` | `/start`、`/stop`、`/restart` | 启动 / 停止 / 重启后台任务 |
|
||
| `POST` | `/shutdown` | 关闭程序 |
|
||
| `GET` | `/check/downloader` | 检查默认下载器是否可用 |
|
||
| `GET` | `/log` | 读取日志 |
|
||
| `POST` | `/log/clear` | 清空日志 |
|
||
| `GET` | `/update/check` | 查询最新版本与在线更新状态 |
|
||
| `POST` | `/update/apply` | 下载并应用最新更新,成功后重启 |
|
||
| `POST` | `/update/rollback` | 回滚到上一个更新版本,没有备份时回到镜像自带版本 |
|
||
| `GET` | `/health`(根路径,不在 `/api/v1` 下) | 存活探针,总是返回 `200`:`{"status", "version", "db_ok"}` |
|
||
|
||
## 配置
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `GET` | `/config/get` | 当前配置,秘密字段已掩码 |
|
||
| `PATCH` | `/config/update` | 保存并重新加载配置;收到掩码的秘密字段保留原值 |
|
||
| `POST` | `/config/llm/models` | 列出所选 LLM 提供商的可用模型 |
|
||
| `GET` | `/config/llm/providers` | LLM 提供商列表 |
|
||
| `POST` | `/config/llm/providers/{provider_id}/install` | 安装 LLM 提供商插件 |
|
||
| `DELETE` | `/config/llm/providers/{provider_id}` | 卸载 LLM 提供商插件 |
|
||
| `POST` | `/config/llm/providers/{provider_id}/auth/begin`、`/auth/complete` | 订阅类提供商的授权流程 |
|
||
| `GET` | `/config/llm/providers/{provider_id}/auth/status` | 授权状态 |
|
||
| `DELETE` | `/config/llm/providers/{provider_id}/auth` | 断开授权 |
|
||
|
||
## 番剧
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `GET` | `/bangumi/get/all` | 全部番剧规则 |
|
||
| `GET` | `/bangumi/get/{bangumi_id}` | 单个规则 |
|
||
| `PATCH` | `/bangumi/update/{bangumi_id}` | 修改规则 |
|
||
| `DELETE` | `/bangumi/delete/{bangumi_id}` | 删除规则 |
|
||
| `POST` | `/bangumi/delete/many` | 批量删除 |
|
||
| `POST` | `/bangumi/disable/{bangumi_id}`、`/bangumi/enable/{bangumi_id}` | 停用 / 启用规则 |
|
||
| `POST` | `/bangumi/disable/many` | 批量停用 |
|
||
| `PATCH` | `/bangumi/archive/{bangumi_id}`、`/bangumi/unarchive/{bangumi_id}` | 归档 / 取消归档 |
|
||
| `PATCH` | `/bangumi/{bangumi_id}/weekday` | 手动设置放送星期 |
|
||
| `GET` | `/bangumi/refresh/poster/all`、`/bangumi/refresh/poster/{bangumi_id}` | 刷新海报 |
|
||
| `GET` | `/bangumi/refresh/calendar` | 刷新放送日历 |
|
||
| `GET` | `/bangumi/refresh/metadata` | 刷新 TMDB 元数据,并自动归档已完结的番剧 |
|
||
| `POST` | `/bangumi/reset/all` | 删除全部规则 |
|
||
| `GET` | `/bangumi/needs-review` | 需要确认集数偏移的番剧 |
|
||
| `GET` | `/bangumi/suggest-offset/{bangumi_id}` | 根据 TMDB 集数建议偏移 |
|
||
| `POST` | `/bangumi/detect-offset` | 检测季度 / 集数与 TMDB 不一致 |
|
||
| `POST` | `/bangumi/apply-offset/{bangumi_id}`、`/bangumi/apply-offset/many` | 应用建议的偏移并触发一次重命名 |
|
||
| `POST` | `/bangumi/dismiss-review/{bangumi_id}` | 清除「待确认」标记 |
|
||
| `GET` / `DELETE` | `/bangumi/{bangumi_id}/torrents` | 列出 / 删除该番剧的种子记录 |
|
||
| `DELETE` | `/bangumi/{bangumi_id}/torrents/{torrent_id}` | 删除一条种子记录 |
|
||
| `GET` / `DELETE` | `/bangumi/torrents/orphans` | 列出 / 删除不属于任何番剧的种子记录 |
|
||
| `GET` | `/bangumi/torrents/orphans/count` | 孤立种子记录的数量 |
|
||
| `DELETE` | `/bangumi/torrents/orphans/{torrent_id}` | 删除一条孤立种子记录 |
|
||
|
||
## 电影
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `GET` | `/movie/get/all`、`/movie/get/{movie_id}` | 全部 / 单个电影规则 |
|
||
| `PATCH` | `/movie/update/{movie_id}` | 修改 |
|
||
| `DELETE` | `/movie/delete/{movie_id}` | 删除 |
|
||
| `DELETE` | `/movie/disable/{movie_id}` | 停用 |
|
||
| `GET` | `/movie/enable/{movie_id}` | 启用 |
|
||
|
||
## RSS 订阅
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `GET` | `/rss` | 全部订阅 |
|
||
| `POST` | `/rss/add` | 添加订阅 |
|
||
| `PATCH` | `/rss/update/{rss_id}` | 修改订阅 |
|
||
| `DELETE` | `/rss/delete/{rss_id}` | 删除订阅 |
|
||
| `POST` | `/rss/delete/many` | 批量删除 |
|
||
| `PATCH` | `/rss/disable/{rss_id}` | 停用 |
|
||
| `POST` | `/rss/disable/many`、`/rss/enable/many` | 批量停用 / 启用 |
|
||
| `POST` | `/rss/refresh/all`、`/rss/refresh/{rss_id}` | 立即刷新 |
|
||
| `GET` | `/rss/torrent/{rss_id}` | 该订阅的种子 |
|
||
| `POST` | `/rss/analysis` | 解析一个 RSS 链接,返回识别出的番剧 |
|
||
| `POST` | `/rss/collect` | 下载整季(收集) |
|
||
| `POST` | `/rss/subscribe` | 订阅 |
|
||
|
||
## 搜索
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `GET` | `/search/bangumi?site=<站点>&keywords=<关键词>` | Server-Sent Events,逐条推送搜索结果;多个关键词以空格分隔 |
|
||
| `GET` | `/search/provider` | 可用的搜索站点(含插件提供的站点) |
|
||
| `GET` / `PUT` | `/search/provider/config` | 读取 / 保存用户配置的搜索站点 |
|
||
|
||
## 下载器
|
||
|
||
AB 4.0 可以配置多个下载器实例(`plugins.instances`)。种子列表合并所有实例,每条带 `downloader_id`。
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `GET` | `/downloader/instances` | 下载器实例:`{"default": <默认实例 id>, "instances": [{"id", "provider"}]}` |
|
||
| `GET` | `/downloader/torrents` | 所有实例的种子;不可用的实例跳过 |
|
||
| `POST` | `/downloader/torrents/pause`、`/resume`、`/delete` | 暂停 / 恢复 / 删除种子 |
|
||
| `POST` | `/downloader/torrents/tag` | 给种子打番剧 id 标签 |
|
||
| `POST` | `/downloader/torrents/tag/auto` | 按名称与路径为未打标签的种子自动打标签 |
|
||
| `GET` | `/downloader/rename-conflicts` | 等待用户处理的重命名冲突 |
|
||
| `POST` | `/downloader/rename-conflicts/{operation_id}/retry` | 清除一条冲突,下一轮重命名时重新检查 |
|
||
|
||
## 通知中心
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `GET` / `DELETE` | `/notification/messages` | 列出 / 清空站内通知 |
|
||
| `GET` | `/notification/messages/unread-count` | 未读数量 |
|
||
| `POST` | `/notification/messages/read-all` | 全部标为已读 |
|
||
| `POST` | `/notification/messages/{message_id}/read` | 标为已读 |
|
||
| `DELETE` | `/notification/messages/{message_id}` | 删除一条 |
|
||
| `POST` | `/notification/test` | 按序号测试已保存的通知渠道 |
|
||
| `POST` | `/notification/test-config` | 测试未保存的通知渠道配置 |
|
||
|
||
## 事件流
|
||
|
||
`GET /events/stream` 是一条 Server-Sent Events 连接,WebUI 用它代替轮询。
|
||
|
||
| `event` | 何时推送 | `data` |
|
||
| --- | --- | --- |
|
||
| `status` | 每 3 秒 | 与 `GET /status` 相同的结构 |
|
||
| `downloader` | 每 5 秒 | 所有实例的种子;下载器不可用时为 `null` |
|
||
| `log` | 每 10 秒 | 日志尾部 |
|
||
| `update` | 在线更新进行中且进度变化时 | 更新进度 |
|
||
| `notification` | 连接建立时,以及通知中心变化时 | 通知中心状态,含未读数 `unread_count` |
|
||
| `bus` | 事件总线上有事件时 | `{"kind": <事件名>, "payload": {...}}`,包括宿主事件和插件事件 |
|
||
|
||
```bash
|
||
curl -N -H "Authorization: Bearer $AB_TOKEN" http://your-host:7892/api/v1/events/stream
|
||
```
|
||
|
||
`bus` 帧中的事件名与字段见 [插件开发 → 事件](/dev/plugins/events)。前端插件组件用 `host.events.on(kind, callback)` 订阅同样的帧。
|
||
|
||
## 插件
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `GET` | `/plugins` | 已发现的插件、状态、配置表单 schema 与当前配置(已掩码) |
|
||
| `PUT` | `/plugins/settings` | 修改 `allow_unsigned`(允许未签名插件) |
|
||
| `PUT` | `/plugins/{plugin_id}` | 启用 / 停用插件或修改配置,保存后立即生效;配置不合法返回 `422` |
|
||
| `GET` | `/plugins/providers` | 插件提供的 Provider id,按扩展点分组 |
|
||
| `GET` | `/plugins/ui` | 已启用插件声明的前端挂载点 |
|
||
| `GET` | `/plugins/catalog` | 签名目录中可安装的插件;目录不可达返回 `502` |
|
||
| `POST` | `/plugins/{plugin_id}/install` | 从签名目录安装或升级插件,并启用 |
|
||
| `DELETE` | `/plugins/{plugin_id}` | 卸载经签名目录安装的插件 |
|
||
| `GET` | `/plugins/{plugin_id}/web/{path}` | 插件 `web/` 目录下的前端静态文件 |
|
||
| 任意 | `/plugins/{plugin_id}/{path}` | 插件自己的路由,见 [REST 路由](/dev/plugins/points/api-router) |
|
||
|
||
## 设置向导
|
||
|
||
这些端点不需要认证。`GET /setup/status` 始终可用,返回 `need_setup`(设置完成后为 `false`)。其它端点只在首次设置完成前可用,完成后返回 `403`。`/setup/complete` 还要求浏览器会话,或 `admin` 账户仍为出厂密码 `adminadmin`;否则返回 `403`。
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
| --- | --- | --- |
|
||
| `GET` | `/setup/status` | 是否需要设置向导 |
|
||
| `POST` | `/setup/test-downloader` | 测试下载器连接 |
|
||
| `POST` | `/setup/test-rss` | 测试 RSS 链接 |
|
||
| `POST` | `/setup/test-notification` | 发送测试通知 |
|
||
| `POST` | `/setup/complete` | 保存向导中的全部配置,并标记设置完成 |
|
||
|
||
## MCP
|
||
|
||
AB 在根路径的 `/mcp` 提供 MCP 服务(Streamable HTTP 传输):在 MCP 客户端中把服务地址设为 `http://<AB 地址>:7892/mcp`。3.x 与 4.0.0-beta.2 及更早版本的 SSE 端点 `/mcp/sse` 已删除。
|
||
|
||
- 访问控制与 REST API 分开:客户端 IP 在 `security.mcp_whitelist` 内,或请求带 `scope=mcp` 的令牌(`Authorization: Bearer <令牌>`)。`mcp_whitelist` 为空时拒绝所有基于 IP 的访问,令牌仍然有效。
|
||
- 内置工具:`list_anime`、`get_anime`、`search_anime`、`subscribe_anime`、`unsubscribe_anime`、`list_downloads`、`list_rss_feeds`、`get_program_status`、`refresh_feeds`、`update_anime`。
|
||
- 内置资源:`autobangumi://anime/list`、`autobangumi://anime/{id}`、`autobangumi://status`、`autobangumi://rss/feeds`。
|
||
- 已启用插件提供的工具名为 `<插件 id>__<id>`,资源 URI 为 `autobangumi://plugins/<插件 id>/<id>`,见 [MCP 工具与资源](/dev/plugins/points/mcp)。
|
||
|
||
## 响应与错误
|
||
|
||
- 许多操作类端点返回 `{"status": true, "msg_en": "...", "msg_zh": "..."}`。查询类端点直接返回数据。具体结构见 `/docs`。
|
||
- 错误使用标准 HTTP 状态码:`401` 未认证,`403` 无权限,`404` 不存在,`422` 参数校验失败,`500` 服务器错误。
|