LoopToken
音频生成

音乐生成(Suno)

suno(V6 / V6 Wild / V6 Mini)全部音乐操作:生成歌曲、歌词、续写、翻唱、分轨、MIDI、音乐视频等,异步,用 GET /v1/music/tasks/{task_id} 查询

POST/v1/music/generations
POST/v1/music/generations/{operation}
GET/v1/music/tasks/{task_id}

所有 Suno 接口都是异步任务:提交后拿到 task_id,再轮询查询接口获取结果。所有接口都需要 API Key:Authorization: Bearer sk-lt-...,详见鉴权。同一套接口也承载 Flow Music(model: "flowmusic")。

项值
模型suno(可省略 model 字段)
版本v6、v6-wild、v6-mini,或自定义模型 custom_model_id
模式异步(提交 → 轮询 GET /v1/music/tasks/{task_id})
轮询间隔首次等待约 3 秒,之后每 5 到 10 秒
计费按操作固定计费,Max 模式 2 倍;失败自动退款

快速开始

curl https://api.vibelab.me/v1/music/generations \
  -H "Authorization: Bearer $LOOPTOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno",
    "version": "v6",
    "custom": false,
    "prompt": "深夜城市 lo-fi 钢琴配雨声"
  }'

自定义歌词模式:

curl https://api.vibelab.me/v1/music/generations \
  -H "Authorization: Bearer $LOOPTOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno",
    "version": "v6",
    "custom": true,
    "instrumental": false,
    "prompt": "[Verse]\n雨夜霓虹灯下的街道",
    "title": "深夜驾驶",
    "style": "synthwave, female vocal, cinematic",
    "negative_tags": "metal, screaming",
    "vocal_gender": "Female",
    "style_weight": 0.6,
    "weirdness_constraint": 0.3,
    "audio_weight": 0.5
  }'

所有提交接口的响应形状相同(详见响应):

{
  "code": 200,
  "data": [
    { "status": "submitted", "task_id": "at_0198f0a0-1111-7777-8888-999999999999" }
  ]
}

submitted 只表示任务已受理。不要因为网络超时自动重发收费的 POST 请求;拿到 task_id 后用查询接口确认结果。

模式选择

模式怎么传参
灵感模式custom: false,prompt 为歌曲描述(≤ 3000 字符)
自定义歌词模式custom: true,prompt 为歌词(≤ 5000 字符),可加 title、style、negative_tags、persona_id 等
自定义模型传 custom_model_id,省略 version 与 persona_id
其它操作POST /v1/music/generations/{operation},见操作列表

请求参数

生成音乐

参数类型必填默认说明
modelstring否suno可省略;写则只能是 suno(或 flowmusic,见 Flow Music)
versionstring与 custom_model_id 二选一-v6 / v6-wild / v6-mini
custom_model_idstring与 version 二选一-创建自定义模型(createModel)返回的 model_id;与 version、persona_id 互斥
customboolean否-false 灵感模式(prompt 为歌曲描述,最多 3000 字符);true 自定义模式(prompt 为歌词,最多 5000 字符)
instrumentalboolean否-纯音乐;自定义纯音乐可省略 prompt
promptstring视模式-描述或歌词,见 custom
titlestring否-标题,最多 80 字符,仅自定义模式
stylestring否-风格标签,最多 1000 字符,仅自定义模式
negative_tagsstring否-排除的风格,仅自定义模式
auto_lyricsboolean否-自动生成歌词,仅自定义模式
persona_idstring否-用 Persona(persona)复用歌手音色,仅自定义模式
vocal_genderstring否-Male / Female
style_weight / weirdness_constraint / audio_weightnumber否-0 到 1,0 是有效值
varietystring否-风格变化程度:off / normal / high / extra / max
max_modeboolean否falseMax 模式,需 custom=true;按 2 倍计费
audio_formatstring否-mp3 / m4a / wav
durationinteger否-目标时长 10–360 秒,成品时长不保证完全一致

除 model、max_mode、task_id、task_ids、persona_id、custom_model_id 的类型检查外,其余字段由上游校验。

custom: true 是自定义歌词模式,custom_model_id 是使用已训练的自定义模型,两者不是同一个概念。variety: "max" 与 Max 模式相互独立,不会触发 Max 计费。

操作列表

除生成音乐外,其它操作统一为 POST /v1/music/generations/{operation}。下表价格为积分/次,以定价页为准。

