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
ค่าบริการ:
- การตรวจสอบเสียง โคลนเสียง ตรวจสอบสถานะ ลบ และดาวน์โหลด: ฟรี
- ทางเข้าโคลนแบบขั้นตอนเดียวในเวิร์กสเปซ: 5 หยวนคงที่ต่อครั้ง ดำเนินการตรวจสอบเสียงต้นทางและไฟล์เสียงยืนยันรอบที่สองให้อัตโนมัติ และคืนเงินหากล้มเหลว
- สร้างไฟล์เสียงยืนยันต่อโดยอัตโนมัติหลังโคลนแบบปกติ: 5 หยวนคงที่ต่อครั้ง หากล้มเหลวจะคืนเงินตามขั้นตอนเดิม
- สร้างเพลงด้วยเสียงที่โคลนไว้: มีค่าใช้จ่าย 1.2 หยวนคงที่ต่อครั้ง ปกติแต่ละครั้งจะคืนงานตัวแทนชั่วคราว 2 รายการ
- เมื่อเปิด Max Mode (
max_mode: trueในPOST /api/music/generate-with-voice) ค่าบริการ 1.2 หยวนต่อครั้งจะคิดเป็น 2 เท่า คือ 2.4 หยวนต่อครั้ง และการสร้างเพลงด้วยเสียงก็รองรับvariety(0-4 ไม่คิดเพิ่ม) หลักเกณฑ์ค่าต่าง ๆ อยู่ในหัวข้อ "พารามิเตอร์ขั้นสูง" ของภาพรวม API ใหม่
ลำดับการเรียกใช้งาน
- เรียก
POST /api/voice/clone/validateเพื่ออัปโหลดเสียงต้นทางและรับvoice_task_id - รอหรือโพล
GET /api/voice/clone/tasks/{voice_task_id}จนได้validate_info - ผู้ใช้อ่านข้อความนั้นออกเสียงและบันทึกไฟล์เสียงยืนยัน
- เรียก
POST /api/voice/clone/tasks/{voice_task_id}/generateเพื่อส่งไฟล์เสียงยืนยัน - เรียก
POST /api/voice/clone/tasks/{voice_task_id}/checkหรือสอบถามงานต่อจนกว่าis_available=true - เรียก
POST /api/music/generate-with-voiceเพื่อสร้างเพลงด้วยเสียงนั้น - เอนด์พอยต์สร้างเพลงจะคืนงานตัวแทนชั่วคราวก่อน เมื่อสร้างเสร็จและได้
song_idจริงแล้ว จึงใช้เอนด์พอยต์ดาวน์โหลดเพื่อรับไฟล์เดียวหรือไฟล์รวม - (ทางเลือก) เมื่อไม่ต้องการเสียงนี้แล้ว ให้เรียก
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 เสมอ หมายถึงคำขอลบได้รับการรับแล้ว |
หลังลบแล้วจะเป็นอย่างไร
- ใช้สร้างเพลงใหม่ไม่ได้อีก: การเรียก
POST /api/music/generate-with-voiceด้วยvoice_task_idนี้ (หรือvoice_idของมัน) จะถูกปฏิเสธ ข้อความผิดพลาดคือselected voice is not readyและไม่คิดค่าบริการ - เพลงที่สร้างไว้แล้วด้วยเสียงนี้ไม่ได้รับผลกระทบเลย: เล่น ดาวน์โหลด ต่อเพลง แทนช่วง และแยกแทร็กยังทำงานตามเดิม
- งานเสียงนี้จะหายไปจากการสอบถาม:
GET /api/voice/clone/tasks/{voice_task_id}จะคืนrecord not found - ไฟล์เสียงต้นทางยังถูกเก็บตามนโยบายเก็บถาวรของแพลตฟอร์ม (ตั้งแต่ 2026-09-23 การลบไม่ล้างตัวอย่างเสียงที่อัปโหลดอีกต่อไป) แต่ไม่ได้หมายความว่ากู้คืนได้: งานเดิมสิ้นสุดแล้ว หากต้องการใช้เสียงเดิมต่อต้องทำขั้นตอนโคลนใหม่ทั้งหมด และจะได้
voice_task_idใหม่ - ลบซ้ำ: การลบงานเดิมอีกครั้งจะคืน
record not found(อยู่ในสถานะลบแล้วและหาไม่เจอ)
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 | ไม่ | - | ID clip จริงในเวิร์กสเปซของเพลงต้นทาง หากส่งจะเข้าสู่การคัฟเวอร์ด้วยเสียงที่โคลน หากไม่ส่งคือการสร้างด้วยเสียงที่โคลนแบบปกติ |
sourceAudioUrl |
string | ไม่ | - | ฟิลด์แสดงผลของต้นทาง ไม่เกี่ยวข้องกับการตัดสินความเป็นเจ้าของหรือบัญชี เซิร์ฟเวอร์ยึดตามบันทึกในฐานข้อมูล |
sourceTitle |
string | ไม่ | - | ฟิลด์แสดงผลของต้นทาง ไม่เกี่ยวข้องกับการตัดสินความเป็นเจ้าของหรือบัญชี |
clientSubmissionId |
string | ไม่ | - | ฟิลด์เพื่อความเข้ากันได้กับ Create UI การตัดข้อมูลซ้ำอย่างเชื่อถือได้ใน API ลูกค้าต้องใช้เฮดเดอร์ Idempotency-Key |
รองรับ suno-v6, suno-v6-wild และ suno-v6-mini หากโมเดลว่างจะถือเป็น suno-v6 โมเดล V5/V5.5 เดิมเลิกให้บริการแล้ว แต่งานย้อนหลังอาจยังแสดงชื่อโมเดลเก่า
โครงสร้างคำขอที่ใช้ร่วมกันยังตีความฟิลด์เพื่อความเข้ากันได้กับ Create UI เช่น task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId, voiceId แต่ไม่ใช่พารามิเตอร์ลูกค้าที่ใช้ได้ของเอนด์พอยต์นี้ งานเสียงต้องส่งผ่าน voice_task_id การตรวจสอบเสียงเพิ่มเติมต้องส่งผ่าน voice_id และการสร้างเพลงด้วยเสียงจะไม่อ่านฟิลด์ sound เลย
วิธีกรอกพารามิเตอร์การสร้างเพลง
- เมื่อ
customMode=falseให้promptเก็บคำอธิบายเพลง เมื่อcustomMode=trueให้promptเก็บเนื้อเพลงเต็ม และต้องกรอกstyleกับtitleด้วย อย่าส่งเนื้อเพลงไปยังฟิลด์คำอธิบายของโหมดแรงบันดาลใจ และอย่าถือคำอธิบายเพลงเป็นเนื้อเพลงของโหมดขั้นสูง weirdnessConstraintและstyleWeightเป็นทศนิยมสัดส่วนตั้งแต่0.0ถึง1.0ส่ง50หรือ50%ไม่ได้ ค่า0.5ใช้เป็นค่าที่สมดุลได้ การไม่ส่งหมายถึง "ไม่ระบุ" ส่วน0เป็นค่าที่ระบุชัดเจนและใช้ได้vocalGenderใช้ได้เฉพาะm,male,fหรือfemaleเท่านั้นinstrumentalในเอนด์พอยต์นี้เป็นเพียงฟิลด์เพื่อความเข้ากันได้ การสร้างด้วยเสียงที่โคลนจะถือเป็นเพลงมีเสียงร้องเสมอwaitAudioไม่เปลี่ยนพฤติกรรมในเอนด์พอยต์นี้ เอนด์พอยต์จะคืนงานตัวแทนชั่วคราวแบบไม่รอผลเสมอaudio_urlว่างในผลลัพธ์แรกเป็นเรื่องปกติ ให้สอบถามด้วยclient_request_idและอ่านที่อยู่ไฟล์เสียงเมื่อผลลัพธ์เสร็จแล้วเท่านั้น
พารามิเตอร์ header
| Header | จำเป็น | คำอธิบาย |
|---|---|---|
Authorization: Bearer ... |
ใช่ | Token API ของลูกค้า |
Content-Type: application/json |
ใช่ | บอดี้คำขอแบบ JSON |
Idempotency-Key |
ไม่ แนะนำอย่างยิ่ง | ไม่เกิน 128 อักขระ ผู้ใช้ Token เอนด์พอยต์ คีย์ และบอดี้คำขอเดียวกันจะคิดค่าบริการและสร้างงานเพียงครั้งเดียว |
พฤติกรรมของ Idempotency-Key:
- คำขอแรกระบบจะบันทึกเรกคอร์ดกันซ้ำแบบถาวรก่อนคิดค่าบริการ
- หากคีย์เดียวกันกับคำขอเดียวกันเสร็จแล้ว จะเล่นคำตอบรับแรกซ้ำ ไม่คิดเงินซ้ำและไม่สร้างงานซ้ำ
- คีย์เดียวกันแต่บอดี้คำขอต่างกันจะถูกปฏิเสธ
- คีย์เดียวกันที่ยังประมวลผลอยู่จะคืนข้อผิดพลาด "กำลังประมวลผล" ที่แน่นอน และจะคืน
client_request_idที่ปลอดภัยเมื่อสร้างแล้วเท่านั้น - หากคำขอแรกด้วยคีย์หนึ่งล้มเหลว สถานะล้มเหลวจะคงอยู่ การลองใหม่ต้องใช้คีย์ใหม่
เงื่อนไขการคัฟเวอร์ด้วย 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 ความสำเร็จหรือล้มเหลวถัดไปให้ยึดเรกคอร์ดงานสุดท้าย |
ข้อควรระวัง: placeholder_id ที่ขึ้นต้นด้วย pending: ใช้เป็น song_id สุดท้ายไม่ได้ และส่งเข้า /api/music/query หรือเอนด์พอยต์ดาวน์โหลดโดยตรงก็ไม่ได้ หากเรียก /api/music/query ด้วยค่า pending:* เท่านั้น อาจได้อาร์เรย์ว่าง [] เนื่องจากเพลงจริงยังไม่เสร็จ หรืองานตัวแทนยังไม่ถูกแทนด้วย ID เพลงสุดท้าย
ตัวอย่างที่ผิด:
{
"song_ids": "pending:cu_1780480000_abcd1234:0"
}
ลำดับที่ถูกต้อง:
- เรียก
POST /api/music/generate-with-voiceเพื่อส่งงานสร้างเพลงด้วยเสียง - เก็บ
client_request_id,items[].placeholder_idและitems[].client_request_indexจากคำตอบ - โพล
GET /api/music/generate-with-voice/results?client_request_id=cu_xxx - เมื่อ
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 สุดท้ายได้เอง ในรายการที่คืนมา:
song_idคือ ID เพลงจริงplaceholder_idจะปรากฏเฉพาะเมื่องานยังอยู่ในสถานะตัวแทนชั่วคราว- ค่าที่ขึ้นต้นด้วย
pending:ใช้กับ/api/music/queryหรือเอนด์พอยต์ดาวน์โหลดไม่ได้
หากคุณเก็บไว้เพียง client_request_id หรือ ID ตัวแทน pending:* ให้เรียกเอนด์พอยต์ผลลัพธ์นี้ก่อน หากยังหา song_id จริงไม่เจอ จึงส่ง client_request_id ให้ฝ่ายสนับสนุนด้านเทคนิคช่วยค้นหา
สอบถามผลลัพธ์การสร้างเพลงด้วยเสียง
เอนด์พอยต์: GET /api/music/generate-with-voice/results
ค่าบริการ: ฟรี
พารามิเตอร์ query
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
client_request_id |
string | ใช่ | ID ติดตามคำขอที่ generate-with-voice คืนมา |
ตัวอย่างคำขอ
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 ในคอนโซลหลังสมัครสมาชิก การสร้างหนึ่งครั้งราคา 0.6 หยวน ได้ 2 เพลง ดาวน์โหลดไม่จำกัด และไม่ต้องใช้เบอร์โทรศัพท์
รับคีย์ API กลับไปภาพรวม