# Suno 音乐生成 API 对接文档

## 基础信息

- 基础域名：`https://api.apiverse.ai`
- 鉴权方式：`Authorization: Bearer <API_KEY>`
- Content-Type：`application/json`
- 路由前缀：`/api/v2/open/aigc/suno`

所有 Suno 接口均通过上述路由前缀访问，请求体字段和查询参数会按原字段转发，不会裁剪可选参数。

## 快速示例

### 生成音乐

```bash
curl -X POST "https://api.apiverse.ai/api/v2/open/aigc/suno/generate" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <API_KEY>" \
  -d '{
    "prompt": "A calm and relaxing piano track with soft melodies",
    "style": "Classical",
    "title": "Peaceful Piano Meditation",
    "customMode": true,
    "instrumental": true,
    "model": "V5",
    "callBackUrl": "https://api.apiverse.ai/callback",
    "negativeTags": "",
    "vocalGender": "f",
    "styleWeight": 0.65,
    "weirdnessConstraint": 0.65,
    "audioWeight": 0.65,
    "personaId": ""
  }'
```

### 查询音乐任务

```bash
curl "https://api.apiverse.ai/api/v2/open/aigc/suno/generate/record-info?taskId=<TASK_ID>" \
  -H "Authorization: Bearer <API_KEY>"
```

## 接口列表

| 能力             | 方法 | 路径                                                                |
| ---------------- | ---- | ------------------------------------------------------------------- |
| 生成音乐         | POST | `/api/v2/open/aigc/suno/generate`                                   |
| 获取音乐详情     | GET  | `/api/v2/open/aigc/suno/generate/record-info?taskId=<TASK_ID>`      |
| 延长音乐         | POST | `/api/v2/open/aigc/suno/generate/extend`                            |
| 替换音乐分区     | POST | `/api/v2/open/aigc/suno/generate/replace-section`                   |
| 生成声音         | POST | `/api/v2/open/aigc/suno/generate/sounds`                            |
| 获取时间戳歌词   | POST | `/api/v2/open/aigc/suno/generate/get-timestamped-lyrics`            |
| 上传并翻唱音乐   | POST | `/api/v2/open/aigc/suno/generate/upload-cover`                      |
| 上传并扩展音乐   | POST | `/api/v2/open/aigc/suno/generate/upload-extend`                     |
| 添加伴奏         | POST | `/api/v2/open/aigc/suno/generate/add-instrumental`                  |
| 添加人声         | POST | `/api/v2/open/aigc/suno/generate/add-vocals`                        |
| 生成混音音乐     | POST | `/api/v2/open/aigc/suno/generate/mashup`                            |
| 生成 Persona     | POST | `/api/v2/open/aigc/suno/generate/generate-persona`                  |
| 生成歌词         | POST | `/api/v2/open/aigc/suno/lyrics`                                     |
| 获取歌词详情     | GET  | `/api/v2/open/aigc/suno/lyrics/record-info?taskId=<TASK_ID>`        |
| 生成音乐封面     | POST | `/api/v2/open/aigc/suno/cover/generate`                             |
| 获取音乐封面详情 | GET  | `/api/v2/open/aigc/suno/cover/record-info?taskId=<TASK_ID>`         |
| 人声和乐器分离   | POST | `/api/v2/open/aigc/suno/vocal-removal/generate`                     |
| 获取分离详情     | GET  | `/api/v2/open/aigc/suno/vocal-removal/record-info?taskId=<TASK_ID>` |
| 转换 WAV         | POST | `/api/v2/open/aigc/suno/wav/generate`                               |
| 获取 WAV 详情    | GET  | `/api/v2/open/aigc/suno/wav/record-info?taskId=<TASK_ID>`           |
| 创建音乐视频     | POST | `/api/v2/open/aigc/suno/mp4/generate`                               |
| 获取音乐视频详情 | GET  | `/api/v2/open/aigc/suno/mp4/record-info?taskId=<TASK_ID>`           |
| 生成 MIDI        | POST | `/api/v2/open/aigc/suno/midi/generate`                              |
| 获取 MIDI 详情   | GET  | `/api/v2/open/aigc/suno/midi/record-info?taskId=<TASK_ID>`          |
| 优化音乐风格     | POST | `/api/v2/open/aigc/suno/style/generate`                             |

