API 使用指南

用最简单的话,告诉你 Suno 音乐 API 怎么用

⚠️ 先搞清楚:API 和网站是两回事

🌐 网站(给普通用户)

  • • 打开网页,填描述,点按钮,等音乐
  • • 有界面、有播放器,所见即所得
  • • 不需要写代码

🔌 API(给开发者)

  • • 用代码发 HTTP 请求,拿 JSON 结果
  • • 适合接入自己的产品、批量处理
  • • 需要会写代码

如果你不是开发者,不需要用这个网站。想做音乐请直接去 www.suno.cn

想接入 OpenClaw、扣子等 AI 助手?个人用户建议直接访问 www.suno.cn 页面上的「OpenClaw 接入」入口,无需写代码。

开始之前

获取 API Key:

  1. 注册并登录商户后台
  2. 进入「API 密钥管理」页面
  3. 点击「创建新 API 密钥」,拿到你的 access_key

每次请求都要带上这两个 Header:

Authorization: Bearer 你的access_key
Content-Type: application/json

基础地址:/api/v1

🔄 核心调用流程(必读)

几乎所有 Suno 接口都是异步的,调用流程都一样:

1. 提交任务
2. 拿到 task_id
3. 轮询查结果
// 第一步:提交生成任务
POST /api/v1/music/generate
→ 返回 { "data": { "task_ids": [204, 205] } }

// 第二步:每 5~10 秒查一次
GET /api/v1/music/task?id=204
→ status: "pending" / "processing" / "completed" / "failed"

// 第三步:status 为 completed 时,从 result 里取音频地址

⚠️ 重要区分:task_id 是任务 ID(数字),custom_id 是 Suno 音乐 ID(UUID 字符串)。后续操作(延长、翻唱、合成整首歌等)用的是 custom_id,不是 task_id。

🎵 生成音乐 — POST /music/generate

核心接口,支持 4 种创作模式。提交后返回 2 个 task_id(Suno 每次生成 2 首)。

🎤 灵感模式

给个描述让 AI 自由发挥,最简单的用法。

{
  "gpt_description_prompt": "一首欢快的流行歌,关于夏天的美好回忆",
  "make_instrumental": false,  // true=纯音乐 false=有人声
  "mv": "chirp-v4",            // 模型版本
  "title": "夏日回忆"           // 歌名
}

📝 自定义歌词

自己写歌词 + 风格标签,精确控制。

{
  "prompt": "阳光洒在肩上\n微风轻轻吹过脸庞\n[Chorus]\n这就是青春的模样",
  "tags": "pop, acoustic, summer, female vocals",
  "make_instrumental": false,
  "mv": "chirp-v4",
  "title": "青春的模样"
}

🔄 延长模式

把一首歌续写下去。

{
  "task": "extend",
  "continue_clip_id": "之前的custom_id",
  "mv": "chirp-v4",
  "title": "夏日回忆(续)"
}

🎙️ 翻唱模式

用新风格翻唱已有歌曲。

{
  "task": "cover",
  "cover_clip_id": "要翻唱的custom_id",
  "tags": "jazz, piano, male vocals",
  "mv": "chirp-v4",
  "title": "夏日回忆(爵士版)"
}

💡 模型版本说明

  • chirp-fenix — Suno V5.5(最新)
  • chirp-crow — Suno V5
  • chirp-v4 — Suno V4(推荐)
  • chirp-v3-5 — Suno V3.5
  • chirp-v3-0 — Suno V3

🔍 查询任务

单个查询 — GET /music/task

GET /api/v1/music/task?id=204   // 注意:这里是数字 ID,不是 UUID

返回的关键字段:status(任务状态)、result.custom_id(Suno 音乐 ID)、result.fileInfo.mp3Url(音频地址)

批量查询 — GET /music/tasks

GET /api/v1/music/tasks?ids=204,205&page=1&size=20

一次查多个任务,适合生成音乐后同时查 2 个 task_id。

⚠️ 响应数据中的关键字段

  • result.custom_id — Suno 音乐 ID(UUID),后续延长/翻唱/合成整首歌都用它
  • result.fileInfo.mp3Url — 音频下载地址
  • result.fileInfo.cosUrl — 封面图地址
  • result.fileInfo.duration — 音频时长(秒)
  • result.extend — JSON 字符串,需要 JSON.parse 后使用,包含完整歌曲信息

📤 上传参考音频 — POST /music/upload

上传一首已有的歌,拿到 custom_id 后可以用来延长或翻唱。

