人聲複製與指定人聲生成 API(不推薦)

2026-09-18 更新 · Suno-API 團隊

⛔ 舊鏈路,不推薦新接入。 本文件描述的是早期 persona(voice_task_id / generate-with-voice)鏈路,仍然可用,但不再對外推薦;左側導覽裡已標註「不推薦」。

新接入請用【推薦】複製音色 API:用一段人聲樣本建立音色(POST /api/music/voice-profile/create),再用它翻唱指定歌曲或演唱新歌。音色是一等資源,可以列表、查詢、刪除,且來源音訊永久保留。

如果你的產品需要「建立音色 → 長期複用 → 翻唱」的完整閉環,請優先接新鏈路。

重要提示:複製人聲可能過期。

人聲複製生成的 voice_id / voice_task_id 不是永久可用資源,可能因有效期限、帳號狀態或人聲狀態變化而失效。接入方不要只在首次複製成功後永久複用本地快取的人聲 ID。

推薦做法:

  • 保存 voice_task_id、voice_id、is_available、updated_at 和最近一次生成成功時間。
  • 每次使用已複製人聲生成前,先呼叫 GET /api/voice/clone/tasks/{voice_task_id} 或 POST /api/voice/clone/tasks/{voice_task_id}/check 確認 is_available=true。
  • 如果介面回傳人聲不可用、任務不存在、selected voice is not ready 等錯誤,請提示使用者重新複製或重新選擇可用人聲。
  • 不建議把複製人聲做成「永久資產」承諾給終端使用者;應在產品介面中提示「人聲可能過期,需要重新校驗或重新複製」。

介面說明

本組介面用於建立可複用的人聲,並使用該人聲生成歌曲。呼叫方只需要使用平台發放的 API Key,伺服器會統一處理任務提交、狀態同步、計費和下載。

認證方式: Authorization: Bearer YOUR_API_KEY

計費:

呼叫流程

  1. 呼叫 POST /api/voice/clone/validate 上傳來源人聲,取得 voice_task_id。
  2. 等待或輪詢 GET /api/voice/clone/tasks/{voice_task_id},拿到 validate_info。
  3. 使用者按 validate_info 朗讀並錄製驗證音訊。
  4. 呼叫 POST /api/voice/clone/tasks/{voice_task_id}/generate 提交驗證音訊。
  5. 呼叫 POST /api/voice/clone/tasks/{voice_task_id}/check 或繼續查詢任務,直到 is_available=true。
  6. 呼叫 POST /api/music/generate-with-voice 使用該人聲生成歌曲。
  7. 生成介面會先回傳佔位任務;歌曲生成完成並拿到實際 song_id 後,可用下載介面下載單一檔案或打包檔案。
  8. (可選)不再需要這個人聲時,呼叫 DELETE /api/voice/clone/voices/{voice_task_id} 刪除,語意見第 6 節。

此外還有一步式複製:在工作台的首次錄音/上傳來源人聲頁面選擇一步完成,系統會一次完成校驗與音色生成,不需要你再錄第二段驗證音訊;按 5 元/次計費,失敗退款。

人聲任務欄位

欄位 型別 說明
voice_task_id number 平台內的人聲任務 ID,後續介面都使用這個 ID
voice_id string 可用於生成歌曲的人聲 ID,任務可用後回傳
voice_name string 人聲名稱
description string 人聲描述
style string 人聲風格
singer_skill_level string 演唱水準,常用值:beginner、intermediate、professional
language string 來源人聲語言,例如 zh、en
validate_info string 需要朗讀的驗證文字
validate_status string 校驗任務狀態
voice_status string 人聲生成狀態
is_available boolean 是否已經可用於生成歌曲
status string 平台任務狀態
stage string 當前階段
error_code string 失敗錯誤碼
error_message string 失敗原因
source_duration_seconds number 來源音訊時長,單位秒
created_at number 建立時間戳
updated_at number 更新時間戳
completed_at number 完成時間戳

1. 提交來源人聲校驗

介面位址: POST /api/voice/clone/validate

Body 參數