## 参数说明

### 1. 生成音乐

**POST** `/api/v2/open/aigc/suno/generate`

| 参数                | 类型    | 必填     | 说明                                                                                                          |
| ------------------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------- |
| prompt              | string  | 是       | 音乐内容提示词。`customMode=true` 且 `instrumental=false` 时作为歌词使用；`customMode=false` 时作为创意提示。 |
| style               | string  | 条件必填 | 音乐风格。`customMode=true` 时必填；`customMode=false` 时应留空或不传。                                       |
| title               | string  | 条件必填 | 音乐标题。`customMode=true` 时必填。                                                                          |
| customMode          | boolean | 是       | 是否启用自定义模式。                                                                                          |
| instrumental        | boolean | 是       | 是否生成纯音乐。                                                                                              |
| model               | string  | 是       | 模型版本：`V4` / `V4_5` / `V4_5PLUS` / `V4_5ALL` / `V5` / `V5_5`。                                            |
| callBackUrl         | string  | 是       | 任务状态回调地址。                                                                                            |
| negativeTags        | string  | 否       | 需要排除的风格或特征。                                                                                        |
| vocalGender         | string  | 否       | 人声性别偏好：`m` / `f`，仅自定义模式下建议使用。                                                             |
| styleWeight         | number  | 否       | 风格遵循强度，范围 `0` 到 `1`，建议保留两位小数。                                                             |
| weirdnessConstraint | number  | 否       | 创意偏离程度，范围 `0` 到 `1`。                                                                               |
| audioWeight         | number  | 否       | 音频要素权重，范围 `0` 到 `1`。                                                                               |
| personaId           | string  | 否       | Persona ID，用于套用特定音乐人格。                                                                            |

### 2. 获取音乐详情

**GET** `/api/v2/open/aigc/suno/generate/record-info?taskId=<TASK_ID>`

| 参数   | 位置  | 类型   | 必填 | 说明                                                |
| ------ | ----- | ------ | ---- | --------------------------------------------------- |
| taskId | query | string | 是   | 生成、延长、上传翻唱、上传扩展等任务返回的任务 ID。 |

### 3. 延长音乐

**POST** `/api/v2/open/aigc/suno/generate/extend`

| 参数                | 类型    | 必填     | 说明                                                               |
| ------------------- | ------- | -------- | ------------------------------------------------------------------ |
| defaultParamFlag    | boolean | 是       | `true` 表示使用本次请求传入的新参数；`false` 表示沿用源音频参数。  |
| audioId             | string  | 是       | 要延长的音频 ID。                                                  |
| model               | string  | 是       | 模型版本：`V4` / `V4_5` / `V4_5PLUS` / `V4_5ALL` / `V5` / `V5_5`。 |
| callBackUrl         | string  | 是       | 任务状态回调地址。                                                 |
| prompt              | string  | 条件必填 | `defaultParamFlag=true` 时必填，描述延长部分内容。                 |
| style               | string  | 条件必填 | `defaultParamFlag=true` 时必填，描述音乐风格。                     |
| title               | string  | 条件必填 | `defaultParamFlag=true` 时必填。                                   |
| continueAt          | number  | 条件必填 | `defaultParamFlag=true` 时必填，从源音频第几秒开始延长。           |
| instrumental        | boolean | 否       | 是否生成纯音乐。                                                   |
| negativeTags        | string  | 否       | 需要排除的风格或特征。                                             |
| vocalGender         | string  | 否       | 人声性别偏好：`m` / `f`。                                          |
| styleWeight         | number  | 否       | 风格遵循强度，范围 `0` 到 `1`。                                    |
| weirdnessConstraint | number  | 否       | 创意偏离程度，范围 `0` 到 `1`。                                    |
| audioWeight         | number  | 否       | 音频要素权重，范围 `0` 到 `1`。                                    |
| personaId           | string  | 否       | Persona ID。                                                       |