{
  "audio_url": "https://example.com/my-song.mp3"  // 音频文件的公开 URL
}

提交后拿到 task_id → 轮询查询 → 完成后从 result.custom_id 拿到音乐 ID,就可以用在延长/翻唱模式里了。

🛠️ 后期处理

音乐生成后的各种加工操作,都是异步的,流程和生成音乐一样(提交 → 拿 task_id → 轮询)。

🎼 合成整首歌

POST /music/whole-song

{ "clip_id": "custom_id" }

把多段续写的片段合并成一首完整的歌。

📜 歌词时间戳对齐

POST /music/aligned-lyrics

{
  "lyrics": "歌词内容",
  "suno_id": "custom_id"
}

给歌词加上时间戳,做字幕用。

🔊 Remaster 升采样

POST /music/upsample

{
  "clip_id": "custom_id",
  "model_name": "chirp-v4"
}

提升音质,返回 2 个 task_id。

🎬 生成音乐 MV

POST /music/video

{
  "task_id": 204,          // 数字 task_id
  "suno_id": "custom_id"
}

为歌曲生成一段 MV 视频。

🎧 转 WAV 格式

POST /music/convert-wav

{
  "task_id": 204,
  "suno_id": "custom_id"
}

把 MP3 转成无损 WAV 格式。

✂️ 裁剪音乐

POST /music/crop

{
  "clip_id": "custom_id",
  "start_time": 10,   // 开始秒数
  "end_time": 60       // 结束秒数
}

⏩ 变速处理

POST /music/speed

{
  "clip_id": "custom_id",
  "speed": 1.5   // 倍速,如 0.5=慢放 2.0=加速
}

💰 积分相关

查余额 — GET /points/balance

GET /api/v1/points/balance
// 返回 { "data": { "remaining_points": 1500 } }

查流水 — GET /points/logs

GET /api/v1/points/logs?page=1&limit=20
// type: 1=消耗 2=充值 3=手动调整 4=退还

❓ 常见问题

task_id 和 custom_id 到底有什么区别?

task_id 是我们平台的任务编号(数字),用来查询任务状态。custom_id 是 Suno 的音乐 ID(UUID 字符串), 后续所有操作(延长、翻唱、合成整首歌、裁剪、变速等)都要用 custom_id,不是 task_id。

为什么生成音乐返回 2 个 task_id?

Suno 每次生成会产出 2 首歌(2 个版本),所以返回 2 个 task_id,你需要分别查询。

extend 字段怎么用?

extend 是一个 JSON 字符串,需要 JSON.parse 后使用。里面是歌曲的完整信息数组, 用 extend 数组里的 id 和外层的 custom_id 对应上,就能找到当前歌曲的详细数据(标题、歌词、风格等)。

任务失败了积分会退吗?

会的,自动退还。查询任务时 points_refunded 为 true 就说明已退。

报 429 怎么办?

请求太频繁被限流了,降低频率就行。

📋 完整代码示例

生成音乐 + 轮询查结果(JavaScript)

// 第一步:提交生成任务
const res = await fetch('/api/v1/music/generate', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 你的access_key',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    gpt_description_prompt: '一首轻快的夏日流行曲',
    make_instrumental: false,
    mv: 'chirp-v4',
    title: '夏日微风'
  })
})
const { data } = await res.json()
const taskIds = data.task_ids  // [204, 205] 两首歌

// 第二步:轮询查结果(以第一首为例)
for (let i = 0; i < 60; i++) {
  await new Promise(r => setTimeout(r, 5000))  // 等 5 秒
  const query = await fetch(
    `/api/v1/music/task?id=${taskIds[0]}`,
    { headers: { 'Authorization': 'Bearer 你的access_key' } }
  )
  const { data: task } = await query.json()

  if (task.status === 'completed') {
    console.log('音频地址:', task.result.fileInfo.mp3Url)
    console.log('音乐ID:', task.result.custom_id)  // 后续操作用这个
    break
  }
  if (task.status === 'failed') {
    console.error('生成失败:', task.result?.errormsg)
    break
  }
}

🚨 错误码速查

错误码意思怎么办
200成功
400参数不对检查请求参数
401认证失败检查 API Key
402积分不够去后台充值
429请求太频繁降低频率
500服务器出错稍后重试

SUNO API

SUNO AI音乐生成API开放平台,提供稳定、高效的音乐生成接口服务,价格比主流渠道低30%以上。

技术支持

需要帮助?请微信扫码联系我们

联系客服二维码
© 2026 SUNO AI Music. All rights reserved.