參數名 型別 必填 預設值 說明
voice_url string 否 - 來源人聲音訊 URL。與 file_base64 二選一
file_base64 string 否 - Base64 音訊。與 voice_url 二選一
file_name string 否 - 檔案名稱,使用 file_base64 時建議傳入
voice_name string 否 自動生成 人聲名稱
description string 否 - 人聲描述
style string 否 - 人聲風格
singer_skill_level string 否 beginner 演唱水準
language string 否 zh 來源人聲語言
vocal_start_s number 是 - 有效人聲開始秒數
vocal_end_s number 是 - 有效人聲結束秒數
source_duration_seconds number 否 - 來源音訊總時長,單位秒

vocal_end_s - vocal_start_s 需要滿足最短人聲片段要求。建議上傳清晰、無明顯伴奏和雜訊的人聲錄音。

請求範例

curl -X POST https://www.suno-api.io/api/voice/clone/validate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "voice_url": "https://example.com/source-voice.wav",
    "voice_name": "我的中文女聲",
    "description": "清亮自然的中文女聲",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

回應範例

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "我的中文女聲",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. 查詢人聲任務

介面位址: GET /api/voice/clone/tasks/{voice_task_id}

請求範例

curl https://www.suno-api.io/api/voice/clone/tasks/123 \
  -H "Authorization: Bearer YOUR_API_KEY"

回應範例

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "我的中文女聲",
      "validate_info": "請朗讀這裡回傳的驗證文字",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. 重新生成驗證文字

介面位址: POST /api/voice/clone/tasks/{voice_task_id}/regenerate

當驗證文字不適合朗讀或需要重新校驗時可呼叫。

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/regenerate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

4. 提交驗證音訊並建立人聲

介面位址: POST /api/voice/clone/tasks/{voice_task_id}/generate

Body 參數

參數名 型別 必填 預設值 說明
verify_url string 否 - 按驗證文字朗讀的音訊 URL。與 file_base64 二選一
file_base64 string 否 - Base64 驗證音訊。與 verify_url 二選一
file_name string 否 - 檔案名稱,使用 file_base64 時建議傳入
voice_name string 否 沿用任務名稱 人聲名稱
description string 否 沿用任務描述 人聲描述
style string 否 沿用任務風格 人聲風格
singer_skill_level string 否 沿用任務設定 演唱水準

請求範例

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "verify_url": "https://example.com/verify-voice.wav",
    "voice_name": "我的中文女聲"
  }'

5. 檢查人聲是否可用

介面位址: POST /api/voice/clone/tasks/{voice_task_id}/check

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/check \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

任務可用時回應中的 is_available 為 true,並回傳 voice_id。

6. 刪除人聲

介面位址: DELETE /api/voice/clone/voices/{voice_task_id}

計費: 免費。

curl -X DELETE https://www.suno-api.io/api/voice/clone/voices/123 \
  -H "Authorization: Bearer YOUR_API_KEY"

回應範例

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
欄位 型別 說明
voice_task_id number 被刪除的人聲任務 ID
deleted boolean 固定為 true,表示刪除請求已被受理

刪除之後會怎樣

7. 使用已複製人聲生成歌曲

介面位址: POST /api/music/generate-with-voice

計費: 1.2 元/次。

Body 參數

參數名 型別 必填 預設值 說明
voice_task_id number 是 - 已可用的人聲任務 ID
voice_id string 否 - 可選校驗欄位;傳入時必須和任務中的 voice_id 一致
customMode boolean 否 false false 為靈感模式,true 為進階模式
prompt string 是 - 靈感模式為歌曲描述;進階模式為歌詞。兩種模式都不能為空
style string 進階模式為是 - 風格標籤;customMode=true 時不能為空
title string 進階模式為是 - 歌曲標題;customMode=true 時不能為空
negativeTags string 否 - 負向風格
instrumental boolean 否 false 相容欄位;複製聲音生成固定按非純音樂處理
waitAudio boolean 否 false 相容欄位;本介面固定非同步回傳佔位任務,不等待音訊完成
model string 否 suno-v6 普通歌曲生成模型;可用 suno-v6、suno-v6-wild 或 suno-v6-mini
vocalGender string 否 - 人聲性別偏好
lyricsMode string 否 - 相容欄位;當前複製聲音提交鏈路不單獨改變歌詞模式
weirdnessConstraint number 否 - 創意強度
styleWeight number 否 - 風格權重
audioWeight number 否 平台預設 Audio Influence(音訊參考度),範圍 0.0-1.0。不傳時按平台預設處理(相當於官方介面 25%);0 是有效值,表示完全不向引用來源靠攏。它與下一條 sourceClipId 強相關:傳入來源時它指向參考音訊,不傳來源時它指向複製音色——平台只有這一條滑桿同時涵蓋兩種情況,不要按業務拆成兩個參數
sourceClipId string 否 - 來源歌曲的真實工作區 clip ID。傳入後進入複製聲音翻唱;不傳則為普通複製聲音生成
sourceAudioUrl string 否 - 來源展示欄位,不參與所有權或帳號判定,伺服器以資料庫記錄為準
sourceTitle string 否 - 來源展示欄位,不參與所有權或帳號判定
clientSubmissionId string 否 - Create UI 相容欄位;客戶 API 的可靠去重必須使用 Idempotency-Key Header

