Skip to content

歌单管理 ​

接口列表 ​

方法路径说明
POST/playlists创建歌单
GET/playlists获取歌单列表
PUT/playlists/{id}更新歌单
DELETE/playlists/{id}删除歌单
GET/playlists/{id}获取单个歌单详情
POST/playlists/{id}/cover上传歌单封面
GET/playlists/{id}/cover获取歌单封面
PUT/playlists/{id}/pin设置歌单置顶状态
GET/playlists/{id}/song-ids获取歌单歌曲 ID 列表
POST/playlists/{id}/songs批量添加歌曲到歌单
GET/playlists/{id}/songs获取歌单中的歌曲
DELETE/playlists/{id}/songs/{songId}从歌单移除歌曲
PUT/playlists/{id}/songs/move移动歌单内歌曲位置
PUT/playlists/{id}/songs/reorder重新排序歌单中的歌曲
POST/playlists/{id}/songs/sort服务端排序歌单内歌曲
PUT/playlists/{id}/sort更新歌单视图排序偏好
POST/playlists/{id}/touch更新歌单最后播放时间
PUT/playlists/{id}/visibility设置歌单可见性
POST/playlists/batch-delete批量删除歌单
PUT/playlists/reorder重新排序歌单列表

POST /playlists ​

创建歌单

创建一个新的歌单

需要认证

此接口需要 Bearer Token 认证

请求体 ​

歌单信息

类型: Playlist

字段类型必填说明
cover_urlstring否封面图片 URL 示例: "https://example.com/playlist.jpg"
created_atstring否创建时间 示例: "2024-01-01T12:00:00Z"
descriptionstring否歌单描述 示例: "收藏的经典歌曲"
idinteger否歌单 ID 示例: 1
labelsstring[]否歌单标签,如 ["built_in"] 示例: ["[\"built_in\"]"]
namestring否歌单名称 示例: "我的最爱"
pinned_atstring否置顶时间,nil 表示未置顶;多个置顶歌单按此字段倒序排列 示例: "2024-01-01T12:00:00Z"
remote_countinteger否歌单内网络歌曲(songs.type=remote)数量,>0 即为「网络歌单」;仅列表接口填充,详情接口恒为 0 示例: 3
song_countinteger否歌曲数量 示例: 10
sort_bystring否视图排序字段:position/added_at/file_modified_at/title/artist/duration 示例: "position"
sort_orderstring否视图排序方向:asc/desc 示例: "asc"
typestring否歌单类型:normal/radio 可选值: normal, radio 示例: "normal"
updated_atstring否最后更新时间 示例: "2024-01-01T12:00:00Z"

响应 ​

201 - 创建成功 ​

类型: Playlist

字段类型必填说明
cover_urlstring否封面图片 URL 示例: "https://example.com/playlist.jpg"
created_atstring否创建时间 示例: "2024-01-01T12:00:00Z"
descriptionstring否歌单描述 示例: "收藏的经典歌曲"
idinteger否歌单 ID 示例: 1
labelsstring[]否歌单标签,如 ["built_in"] 示例: ["[\"built_in\"]"]
namestring否歌单名称 示例: "我的最爱"
pinned_atstring否置顶时间,nil 表示未置顶;多个置顶歌单按此字段倒序排列 示例: "2024-01-01T12:00:00Z"
remote_countinteger否歌单内网络歌曲(songs.type=remote)数量,>0 即为「网络歌单」;仅列表接口填充,详情接口恒为 0 示例: 3
song_countinteger否歌曲数量 示例: 10
sort_bystring否视图排序字段:position/added_at/file_modified_at/title/artist/duration 示例: "position"
sort_orderstring否视图排序方向:asc/desc 示例: "asc"
typestring否歌单类型:normal/radio 可选值: normal, radio 示例: "normal"
updated_atstring否最后更新时间 示例: "2024-01-01T12:00:00Z"

400 - 请求数据错误 ​

类型: map[string]string

500 - 创建失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /playlists ​

获取歌单列表

获取歌单列表,支持按类型过滤、按歌单内歌曲来源过滤、关键词搜索和分页。默认排除隐藏歌单,传 exclude_labels=none 显示全部。 song_source 按歌单内歌曲的来源筛选(歌单本身没有来源字段,只能由歌曲反推):remote=歌单内含网络歌曲(「网络歌单」),local=含本地歌曲(「本地歌单」)。 判定是 EXISTS 而非「全部是」,故本地+网络混合的歌单在两个取值下都会出现,空歌单两个取值下都不出现。电台歌曲的 type 是 radio 而非 remote,故电台歌单不会被 song_source=remote 命中。

