替換段落 API
介面說明
替換段落用於對既有歌曲的指定時間段進行局部重新生成,適合修正一句歌詞或替換某個片段。
介面位址:POST /api/music/replace-section
計費:收費,目前預設 0.6 元/次。實際扣費以目前後台價格設定為準。
Max Mode / Variety:本介面支援選用參數 max_mode 與 variety(0-4)。開啟 max_mode
時本次依 2 倍價格計費(0.6 → 1.2 元/次),variety 不額外計費;兩者含義與寫法見
Suno API 介面文件總覽 的「進階參數」一節。
等待時間與逾時(重要):本介面是同步介面,回應返回時才代表訂單已被受理並提交生成。實測多數請求 1–3 秒返回,約 10% 超過 30 秒,最長約 230 秒。請把用戶端逾時設為 300 秒以上;未收到回應不等於沒有生成,逾時後請勿立即重試(會重複下單、重複扣費)。 連線中斷可稍後用
GET /api/music/songs確認。詳見 Suno API 介面文件總覽的「等待時間與逾時設定」。
請求參數
Headers
| 參數名 | 型別 | 必填 | 說明 |
|---|---|---|---|
| Authorization | string | 是 | Bearer YOUR_API_KEY |
| Content-Type | string | 是 | application/json |
Body 參數
| 參數名 | 型別 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
| model | string | 否 | suno-v6 | 對客模型名:suno-v6、suno-v6-wild 或 suno-v6-mini |
| audioId | string | 是 | - | 原歌曲 ID |
| startSeconds | number | 是 | - | 替換開始秒數,可填小數。片段長度必須 ≥ 2 秒 |
| endSeconds | number | 是 | - | 替換結束秒數,可填小數;必須大於 startSeconds,且區間要在原歌時長內 |
| contextLyrics | string | 是 | - | 整首歌的完整歌詞,作為生成上下文(相容寫法 prompt)。不傳會 400 |
| contextWindowLyrics | string | 否 | 同 contextLyrics |
要替換的那段附近的歌詞(前後一兩句即可),用於銜接;不傳則用 contextLyrics |
| infillLyrics | string | 否 | 同 contextLyrics |
替換後的新歌詞;不傳則用 contextLyrics(等於照原詞重唱這一段) |
| style | string | 否 | - | 風格標籤 |
| title | string | 否 | - | 標題 |
| negativeTags | string | 否 | - | 負向風格 |
| requestedAt | number | 否 | - | 請求時間戳 |
startSeconds、endSeconds 的單位是秒,可以填寫小數;startSeconds 必須小於 endSeconds,並且區間應位於原歌曲時長內。requestedAt 僅在需要傳遞請求時間時使用,單位為 Unix 秒級時間戳,不是毫秒時間戳;通常可以省略。
替換介面也是非同步任務。回傳的 clip 初始狀態可能為 pending,此時音訊位址為空屬於正常現象,請使用回傳的真實 song_id 查詢最終結果。
片段長度:至少 2 秒(重要)
要替換的區間不能短於 2 秒。實測:1.0 / 1.2 / 1.5 秒的區間全部失敗,2.0 秒及以上正常。
區間過短時,平台回的不是「參數錯誤」,而是一句容易被誤讀的提示:
{"error":{"message":"You don't have access to this model. Upgrade your plan to use it.",
"type":"bad_response_status_code","code":"bad_response_status_code"}}
這句話不是帳號或方案問題,而是片段太短。把區間拉長到 2 秒以上再提交即可。
請求範例
curl -X POST https://www.suno-api.io/api/music/replace-section \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"audioId": "clip_id",
"startSeconds": 30,
"endSeconds": 45,
"contextLyrics": "完整上下文歌詞",
"contextWindowLyrics": "視窗上下文歌詞",
"infillLyrics": "替換後的歌詞",
"style": "Mandopop, acoustic",
"title": "替換版本",
"negativeTags": "noise"
}'
回應結果
{
"code": 200,
"message": "success",
"data": {
"clips": [
{
"song_id": "replace_clip_id",
"song_title": "替換版本",
"status": "pending"
}
],
"replaceTask": "infill",
"clipId": "clip_id",
"source_update": {}
}
}
相容欄位
audioId/audio_id/clipId/clip_idstartSeconds/start_seconds/infillStartS/infill_start_sendSeconds/end_seconds/infillEndS/infill_end_sinfillLyrics/infill_lyrics/replacementLyrics/replacement_lyricsstyle/tagsnegativeTags/negative_tags