支援 suno-v6、suno-v6-wild 和 suno-v6-mini;空模型按 suno-v6 處理。舊的 V5/V5.5 模型已下線,但歷史任務可能仍顯示舊模型名。

共享請求結構還能解析 task、soundType、soundLoop、soundBpm、soundKey、voiceTaskId、voiceId 等 Create UI 相容欄位,但它們不是本介面的有效客戶參數:聲音任務必須傳 voice_task_id,可選聲音校驗必須傳 voice_id,聲音音樂生成不會讀取 sound 欄位。

生成參數填寫說明

Header 參數

Header 必填 說明
Authorization: Bearer ... 是 客戶 API Token
Content-Type: application/json 是 JSON 請求體
Idempotency-Key 否,強烈建議 最長 128 字元。相同使用者、Token、端點、Key 和請求體只計費並建立一次任務

Idempotency-Key 行為:

sourceClipId 翻唱條件

客戶 API 的來源翻唱由伺服器統一處理來源歌曲存取,不需要客戶傳遞任何帳號資訊。是否可用以介面實際回應為準。

來源必須屬於當前 API 使用者,是已完成、非 pending: 的工作區歌曲,並有可用音訊。支援普通生成、普通上傳來源和強化上傳最終歌曲;強化上傳中間記錄會在計費前拒絕。伺服器只接受客戶提交的來源歌曲 ID,不接受客戶傳帳號 ID;來源不可用或未完成時會在計費前回傳錯誤。

請求範例

curl -X POST https://www.suno-api.io/api/music/generate-with-voice \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "voice_task_id": 123,
    "customMode": true,
    "prompt": "寫一首關於夏夜海邊的中文流行歌曲",
    "style": "Mandopop, warm piano, emotional",
    "title": "夏夜海風",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

