Skip to content

API 参考 ​

本页为开发者参考。除特别标注外,接口均返回 JSON { success: true, ... },管理接口需 admin/root 角色。


请求与响应的通用规则 ​

调用任何接口之前,先了解鉴权走哪条通道、响应长什么样、流式数据怎么读,以及有哪些限流。

鉴权三通道 ​

extractAccessToken 按 query token → cookie access_token → Authorization: Bearer 的顺序取 token,原理见鉴权模型。不同调用方式该选哪条通道如下:

  • 浏览器 REST:请求带 credentials: 'include'。HTTPS 下走 httpOnly cookie(JavaScript 读不到的 Cookie),HTTP 下走本地缓存的 Bearer。这部分前端 apiFetch 已经封装好,无需额外处理。

  • 媒体地址(<video> / <audio> / MSE / hls.js):无法带自定义头,前端对本域 /api/ URL 自动附加 ?token=。

  • 脚本/第三方调用:可用 Authorization: Bearer <access>,过期后 POST /api/auth/refresh(cookie 或 body)换发 access。

响应与流式 ​

所有接口共用同一套响应外壳,流式接口另有约定。

  • 成功返回 { "success": true, "data": { ... } };错误返回 { "success": false, "error": { "message": "...", "code": "ERROR_CODE" } }。

  • 流式接口(B站视频解析、B站下载、server-files 上传进度)返回 NDJSON(application/x-ndjson)。NDJSON 是每行一个独立 JSON 对象的格式,客户端需要逐行解析:

{"status":"parsing","step":"playurl","message":"获取播放地址..."}
{"success":true,"status":"done","videoUrl":"...","format":"dash","currentQn":80}
{"status":"downloading","phase":"video","received":123456,"total":987654,"percent":12}
{"status":"error","message":"解析失败","code":"NO_PERMISSION"}

限流 ​

限流规则按接口类型区分,具体数值与后端保持一致。登录为 15 分钟 20 次/IP;改密为 1 分钟 3 次/用户;登录失败锁定默认关闭,开启后 5 次锁 15 分钟。代理类接口需登录,防止带宽滥用。


认证 /api/auth ​

账号、令牌和登录态相关的接口都挂在 /api/auth 下。

方法路径说明权限
POST/register注册新用户(approval 模式下为 pending)开放
POST/login登录,HTTPS 下写 httpOnly Cookie开放
POST/refresh刷新 Access Token(不轮换 refresh)登录
POST/logout登出登录
GET/registration-mode当前注册模式开放
GET/public-settings公开设置(注册模式、建房模式、功能开关、权限矩阵)开放
GET/me当前用户信息登录
PATCH/password修改密码(触发 token 全局吊销)登录
PATCH/username修改用户名root
POST/avatar上传头像登录
DELETE/avatar删除头像登录
POST/guest获取游客令牌(userId=0)开放

房间 /api/rooms ​

房间列表和影片的增删改查都在 /api/rooms 下。

方法路径说明权限
GET/活跃房间列表登录
PUT/:roomId/name修改房间名称房主/root
GET/:roomId/movies影片列表房间成员
POST/:roomId/movies新增影片房主
POST/:roomId/movies/reorder重排序房主
PUT/:roomId/movies/:movieId更新影片房主
DELETE/:roomId/movies/:movieId删除影片房主

流媒体 /api/stream ​

/api/stream 集中了播放相关的接口,按内容来源分成 B站、弹幕、番剧源三组。

B站相关 ​

登录、解析和代理播放的接口如下,其中解析接口以 NDJSON 流式返回。

