curl -sS -X POST \
'http://设备IP:13038/api/core/v1/player/session' \
-H 'Content-Type: application/json' \
--data '{
"username": "alice",
"password": "your-password",
"client_name": "客厅播放器",
"device_id": "living-room-player-01"
}'
快速开始
一次认证,后续只发送 Token
播放器用 MusicArk 用户名和密码建立连接。验证成功后,服务端返回随机的 mak_… Bearer Token;密码不再随曲库、图片或媒体请求发送。
BASE_URL='http://设备IP:13038/api/core/v1'
PLAYER_TOKEN='mak_...'
curl -sS "$BASE_URL/catalog/tracks?limit=50" \
-H "Authorization: Bearer $PLAYER_TOKEN"
每个客户端安装应生成并持久保存独立的 device_id。同一账号和设备再次登录会轮换密钥并立即使旧密钥失效,不会累积多个有效令牌。
最小权限
按能力授权,不共享账户边界
普通用户连接默认获得四项播放器权限。管理员可以额外获得或显式签发 library:write;普通用户即使取得同名 Scope 也不能执行管理员维护操作。
catalog:read浏览曲库
曲目、专辑、艺术家、文件夹、搜索、首页、推荐、封面、歌词和个人列表读取。
playback:stream读取音频
查询转码 Profile,创建 ListeningSession,读取直放、渐进转码或 HLS。
playback:control管理播放状态
维护个人转码偏好、共享队列、收藏和歌单。
playback:report同步设备进度
按设备读取和上报进度,并通过稳定 playback_id 保证播放统计幂等。
library:write管理员曲库维护
编辑标签与封面、写回文件、整理、扫描和受保护的文件操作。
完整播放链路
发现、播放、同步,保持同一条资源路径
客户端必须使用服务端返回的不透明资源 ID、分页游标、媒体 URL 与实际 MIME。不能从名称推导 ID,也不能把长期 Token 放进 URL。
发现与搜索
GET /catalog/tracksGET /catalog/query?q=使用 limit 和 after 进行游标分页。
读取内容
GET /catalog/tracks/{id}GET /images/{id}?size=512封面和歌词同样要求 Bearer Token,并支持 ETag 缓存。
协商播放能力
GET /transcode-profilesPOST /listening-sessions提交客户端真实支持的 MIME/codec,按响应决定直放、转码或 HLS。
读取与 Seek
GET /listening-sessions/{id}/stream直放支持单段 Range;转码 Seek 使用新的 start_ms 重建会话。
上报与恢复
POST /player/progressGET /player/progress建议播放中每 10–15 秒上报,并在暂停、切歌和完成时补报。
同步个人数据
GET/PUT /me/playback-queueGET/POST /playlists收藏、歌单、队列和设备进度始终绑定 Token 所属用户。
开发者资源
契约、实例文档与接入验证
静态契约适合预先生成类型;客户端上线前还应使用目标 MusicArk 实例提供的同镜像契约进行校验。
下载完整机器契约
包含路径、请求结构、响应 Schema、权限要求与稳定错误模型。
下载 openapi.yaml RUNNING INSTANCE打开本机实例文档
默认端口为 13038;远程设备请把 127.0.0.1 替换为 MusicArk 所在设备 IP。
/api-docs LIVE CONTRACT读取实例实际契约
用于客户端生成、兼容性比较和部署后的最终验收。
/openapi.yamlERROR MODEL
根据状态码与稳定 code 分支
所有 API 错误使用 application/problem+json。客户端不应根据本地化的标题或详情判断逻辑。
{
"status": 403,
"code": "API_TOKEN_SCOPE_REQUIRED",
"detail": "当前接口需要 catalog:read 权限。",
"request_id": "req_01..."
}
安全清单
Token 是设备凭证,不是分享链接
远程连接应通过可信 HTTPS 入口;密码只用于建立连接,Token 只存入系统安全存储。
- 每台设备使用独立 Token 与稳定 device_id,便于单独撤销。
- Token 不写入 URL、日志、分析事件、崩溃报告或普通配置明文。
- 所有音频、封面与歌词请求都携带 Authorization Header。
- 正确处理 401、403、410、412、416、422 与 429,不无限重试。
- 高权限维护请求遵守 If-Match、Idempotency-Key 与文件版本前置条件。
- 切歌、Seek 和退出时取消旧媒体请求,并结束不再使用的 ListeningSession。