API kloning suara dan pembuatan dengan suara yang ditentukan (tidak disarankan)

Diperbarui 2026-09-18 · tim Suno-API

⛔ Jalur lama, tidak disarankan untuk integrasi baru. Halaman ini menjelaskan jalur persona awal (voice_task_id / generate-with-voice). Masih berfungsi, tetapi tidak lagi disarankan kepada pelanggan; menu di kiri menandainya "tidak disarankan".

Untuk integrasi baru gunakan 【Disarankan】 API profil suara: buat profil suara dari satu sampel vokal (POST /api/music/voice-profile/create), lalu pakai untuk meng-cover lagu tertentu atau menyanyikan lagu baru. Profil suara adalah sumber daya kelas satu: bisa didaftar, diambil, dan dihapus, serta audio sumbernya disimpan permanen.

Jika produk Anda memerlukan siklus lengkap "buat suara → pakai ulang jangka panjang → cover", prioritaskan jalur baru.

Penting: suara hasil kloning bisa kedaluwarsa.

voice_id / voice_task_id yang dihasilkan kloning suara bukan sumber daya yang bisa dipakai selamanya: bisa berhenti berfungsi karena masa berlaku, status akun, atau perubahan status suara. Pihak yang mengintegrasikan tidak boleh mengkloning sekali lalu memakai ulang ID suara yang di-cache lokal selamanya.

Praktik yang disarankan:

  • Simpan voice_task_id, voice_id, is_available, updated_at, dan waktu pembuatan sukses terakhir.
  • Sebelum setiap pembuatan memakai suara hasil kloning, panggil GET /api/voice/clone/tasks/{voice_task_id} atau POST /api/voice/clone/tasks/{voice_task_id}/check dan pastikan is_available=true.
  • Jika endpoint menjawab suara tidak tersedia, tugas tidak ada, atau selected voice is not ready, minta pengguna mengkloning ulang atau memilih suara lain yang tersedia.
  • Jangan menjanjikan ke pengguna akhir bahwa suara hasil kloning adalah "aset permanen"; tampilkan di antarmuka produk bahwa "suara bisa kedaluwarsa dan perlu validasi ulang atau kloning ulang".

Deskripsi endpoint

Grup endpoint ini membuat suara yang dapat dipakai ulang dan membuat lagu dengan suara itu. Pemanggil hanya perlu API Key dari platform; server menangani pengiriman tugas, sinkronisasi status, penagihan, dan unduhan.

Autentikasi: Authorization: Bearer YOUR_API_KEY

Biaya:

Alur pemanggilan

  1. Panggil POST /api/voice/clone/validate untuk mengunggah suara sumber dan mendapatkan voice_task_id.
  2. Tunggu atau polling GET /api/voice/clone/tasks/{voice_task_id} sampai mendapat validate_info.
  3. Pengguna membacakan teks itu dan merekam audio verifikasi.
  4. Panggil POST /api/voice/clone/tasks/{voice_task_id}/generate untuk mengirim audio verifikasi.
  5. Panggil POST /api/voice/clone/tasks/{voice_task_id}/check atau terus kueri tugasnya sampai is_available=true.
  6. Panggil POST /api/music/generate-with-voice untuk membuat lagu dengan suara itu.
  7. Endpoint pembuatan mengembalikan tugas placeholder lebih dulu; setelah pembuatan selesai dan Anda mendapat song_id sebenarnya, gunakan endpoint unduhan untuk mengambil satu berkas atau satu paket.
  8. (Opsional) Saat suara tidak diperlukan lagi, panggil DELETE /api/voice/clone/voices/{voice_task_id} untuk menghapusnya; semantiknya di bagian 6.

Ada juga kloning satu langkah: pada halaman perekaman/pengunggahan suara sumber pertama di ruang kerja, Anda bisa memilih selesai dalam satu langkah; sistem menyelesaikan validasi dan pembuatan suara sekaligus, sehingga Anda tidak perlu merekam audio verifikasi kedua; biayanya 5 ¥ per panggilan dan dikembalikan jika gagal.

Field tugas suara

Field Tipe Keterangan
voice_task_id number ID tugas suara di dalam platform; semua endpoint berikutnya memakai ID ini
voice_id string ID suara yang dapat dipakai membuat lagu; dikembalikan saat tugas sudah bisa dipakai
voice_name string Nama suara
description string Deskripsi suara
style string Gaya suara
singer_skill_level string Tingkat vokal; nilai umum: beginner, intermediate, professional
language string Bahasa suara sumber, misalnya zh, en
validate_info string Teks verifikasi yang harus dibacakan
validate_status string Status tugas validasi
voice_status string Status pembuatan suara
is_available boolean Apakah sudah bisa dipakai membuat lagu
status string Status tugas di platform
stage string Tahap saat ini
error_code string Kode kesalahan saat gagal
error_message string Penyebab kegagalan
source_duration_seconds number Durasi audio sumber dalam detik
created_at number Stempel waktu pembuatan
updated_at number Stempel waktu pembaruan
completed_at number Stempel waktu penyelesaian

