API unggah lalu cover sekali jalan

Diperbarui 2026-09-18 · tim Suno-API

Deskripsi endpoint

Unggah lalu cover sekali jalan mengirim berkas audio atau URL audio dan membuat versi cover baru dari audio sumber tersebut.

Endpoint: POST /api/music/upload-cover

Biaya: Berbayar, saat ini default 0,6 ¥ per panggilan. Endpoint ini adalah "unggah lalu cover", bukan mengunggah sampul gambar. Jumlah yang benar-benar ditagih mengikuti konfigurasi harga di back-office saat ini.

Max Mode / Variety: endpoint ini mendukung parameter opsional max_mode dan variety (0-4). Dengan max_mode aktif, panggilan ini ditagih 2× harga (0,6 → 1,2 ¥ per panggilan); variety tidak menambah biaya. Arti dan cara mengirimnya ada di bagian "Parameter lanjutan" pada Ringkasan API baru.

Waktu tunggu dan timeout (penting): ini endpoint sinkron — pesanan baru diterima dan diteruskan ke pembuatan saat respons tiba. Dari pengukuran, sebagian besar permintaan merespons dalam 1-3 detik, sekitar 10% melewati 30 detik, dan terlama sekitar 230 detik. Setel timeout klien 300 detik atau lebih; tidak ada respons bukan berarti tidak ada yang dibuat, dan jangan mencoba ulang langsung setelah timeout (itu menduplikasi pesanan dan menagih dua kali). Jika koneksi terputus, periksa lagi nanti dengan GET /api/music/songs. Lihat "Waktu tunggu dan pengaturan timeout" di Ringkasan API baru.

Saat audio besar, sebaiknya pisahkan "unggah" dan "cover" menjadi dua langkah (disarankan)

Endpoint ini mengharuskan seluruh audio masuk ke body permintaan: makin besar audio, makin besar body-nya, dan satu gangguan jaringan atau timeout memotong transfer di tengah jalan, lalu server mengembalikan unexpected end of JSON input (HTTP 400, tanpa biaya).

Bila audio melewati sekitar 8 MB, jaringan tidak stabil, atau materi sumber yang sama akan dipakai ulang, beralihlah ke bentuk dua langkah:

  1. POST /api/music/upload-source mengunggah audio sumber lebih dulu — gratis, bisa diulang kapan saja — dan memberi clip_id;
  2. POST /api/music/generate-from-source memulai cover dengan clip_id itu — body pada langkah berbayar hanya sekitar 250 byte.

Lihat API unggah audio sumber, API cover dari clip sumber, dan "Berkas besar dan permintaan yang terpotong" di akhir halaman ini.

Parameter permintaan

Headers

Parameter Tipe Wajib Catatan
Authorization string ya Bearer YOUR_API_KEY
Content-Type string ya application/json

Parameter body

Parameter Tipe Wajib Default Catatan
model string tidak suno-v6 Nama model untuk pelanggan: suno-v6, suno-v6-wild atau suno-v6-mini
file_url string tidak - URL audio sumber
file_base64 string tidak - Audio Base64
file_name string tidak - Nama berkas
prompt string tidak - Lirik baru atau arah adaptasi
style string tidak - Tag gaya
title string tidak - Judul
negativeTags string tidak - Gaya negatif
instrumental boolean tidak false Apakah lagu instrumental
waitAudio boolean tidak false Apakah menunggu audio selesai
cover_start_s number tidak - Detik awal bagian yang akan dicover
cover_end_s number tidak - Detik akhir bagian yang akan dicover
audio_weight number tidak - Tingkat ketergantungan pada audio referensi, rentang 0.0-1.0; hanya bisa dikirim bila audio referensi diberikan

cover_start_s dan cover_end_s dalam satuan detik dan boleh desimal; waktu mulai harus lebih kecil dari waktu selesai dan tidak boleh melebihi durasi audio sumber. Bila kedua kolom dihilangkan, seluruh audio dipakai. audio_weight dipetakan ke metadata.control_sliders.audio_weight milik Suno dan mengatur seberapa besar hasil bersandar pada audio referensi; nilainya 0.0-1.0 dan hanya boleh disertakan bila permintaan memuat audio referensi yang sah di file_url atau file_base64. 0 adalah nilai yang sah; menghilangkan kolom berarti "tidak ditentukan" dan mengikuti perilaku default Suno. instrumental dan waitAudio harus boolean JSON, bukan string.

Endpoint unggah mengembalikan secara asinkron secara default. Selama clips[].status pada respons masih pending, audio_url yang kosong adalah hal normal dan bukan berarti unggahan atau cover gagal; simpan song_id asli yang dikembalikan dan panggil endpoint pencarian lagu sampai selesai sebelum membaca alamat audio.

Contoh permintaan

