curl --request POST \
--url https://api.apimart.ai/v1/music/generations/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"]
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/music/generations/download",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"],
},
)
print(response.json())
const response = await fetch(
"https://api.apimart.ai/v1/music/generations/download",
{
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "suno",
task_id: "task_01JGXXXXXXXXXXXX",
audio_index: 1,
formats: ["mp3", "wav"],
}),
},
);
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JHXXXXXXXXXXXX"
}
]
}
{
"error": {
"message": "`formats` contains unsupported format `flac`. Supported: mp3 / m4a / wav",
"type": "invalid_request_error",
"code": "invalid_source_reference"
}
}
{
"error": {
"code": 401,
"message": "Autentikasi gagal. Periksa kunci API Anda.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Saldo akun tidak mencukupi",
"type": "payment_required"
}
}
Suno
Unduh File Audio
- Unduh lagu Suno sebagai file MP3, M4A, atau WAV
- Minta beberapa format sekaligus dan dapatkan URL untuk setiap file
- Pilih lagu sumber dengan task_id dan audio_index
- Kirim secara asinkron dan ambil hasil melalui endpoint tugas musik
POST
/
v1
/
music
/
generations
/
download
curl --request POST \
--url https://api.apimart.ai/v1/music/generations/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"]
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/music/generations/download",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"],
},
)
print(response.json())
const response = await fetch(
"https://api.apimart.ai/v1/music/generations/download",
{
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "suno",
task_id: "task_01JGXXXXXXXXXXXX",
audio_index: 1,
formats: ["mp3", "wav"],
}),
},
);
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JHXXXXXXXXXXXX"
}
]
}
{
"error": {
"message": "`formats` contains unsupported format `flac`. Supported: mp3 / m4a / wav",
"type": "invalid_request_error",
"code": "invalid_source_reference"
}
}
{
"error": {
"code": 401,
"message": "Autentikasi gagal. Periksa kunci API Anda.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Saldo akun tidak mencukupi",
"type": "payment_required"
}
}
Endpoint lama
POST /v1/music/generations/wav telah dihentikan. Endpoint tersebut tetap kompatibel untuk sementara dan setara dengan endpoint baru menggunakan formats: ["wav"]. Integrasi baru harus menggunakan POST /v1/music/generations/download.Pilih lagu sumber: kirim
task_id dari tugas yang membuat audio sumber, lalu gunakan audio_index untuk memilih lagu dari hasil music[]. Indeks dimulai dari 1 dan nilai default-nya adalah 1.curl --request POST \
--url https://api.apimart.ai/v1/music/generations/download \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"]
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/music/generations/download",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json",
},
json={
"model": "suno",
"task_id": "task_01JGXXXXXXXXXXXX",
"audio_index": 1,
"formats": ["mp3", "wav"],
},
)
print(response.json())
const response = await fetch(
"https://api.apimart.ai/v1/music/generations/download",
{
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "suno",
task_id: "task_01JGXXXXXXXXXXXX",
audio_index: 1,
formats: ["mp3", "wav"],
}),
},
);
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01JHXXXXXXXXXXXX"
}
]
}
{
"error": {
"message": "`formats` contains unsupported format `flac`. Supported: mp3 / m4a / wav",
"type": "invalid_request_error",
"code": "invalid_source_reference"
}
}
{
"error": {
"code": 401,
"message": "Autentikasi gagal. Periksa kunci API Anda.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Saldo akun tidak mencukupi",
"type": "payment_required"
}
}
Autentikasi
string
wajib
Semua API memerlukan autentikasi Bearer Token. Dapatkan kunci Anda di halaman kunci API.
Authorization: Bearer YOUR_API_KEY
Parameter permintaan
string
default:"suno"
Nama model. Gunakan
suno; jika tidak dikirim, nilai default-nya juga suno.string
wajib
ID tugas yang membuat lagu sumber.Tugas sumber harus berasal dari akun saat ini, sudah selesai, dan memiliki audio yang dapat diunduh. Tugas pembuatan musik, extension, cover, dan stems didukung; tugas yang hanya menghasilkan teks, seperti lirik atau analisis BPM, tidak didukung.
integer
default:"1"
Nomor lagu dalam hasil
music[] dari tugas sumber.- Indeks dimulai dari
1 - Default:
1 - Tidak boleh melebihi jumlah lagu dalam tugas sumber
string[]
Array format file yang diminta dan harus berisi setidaknya satu item.Nilai yang didukung:
mp3, m4a, wav.Beberapa format dapat diminta sekaligus. Huruf besar-kecil diabaikan, nilai duplikat dihapus otomatis, dan urutan hasil mengikuti urutan permintaan.string
Untuk satu format, kolom ini dapat digunakan sebagai pengganti
formats.Contoh: "format": "mp3"Gunakan
formats atau format. Jika keduanya tidak dikirim atau array format kosong, API mengembalikan HTTP 400.Respons pengiriman
Pengiriman yang berhasil mengembalikantask_id baru untuk tugas unduhan.
data adalah array; baca data[0].task_id. ID ini milik tugas unduhan baru dan berbeda dari task_id lagu sumber yang dikirim dalam permintaan.Kueri hasil unduhan
Gunakan ID tugas unduhan:GET /v1/music/tasks/{task_id}
completed atau failed, lakukan polling setiap 2 detik selama maksimal 60 detik.
Selesai
{
"code": 200,
"data": {
"id": "task_01JHXXXXXXXXXXXX",
"status": "completed",
"progress": 100,
"cost": 0.01,
"credits_cost": 0.1,
"result": {
"music_id": "518c74ee-62ac-4ccd-b3d9-7003acd12ad7",
"files": [
{
"format": "mp3",
"url": "https://assets.apimart.ai/audio/example.mp3"
},
{
"format": "wav",
"url": "https://assets.apimart.ai/audio/example.wav"
}
],
"wavUrl": "https://assets.apimart.ai/audio/example.wav"
}
}
}
result.files[] untuk memperoleh file unduhan:
| Kolom | Tipe | Deskripsi |
|---|---|---|
format | string | mp3 / m4a / wav |
url | string | URL unduhan file |
result.wavUrl hanya tersedia untuk kompatibilitas dengan API WAV lama. Kode baru harus selalu membaca result.files[].Sedang diproses
{
"code": 200,
"data": {
"id": "task_01JHXXXXXXXXXXXX",
"status": "processing",
"progress": 50,
"created": 1756800000
}
}
result. Lanjutkan polling.
Gagal
Tugas yang gagal akan dikembalikan biayanya secara otomatis dan mengembalikancost: 0. Tampilkan error.message dan sediakan opsi untuk mencoba lagi.
URL file
Hasil biasanya menggunakan domain file APIMart. Jika transfer penyimpanan gagal, URL CDN penyedia dapat dikembalikan tanpa jaminan masa berlaku.Unduh dan simpan file segera. Jangan gunakan URL sementara sebagai penyimpanan permanen.
Kesalahan
Kesalahan validasi mengembalikan HTTP 400 sebelum tugas dibuat dan biaya dikenakan.| Teks kesalahan | Penyebab |
|---|---|
formats is required / must contain at least one | Format tidak dikirim |
unsupported format | Nilai selain mp3 / m4a / wav |
task_id is required / invalid task_id format | ID tugas sumber tidak dikirim atau tidak valid |
source task not found | Tugas tidak ada atau milik akun lain |
audio_index N out of range | Nomor lagu di luar rentang |
track #N has no music_id | Tugas belum selesai atau lagu tidak memiliki audio |
model_price_not_configured berarti harga suno@download belum dikonfigurasi; hubungi dukungan platform.
Penagihan dan unduhan berulang
- Satu permintaan dengan beberapa format dikenai satu biaya
- Mengirim ulang lagu yang sama akan dikenai biaya baru, meskipun formatnya sama
- Meminta format lain dalam tugas baru juga dikenai biaya
- Tugas yang gagal dikembalikan biayanya secara otomatis
Gunakan kembali URL file yang sudah diterima dan nonaktifkan tombol unduh selama permintaan berlangsung untuk mencegah pengiriman dan biaya ganda.
Migrasi dari API lama
| Item | Lama | Baru |
|---|---|---|
| Path | /v1/music/generations/wav | /v1/music/generations/download |
| Format | Hanya WAV | MP3 / M4A / WAV; mendukung beberapa format |
| Parameter | — | formats atau format |
| Hasil | result.wavUrl | result.files[] |
/generations/download.
Response
integer
Kode respons; 200 jika berhasil