1. Kirim suara sumber untuk divalidasi

Endpoint: POST /api/voice/clone/validate

Parameter body

Parameter Tipe Wajib Default Keterangan
voice_url string Tidak - URL audio suara sumber. Ini atau file_base64
file_base64 string Tidak - Audio dalam base64. Ini atau voice_url
file_name string Tidak - Nama berkas; disarankan saat memakai file_base64
voice_name string Tidak dibuat otomatis Nama suara
description string Tidak - Deskripsi suara
style string Tidak - Gaya suara
singer_skill_level string Tidak beginner Tingkat vokal
language string Tidak zh Bahasa suara sumber
vocal_start_s number Ya - Detik awal vokal yang dapat dipakai
vocal_end_s number Ya - Detik akhir vokal yang dapat dipakai
source_duration_seconds number Tidak - Durasi total audio sumber dalam detik

vocal_end_s - vocal_start_s harus memenuhi syarat minimum segmen vokal. Unggah rekaman vokal yang bersih, tanpa iringan atau derau yang mencolok.

Contoh permintaan

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": "Suara wanita Mandarin saya",
    "description": "Suara wanita Mandarin yang jernih dan alami",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

Contoh respons

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Suara wanita Mandarin saya",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. Kueri tugas suara

Endpoint: GET /api/voice/clone/tasks/{voice_task_id}

Contoh permintaan

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

Contoh respons

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Suara wanita Mandarin saya",
      "validate_info": "Bacakan teks verifikasi yang dikembalikan di sini",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. Buat ulang teks verifikasi

Endpoint: POST /api/voice/clone/tasks/{voice_task_id}/regenerate

Panggil bila teks verifikasi tidak cocok untuk dibacakan atau validasi perlu diulang.

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. Kirim audio verifikasi dan buat suara

Endpoint: POST /api/voice/clone/tasks/{voice_task_id}/generate

Parameter body

Parameter Tipe Wajib Default Keterangan
verify_url string Tidak - URL audio yang dibacakan dari teks verifikasi. Ini atau file_base64
file_base64 string Tidak - Audio verifikasi dalam base64. Ini atau verify_url
file_name string Tidak - Nama berkas; disarankan saat memakai file_base64
voice_name string Tidak nama tugas Nama suara
description string Tidak deskripsi tugas Deskripsi suara
style string Tidak gaya tugas Gaya suara
singer_skill_level string Tidak pengaturan tugas Tingkat vokal

Contoh permintaan

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": "Suara wanita Mandarin saya"
  }'

5. Periksa apakah suara bisa dipakai

Endpoint: 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 '{}'

Saat tugas sudah bisa dipakai, is_available pada respons bernilai true dan voice_id dikembalikan.

6. Hapus suara

Endpoint: DELETE /api/voice/clone/voices/{voice_task_id}

Biaya: gratis.

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

Contoh respons

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
Field Tipe Keterangan
voice_task_id number ID tugas suara yang dihapus
deleted boolean Selalu true; permintaan penghapusan sudah diterima

Apa yang terjadi setelah dihapus

7. Buat lagu dengan suara hasil kloning

Endpoint: POST /api/music/generate-with-voice

Biaya: 1,2 ¥ per panggilan.

Parameter body

