API 参考
音乐
POST
/v1/music/generationsGET
/v1/music/tasks/{task_id}GET
/v1/music/tasks/{task_id}/content面向歌曲与纯音乐流程的异步音乐生成。提交后立即返回 task_id;随后轮询任务或接收 webhook 回调,再从 /content 读取成品音频。
#请求参数
modelstring必填音乐模型 ID,见模型页,例如 suno。
promptstring必填描述歌曲内容、情绪、编制或歌词方向。
titlestring可选可选曲目标题;会转发给支持该字段的模型家族。
tagsstring | array可选可选风格或流派提示,如 cinematic、pop、ambient。
versionstring可选当供应商提供多个代际版本时,用于切换模型版本。
mvstring可选供应商特定的音乐模式选择器;除非用户真的需要显式控制,否则建议留在服务端。
instrumentalboolean可选在模型支持时,生成不含人声的纯音乐输出。
make_instrumentalboolean可选另一种供应商用于纯音乐输出的开关;部分提供方使用它而不是 instrumental。
continue_clip_idstring可选基于已有片段续写或延长,而不是新开一首。
continue_atnumber可选续写流程中的起始秒数位置。
webhook_urlstring可选任务进入终态后回调的 HTTPS 地址。
webhook_secretstring可选设置后,回调带 X-Xiaoxiang-Signature: sha256=hex(HMAC-SHA256(body, secret))。
先从简单版开始
对大多数产品来说,首版接入只用 prompt 就够了。title、tags、version 以及续写相关字段都属于高级控制项,只有业务明确需要时再补。
与其他媒体任务一致的异步契约
音乐和图片、视频任务遵循同一套 提交 → 轮询或 webhook → /content 模式,因此后端通常用同一套任务执行器就能统一承接。
#相关错误码
- 404 not_found路径不存在、模型名不存在,或 task_id 已过期 / 不属于当前账号。
- 422 unprocessable_entity上游拒绝了网关转发的参数值(如不支持的尺寸或时长)。
- 401Bearer 令牌无效或缺失。这条路径不带 error.code,请按状态码判断。
- 402 insufficient_user_quota钱包余额不足以覆盖预扣估算。
- 429密钥级限流。响应体为空,按 Retry-After 等待。若 429 带有 insufficient_user_quota,那是每日消费上限,不是限流。
- 503 model_not_found模型名不存在,或当前没有健康渠道可以服务它。
#请求示例
# submit
curl https://www.aisplice.store/v1/music/generations \
-H "Authorization: Bearer sk-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno",
"prompt": "a warm cinematic piano theme",
"instrumental": true
}'
# poll every 5s
curl https://www.aisplice.store/v1/music/tasks/$TASK_ID -H "Authorization: Bearer sk-YOUR_KEY"
# fetch the finished track
curl -L https://www.aisplice.store/v1/music/tasks/$TASK_ID/content \
-H "Authorization: Bearer sk-YOUR_KEY" \
-o song.mp3#响应
response.json
// POST — submit accepted
{"task_id": "task_xxx", "status": "queued"}
// GET /v1/music/tasks/{task_id}
{
"task_id": "task_xxx",
"status": "in_progress",
"progress": "42%"
}
// GET /v1/music/tasks/{task_id}/content
{
"task_id": "task_xxx",
"status": "completed",
"metadata": {
"audio_url": "https://…",
"lyric": "…"
}
}还是没解决?
把请求 ID 或报错信息发给我们,我们来查。