Aturan umum Suno V6 dan kueri tugas
curl --request GET \
--url https://api.apimart.ai/v1/music/tasks/{task_id} \
--header 'Authorization: <authorization>'import requests
url = "https://api.apimart.ai/v1/music/tasks/{task_id}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.apimart.ai/v1/music/tasks/{task_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apimart.ai/v1/music/tasks/{task_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.apimart.ai/v1/music/tasks/{task_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.apimart.ai/v1/music/tasks/{task_id}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apimart.ai/v1/music/tasks/{task_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "completed",
"progress": 100,
"created": 1789041600,
"cost": 0.12,
"credits_cost": 1.2,
"result": {
"music": [
{
"audio_id": "example-track-id",
"status": "complete",
"title": "follow the lights",
"lyrics": "[Verse]\nthe late wind blows over familiar streets",
"tags": "pop, acoustic",
"display_tags": "Pop, Acoustic",
"negative_tags": "harsh vocals",
"style_weight": 0.7,
"weirdness_constraint": 0,
"audio_weight": 0.4,
"duration": 119.8,
"audio_url": "https://example.com/result.mp3",
"image_url": "https://example.com/cover.jpg",
"image_large_url": "https://example.com/cover-large.jpg"
}
]
}
}
}
{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "failed",
"progress": 0,
"cost": 0,
"credits_cost": 0,
"error": {
"message": "task failure reason",
"type": "task_failed",
"code": "task_failed",
"param": ""
}
}
}
Suno
Aturan umum Suno V6 dan kueri tugas
Pemilihan versi Suno V6, model kustom, siklus tugas asinkron, referensi trek sumber, dan struktur hasil
GET
/
v1
/
music
/
tasks
/
{task_id}
Aturan umum Suno V6 dan kueri tugas
curl --request GET \
--url https://api.apimart.ai/v1/music/tasks/{task_id} \
--header 'Authorization: <authorization>'import requests
url = "https://api.apimart.ai/v1/music/tasks/{task_id}"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.apimart.ai/v1/music/tasks/{task_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apimart.ai/v1/music/tasks/{task_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.apimart.ai/v1/music/tasks/{task_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.apimart.ai/v1/music/tasks/{task_id}")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apimart.ai/v1/music/tasks/{task_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "completed",
"progress": 100,
"created": 1789041600,
"cost": 0.12,
"credits_cost": 1.2,
"result": {
"music": [
{
"audio_id": "example-track-id",
"status": "complete",
"title": "follow the lights",
"lyrics": "[Verse]\nthe late wind blows over familiar streets",
"tags": "pop, acoustic",
"display_tags": "Pop, Acoustic",
"negative_tags": "harsh vocals",
"style_weight": 0.7,
"weirdness_constraint": 0,
"audio_weight": 0.4,
"duration": 119.8,
"audio_url": "https://example.com/result.mp3",
"image_url": "https://example.com/cover.jpg",
"image_large_url": "https://example.com/cover-large.jpg"
}
]
}
}
}
{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "failed",
"progress": 0,
"cost": 0,
"credits_cost": 0,
"error": {
"message": "task failure reason",
"type": "task_failed",
"code": "task_failed",
"param": ""
}
}
}
Semua API pembuatan, pengeditan, dan alat Suno memakai tugas asinkron: kirim operasi, dapatkan
task_id, lalu kueri hasil melalui API halaman ini.Autentikasi
string
wajib
Autentikasi Bearer Token:
Authorization: Bearer <YOUR_API_KEY>.Versi V6 dan pemilihan model
Model publik mendukung versi berikut:v6v6-wildv6-mini
version atau custom_model_id dari tugas pembuatan model. Operasi edit yang mendukung versi memakai v6 jika version dihilangkan. Jangan kirim version publik bersama custom_model_id.
custom: true memilih mode lirik kustom, sedangkan custom_model_id memilih model terlatih. Keduanya berbeda; mode lirik tidak otomatis memakai tarif model kustom.Opsi umum pembuatan V6
Kirim field berikut hanya jika dicantumkan oleh endpoint terkait:| Field | Deskripsi |
|---|---|
variety | Variasi gaya: off / normal / high / extra / max |
max_mode | Mode Max, default false; jika didukung, ditagih 2× harga standar |
audio_format | mp3 / m4a / wav |
duration / duration_s | Durasi target, bilangan bulat 10–360 detik; hanya untuk operasi yang ditentukan |
max_mode: false ke semua operasi. variety dan Max terpisah; variety: "max" tidak mengaktifkan tagihan Max.
Batas teks dan bobot
| konten | field | batas |
|---|---|---|
| Deskripsi inspirasi | prompt (generasi utama) / gpt_description (operasi) | Hingga 3.000 karakter |
| Lirik | prompt (mode kustom) | Hingga 5.000 karakter |
| Gaya | style (generasi utama) / tags (operasi) | Hingga 1.000 karakter |
| Judul | title | Hingga 80 karakter |
| Bobot | style_weight / weirdness / audio_weight | 0–1; angka 0 valid |
weirdness; weirdness_constraint adalah alias kompatibilitas. Generasi utama tetap memakai weirdness_constraint. Panjang dihitung dalam karakter Unicode.
Trek sumber referensi
Berdasarkan karya yang sudah ada:task_id: ID tugas API Mart untuk trek audio keluaran.audio_index: posisi asli dalamdata.result.music[]tugas sumber, mulai dari 1; default1.
Permintaan baru mereferensikan trek sumber dengan
task_id + audio_index; audio_id, music_id, atau audio_url tidak dapat menggantikannya. Sumber yang tidak ditemukan atau indeks di luar rentang mengembalikan 400.Respons pengiriman
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01M24YMN4EV04M84R5QYM77R1E"
}
]
}
data[0].task_id. submitted hanya berarti tugas diterima, bukan berarti audio akhir atau hasil lain sudah tersedia.
Kueri tugas
GET /v1/music/tasks/{task_id}
Tambahkan ?language=zh untuk memperoleh terjemahan pesan kegagalan yang tersedia. Parameter ini tidak mengubah bahasa lagu atau lirik.
string
wajib
ID tugas yang dikembalikan API pengiriman.
data.status menjadi completed atau failed. ID yang sama dapat dipakai setelah halaman dimuat ulang. Jangan mengirim ulang POST berbayar otomatis karena timeout jaringan.
Respons kueri
integer
Kode status respons.
object
Informasi tugas.
Tampilkan Properti
Tampilkan Properti
string
ID tugas platform.
string
pending / processing / completed / failed / unknown.number
Progres tugas, biasanya 0–100. Tentukan penyelesaian berdasarkan
status.number
Waktu pembuatan, dalam detik Unix.
number
Perkiraan waktu pemrosesan dalam detik, hanya sebagai referensi dan bukan hitung mundur yang dijamin.
number
Jumlah uang (USD).
number
Poin yang digunakan tugas. Tampilkan nilai dari API secara langsung.
object
Hasil setelah selesai; strukturnya berbeda menurut operasi.
object
Pesan kegagalan; field umum:
message / type / code / param.{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "completed",
"progress": 100,
"created": 1789041600,
"cost": 0.12,
"credits_cost": 1.2,
"result": {
"music": [
{
"audio_id": "example-track-id",
"status": "complete",
"title": "follow the lights",
"lyrics": "[Verse]\nthe late wind blows over familiar streets",
"tags": "pop, acoustic",
"display_tags": "Pop, Acoustic",
"negative_tags": "harsh vocals",
"style_weight": 0.7,
"weirdness_constraint": 0,
"audio_weight": 0.4,
"duration": 119.8,
"audio_url": "https://example.com/result.mp3",
"image_url": "https://example.com/cover.jpg",
"image_large_url": "https://example.com/cover-large.jpg"
}
]
}
}
}
{
"code": 200,
"data": {
"id": "task_01M24YMN4EV04M84R5QYM77R1E",
"status": "failed",
"progress": 0,
"cost": 0,
"credits_cost": 0,
"error": {
"message": "task failure reason",
"type": "task_failed",
"code": "task_failed",
"param": ""
}
}
}
Pemrosesan hasil
- Hasil musik biasanya berada di
data.result.music[], tetapi unduhan, lirik, MIDI, Persona, dan model kustom memiliki struktur masing-masing. durationadalah durasi aktual dan dapat berbentuk desimal; durasi target belum tentu sama persis dengan hasil akhir.- Nilai bobot
0valid dan tidak boleh disembunyikan oleh pemeriksaan falsy JavaScript. audio_urltidak selalu berakhiran.mp3. Putar atau unduh memakai URL yang benar-benar dikembalikan.- Jika
status="unknown", simpan ID tugas dan izinkan penyegaran manual tanpa membuat tugas baru secara otomatis.
AbortController dapat menghentikan permintaan browser dan polling, tetapi tidak membatalkan tugas server. Belum ada endpoint untuk membatalkan tugas Suno yang dikirim.