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": "Échec de l'authentification. Vérifiez votre clé API.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Solde du compte insuffisant",
"type": "payment_required"
}
}
Suno
Télécharger des fichiers audio
- Télécharger les chansons Suno au format MP3, M4A ou WAV
- Demander plusieurs formats à la fois et recevoir une URL par fichier
- Sélectionner la chanson source avec task_id et audio_index
- Soumission asynchrone et récupération via l’endpoint des tâches musicales
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": "Échec de l'authentification. Vérifiez votre clé API.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Solde du compte insuffisant",
"type": "payment_required"
}
}
L’ancien endpoint
POST /v1/music/generations/wav est obsolète. Il reste temporairement compatible et équivaut au nouvel endpoint avec formats: ["wav"]. Les nouvelles intégrations doivent utiliser POST /v1/music/generations/download.Sélectionner la chanson source : transmettez le
task_id de la tâche qui a créé l’audio source, puis utilisez audio_index pour choisir une piste dans son résultat music[]. L’index commence à 1 et vaut 1 par défaut.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": "Échec de l'authentification. Vérifiez votre clé API.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Solde du compte insuffisant",
"type": "payment_required"
}
}
Authentification
string
requis
Tous les endpoints nécessitent un Bearer Token. Obtenez votre clé sur la page des clés API.
Authorization: Bearer YOUR_API_KEY
Paramètres de requête
string
défaut:"suno"
Nom du modèle. Utilisez
suno ; la valeur par défaut est suno.string
requis
ID de la tâche ayant créé la chanson source.La tâche source doit appartenir au compte actuel, être terminée et contenir une piste audio téléchargeable. Les tâches de génération, extension, reprise et séparation de pistes sont acceptées ; les tâches textuelles comme les paroles ou l’analyse BPM ne le sont pas.
integer
défaut:"1"
Piste à télécharger dans le résultat
music[] de la tâche source.- Index à partir de
1 - Valeur par défaut :
1 - Ne doit pas dépasser le nombre de pistes source
string[]
Tableau des formats demandés, avec au moins un élément.Valeurs :
mp3, m4a, wav.Plusieurs formats peuvent être demandés ensemble. La casse est ignorée, les doublons sont supprimés et l’ordre du résultat correspond à celui de la requête.string
Pour un seul format, ce champ peut remplacer
formats.Exemple : "format": "mp3"Utilisez soit
formats, soit format. Si les deux sont absents ou si la liste est vide, HTTP 400 est renvoyé.Réponse de soumission
Une soumission réussie renvoie un nouveautask_id pour la tâche de téléchargement.
data est un tableau : lisez data[0].task_id. Il s’agit de l’ID de téléchargement, différent du task_id de la chanson source envoyé dans la requête.Consulter le résultat
Utilisez l’ID de la tâche de téléchargement :GET /v1/music/tasks/{task_id}
completed ni failed, interrogez toutes les 2 secondes pendant 60 secondes maximum.
Terminé
{
"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[] :
| Champ | Type | Description |
|---|---|---|
format | string | mp3 / m4a / wav |
url | string | URL de téléchargement |
result.wavUrl est réservé à la compatibilité avec l’ancien endpoint WAV. Le nouveau code doit toujours lire result.files[].En cours
{
"code": 200,
"data": {
"id": "task_01JHXXXXXXXXXXXX",
"status": "processing",
"progress": 50,
"created": 1756800000
}
}
result n’est pas encore présent. Continuez à interroger.
Échec
Les tâches échouées sont automatiquement remboursées aveccost: 0. Affichez error.message et proposez une nouvelle tentative.
URL des fichiers
Les résultats utilisent normalement le domaine de fichiers APIMart. En cas d’échec du transfert, une URL CDN en amont peut être renvoyée sans garantie de durée.Téléchargez et conservez rapidement le fichier. Ne dépendez pas d’une URL temporaire pour le stockage à long terme.
Erreurs
Les erreurs de validation renvoient HTTP 400 avant la création et la facturation :| Texte d’erreur | Cause |
|---|---|
formats is required / must contain at least one | Format manquant |
unsupported format | Valeur autre que mp3 / m4a / wav |
task_id is required / invalid task_id format | ID source absent ou mal formé |
source task not found | Tâche absente ou appartenant à un autre compte |
audio_index N out of range | Index supérieur au nombre de pistes |
track #N has no music_id | Tâche source inachevée ou piste sans audio |
model_price_not_configured signifie que le tarif suno@download n’est pas configuré ; contactez le support.
Facturation et téléchargements répétés
- Une requête avec plusieurs formats entraîne une seule facturation
- Soumettre à nouveau la même chanson entraîne une nouvelle facturation
- Demander un autre format dans une nouvelle tâche entraîne également une facturation
- Les tâches échouées sont remboursées automatiquement
Réutilisez les URL déjà reçues et désactivez le bouton pendant la requête afin d’éviter les soumissions et frais en double.
Migration depuis l’ancien endpoint
| Élément | Ancien | Nouveau |
|---|---|---|
| Chemin | /v1/music/generations/wav | /v1/music/generations/download |
| Formats | WAV uniquement | MP3 / M4A / WAV, plusieurs possibles |
| Paramètre | — | formats ou format |
| Résultat | result.wavUrl | result.files[] |
/generations/download.
Response
integer
Code de réponse ; 200 en cas de succès