需要认证

此接口需要 Bearer Token 认证

查询参数 ​

参数类型必填说明
typestring否歌单类型 可选值: normal, radio
song_sourcestring否按歌单内歌曲来源过滤: remote=含网络歌曲, local=含本地歌曲 可选值: remote, local
keywordstring否搜索关键词(模糊匹配歌单名称/描述)
exclude_labelsstring否要排除的标签(逗号分隔), 默认排除 hidden; 传 none 显示全部 默认: "hidden"
limitinteger否每页数量 默认: 20
offsetinteger否偏移量 默认: 0

响应 ​

200 - 成功返回歌单列表 ​

类型: map[string]any

400 - song_source 取值非法 ​

类型: map[string]string

500 - 服务器错误 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

PUT /playlists/{id} ​

更新歌单

更新歌单信息。支持通过 cover_song_id 从指定歌曲复制封面,与 cover_path/cover_url 互斥且优先级更高

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单ID

请求体 ​

歌单信息

类型: UpdatePlaylistRequest

字段类型必填说明
cover_pathstring否封面图片本地路径(传空字符串清除) 示例: ""
cover_song_idinteger否从指定歌曲复制封面(与 cover_path/cover_url 互斥,优先级更高) 示例: 42
cover_urlstring否封面图片 URL(传空字符串清除) 示例: ""
descriptionstring否歌单描述 示例: "收藏的经典歌曲"
namestring否歌单名称 示例: "我的最爱"

响应 ​

200 - 更新成功 ​

类型: Playlist

字段类型必填说明
cover_urlstring否封面图片 URL 示例: "https://example.com/playlist.jpg"
created_atstring否创建时间 示例: "2024-01-01T12:00:00Z"
descriptionstring否歌单描述 示例: "收藏的经典歌曲"
idinteger否歌单 ID 示例: 1
labelsstring[]否歌单标签,如 ["built_in"] 示例: ["[\"built_in\"]"]
namestring否歌单名称 示例: "我的最爱"
pinned_atstring否置顶时间,nil 表示未置顶;多个置顶歌单按此字段倒序排列 示例: "2024-01-01T12:00:00Z"
remote_countinteger否歌单内网络歌曲(songs.type=remote)数量,>0 即为「网络歌单」;仅列表接口填充,详情接口恒为 0 示例: 3
song_countinteger否歌曲数量 示例: 10
sort_bystring否视图排序字段:position/added_at/file_modified_at/title/artist/duration 示例: "position"
sort_orderstring否视图排序方向:asc/desc 示例: "asc"
typestring否歌单类型:normal/radio 可选值: normal, radio 示例: "normal"
updated_atstring否最后更新时间 示例: "2024-01-01T12:00:00Z"

400 - 请求数据错误 ​

类型: map[string]string

500 - 更新失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

DELETE /playlists/{id} ​

删除歌单

根据歌单ID删除歌单。delete_songs=true 时,同时删除仅属于本歌单的孤儿歌曲(不属于任何其他歌单,含内置的收藏/电台收藏保护)——本地歌曲连同磁盘文件一并删除,网络/电台歌曲清理数据库记录与缓存。

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单ID

查询参数 ​

参数类型必填说明
delete_songsboolean否是否一并删除仅属于本歌单的孤儿歌曲(含本地文件),默认 false

响应 ​

200 - 删除成功,含连带清理的歌曲数 deleted_songs ​

类型: map[string]any

400 - 无效的歌单ID ​

类型: map[string]string

500 - 删除失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /playlists/{id} ​

获取单个歌单详情

根据歌单ID获取详细信息

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单ID

响应 ​

200 - 成功返回歌单详情 ​

类型: Playlist

字段类型必填说明
cover_urlstring否封面图片 URL 示例: "https://example.com/playlist.jpg"
created_atstring否创建时间 示例: "2024-01-01T12:00:00Z"
descriptionstring否歌单描述 示例: "收藏的经典歌曲"
idinteger否歌单 ID 示例: 1
labelsstring[]否歌单标签,如 ["built_in"] 示例: ["[\"built_in\"]"]
namestring否歌单名称 示例: "我的最爱"
pinned_atstring否置顶时间,nil 表示未置顶;多个置顶歌单按此字段倒序排列 示例: "2024-01-01T12:00:00Z"
remote_countinteger否歌单内网络歌曲(songs.type=remote)数量,>0 即为「网络歌单」;仅列表接口填充,详情接口恒为 0 示例: 3
song_countinteger否歌曲数量 示例: 10
sort_bystring否视图排序字段:position/added_at/file_modified_at/title/artist/duration 示例: "position"
sort_orderstring否视图排序方向:asc/desc 示例: "asc"
typestring否歌单类型:normal/radio 可选值: normal, radio 示例: "normal"
updated_atstring否最后更新时间 示例: "2024-01-01T12:00:00Z"