回應範例

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "items": [
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:0",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "submitted",
        "type": "voice_generate",
        "title": "夏夜海風",
        "prompt": "寫一首關於夏夜海邊的中文流行歌曲"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "夏夜海風",
        "prompt": "寫一首關於夏夜海邊的中文流行歌曲"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

關於佔位任務和最終 song_id

generate-with-voice 是非同步生成介面。介面回傳成功只表示生成任務已經提交,不表示歌曲已經生成完成。

回應中的關鍵欄位含義:

欄位 說明
client_request_id 本次生成請求的追蹤 ID。一次請求通常生成 2 首歌,兩個結果都使用同一個 client_request_id。
items[].placeholder_id 平台本地佔位 ID,格式通常是 pending:{client_request_id}:{index}。它不是最終歌曲 ID。
items[].client_request_index 同一次請求中的結果序號,通常為 0 和 1。
items[].status 提交後的初始狀態,例如 submitted。後續生成成功或失敗以最終任務記錄為準。

注意:pending: 開頭的 placeholder_id 不能作為最終 song_id 使用,也不能直接用於 /api/music/query 或下載介面。只用 pending:* 呼叫 /api/music/query 時,可能會回傳空陣列 [],這是因為真實歌曲還沒有完成,或佔位任務還沒有替換成最終歌曲 ID。

錯誤範例:

{
  "song_ids": "pending:cu_1780480000_abcd1234:0"
}

正確流程:

  1. 呼叫 POST /api/music/generate-with-voice 提交人聲生成音樂任務。
  2. 保存回應裡的 client_request_id、items[].placeholder_id 和 items[].client_request_index。
  3. 輪詢 GET /api/music/generate-with-voice/results?client_request_id=cu_xxx。
  4. 等回應裡的 items[].song_id 有值且不以 pending: 開頭後,再呼叫 /api/music/query、/api/music/download-file 或 /api/music/download-all。

當前版本已新增公開查詢介面:

GET /api/music/generate-with-voice/results?client_request_id=cu_xxx

它回傳當前使用者下同一個 client_request_id 對應的任務結果,適合客戶自助查詢最終 song_id。回傳列表裡:

若你只保存了 client_request_id 或 pending:* 佔位 ID,可以先呼叫這個結果介面查詢;如果還沒查到真實 song_id,再把 client_request_id 發給技術支援協助定位。

查詢人聲生成音樂結果

介面位址: GET /api/music/generate-with-voice/results

計費: 免費。

Query 參數

參數名 型別 必填 說明
client_request_id string 是 generate-with-voice 回傳的請求追蹤 ID

請求範例

curl -X GET "https://www.suno-api.io/api/music/generate-with-voice/results?client_request_id=cu_1780480000_abcd1234" \
  -H "Authorization: Bearer YOUR_API_KEY"

生成中回應範例

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "status": "processing",
    "items": [
      {
        "song_id": "",
        "placeholder_id": "pending:cu_1780480000_abcd1234:0",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "processing",
        "type": "voice_generate",
        "title": "夏夜海風"
      }
    ]
  }
}

生成完成回應範例

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "status": "completed",
    "items": [
      {
        "song_id": "song_abc123",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "completed",
        "type": "voice_generate",
        "title": "夏夜海風",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

頂層 status 含義

狀態 說明
not_found 當前使用者下還沒有查到該 client_request_id 的任務記錄
processing 至少還有一個結果未完成,繼續輪詢
completed 所有結果都已完成,可以使用 song_id 查詢或下載
partial 部分完成、部分失敗,可先處理已完成的 song_id
failed 所有結果失敗,查看 items[].error_message

8. 下載單一檔案

介面位址: POST /api/music/download-file

Body 參數

參數名 型別 必填 說明
song_id string 是 歌曲 ID
kind string 是 下載類型:audio、cover、wav、video

請求範例

curl -X POST https://www.suno-api.io/api/music/download-file \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "song_abc123",
    "kind": "audio"
  }' \
  --output song.mp3

回應為檔案串流,Content-Type 和檔名以後端回傳為準。

9. 打包下載歌曲資源

介面位址: POST /api/music/download-all

Body 參數

參數名 型別 必填 說明
song_id string 是 歌曲 ID

請求範例

curl -X POST https://www.suno-api.io/api/music/download-all \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "song_abc123"
  }' \
  --output song.zip

打包檔案通常包含音訊、封面和 metadata.json;如果某類資源暫未生成,則不會放入壓縮包。

常見錯誤

message 說明
voice audio is required 提交來源人聲時未提供 voice_url 或 file_base64
invalid voice task id 路徑中的人聲任務 ID 無效
voice validation is not ready 尚未拿到驗證文字,不能提交驗證音訊
selected voice is not ready 選擇的人聲尚不可用於生成歌曲(未就緒、已刪除,或不屬於當前帳號)
selected voice does not match voice task 請求中的 voice_id 與任務不一致
voice task is required 生成人聲歌曲時缺少 voice_task_id
record not found 任務 / 歌曲不存在、不屬於當前 API Key 所屬帳號,或已經被刪除(刪除人聲後再查這條任務也會看到它)

本組介面的錯誤統一回傳 HTTP 200:請以回應體裡的 success 欄位判斷成敗(false 即失敗,原因見 message),不要只看 HTTP 狀態碼。 刪除人聲的完整語意(刪除後還能不能用、能不能恢復)見第 6 節。

下一篇【推薦】複製音色 API

取得 API 金鑰

註冊後即可在主控台建立 API 金鑰。每次生成 0.6 元可得 2 首歌,下載不限次數,且不需要手機號碼。

取得 API 金鑰 回到總覽