{operation}功能主要参数价格Max
(无)生成音乐见上节0.6251.25
lyrics生成歌词prompt、lyrics_model0.1
inspo灵感生成:参考音频生成新歌audio_urls、version、tags、prompt0.851.7
sounds音效生成prompt、version、type、bpm、key0.12
upsampleTags风格标签增强tags0.05
uploadTask导入公网音频,产出可被引用的源任务audioFilePath(只接收这一个字段)0.05
uploadCover上传音频并翻唱audio_url、version、custom、tags、duration_s0.6251.25
uploadExtend上传音频并延伸audio_url、continue_at、version、prompt、tags0.6251.25
createModel创建自定义模型name、audio_urls12
extend续写延长task_id、audio_index、continue_at、version、prompt0.6251.25
coverSong风格翻唱task_id、audio_index、version、tags0.6251.25
remaster母带优化task_id、audio_index、variation_category0.625
stems分轨提取task_id、audio_index、stem_type1.25
stemsAll全量分轨task_id、audio_index3
addVocals添加人声task_id、audio_index、version、prompt0.6251.25
addInstrumental添加伴奏task_id、audio_index、version、tags0.6251.25
addStem添加音轨task_id、audio_index、version、gpt_description0.6251.25
vox提取人声(已弃用)task_id、audio_index、vocal_start_s、vocal_end_s0.05
createVoice创建音色audio_url0.2
persona创建歌手 Personatask_id、audio_index、name、styles0.05
replaceMusic段落替换task_id、audio_index、start_s、end_s、infill_lyrics0.6251.25
removeSection删除片段task_id、audio_index、start_s、end_s0.1
crop裁剪音频task_id、audio_index、start_s、end_s0.1
fadeIn淡入task_id、audio_index、duration_s0.1
fadeOut淡出task_id、audio_index、duration_s0.1
adjustSpeed调整速度task_id、audio_index、speed、keep_pitch0.3
concat完整歌曲合成 / 拼接task_id、audio_index0.05
mashup生成混搭task_ids、audio_indexes、version、prompt0.6251.25
sample样本转歌曲task_id、audio_index、start_s、end_s、prompt0.6251.25
midi生成 MIDItask_id、audio_index0.625
alignedLyrics歌词时间轴task_id、audio_index0.01
bpmBPM 分析task_id、audio_index0.01
generateMp4生成音乐视频task_id、audio_index0.05
download下载为 MP3 / M4A / WAVtask_id、audio_index、formats0.02
wav下载 WAV(已弃用,等同 download + formats: ["wav"])task_id、audio_index0.02

支持版本选择的编辑操作省略 version 时默认使用 v6。操作接口里风格字段叫 tags、描述字段叫 gpt_description、怪异度叫 weirdness(生成音乐接口分别是 style、prompt、weirdness_constraint)。不支持某字段的操作请完全省略该字段,不要统一发送 max_mode: false。

引用源音轨

基于已有作品的操作用 task_id + audio_index 指定源音轨:

  • task_id:产出源音轨的本平台任务 ID(at_ 开头)。上传自己的音频请先调用 uploadTask,用它的 task_id 作源,audio_index 为 1。
  • audio_index:源任务结果 result.music[] 中的原始位置,从 1 开始,默认 1。按实际返回数量处理,不要假设固定为 2 首。
curl https://api.vibelab.me/v1/music/generations/extend \
  -H "Authorization: Bearer $LOOPTOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "task_id": "at_0198f0a0-1111-7777-8888-999999999999",
    "audio_index": 1,
    "continue_at": 120,
    "version": "v6",
    "prompt": "[Outro]\n下一段旅途,我们一起走"
  }'

只能引用自己账户下已成功的任务。不支持 audio_id、music_id 等旧式 ID 字段,传入会返回 400。mashup 的多个源任务若无法组合,返回 400 invalid_source_reference。

自定义模型与 Persona

  • createModel 完成后读取 result.model_id,在支持的操作里作为 custom_model_id 使用,同时省略 version 和 persona_id。创建可能需要数分钟,最长约 20 分钟;创建与后续每次生成分别计费。
  • persona 完成后读取 result.persona_id,在自定义模式下作为 persona_id 使用。

custom_model_id 与 persona_id 只能在创建它们的账户中使用。

请求示例

完整轮询示例

import os
import time
import requests