400 - 无效的歌单ID ​

类型: map[string]string

404 - 歌单不存在 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

POST /playlists/{id}/cover ​

上传歌单封面

上传本地图片作为歌单封面

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单ID

表单参数 ​

参数类型必填说明
filefile是封面图片文件

响应 ​

200 - 上传成功 ​

类型: Playlist

字段类型必填说明
cover_urlstring否封面图片 URL 示例: "https://example.com/playlist.jpg"
created_atstring否创建时间 示例: "2024-01-01T12:00:00Z"
descriptionstring否歌单描述 示例: "收藏的经典歌曲"
idinteger否歌单 ID 示例: 1
labelsstring[]否歌单标签,如 ["built_in"] 示例: ["[\"built_in\"]"]
namestring否歌单名称 示例: "我的最爱"
pinned_atstring否置顶时间,nil 表示未置顶;多个置顶歌单按此字段倒序排列 示例: "2024-01-01T12:00:00Z"
remote_countinteger否歌单内网络歌曲(songs.type=remote)数量,>0 即为「网络歌单」;仅列表接口填充,详情接口恒为 0 示例: 3
song_countinteger否歌曲数量 示例: 10
sort_bystring否视图排序字段:position/added_at/file_modified_at/title/artist/duration 示例: "position"
sort_orderstring否视图排序方向:asc/desc 示例: "asc"
typestring否歌单类型:normal/radio 可选值: normal, radio 示例: "normal"
updated_atstring否最后更新时间 示例: "2024-01-01T12:00:00Z"

400 - 请求数据错误 ​

类型: map[string]string

500 - 上传失败 ​

类型: map[string]string

内容类型 ​

  • 请求: multipart/form-data
  • 响应: application/json

GET /playlists/{id}/cover ​

获取歌单封面