方法路径说明权限
GET/proxy-imageB站图片代理(免认证,1 小时缓存)开放
GET/bilibili/qr扫码登录二维码登录
GET/bilibili/qr/poll轮询扫码状态登录
GET/bilibili/login-status登录状态登录
POST/bilibili/logout登出登录
GET/bilibili/user-info用户信息(含会员状态)登录
GET/bilibili/following-bangumi关注的番剧登录
GET/bilibili/bangumi-episodes番剧集数登录
GET/resolve-bilibili视频解析(NDJSON 流式)登录
GET/bilibili/danmakuB站弹幕(cid 或 bvid)登录
GET/bilibili/ai-subtitleAI 字幕(须带 duration 做带内校验)登录
GET/bilibili/related相关推荐(自动连播使用)登录
GET/proxyCDN 媒体代理(域名白名单 + 防盗链头)登录

弹幕 /api/stream/danmaku ​

弹幕接口可以对接多个弹幕源,搜索时对繁简变体并行处理。

方法路径说明权限
GET/sources弹幕源列表(B站 / 巴哈姆特 / 弹弹play)登录
GET/search搜索弹幕(繁简变体并行)登录
GET/episodes剧集列表登录
POST/fetch拉取弹幕(playbackParams 须原样回传)登录

番剧源 ​

/anime、/anisubs、/kazumi 三组结构一致:

方法路径说明权限
GET/proxy媒体代理登录
GET/sources数据源列表登录
GET/search搜索番剧登录
GET/episodes剧集列表登录
POST/resolve解析播放地址登录

挂载点 /api/webdav、/api/ftp、/api/openlist、/api/emby、/api/jellyfin ​

五类挂载点共用同一组接口,路径分别挂在各自的前缀下。

方法路径说明权限
GET/mounts挂载点列表登录
POST/mounts/test测试连接(直链模式同步做 https 活性探测)登录
POST/mounts新增挂载点登录
PUT/mounts/:id更新挂载点登录
DELETE/mounts/:id删除挂载点登录
GET/mounts/:id/browse浏览目录登录
GET/resolve解析文件(直链或代理 URL)登录
GET/proxy代理播放登录
GET/embedded-tracks内嵌字幕轨列表(emby/jellyfin)登录
GET/embedded-extract内嵌字幕提取(emby/jellyfin)登录
  • ftp 无直链模式,/resolve 恒返回代理 URL。
  • emby/jellyfin 音轨不兼容时自动切服务端转码 HLS(代理超时放宽到 90s)。

直链实时解析 /api/direct-resolve ​

播放时需要一个仍然有效的直链,这个接口负责现取。

方法路径说明权限
GET/movie?movieId=播放时取新鲜直链(5 分钟 TTL + 单飞去重 + https 活性自愈)登录

字幕 /api/subtitles ​

字幕接口负责在同目录下找字幕、浏览字幕目录,以及读取字幕内容。

方法路径说明权限
GET/search?movieId=同目录同名前缀字幕(webdav/openlist/ftp/server-files)登录
GET/browse浏览字幕目录登录
GET/load?movieId=&path=加载字幕内容(非 URL,上限 2MB)登录

一起听音乐 /api/music ​

音乐模块的接口覆盖网易云转发、音频流、音质查询和云盘上传。