Parameter Tipe Wajib Default Keterangan
voice_task_id number Ya - ID tugas suara yang sudah bisa dipakai
voice_id string Tidak - Field verifikasi opsional; jika dikirim harus sama dengan voice_id pada tugas
customMode boolean Tidak false false adalah mode inspirasi, true mode lanjutan
prompt string Ya - Di mode inspirasi berisi deskripsi lagu, di mode lanjutan berisi lirik. Keduanya tidak boleh kosong
style string Ya di mode lanjutan - Tag gaya; tidak boleh kosong saat customMode=true
title string Ya di mode lanjutan - Judul lagu; tidak boleh kosong saat customMode=true
negativeTags string Tidak - Gaya yang dikecualikan
instrumental boolean Tidak false Field kompatibilitas; pembuatan dengan suara hasil kloning selalu diperlakukan sebagai lagu bervokal
waitAudio boolean Tidak false Field kompatibilitas; endpoint ini selalu mengembalikan tugas placeholder secara asinkron dan tidak menunggu audio
model string Tidak suno-v6 Model pembuatan lagu biasa; bisa memakai suno-v6, suno-v6-wild, atau suno-v6-mini
vocalGender string Tidak - Preferensi gender vokal
lyricsMode string Tidak - Field kompatibilitas; jalur pengiriman suara hasil kloning saat ini tidak mengubah mode lirik sendiri
weirdnessConstraint number Tidak - Kekuatan kreativitas
styleWeight number Tidak - Bobot gaya
audioWeight number Tidak default platform Audio Influence (seberapa penting audio referensi), rentang 0.0-1.0. Jika tidak dikirim, berlaku default platform (setara 25% di antarmuka resmi); 0 adalah nilai valid yang berarti sama sekali tidak condong ke sumber referensi. Field ini terkait erat dengan sourceClipId di baris berikutnya: bila ada sumber ia mengarah ke audio referensi, bila tidak ada sumber ia mengarah ke suara hasil kloning; platform hanya punya satu slider ini untuk kedua kasus, jadi jangan pecah menjadi dua parameter per kasus penggunaan
sourceClipId string Tidak - ID clip sebenarnya di ruang kerja untuk lagu sumber. Jika dikirim, Anda masuk ke cover dengan suara hasil kloning; jika tidak, itu pembuatan biasa dengan suara hasil kloning
sourceAudioUrl string Tidak - Field tampilan sumber; tidak ikut menentukan kepemilikan atau akun, server mengacu pada catatan basis datanya
sourceTitle string Tidak - Field tampilan sumber; tidak ikut menentukan kepemilikan atau akun
clientSubmissionId string Tidak - Field kompatibilitas Create UI; untuk deduplikasi yang andal di API pelanggan harus memakai header Idempotency-Key

suno-v6, suno-v6-wild, dan suno-v6-mini didukung; model kosong diperlakukan sebagai suno-v6. Model lama V5/V5.5 sudah dihentikan, tetapi tugas historis mungkin masih menampilkan nama model lama.

Struktur permintaan bersama juga membaca field kompatibilitas Create UI seperti task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId, dan voiceId, namun itu bukan parameter pelanggan yang valid untuk endpoint ini: tugas suara harus dikirim sebagai voice_task_id, verifikasi suara opsional sebagai voice_id, dan pembuatan musik dengan suara tidak pernah membaca field sound.

Cara mengisi parameter pembuatan

Parameter header

Header Wajib Keterangan
Authorization: Bearer ... Ya Token API pelanggan
Content-Type: application/json Ya Body permintaan JSON
Idempotency-Key Tidak, sangat disarankan Maksimal 128 karakter. Dengan pengguna, token, endpoint, kunci, dan body yang sama, penagihan dan pembuatan tugas hanya sekali

Perilaku Idempotency-Key:

Syarat cover dengan sourceClipId

Cover dari sumber di API pelanggan ditangani sepenuhnya di sisi server: akses ke lagu sumber diselesaikan server dan pelanggan tidak mengirim data akun apa pun. Bisa atau tidaknya ditentukan respons sebenarnya dari endpoint.

Sumber harus milik pengguna API saat ini, berupa lagu ruang kerja yang sudah selesai dan bukan pending:, serta memiliki audio yang bisa dipakai. Didukung pembuatan biasa, sumber dari unggahan biasa, dan lagu akhir unggahan yang diperkuat; catatan antara unggahan yang diperkuat ditolak sebelum penagihan. Server hanya menerima ID lagu sumber yang dikirim pelanggan dan tidak pernah menerima ID akun; sumber yang tidak tersedia atau belum selesai mengembalikan galat sebelum penagihan.

Contoh permintaan

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": "Tulis lagu pop Mandarin tentang tepi laut pada malam musim panas",
    "style": "Mandopop, warm piano, emotional",
    "title": "Angin laut malam musim panas",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

Contoh respons