返回歌单封面图片文件。可选 query 参数 w:把本地封面等比缩放到该宽度(物理像素,绝不放大、上限 1024)后以 JPEG 返回,用于 Web 端降低 GPU 纹理体积(songloft-org/songloft#309);缺省或非法时返回原图。缩略仅作用于本地封面,远程代理封面忽略 w。

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单ID

查询参数 ​

参数类型必填说明
winteger否本地封面缩略目标宽度(物理像素,绝不放大,上限 1024)

响应 ​

200 - 封面图片 ​

类型: file

404 - 封面不存在 ​

类型: map[string]string

500 - 读取失败 ​

类型: map[string]string

内容类型 ​

  • 响应: image/jpeg

PUT /playlists/{id}/pin ​

设置歌单置顶状态

置顶/取消置顶歌单。置顶歌单在歌单列表中始终排在最前,多个置顶歌单按置顶时间倒序(最近置顶的排最前)。内置歌单(收藏、电台收藏)同样允许置顶,不做特殊限制。

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单ID

请求体 ​

置顶设置

类型: SetPlaylistPinnedRequest

字段类型必填说明
pinnedboolean否是否置顶歌单 示例: true

响应 ​

200 - 更新后的歌单 ​

类型: Playlist

字段类型必填说明
cover_urlstring否封面图片 URL 示例: "https://example.com/playlist.jpg"
created_atstring否创建时间 示例: "2024-01-01T12:00:00Z"
descriptionstring否歌单描述 示例: "收藏的经典歌曲"
idinteger否歌单 ID 示例: 1
labelsstring[]否歌单标签,如 ["built_in"] 示例: ["[\"built_in\"]"]
namestring否歌单名称 示例: "我的最爱"
pinned_atstring否置顶时间,nil 表示未置顶;多个置顶歌单按此字段倒序排列 示例: "2024-01-01T12:00:00Z"
remote_countinteger否歌单内网络歌曲(songs.type=remote)数量,>0 即为「网络歌单」;仅列表接口填充,详情接口恒为 0 示例: 3
song_countinteger否歌曲数量 示例: 10
sort_bystring否视图排序字段:position/added_at/file_modified_at/title/artist/duration 示例: "position"
sort_orderstring否视图排序方向:asc/desc 示例: "asc"
typestring否歌单类型:normal/radio 可选值: normal, radio 示例: "normal"
updated_atstring否最后更新时间 示例: "2024-01-01T12:00:00Z"

400 - 无效的歌单ID或请求数据 ​

类型: map[string]string

404 - 歌单不存在 ​

类型: map[string]string

500 - 服务器错误 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /playlists/{id}/song-ids ​

获取歌单歌曲 ID 列表

返回歌单内全部歌曲的 ID,不分页。sort/order 语义与 GET /playlists/{id}/songs 完全一致(同一套排序逻辑),省略时默认 position 升序。 用途:客户端需要知道「某首歌在歌单里排第几」时(如从播放历史里的某首歌接着往下播),用本端点拿到有序 ID 数组后取下标,即可直接作为 /playlists/{id}/songs 的 offset 使用(传相同的 sort/order),避免为此拉取全部歌曲对象。 形态与 GET /songs/ids 对齐。

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单 ID

查询参数 ​

参数类型必填说明
sortstring否排序字段: position(默认)/added_at/title/artist/album/duration/updated_at/file_modified_at/file_size
orderstring否排序方向: asc(默认)/desc

响应 ​

200 - 成功返回 {ids:[1,2,3], total:3} ​

类型: map[string]any

400 - 无效的歌单 ID ​

类型: map[string]string

500 - 服务器错误 ​

类型: map[string]string

内容类型 ​

  • 响应: application/json

POST /playlists/{id}/songs ​

批量添加歌曲到歌单

将多首歌曲添加到指定歌单,跳过已存在的歌曲

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单 ID

请求体 ​

歌曲 ID 列表

类型: object

字段类型必填说明
song_idsint64[]否

响应 ​

200 - 添加成功 ​

类型: map[string]any

400 - 请求数据错误 ​

类型: map[string]string

500 - 添加失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

GET /playlists/{id}/songs ​

获取歌单中的歌曲

获取指定歌单中的歌曲,支持分页、排序和搜索

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单 ID

查询参数 ​

参数类型必填说明
limitinteger否每页数量 默认: 20
offsetinteger否偏移量 默认: 0
sortstring否排序字段: position(默认)/added_at/title/artist/album/duration/updated_at/file_modified_at/file_size
orderstring否排序方向: asc(默认)/desc
keywordstring否搜索关键词(匹配标题/艺术家/专辑)

响应 ​

200 - 成功返回歌曲列表 ​

类型: map[string]any

400 - 无效的歌单 ID ​

类型: map[string]string

500 - 获取失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

DELETE /playlists/{id}/songs/{songId} ​

从歌单移除歌曲

从指定歌单移除歌曲

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单 ID
songIdinteger是歌曲 ID

响应 ​

200 - 移除成功 ​

类型: map[string]string

400 - 请求数据错误 ​

类型: map[string]string

500 - 移除失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

PUT /playlists/{id}/songs/move ​

移动歌单内歌曲位置

将指定歌曲移到 after_song_id 之后(after_song_id 为 null 则移到第一位),不改变其余歌曲的相对顺序

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单 ID

请求体 ​

移动参数(after_song_id 为 null 或省略表示置顶)

类型: object

字段类型必填说明
after_song_idint64否
song_idint64否

响应 ​

200 - 移动成功 ​

类型: map[string]string

400 - 请求数据错误 ​

类型: map[string]string

403 - 内置歌单不可操作 ​

类型: map[string]string

500 - 移动失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

PUT /playlists/{id}/songs/reorder ​

重新排序歌单中的歌曲

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单 ID

请求体 ​

歌曲 ID 列表

类型: object

字段类型必填说明
song_idsint64[]否

响应 ​

200 - 排序成功 ​

类型: map[string]string

400 - 请求数据错误 ​

类型: map[string]string

500 - 排序失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

POST /playlists/{id}/songs/sort ​

服务端排序歌单内歌曲

根据 action 参数对歌单内歌曲进行永久排序(更新 position)。 action 取值:name_asc(按名称 A→Z)、name_desc(按名称 Z→A)、number_prefix(按标题数字前缀)、shuffle(随机打乱)。 与 /playlists/{id}/songs/reorder 不同,本端点无需客户端传入完整歌曲 ID 列表,排序由服务端完成。

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单 ID

请求体 ​

排序动作: name_asc / name_desc / number_prefix / shuffle

类型: object

字段类型必填说明
actionstring否

响应 ​

200 - 排序成功 ​

类型: map[string]string

400 - 请求数据错误 ​

类型: map[string]string

403 - 内置歌单不可操作 ​

类型: map[string]string

500 - 排序失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

PUT /playlists/{id}/sort ​

更新歌单视图排序偏好

保存歌单的视图排序设置(非破坏性排序),下次打开歌单时恢复该排序

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单ID

请求体 ​

排序设置 {sort_by, sort_order}

类型: object

响应 ​

200 - 更新成功 ​

类型: map[string]string

400 - 无效参数 ​

类型: map[string]string

500 - 更新失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

POST /playlists/{id}/touch ​

更新歌单最后播放时间

仅更新歌单的 updated_at 字段,作为歌单级的粗粒度「最后播放时间」,也会被改名/换封面等更新操作刷新。 歌曲级的精确播放历史见 GET /play-history?context_type=playlist&context_key={id}。

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单ID

响应 ​

200 - 更新成功 ​

类型: map[string]string

400 - 无效的歌单ID ​

类型: map[string]string

500 - 更新失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

PUT /playlists/{id}/visibility ​

设置歌单可见性

切换歌单的隐藏状态。内置歌单(收藏、电台收藏)不允许隐藏

需要认证

此接口需要 Bearer Token 认证

路径参数 ​

参数类型必填说明
idinteger是歌单ID

请求体 ​

可见性设置

类型: SetPlaylistVisibilityRequest

字段类型必填说明
hiddenboolean否是否隐藏歌单 示例: true

响应 ​

200 - 更新后的歌单 ​

类型: Playlist

字段类型必填说明
cover_urlstring否封面图片 URL 示例: "https://example.com/playlist.jpg"
created_atstring否创建时间 示例: "2024-01-01T12:00:00Z"
descriptionstring否歌单描述 示例: "收藏的经典歌曲"
idinteger否歌单 ID 示例: 1
labelsstring[]否歌单标签,如 ["built_in"] 示例: ["[\"built_in\"]"]
namestring否歌单名称 示例: "我的最爱"
pinned_atstring否置顶时间,nil 表示未置顶;多个置顶歌单按此字段倒序排列 示例: "2024-01-01T12:00:00Z"
remote_countinteger否歌单内网络歌曲(songs.type=remote)数量,>0 即为「网络歌单」;仅列表接口填充,详情接口恒为 0 示例: 3
song_countinteger否歌曲数量 示例: 10
sort_bystring否视图排序字段:position/added_at/file_modified_at/title/artist/duration 示例: "position"
sort_orderstring否视图排序方向:asc/desc 示例: "asc"
typestring否歌单类型:normal/radio 可选值: normal, radio 示例: "normal"
updated_atstring否最后更新时间 示例: "2024-01-01T12:00:00Z"

400 - 请求错误或内置歌单不可隐藏 ​

类型: map[string]string

404 - 歌单不存在 ​

类型: map[string]string

500 - 服务器错误 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

POST /playlists/batch-delete ​

批量删除歌单

根据歌单 ID 列表批量删除歌单,内置歌单会被跳过。请求体 delete_songs=true 时,同时删除仅属于这些歌单的孤儿歌曲(不属于任何其他歌单)——本地歌曲连同磁盘文件一并删除。

需要认证

此接口需要 Bearer Token 认证

请求体 ​

批量删除请求

类型: BatchDeletePlaylistsRequest

字段类型必填说明
delete_songsboolean否为 true 时,一并删除仅属于被删歌单的孤儿歌曲(含本地歌曲及其磁盘文件) 示例: false
idsinteger[]否要删除的歌单 ID 列表 示例: [1]

响应 ​

200 - 删除成功 ​

类型: BatchDeletePlaylistsResponse

字段类型必填说明
deletedinteger否实际删除的歌单数量 示例: 3
deleted_songsinteger否连带清理的孤儿歌曲数量 示例: 12

400 - 请求数据错误 ​

类型: map[string]string

500 - 删除失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json

PUT /playlists/reorder ​

重新排序歌单列表

需要认证

此接口需要 Bearer Token 认证

请求体 ​

歌单 ID 列表

类型: object

字段类型必填说明
playlist_idsint64[]否

响应 ​

200 - 排序成功 ​

类型: map[string]string

400 - 请求数据错误 ​

类型: map[string]string

500 - 排序失败 ​

类型: map[string]string

内容类型 ​

  • 请求: application/json
  • 响应: application/json