Règles générales Suno V6 et consultation des tâches
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
Règles générales Suno V6 et consultation des tâches
Sélection de version Suno V6, modèles personnalisés, cycle de vie des tâches asynchrones, référence de piste source et structure des résultats
GET
/
v1
/
music
/
tasks
/
{task_id}
Règles générales Suno V6 et consultation des tâches
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": ""
}
}
}
Toutes les API Suno de génération, d’édition et d’outils utilisent des tâches asynchrones : soumettez l’opération, récupérez
task_id, puis consultez le résultat avec l’API de cette page.Authentification
string
requis
Authentification Bearer Token :
Authorization: Bearer <YOUR_API_KEY>.Version V6 et sélection du modèle
Les modèles publics prennent en charge les versions suivantes :v6v6-wildv6-mini
version, soit la custom_model_id renvoyée par une tâche de création. Les opérations d’édition compatibles utilisent v6 par défaut si version est omise. version publique et custom_model_id ne peuvent pas être envoyées ensemble.
custom: true sélectionne le mode paroles personnalisées, tandis que custom_model_id sélectionne un modèle entraîné. Ce sont deux notions distinctes ; le mode paroles ne passe pas automatiquement à la tarification du modèle personnalisé.Options générales de génération V6
N’envoyez les champs suivants que s’ils sont indiqués pour l’endpoint concerné :| Champ | Description |
|---|---|
variety | Variation de style : off / normal / high / extra / max |
max_mode | Mode Max, défaut false ; lorsqu’il est pris en charge, facturation à 2× le prix standard |
audio_format | mp3 / m4a / wav |
duration / duration_s | Durée cible, entier de 10 à 360 secondes ; uniquement pour les opérations indiquées |
max_mode: false partout. variety et le mode Max sont indépendants : variety: "max" n’active pas la facturation Max.
Limites de texte et de pondération
| contenu | champ | limite |
|---|---|---|
| Description d’inspiration | prompt (génération principale) / gpt_description (opérations) | 3 000 caractères maximum |
| Paroles | prompt (mode personnalisé) | 5 000 caractères maximum |
| Style | style (génération principale) / tags (opérations) | 1 000 caractères maximum |
| Titre | title | 80 caractères maximum |
| Pondérations | style_weight / weirdness / audio_weight | 0–1 ; la valeur numérique 0 est valide |
weirdness ; weirdness_constraint est un alias de compatibilité. La génération principale utilise encore weirdness_constraint. La longueur est comptée en caractères Unicode.
Piste source de référence
À partir d’œuvres existantes :task_id: ID de tâche API Mart de la piste audio produite.audio_index: position d’origine dansdata.result.music[]de la tâche source, à partir de 1 ; valeur par défaut1.
Les nouvelles requêtes référencent la piste source avec
task_id + audio_index ; audio_id, music_id ou audio_url ne peuvent pas les remplacer. Une source introuvable ou un index hors limites renvoie 400.Réponse de soumission
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01M24YMN4EV04M84R5QYM77R1E"
}
]
}
data[0].task_id. submitted indique seulement que la tâche a été acceptée, pas que l’audio final ou d’autres livrables sont déjà disponibles.
Interroger la tâche
GET /v1/music/tasks/{task_id}
Ajoutez ?language=zh pour obtenir les traductions disponibles des messages d’échec. Ce paramètre ne change pas la langue du morceau ou des paroles.
string
requis
ID de tâche renvoyée par l’API de soumission.
data.status soit completed ou failed. La même ID de tâche reste utilisable après actualisation. Ne renvoyez pas automatiquement une requête POST payante après un délai réseau.
Réponse de la requête
integer
Code d’état de la réponse.
object
Informations sur la tâche.
Afficher Propriétés
Afficher Propriétés
string
ID de tâche de la plateforme.
string
pending / processing / completed / failed / unknown.number
Progression de la tâche, généralement de 0 à 100. Déterminez la fin avec
status.number
Date de création, en secondes Unix.
number
Temps de traitement estimé en secondes, fourni à titre indicatif et non comme compte à rebours garanti.
number
Montant (USD).
number
Nombre de points consommés par la tâche. Affichez directement la valeur renvoyée par l’API.
object
Résultat après la fin ; sa structure dépend de l’opération.
object
Message d’échec ; champs courants :
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": ""
}
}
}
Traitement du résultat
- Les résultats musicaux se trouvent généralement dans
data.result.music[], mais les téléchargements, paroles, MIDI, Persona et modèles personnalisés ont leurs propres structures. durationest la durée réelle et peut être décimale ; la durée cible ne correspond pas forcément exactement au résultat final.- La valeur de pondération
0est valide et ne doit pas être masquée par un test falsy JavaScript. audio_urlne se termine pas forcément par.mp3. Utilisez l’URL réellement renvoyée pour la lecture ou le téléchargement.- Avec
status="unknown", conservez l’ID de tâche et autorisez l’actualisation manuelle sans créer automatiquement une nouvelle tâche.
AbortController peut arrêter les requêtes du navigateur et le polling, mais pas la tâche côté serveur. Aucun endpoint ne permet actuellement d’annuler une tâche Suno soumise.