### 4. 生成歌词

**POST** `/api/v2/open/aigc/suno/lyrics`

| 参数        | 类型   | 必填 | 说明                                             |
| ----------- | ------ | ---- | ------------------------------------------------ |
| prompt      | string | 是   | 歌词主题、情绪、风格或故事描述。                 |
| callBackUrl | string | 否   | 歌词生成完成回调地址；不传时可通过查询接口轮询。 |

### 5. 获取歌词详情

**GET** `/api/v2/open/aigc/suno/lyrics/record-info?taskId=<TASK_ID>`

| 参数   | 位置  | 类型   | 必填 | 说明                        |
| ------ | ----- | ------ | ---- | --------------------------- |
| taskId | query | string | 是   | 生成歌词接口返回的任务 ID。 |

### 6. 生成声音

**POST** `/api/v2/open/aigc/suno/generate/sounds`

| 参数        | 类型    | 必填 | 说明                                   |
| ----------- | ------- | ---- | -------------------------------------- |
| prompt      | string  | 是   | 声音内容提示词，建议 500 字符以内。    |
| model       | string  | 是   | 模型版本：`V5` / `V5_5`。              |
| soundLoop   | boolean | 否   | 是否生成循环音频，默认 `false`。       |
| soundTempo  | integer | 否   | BPM，范围 `1` 到 `300`；不传表示自动。 |
| soundKey    | string  | 否   | 调性，如 `C`、`D#m`、`Any`。           |
| grabLyrics  | boolean | 否   | 是否抓取歌词字幕。                     |
| callBackUrl | string  | 否   | 任务状态回调地址。                     |

### 7. 获取时间戳歌词

**POST** `/api/v2/open/aigc/suno/generate/get-timestamped-lyrics`

| 参数    | 类型   | 必填 | 说明                        |
| ------- | ------ | ---- | --------------------------- |
| taskId  | string | 是   | 音乐生成任务 ID。           |
| audioId | string | 是   | 要获取时间戳歌词的音频 ID。 |

### 8. 替换音乐分区

**POST** `/api/v2/open/aigc/suno/generate/replace-section`

| 参数         | 类型   | 必填 | 说明                   |
| ------------ | ------ | ---- | ---------------------- |
| taskId       | string | 是   | 源音乐任务 ID。        |
| audioId      | string | 是   | 要替换片段的音频 ID。  |
| prompt       | string | 是   | 替换片段的新歌词。     |
| tags         | string | 是   | 音乐风格标签。         |
| title        | string | 是   | 音乐标题。             |
| infillStartS | number | 是   | 替换起始时间，单位秒。 |
| infillEndS   | number | 是   | 替换结束时间，单位秒。 |
| fullLyrics   | string | 是   | 替换后的完整歌词。     |
| negativeTags | string | 否   | 需要排除的风格或特征。 |
| callBackUrl  | string | 否   | 任务状态回调地址。     |

### 9. 上传并翻唱音乐

**POST** `/api/v2/open/aigc/suno/generate/upload-cover`