{
  "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": "Angin laut malam musim panas",
        "prompt": "Tulis lagu pop Mandarin tentang tepi laut pada malam musim panas"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Angin laut malam musim panas",
        "prompt": "Tulis lagu pop Mandarin tentang tepi laut pada malam musim panas"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

Tentang tugas placeholder dan song_id akhir

generate-with-voice adalah endpoint pembuatan asinkron. Respons sukses hanya berarti tugas pembuatan sudah dikirim, bukan bahwa lagunya sudah selesai.

Arti field penting pada respons:

Field Keterangan
client_request_id ID pelacakan permintaan pembuatan ini. Satu permintaan biasanya membuat 2 lagu, dan kedua hasil memakai client_request_id yang sama.
items[].placeholder_id ID placeholder lokal platform, biasanya berbentuk pending:{client_request_id}:{index}. Ini bukan ID lagu akhir.
items[].client_request_index Indeks hasil dalam permintaan yang sama, biasanya 0 dan 1.
items[].status Status awal setelah dikirim, misalnya submitted. Sukses atau gagal selanjutnya mengikuti catatan tugas akhir.

Perhatian: placeholder_id yang dimulai dengan pending: tidak bisa dipakai sebagai song_id akhir dan tidak bisa langsung dikirim ke /api/music/query atau endpoint unduhan. Memanggil /api/music/query hanya dengan nilai pending:* bisa mengembalikan array kosong [], karena lagu sebenarnya belum selesai atau tugas placeholder belum diganti dengan ID lagu akhir.

Contoh yang salah:

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

Alur yang benar:

  1. Panggil POST /api/music/generate-with-voice untuk mengirim tugas pembuatan musik dengan suara.
  2. Simpan client_request_id, items[].placeholder_id, dan items[].client_request_index dari respons.
  3. Polling GET /api/music/generate-with-voice/results?client_request_id=cu_xxx.
  4. Saat items[].song_id sudah bernilai dan tidak diawali pending:, panggil /api/music/query, /api/music/download-file, atau /api/music/download-all.

Versi saat ini menambahkan endpoint kueri publik:

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

Endpoint ini mengembalikan hasil tugas dengan client_request_id yang sama di bawah pengguna saat ini, sehingga pelanggan dapat mencari song_id akhir sendiri. Dalam daftar yang dikembalikan:

Jika Anda hanya menyimpan client_request_id atau ID placeholder pending:*, panggil endpoint hasil ini lebih dulu; bila song_id sebenarnya tetap tidak ditemukan, kirim client_request_id ke dukungan teknis untuk ditelusuri.

Kueri hasil pembuatan musik dengan suara

Endpoint: GET /api/music/generate-with-voice/results

Biaya: gratis.

Parameter query

Parameter Tipe Wajib Keterangan
client_request_id string Ya ID pelacakan yang dikembalikan generate-with-voice

Contoh permintaan

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"

Contoh respons saat sedang dibuat

{
  "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": "Angin laut malam musim panas"
      }
    ]
  }
}

Contoh respons setelah selesai

{
  "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": "Angin laut malam musim panas",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

Arti status tingkat teratas

Status Keterangan
not_found Di bawah pengguna saat ini belum ada catatan tugas dengan client_request_id itu
processing Masih ada minimal satu hasil yang belum selesai; lanjutkan polling
completed Semua hasil selesai; song_id bisa dikueri atau diunduh
partial Sebagian selesai, sebagian gagal; tangani dulu song_id yang selesai
failed Semua hasil gagal; lihat items[].error_message

8. Unduh satu berkas

Endpoint: POST /api/music/download-file

Parameter body

Parameter Tipe Wajib Keterangan
song_id string Ya ID lagu
kind string Ya Jenis unduhan: audio, cover, wav, video

Contoh permintaan

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

Responsnya adalah aliran berkas; Content-Type dan nama berkas mengikuti yang dikembalikan backend.

9. Unduh sumber daya lagu sebagai paket

Endpoint: POST /api/music/download-all

Parameter body

Parameter Tipe Wajib Keterangan
song_id string Ya ID lagu

Contoh permintaan

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

Paket biasanya berisi audio, sampul, dan metadata.json; jika suatu jenis sumber daya belum dibuat, berkas itu tidak dimasukkan ke arsip.

Kesalahan umum

message Keterangan
voice audio is required Saat mengirim suara sumber, voice_url maupun file_base64 tidak diberikan
invalid voice task id ID tugas suara di path tidak valid
voice validation is not ready Teks verifikasi belum tersedia, jadi audio verifikasi tidak bisa dikirim
selected voice is not ready Suara yang dipilih belum bisa membuat lagu (belum siap, sudah dihapus, atau bukan milik akun saat ini)
selected voice does not match voice task voice_id pada permintaan tidak cocok dengan tugasnya
voice task is required voice_task_id tidak ada saat membuat lagu dengan suara
record not found Tugas / lagu tidak ada, bukan milik akun API Key saat ini, atau sudah dihapus (mengueri tugas ini setelah suara dihapus akan menunjukkan hal yang sama)

Kesalahan grup ini selalu mengembalikan HTTP 200: nilai keberhasilan dari field success di body (false berarti gagal, alasannya di message) dan jangan hanya melihat kode status HTTP. Semantik lengkap penghapusan suara (apakah masih bisa dipakai, apakah bisa dipulihkan) ada di bagian 6.

Berikutnya【Disarankan】 API profil suara

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