API d'envoi d'audio source
Description du point d'accès
L'envoi d'audio source transforme un fichier audio local ou distant en clip source utilisable par les capacités suivantes : cover, extension, remplacement de section, séparation, etc.
Point d'accès : POST /api/music/upload-source
Facturation : Gratuit. Ce point d'accès ne fait qu'envoyer l'audio source ; il ne démarre aucune tâche de génération.
Utilisation recommandée : c'est l'étape 1 du « cover en deux étapes ». Envoyez d'abord l'audio avec ce point d'accès (c'est gratuit et vous pouvez réessayer à tout moment en cas d'échec) et conservez le
clip_idrenvoyé ; après avoir confirmé que l'envoi a abouti (statusdans un état terminé), appelez l'API de cover à partir d'un clip source pour lancer le cover — le corps de cette requête ne fait que quelques centaines d'octets, il ne peut donc pas être tronqué en transit parce que l'audio est trop volumineux. Par rapport à l'API en une seule fois envoyer puis faire un cover, cette séparation est plus robuste lorsque l'audio est volumineux, le réseau instable, ou que la même matière doit être réutilisée plusieurs fois (extension / remplacement / séparation).
Conseils pour l'envoi de gros fichiers
| Situation | Approche recommandée |
|---|---|
| L'audio est déjà public (lien direct https) | Utilisez file_url : le corps de la requête ne fait que quelques centaines d'octets, l'option la plus robuste |
| URL signée temporaire (ByteDance, etc.) | Utilisez file_url uniquement si l’URL est publique et encore valide ; sinon utilisez multipart ou envoyez immédiatement |
| Fichier local (Node / Python / bureau) | Utilisez un envoi multipart (-F "file=@source.mp3") et ne définissez pas Content-Type manuellement |
| Seul JSON + base64 est possible | Attention : Content-Length doit être le nombre d'octets (Buffer.byteLength), sinon le corps peut être tronqué |
Une fois l'envoi terminé, vérifiez toujours que le status de la réponse est bien un état terminé et conservez le clip_id avant de passer à l'étape 2 ;
un envoi en échec n'est pas facturé et ne crée aucune tâche de génération : il suffit de réessayer.
Vérifiez file_url avant l’envoi
C’est notre serveur qui télécharge
file_url, pas votre navigateur. Une URL qui s’ouvre dans votre navigateur n’est pas forcément accessible depuis nos serveurs de production.
Pour un fichier local, utilisez un envoi multipart avec le champ file. N’utilisez pas file_url avec un lien ByteDance ou une URL signée temporaire, sauf si elle est publique et encore valide au moment de la requête.
Exécutez ceci depuis un serveur public avant d’envoyer la requête :
curl -L --max-time 30 -D - -o /dev/null "https://example.com/source.mp3"
La requête GET doit finir en HTTP 200, renvoyer un type MIME audio et contenir des données. Une page de connexion, du HTML ou les codes 401, 403, 404 et 410 ne peuvent pas être utilisés par le serveur.
file_url download failed: HTTP 404 signifie généralement que la signature a expiré, que le fichier a été supprimé ou que des paramètres de l’URL manquent.
L’envoi est gratuit. Si le téléchargement de file_url échoue, aucun clip_id, aucune tâche de chanson ni appel de génération n’est créé et aucun frais n’est débité ; aucun remboursement n’est donc nécessaire.
Paramètres de la requête
Headers
Pour les requêtes JSON :
| Paramètre | Type | Obligatoire | Remarques |
|---|---|---|---|
| Authorization | string | oui | Bearer YOUR_API_KEY |
| Content-Type | string | oui | application/json |
Ne définissez pas Content-Type manuellement pour les requêtes multipart ; le client le génère automatiquement.
Paramètres du corps
| Paramètre | Type | Obligatoire | Par défaut | Remarques |
|---|---|---|---|---|
| model | string | non | suno-v6 | Nom de modèle côté client : suno-v6, suno-v6-wild ou suno-v6-mini |
| file_url | string | non | - | URL de l'audio distant |
| file_base64 | string | non | - | Audio en Base64 |
| file | fichier (multipart) | non | - | Fichier audio à envoyer ; le nom du champ doit être file |
| file_name | string | non | - | Nom du fichier |
| upload_type | string | non | file_upload | Type d'envoi |
Exemple de requête JSON
curl -X POST https://www.suno-api.io/api/music/upload-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "suno-v6",
"file_url": "https://example.com/source.mp3",
"file_name": "source.mp3",
"upload_type": "file_upload"
}'
Exemple de requête multipart
curl -X POST https://www.suno-api.io/api/music/upload-source \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@source.mp3" \
-F "file_name=source.mp3" \
-F "upload_type=file_upload" \
-F "model=suno-v6"
import requests
with open("source.mp3", "rb") as audio:
response = requests.post(
"https://www.suno-api.io/api/music/upload-source",
headers={"Authorization": "Bearer YOUR_API_KEY"},
data={
"file_name": "source.mp3",
"upload_type": "file_upload",
"model": "suno-v6",
},
files={"file": ("source.mp3", audio, "audio/mpeg")},
timeout=300,
)
response.raise_for_status()
print(response.json())
Réponse
{
"clip_id": "uploaded_clip_id",
"status": "complete",
"title": "source.mp3",
"image_url": "https://...",
"audio_url": "https://...",
"display_tags": "pop, vocal",
"inferred_description": "uploaded source audio",
"clip_metadata": {}
}
Obtenir une clé d'API
Créez une clé d'API dans la console après votre inscription. Chaque génération coûte 0,6 ¥ et renvoie 2 pistes, les téléchargements sont illimités et aucun numéro de téléphone n'est requis.
Obtenir une clé d'API Retour à la présentation