| 参数                | 类型    | 必填     | 说明                                                               |
| ------------------- | ------- | -------- | ------------------------------------------------------------------ |
| uploadUrl           | string  | 是       | 可公开访问的源音频 URL。                                           |
| customMode          | boolean | 是       | 是否启用自定义模式。                                               |
| instrumental        | boolean | 是       | 是否生成纯音乐。                                                   |
| model               | string  | 是       | 模型版本：`V4` / `V4_5` / `V4_5PLUS` / `V4_5ALL` / `V5` / `V5_5`。 |
| callBackUrl         | string  | 是       | 任务状态回调地址。                                                 |
| prompt              | string  | 条件必填 | `customMode=true` 且 `instrumental=false` 时必填。                 |
| style               | string  | 条件必填 | `customMode=true` 时必填。                                         |
| title               | string  | 条件必填 | `customMode=true` 时必填。                                         |
| negativeTags        | string  | 否       | 需要排除的风格或特征。                                             |
| vocalGender         | string  | 否       | 人声性别偏好：`m` / `f`。                                          |
| styleWeight         | number  | 否       | 风格遵循强度，范围 `0` 到 `1`。                                    |
| weirdnessConstraint | number  | 否       | 创意偏离程度，范围 `0` 到 `1`。                                    |
| audioWeight         | number  | 否       | 音频要素权重，范围 `0` 到 `1`。                                    |
| personaId           | string  | 否       | Persona ID。                                                       |

### 10. 上传并扩展音乐

**POST** `/api/v2/open/aigc/suno/generate/upload-extend`

| 参数                | 类型    | 必填     | 说明                                                               |
| ------------------- | ------- | -------- | ------------------------------------------------------------------ |
| uploadUrl           | string  | 是       | 可公开访问的源音频 URL。                                           |
| defaultParamFlag    | boolean | 是       | `true` 表示使用本次请求传入的新参数；`false` 表示沿用源音频参数。  |
| model               | string  | 是       | 模型版本：`V4` / `V4_5` / `V4_5PLUS` / `V4_5ALL` / `V5` / `V5_5`。 |
| callBackUrl         | string  | 是       | 任务状态回调地址。                                                 |
| instrumental        | boolean | 否       | 是否生成纯音乐。                                                   |
| prompt              | string  | 条件必填 | `defaultParamFlag=true` 时必填。                                   |
| style               | string  | 条件必填 | `defaultParamFlag=true` 时必填。                                   |
| title               | string  | 条件必填 | `defaultParamFlag=true` 时必填。                                   |
| continueAt          | number  | 条件必填 | `defaultParamFlag=true` 时必填，从源音频第几秒开始扩展。           |
| negativeTags        | string  | 否       | 需要排除的风格或特征。                                             |
| vocalGender         | string  | 否       | 人声性别偏好：`m` / `f`。                                          |
| styleWeight         | number  | 否       | 风格遵循强度，范围 `0` 到 `1`。                                    |
| weirdnessConstraint | number  | 否       | 创意偏离程度，范围 `0` 到 `1`。                                    |
| audioWeight         | number  | 否       | 音频要素权重，范围 `0` 到 `1`。                                    |
| personaId           | string  | 否       | Persona ID。                                                       |

### 11. 添加伴奏

**POST** `/api/v2/open/aigc/suno/generate/add-instrumental`

| 参数                | 类型   | 必填 | 说明                                                    |
| ------------------- | ------ | ---- | ------------------------------------------------------- |
| uploadUrl           | string | 是   | 要添加伴奏的源音频 URL。                                |
| title               | string | 是   | 生成音乐标题。                                          |
| negativeTags        | string | 是   | 需要排除的风格或特征。                                  |
| tags                | string | 是   | 期望包含的音乐风格标签。                                |
| callBackUrl         | string | 是   | 任务状态回调地址。                                      |
| model               | string | 否   | 模型版本：`V4` / `V4_5` / `V4_5PLUS`，默认 `V4_5PLUS`。 |
| vocalGender         | string | 否   | 人声性别偏好：`m` / `f`。                               |
| styleWeight         | number | 否   | 风格遵循强度，范围 `0` 到 `1`。                         |
| weirdnessConstraint | number | 否   | 创意偏离程度，范围 `0` 到 `1`。                         |
| audioWeight         | number | 否   | 音频要素权重，范围 `0` 到 `1`。                         |

### 12. 添加人声

**POST** `/api/v2/open/aigc/suno/generate/add-vocals`