curl -X POST https://www.suno-api.io/api/music/upload-cover \
  -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",
    "prompt": "Lirik baru atau arah adaptasi",
    "style": "Mandopop, acoustic guitar",
    "title": "Versi cover",
    "negativeTags": "noise, low quality",
    "audio_weight": 0.5,
    "instrumental": false,
    "waitAudio": false,
    "cover_start_s": 0,
    "cover_end_s": 60
  }'

Respons

{
  "code": 200,
  "message": "success",
  "data": {
    "upload": {
      "clip_id": "uploaded_clip_id",
      "status": "complete"
    },
    "clips": [
      {
        "song_id": "new_clip_id",
        "song_title": "Versi cover",
        "status": "pending"
      }
    ]
  }
}

Berkas besar dan permintaan yang terpotong

Disarankan: pisahkan unggah dan cover menjadi dua langkah

Endpoint sekali jalan (yang ini) menggabungkan unggah dan pembuatan dalam satu langkah: body besar berada di satu-satunya langkah itu, jadi saat terputus Anda tidak tahu apakah ada yang dibuat maupun apakah ada biaya yang ditarik.

Langkah 1 unggah Langkah 2 cover
Endpoint POST /api/music/upload-source POST /api/music/generate-from-source
Biaya Gratis (hanya unggah, tanpa pembuatan) 0,6 ¥ per panggilan; 1,2 ¥ per panggilan dengan Max Mode
Body permintaan Audionya sendiri (base64 / multipart), atau hanya tautan via file_url Sekitar 250 byte (hanya satu sourceClipId)
Mengembalikan clip_id (clip ID audio sumber) data.clips[].song_id (hasil yang dibuat)
Bila gagal Cukup ulangi, tanpa biaya dan tanpa tugas pembuatan Setel timeout klien ≥300 detik; saat timeout periksa dulu dengan /api/music/songs dan jangan langsung ulangi
Memakai ulang materi sumber clip_id yang sama juga berlaku untuk extend / replace / pemisahan Audio harus diunggah ulang setiap kali

Kesimpulan: audio di atas sekitar 8 MB, jaringan tidak stabil, atau materi yang sama dipakai beberapa kali → gunakan bentuk dua langkah; audio sangat kecil di jaringan stabil → endpoint ini lebih praktis.

Apa arti 400 unexpected end of JSON input

Artinya JSON yang diterima server tidak lengkap (bukan parameter salah, bukan masalah izin atau saldo). Penyebab umum, diurutkan dari yang paling mungkin:

  1. Body besar terpotong di tengah transfer: lapisan masuk mencatat baik "berapa byte yang dideklarasikan klien" maupun "berapa byte yang benar-benar tiba". Kasus terukur: klien mendeklarasikan 14,17 MB tetapi hanya 11,8–12,4 MB yang tiba, dan ketiga permintaan berhenti di sekitar 1,6–1,7 detik; jumlah byte yang hilang berbeda setiap kali, menandakan transfer terputus dan bukan batas tetap (server tidak membatasi ukuran body permintaan).
  2. Content-Length tidak cocok dengan byte yang benar-benar dikirim: di Node.js, memakai .length string (jumlah karakter UTF-16) sebagai panjang akan salah begitu isinya mengandung bahasa Mandarin atau teks multi-byte lain.
  3. Menulis body sebagai string alih-alih Buffer, sehingga byte yang ditulis tidak sesuai dengan yang dideklarasikan.

Ketiganya terjadi sebelum penagihan, jadi tidak muncul biaya.

Daftar periksa mandiri di sisi klien

Kesalahan yang sering muncul

Kesalahan Arti Yang harus dilakukan
unexpected end of JSON input Body permintaan tidak lengkap (terpotong) Jalankan daftar periksa di atas, atau beralih ke bentuk dua langkah
invalid character '-' in numeric literal Body multipart dikirim ke endpoint JSON Jangan pakai multipart pada endpoint JSON dan jangan setel Content-Type sendiri
one of file_path, file_base64, file_url, or multipart file is required Audio tidak disertakan Tambahkan file_base64 / file_url / file multipart
model is required Body berupa JSON valid yang kosong (misalnya {}) Kirim minimal model
Invalid request: Invalid request, ... Pesan pembungkus untuk body yang gagal diurai Baca paruh kedua untuk alasan konkretnya (biasanya salah satu di atas)

Endpoint terkait: API unggah audio sumber (langkah 1), API cover dari clip sumber (langkah 2).

BerikutnyaAPI cover dari clip sumber

Dapatkan kunci API

Buat kunci API di konsol setelah mendaftar. Setiap pembuatan berbiaya 0,6 ¥ dan menghasilkan 2 lagu, unduhan tidak terbatas, dan nomor telepon tidak diperlukan.

Ambil kunci API Kembali ke ringkasan