方法路径说明权限
GET/POST/ncm/*网易云接口通用转发(注入用户 Cookie)可选鉴权
GET/stream?songId=&level=&roomId=&direct=音频流(降级链 + 凭证回退 + SSRF 防护)可选鉴权
GET/song-quality?songId=音质元数据(15 分钟缓存)登录
GET/login/status网易云登录态(含会员判定)登录
GET/ncm-cookie返回当前用户的网易云 Cookie 串(个人中心「复制 Cookie」)登录
POST/ncm-cookie-login粘贴 Cookie 登录(提交时校验 MUSIC_U 登录态)登录
POST/logout清除网易云凭证登录
POST/cloud/upload云盘上传(流式转发)登录

语音 /api/voice ​

语音聊天不走 Socket.IO,这三个接口负责签发接入凭证与执行管理动作。实时音频由独立的 LiveKit 服务承载,链路细节见语音聊天链路。

方法路径说明权限
POST/token签发 LiveKit 接入凭证(返回连接地址与 JWT)登录
POST/mute禁言 / 解禁对方麦克风(服务器侧静音 + metadata 标记)root/房主/房管
POST/kick踢出语音成员root/房主/房管

CLI 代理 /api/cli ​

服务端为 CLI 保留了一个解析入口,供本机代理做高画质解析时使用。

方法路径说明权限
GET/resolve用请求头自带 Cookie 解析(供 CLI 高画质)登录

服务器文件 /api/server-files(仅 root) ​

这组接口管理服务器本机上的目录与文件,只对 root 开放。

方法路径说明
GET/roots根目录列表
POST/roots添加根目录
DELETE/roots/:id删除根目录
GET/browse浏览目录
GET/browse-system浏览全盘
POST/upload上传文件(上限 10GB)
POST/folder新建文件夹
POST/rename重命名
DELETE/file删除文件/文件夹
GET/resolve解析播放 URL
GET/proxy代理播放(1MB 读块)
POST/bilibili-downloadB站下载(仅 MP4 最高 720P,NDJSON 进度)

管理后台 /api/admin ​

/api/admin 下的接口按用途分成用户管理、房间管理、系统设置三组。

用户管理 ​

用户管理负责审核注册、调整角色和删除账号,权限要求最高的几项只对 root 开放。

方法路径说明权限
GET/users用户列表admin/root
PATCH/users/:id/role修改角色(仅 admin/user,root 不可改)root
POST/users/:id/approve审核注册root
DELETE/users/:id删除用户(触发 token 吊销)root

房间管理 ​

房间管理可以查看全量房间,也可以强制关闭或批量清理房间。

方法路径说明权限
GET/rooms全量房间列表admin/root
DELETE/rooms/:roomId强制关闭房间(先广播再断连)admin/root
POST/rooms/batch-delete批量删除root
POST/rooms/delete-all清空所有房间root
POST/rooms/cleanup-unused清理无人房间admin/root

系统设置 ​

系统设置接口读取和写入全局配置,写入只允许 root 执行。

方法路径说明权限
GET/settings获取设置(注册模式、建房模式、权限矩阵、功能开关、自动清理)admin/root
PUT/settings更新设置root

系统更新 /api/system/update(仅 root) ​

系统更新接口负责检查新版本、下载并应用更新,也支持上传压缩包。

方法路径说明
GET/check检查更新(可关预发布接收)
POST/apply下载并应用更新(进度流式)
POST/upload上传压缩包更新

其他接口 ​

剩下的接口用于推流配置、前端日志上报和健康检查。

方法路径说明权限
GET/api/stream-push/obs-config/:roomId下载 OBS 场景配置房主
POST/api/client-logs上报前端日志开放
GET/health健康检查开放

错误码汇总 ​

接口返回的错误码含义如下表。

codeHTTP含义
NCM_UNAVAILABLE503内嵌网易云服务未启动
VIP_REQUIRED403音质/清晰度需 VIP(含 B站下载会员档强校验)
NO_COPYRIGHT404无版权(/check/music 判定)
RESOLVE_FAILED502地址解析全链失败
UPSTREAM_ERROR502上游返回非预期内容
NOT_FOUND / AUTH_FAILED404 / 401挂载点或文件缺失 / 凭证失效(直链解析)
INTERNAL_NETWORK_FORBIDDEN400拒绝解析内网地址(SSRF 防护)
ALREADY_IN_ROOM—重复加入房间(socket ack)
RESOLVE_FAILED / NO_PERMISSION / CDN_UNREACHABLE / DASH_NOT_AVAILABLE 等—B站解析 NDJSON 错误行

Socket.IO 事件 ​

房间同步、音乐、投屏信令等实时能力不走 REST,事件清单见房间同步逻辑与一起听音乐管线。REST 与 WebSocket 共用同一套 JWT 身份。

本项目遵循 CC BY-NC-SA 许可。