| 参数                | 类型   | 必填 | 说明                                                    |
| ------------------- | ------ | ---- | ------------------------------------------------------- |
| prompt              | string | 是   | 人声演唱内容或歌词提示。                                |
| title               | string | 是   | 音乐标题。                                              |
| negativeTags        | string | 是   | 需要排除的风格或特征。                                  |
| style               | string | 是   | 音乐风格。                                              |
| uploadUrl           | string | 是   | 要添加人声的源音频 URL。                                |
| callBackUrl         | string | 是   | 任务状态回调地址。                                      |
| model               | string | 否   | 模型版本：`V4` / `V4_5` / `V4_5PLUS`，默认 `V4_5PLUS`。 |
| vocalGender         | string | 否   | 人声性别偏好：`m` / `f`。                               |
| styleWeight         | number | 否   | 风格遵循强度，范围 `0` 到 `1`。                         |
| weirdnessConstraint | number | 否   | 创意偏离程度，范围 `0` 到 `1`。                         |
| audioWeight         | number | 否   | 音频要素权重，范围 `0` 到 `1`。                         |

### 13. 生成混音音乐

**POST** `/api/v2/open/aigc/suno/generate/mashup`

| 参数                | 类型     | 必填     | 说明                                                                                                          |
| ------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------- |
| uploadUrlList       | string[] | 是       | 要混音的音频 URL 数组，必须包含 2 个 URL。                                                                    |
| customMode          | boolean  | 是       | 是否启用自定义模式。                                                                                          |
| model               | string   | 是       | 模型版本：`V4` / `V4_5` / `V4_5PLUS` / `V4_5ALL` / `V5` / `V5_5`。                                            |
| callBackUrl         | string   | 是       | 任务状态回调地址。                                                                                            |
| style               | string   | 条件必填 | 音乐风格。`customMode=true` 时必填；`customMode=false` 时应留空或不传。                                       |
| title               | string   | 条件必填 | 音乐标题。`customMode=true` 时必填。                                                                          |
| prompt              | string   | 条件必填 | `customMode=true` 且 `instrumental=false` 时必填，作为歌词使用；`customMode=false` 时作为创意提示。           |
| instrumental        | boolean  | 否       | 是否生成纯音乐。                                                                                              |
| vocalGender         | string   | 否       | 人声性别偏好：`m` / `f`，仅 `customMode=true` 时生效。                                                        |
| styleWeight         | number   | 否       | 风格遵循强度，范围 `0` 到 `1`，仅 `customMode=true` 时生效。                                                  |
| weirdnessConstraint | number   | 否       | 创意偏离程度，范围 `0` 到 `1`，仅 `customMode=true` 时生效。                                                  |
| audioWeight         | number   | 否       | 音频要素权重，范围 `0` 到 `1`，仅 `customMode=true` 时生效。                                                  |

### 14. 生成 Persona

**POST** `/api/v2/open/aigc/suno/generate/generate-persona`

| 参数        | 类型   | 必填 | 说明                                     |
| ----------- | ------ | ---- | ---------------------------------------- |
| taskId      | string | 是   | 已完成音乐任务 ID。                      |
| audioId     | string | 是   | 用于创建 Persona 的音频 ID。             |
| name        | string | 是   | Persona 名称。                           |
| description | string | 是   | Persona 的音乐特征、风格和人声特质说明。 |

### 15. 生成音乐封面

**POST** `/api/v2/open/aigc/suno/cover/generate`

| 参数        | 类型   | 必填 | 说明                   |
| ----------- | ------ | ---- | ---------------------- |
| taskId      | string | 是   | 原音乐任务 ID。        |
| callBackUrl | string | 否   | 封面生成完成回调地址。 |

### 16. 获取音乐封面详情

**GET** `/api/v2/open/aigc/suno/cover/record-info?taskId=<TASK_ID>`

| 参数   | 位置  | 类型   | 必填 | 说明              |
| ------ | ----- | ------ | ---- | ----------------- |
| taskId | query | string | 是   | 封面生成任务 ID。 |

### 17. 人声和乐器分离

**POST** `/api/v2/open/aigc/suno/vocal-removal/generate`

