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. ผู้ใช้อ่านข้อความนั้นออกเสียงและบันทึกไฟล์เสียงยืนยัน
  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 ไม่ - 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 เลย

วิธีกรอกพารามิเตอร์การสร้างเพลง

พารามิเตอร์ header

Header จำเป็น คำอธิบาย
Authorization: Bearer ... ใช่ Token API ของลูกค้า
Content-Type: application/json ใช่ บอดี้คำขอแบบ JSON
Idempotency-Key ไม่ แนะนำอย่างยิ่ง ไม่เกิน 128 อักขระ ผู้ใช้ Token เอนด์พอยต์ คีย์ และบอดี้คำขอเดียวกันจะคิดค่าบริการและสร้างงานเพียงครั้งเดียว

พฤติกรรมของ 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 ความสำเร็จหรือล้มเหลวถัดไปให้ยึดเรกคอร์ดงานสุดท้าย

ข้อควรระวัง: placeholder_id ที่ขึ้นต้นด้วย pending: ใช้เป็น song_id สุดท้ายไม่ได้ และส่งเข้า /api/music/query หรือเอนด์พอยต์ดาวน์โหลดโดยตรงก็ไม่ได้ หากเรียก /api/music/query ด้วยค่า pending:* เท่านั้น อาจได้อาร์เรย์ว่าง [] เนื่องจากเพลงจริงยังไม่เสร็จ หรืองานตัวแทนยังไม่ถูกแทนด้วย 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 หรือ 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

สร้างคีย์ API ในคอนโซลหลังสมัครสมาชิก การสร้างหนึ่งครั้งราคา 0.6 หยวน ได้ 2 เพลง ดาวน์โหลดไม่จำกัด และไม่ต้องใช้เบอร์โทรศัพท์

รับคีย์ API กลับไปภาพรวม