• 按任务 ID 下载生成好的音频,支持多格式,异步任务
  • 一次请求可以同时拿 mp3、m4a、wav
  • 多格式只收一次费用
POST/v1/music/generations/download

认证

string必填

所有接口均使用 Bearer Token 进行认证。

获取 API Key:访问控制台 创建。

请求时在请求头中添加:

Authorization: Bearer YOUR_OAIRoute_KEY

请求参数

string可选

模型名称,省略时按 suno 处理。

string必填

生成源歌曲时返回的任务 ID。

源任务须属于当前账户、已完成、且含可下载音轨。音乐生成、延长、翻唱、分轨等任务都可以下载;只返回文本的任务(歌词、BPM 等)不可下载。

integer可选

指定源任务结果 data.result.music[] 中的第几首,默认 1,从 1 开始计数。越界会报错。

array可选

要下载的格式数组,至少一项。取值 mp3、m4a、wav。

可多选,大小写不敏感,重复值自动去重,结果顺序与请求顺序一致。与 format 二选一。

string可选

只下载单一格式时代替 formats 使用,例如 "mp3"。

formats 与 format 均缺失或列表为空时返回 400。

提交响应

integer

状态码,成功为 200。

data[] 的元素字段 · 2 项
string

初始值固定为 submitted。

string

新建的下载任务 ID,与请求中的源歌曲 task_id 不同。轮询时用这个。

这一步容易搞混:提交下载后返回的是一个新任务 ID。拿原来的 task_id 去查,永远查不到下载结果。

查询下载任务

用 GET /v1/music/tasks/{下载任务ID}。建议提交后立即查一次,非终态则每 2 秒轮询,最多 60 秒。

data 的元素字段 · 8 项
string

任务状态,取值 submitted、processing、completed、failed。

integer

进度百分比。

integer

创建时间,Unix 时间戳。

integer

完成时间,Unix 时间戳,仅完成时出现。

integer

实际耗时,单位秒。

number

费用。失败任务为 0。

number

积分消耗。

object

结果对象,仅 completed 状态存在,processing 时没有这个字段。

data.result 的元素字段 · 2 项
string

歌曲唯一标识。

array

下载文件列表,新代码应读取这个字段。

data.result.files[] 的元素字段 · 2 项
string

文件格式。

string

文件下载地址。可能有有效期,需尽快保存。

data.result 的元素字段
string

兼容旧 WAV 接口的字段,请求 WAV 时仍可能返回。不建议新代码使用。

data.error 的元素字段
string

失败原因,可展示给用户并提供重试。

计费规则

情况计费
一次请求选多个格式只收一次费用
再次提交同一首歌,即使格式相同产生新费用
换另一种格式下载需新建任务,也产生新费用
下载失败自动退款,cost 为 0

所以想拿多个格式,一次请求全选上最划算。分两次下载同一首歌会被收两遍钱。

错误处理

HTTP 400 属于提交期参数错误,不创建任务、不扣费。常见对照:

错误信息含义
formats is required / must contain at least one未提供下载格式
unsupported format包含 mp3、m4a、wav 之外的格式
task_id is required / invalid task_id format源任务 ID 缺失或格式错误
source task not found源任务不存在或不属于当前账户
audio_index N out of range歌曲序号超出源任务音轨数量
track #N has no music_id源任务未完成或该歌曲无音频
HTTP说明
401身份验证失败,检查 API 密钥
402账户余额不足,需充值
403模型价格未配置,错误码 model_price_not_configured,需联系平台支持
429请求过于频繁,稍后重试
500服务器内部错误,稍后重试

旧接口 POST /v1/music/generations/wav 已弃用,暂仍兼容,等价于新接口传 formats: ["wav"]。新代码请用本接口。

错误码

错误响应的格式、状态码与重试建议见错误码与限流,常见报错的排查步骤见常见问题。

使用示例

提交一个任务并拿到 task_id:

提交成功只表示任务已受理。真正的产物要拿返回的 task_id 去任务查询接口轮询,status 变成 completed 之后才有结果。