API d'envoi d'audio source

Mis à jour le 2026-09-18 · équipe Suno-API

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_id renvoyé ; après avoir confirmé que l'envoi a abouti (status dans 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": {}
}
SuivantAPI d'envoi renforcé

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