| 参数        | 类型   | 必填 | 说明                                                                                      |
| ----------- | ------ | ---- | ----------------------------------------------------------------------------------------- |
| taskId      | string | 是   | 音乐生成任务 ID。                                                                         |
| audioId     | string | 是   | 要分离的音频 ID。                                                                         |
| callBackUrl | string | 是   | 任务状态回调地址。                                                                        |
| type        | string | 否   | 分离类型：`separate_vocal`（人声/伴奏）或 `split_stem`（多音轨），默认 `separate_vocal`。 |

### 18. 获取分离详情

**GET** `/api/v2/open/aigc/suno/vocal-removal/record-info?taskId=<TASK_ID>`

| 参数   | 位置  | 类型   | 必填 | 说明          |
| ------ | ----- | ------ | ---- | ------------- |
| taskId | query | string | 是   | 分离任务 ID。 |

### 19. 转换 WAV

**POST** `/api/v2/open/aigc/suno/wav/generate`

| 参数        | 类型   | 必填 | 说明               |
| ----------- | ------ | ---- | ------------------ |
| taskId      | string | 是   | 音乐生成任务 ID。  |
| audioId     | string | 是   | 要转换的音频 ID。  |
| callBackUrl | string | 是   | 任务状态回调地址。 |

### 20. 获取 WAV 详情

**GET** `/api/v2/open/aigc/suno/wav/record-info?taskId=<TASK_ID>`

| 参数   | 位置  | 类型   | 必填 | 说明              |
| ------ | ----- | ------ | ---- | ----------------- |
| taskId | query | string | 是   | WAV 转换任务 ID。 |

### 21. 创建音乐视频

**POST** `/api/v2/open/aigc/suno/mp4/generate`

| 参数        | 类型   | 必填 | 说明                                       |
| ----------- | ------ | ---- | ------------------------------------------ |
| taskId      | string | 是   | 音乐生成任务 ID。                          |
| audioId     | string | 是   | 要生成视频的音频 ID。                      |
| callBackUrl | string | 是   | 任务状态回调地址。                         |
| author      | string | 否   | 视频封面展示的作者名，最多 50 字符。       |
| domainName  | string | 否   | 视频底部展示的品牌或站点名，最多 50 字符。 |

### 22. 获取音乐视频详情

**GET** `/api/v2/open/aigc/suno/mp4/record-info?taskId=<TASK_ID>`

| 参数   | 位置  | 类型   | 必填 | 说明              |
| ------ | ----- | ------ | ---- | ----------------- |
| taskId | query | string | 是   | 音乐视频任务 ID。 |

### 23. 生成 MIDI

**POST** `/api/v2/open/aigc/suno/midi/generate`

| 参数        | 类型   | 必填 | 说明                                                |
| ----------- | ------ | ---- | --------------------------------------------------- |
| taskId      | string | 是   | 已完成人声/乐器分离任务 ID。                        |
| callBackUrl | string | 是   | 任务状态回调地址。                                  |
| audioId     | string | 否   | 要生成 MIDI 的分离音轨 ID；不传时通常处理默认音轨。 |

### 24. 获取 MIDI 详情

**GET** `/api/v2/open/aigc/suno/midi/record-info?taskId=<TASK_ID>`

| 参数   | 位置  | 类型   | 必填 | 说明           |
| ------ | ----- | ------ | ---- | -------------- |
| taskId | query | string | 是   | MIDI 任务 ID。 |

### 25. 优化音乐风格

**POST** `/api/v2/open/aigc/suno/style/generate`

| 参数    | 类型   | 必填 | 说明                                       |
| ------- | ------ | ---- | ------------------------------------------ |
| content | string | 是   | 待优化的风格描述，例如 `Pop, Mysterious`。 |

## 响应格式

接口响应保持原始 JSON 格式。创建类接口通常返回 `data.taskId`，查询类接口通常返回 `data.status`、`data.response`、`data.response.sunoData` 等字段。

```json
{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_xxx"
  }
}
```