BASE_URL = "https://api.vibelab.me"
headers = {"Authorization": f"Bearer {os.environ['LOOPTOKEN_API_KEY']}"}

response = requests.post(
    f"{BASE_URL}/v1/music/generations",
    headers=headers,
    json={"model": "suno", "version": "v6", "custom": False, "prompt": "明亮的电子流行配乐,适合产品发布视频"},
)
response.raise_for_status()
task_id = response.json()["data"][0]["task_id"]

time.sleep(3)
while True:
    task = requests.get(f"{BASE_URL}/v1/music/tasks/{task_id}", headers=headers).json()["data"]
    if task["status"] in ("completed", "failed"):
        break
    time.sleep(6)

if task["status"] == "failed":
    raise RuntimeError(task["error"])

for track in task["result"]["music"]:
    print(track["title"], track["audio_url"])

响应

提交响应见快速开始。查询任务:

GET/v1/music/tasks/{task_id}
curl https://api.vibelab.me/v1/music/tasks/at_0198f0a0-1111-7777-8888-999999999999 \
  -H "Authorization: Bearer $LOOPTOKEN_API_KEY"
{
  "code": 200,
  "data": {
    "id": "at_0198f0a0-1111-7777-8888-999999999999",
    "status": "completed",
    "progress": 100,
    "created": 1789041600,
    "cost": 0.0625,
    "credits_cost": 0.625,
    "result": {
      "music": [
        {
          "audio_id": "example-track-id",
          "title": "沿着灯光",
          "lyrics": "[Verse]\n晚风吹过熟悉街道",
          "tags": "pop, acoustic",
          "duration": 119.8,
          "audio_url": "https://example.com/result.mp3",
          "image_url": "https://example.com/cover.jpg"
        }
      ]
    }
  }
}
字段类型说明
data.idstring任务 ID(at_ 前缀)
data.statusstringpending / processing / completed(终态)/ failed(终态)
data.progressinteger进度 0 到 100,是否完成以 status 为准
data.createdinteger创建时间,Unix 秒
data.credits_cost / data.costnumber本次扣费,积分 / 美元(10 积分 = 1 美元),结算后返回
data.resultobject完成后的结果,结构随操作不同:音乐类在 result.music[],歌词、MIDI、分轨、Persona、自定义模型等各有自己的结构
data.errorobject失败时返回:message、type(task_failed)、code(task_failed 或 timeout)
  • duration 是实际时长,允许小数;权重返回值 0 是有效值。
  • audio_url 不保证使用 .mp3 后缀,请按返回的实际 URL 播放或下载,并及时转存到自己的存储。
  • 结果媒体由平台转存,文件自任务完成起保留 3 天,请及时转存。
  • 当前没有取消已提交任务的接口。

计费

  • 提交时按操作价格预扣,任务成功后结算;失败或超时自动退款。
  • Max 模式(max_mode: true)按普通价格的 2 倍计费,仅上表中有 Max 价格的操作支持。
  • 一次任务返回多首歌曲时仍按一次任务计费。
  • 实际扣费以终态任务中的 credits_cost 和定价页为准。

错误

错误体为 {"error": {"message": "...", "type": "...", "code": "...", "request_id": "..."}}(type 与 code 相同),通用错误码见错误码。本接口常见错误:

HTTPcode触发场景处理
400invalid_request_errorJSON 不合法、字段类型错误;传入 audio_id、music_id、clip_id 等旧式 ID 字段按 message 修正;引用源音轨改用 task_id + audio_index
400invalid_source_reference源任务、persona_id 或 custom_model_id 不存在、未完成、不属于当前账户,或不能组合使用使用自己账户已成功任务产出的引用
404not_found操作名不存在核对操作列表
404model_not_foundmodel 不是 suno / flowmusic,或该模型没有可售价格核对 model
404task_not_found任务不存在或不属于当前账户核对 task_id
429media_concurrency_exceeded用户或 API Key 的媒体并发超限(响应带 Retry-After)稍后重试
502upstream_error音乐服务暂时不可用指数退避重试,已预扣的费用会退回
503no_available_channel当前没有可用的音乐生成通道指数退避重试

余额不足返回 402 insufficient_credits。

注意事项

  • 网络超时 → 不要自动重发收费的 POST,先用 task_id 查询确认。
  • custom_model_id、persona_id → 只能在创建它们的账户中使用。
  • audio_url → 不保证 .mp3 后缀,按返回的实际 URL 处理。

本页内容