API อัปโหลดเสียงต้นทาง

อัปเดต 2026-09-18 · ทีม Suno-API

คำอธิบายเอนด์พอยต์

การอัปโหลดเสียงต้นทางใช้เปลี่ยนไฟล์เสียงในเครื่องหรือจากระยะไกลให้เป็นคลิปต้นทางที่ความสามารถถัดไปใช้ได้ เช่น คัฟเวอร์ ต่อเพลง แทนที่ท่อน หรือแยกแทร็ก

เอนด์พอยต์: POST /api/music/upload-source

ค่าบริการ: ฟรี เอนด์พอยต์นี้เพียงอัปโหลดเสียงต้นทาง ไม่เริ่มงานสร้างเพลง

วิธีใช้ที่แนะนำ: นี่คือขั้นที่ 1 ของ «คัฟเวอร์สองขั้น» อัปโหลดเสียงด้วยเอนด์พอยต์นี้ก่อน (ฟรี และถ้าล้มเหลวลองใหม่ได้ทุกเมื่อ) แล้วเก็บ clip_id ที่ได้ เมื่อยืนยันว่าอัปโหลดสำเร็จ (status เป็นสถานะเสร็จสิ้น) จึงเรียก API คัฟเวอร์จากคลิปต้นทาง เพื่อเริ่มคัฟเวอร์ — ขั้นนั้นเนื้อคำขอมีเพียงไม่กี่ร้อยไบต์ จึงไม่ถูกตัดขาดกลางทางเพราะไฟล์เสียงใหญ่เกินไป เมื่อเทียบกับ API แบบครั้งเดียว อัปโหลดแล้วคัฟเวอร์ การแยกแบบนี้เสถียรกว่าเมื่อ ไฟล์เสียงใหญ่ เครือข่ายไม่เสถียร หรือต้องใช้วัสดุเดิมซ้ำหลายครั้ง (ต่อเพลง / แทนที่ / แยกแทร็ก)

คำแนะนำการอัปโหลดไฟล์ขนาดใหญ่

กรณี วิธีที่แนะนำ
เสียงอยู่บนอินเทอร์เน็ตแล้ว (มีลิงก์ตรง https) ใช้ file_url: เนื้อคำขอเพียงไม่กี่ร้อยไบต์ เสถียรที่สุด
URL ที่ลงนามชั่วคราว (ByteDance และอื่น ๆ) ใช้ file_url เฉพาะเมื่อ URL เข้าถึงได้แบบสาธารณะและยังไม่หมดอายุ; มิฉะนั้นใช้ multipart หรืออัปโหลดทันที
ไฟล์ในเครื่อง (Node / Python / เดสก์ท็อป) ใช้การอัปโหลดแบบ multipart (-F "file=@source.mp3") และ อย่าตั้ง Content-Type เอง
ใช้ได้แค่ JSON + base64 ระวังว่า Content-Length ต้องเป็นจำนวนไบต์ (Buffer.byteLength) ไม่เช่นนั้นเนื้อคำขออาจถูกตัด

หลังอัปโหลดเสร็จ ต้องยืนยันว่า status ในคำตอบเป็นสถานะเสร็จสิ้นแล้ว และบันทึก clip_id ก่อนไปขั้นที่ 2; การอัปโหลดที่ล้มเหลวไม่คิดค่าใช้จ่ายและไม่สร้างงานสร้างเพลง ลองใหม่ได้เลย

ตรวจสอบ file_url ก่อนอัปโหลด

เซิร์ฟเวอร์ของแพลตฟอร์มเป็นผู้ดาวน์โหลด file_url ผ่าน HTTP ไม่ใช่เบราว์เซอร์ของคุณ URL ที่เปิดได้ในเบราว์เซอร์อาจไม่สามารถเข้าถึงได้จากเซิร์ฟเวอร์โปรดักชัน

ไฟล์ในเครื่องควรอัปโหลดด้วย multipart และฟิลด์ file อย่าใช้ file_url กับลิงก์ ByteDance หรือ URL ที่ลงนามชั่วคราว เว้นแต่ URL นั้นเข้าถึงได้แบบสาธารณะและยังไม่หมดอายุเมื่อส่งคำขอ

เรียกใช้คำสั่งนี้จากเซิร์ฟเวอร์สาธารณะก่อนส่งคำขออัปโหลด:

curl -L --max-time 30 -D - -o /dev/null "https://example.com/source.mp3"

คำขอ GET ต้องจบด้วย HTTP 200 คืนค่า MIME ประเภทเสียง และมีข้อมูลที่ไม่ว่าง หน้าเข้าสู่ระบบ หน้า HTML และรหัส 401, 403, 404 หรือ 410 ไม่สามารถใช้ได้

file_url download failed: HTTP 404 มักหมายถึงลายเซ็นหมดอายุ ไฟล์ถูกลบ หรือพารามิเตอร์ URL ไม่ครบ

การอัปโหลดนี้ฟรี หากดาวน์โหลด file_url ล้มเหลว จะไม่มีการสร้าง clip_id งานเพลง หรือการเรียกสร้างเพลง และไม่มีการเรียกเก็บเงิน จึงไม่ต้องคืนเงิน

พารามิเตอร์คำขอ

Headers

สำหรับคำขอ JSON:

พารามิเตอร์ ชนิด จำเป็น หมายเหตุ
Authorization string ใช่ Bearer YOUR_API_KEY
Content-Type string ใช่ application/json

คำขอแบบ multipart ไม่ต้องตั้ง Content-Type เอง ให้ไคลเอนต์สร้างอัตโนมัติ

พารามิเตอร์บอดี

พารามิเตอร์ ชนิด จำเป็น ค่าเริ่มต้น หมายเหตุ
model string ไม่ suno-v6 ชื่อโมเดลสำหรับลูกค้า: suno-v6, suno-v6-wild หรือ suno-v6-mini
file_url string ไม่ - URL เสียงจากระยะไกล
file_base64 string ไม่ - เสียงแบบ Base64
file ไฟล์ (multipart) ไม่ - ไฟล์เสียงที่ต้องการอัปโหลด ชื่อฟิลด์ต้องเป็น file
file_name string ไม่ - ชื่อไฟล์
upload_type string ไม่ file_upload ประเภทการอัปโหลด

ตัวอย่างคำขอ JSON

curl -X POST https://www.suno-api.io/api/music/upload-source \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "suno-v6",
    "file_url": "https://example.com/source.mp3",
    "file_name": "source.mp3",
    "upload_type": "file_upload"
  }'

ตัวอย่างคำขอ multipart

curl -X POST https://www.suno-api.io/api/music/upload-source \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@source.mp3" \
  -F "file_name=source.mp3" \
  -F "upload_type=file_upload" \
  -F "model=suno-v6"
import requests

with open("source.mp3", "rb") as audio:
    response = requests.post(
        "https://www.suno-api.io/api/music/upload-source",
        headers={"Authorization": "Bearer YOUR_API_KEY"},
        data={
            "file_name": "source.mp3",
            "upload_type": "file_upload",
            "model": "suno-v6",
        },
        files={"file": ("source.mp3", audio, "audio/mpeg")},
        timeout=300,
    )

response.raise_for_status()
print(response.json())

คำตอบ

{
  "clip_id": "uploaded_clip_id",
  "status": "complete",
  "title": "source.mp3",
  "image_url": "https://...",
  "audio_url": "https://...",
  "display_tags": "pop, vocal",
  "inferred_description": "uploaded source audio",
  "clip_metadata": {}
}
ถัดไปAPI อัปโหลดแบบเสริม

รับคีย์ API

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

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