Aller au contenu principal

API Suno v6 Wild pour chansons expérimentales : un brief de style et vos paroles en entrée, deux prises MP3 texturées et moins prévisibles avec voix en sortie, ou laissez-le écrire les mots.

À partir de $0.072/requête

Atelier

Envoyer une requête

Démarrage rapide

Les exemples suivent les paramètres publics du point de terminaison choisi. Remplacez la clé API et les médias d’exemple, puis envoyez la requête depuis votre serveur.

SDK et intégrations
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Authentification API

Conservez la clé API dans la variable serveur SPICY_API_KEY. Utilisez l’authentification Bearer et Content-Type: application/json pour les requêtes JSON.

Authorization: Bearer $SPICY_API_KEY
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "suno/v6-wild/text-to-audio",
  "input": {
    "prompt": "Calm ambient pads with a slow rising motif"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Généré à partir du schéma d’entrée de ce modèle, le même que l’API utilise pour valider chaque requête.

Paramètres d’entrée

Placez ces champs dans l’objet input du corps de la requête. Les noms et types correspondent à l’API. Ne supposez aucune valeur par défaut si elle n’est pas indiquée.

promptstringObligatoire

Le brief de style. Avec vos propres paroles ou instrumental activé, il ne décrit que le style : genre, tempo, instruments, voix, ambiance, jusqu’à 1 000 caractères. Sans paroles et avec generate_lyrics activé, c’est l’idée de la chanson, à partir de laquelle le modèle écrit les mots, jusqu’à 3 000 caractères. Décrivez les styles avec des mots ; les prompts qui citent de vrais artistes sont refusés. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
minLength:1
maxLength:3000
reference_audio_urlsarray<string>Facultatif

Un fichier audio de référence (de 6 secondes à 30 minutes, jusqu’à 500 Mo) qui inspire la chanson. Uniquement avec des paroles générées : pas de paroles, instrumental désactivé, generate_lyrics activé. Utilisez un audio dont vous avez le droit de vous servir. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
maxItems:1
reference_video_urlsarray<string>Facultatif

Une vidéo de référence (MP4, MOV ou WebM, jusqu’à 100 Mo et 241 secondes) autour de laquelle la chanson est construite, par exemple pour l’illustrer en musique. Uniquement avec des paroles générées : pas de paroles, instrumental désactivé, generate_lyrics activé. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
maxItems:1
image_urlsarray<string>Facultatif

Jusqu’à 5 images d’ambiance (JPEG, PNG, WebP ou BMP, 10 Mo maximum chacune) dont le modèle s’inspire pour l’atmosphère de la chanson. Uniquement avec des paroles générées : pas de paroles, instrumental désactivé, generate_lyrics activé. Dans les autres modes, il renvoie une erreur explicite. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
maxItems:5
persona_modelstringFacultatif

Indique au modèle ce qu’est persona_id : style_persona (reprendre son style musical) ou voice_persona (reprendre sa voix). À envoyer avec persona_id. S’applique uniquement avec vos propres paroles ou instrumental activé. Ne change pas le prix.

Valeur par défaut
Non définie
Valeurs autorisées
"style_persona""voice_persona"
persona_idstringFacultatif

L’identifiant d’une persona ou d’une voix Suno enregistrée, chargée de chanter ou de jouer la chanson. Facultatif. S’applique uniquement avec vos propres paroles ou instrumental activé. À utiliser avec persona_model. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
minLength:1
maxLength:200
varietyintegerFacultatif

Dans quelle mesure le modèle fait varier votre prompt de style, sous forme d’entier de 0 (désactivé : vos balises de style sont utilisées exactement comme écrites) à 4 (maximum). Valeur par défaut : 1. C’est la description du réglage donnée par Suno elle-même ; nous ne l’avons pas testé. S’applique uniquement avec vos propres paroles ou instrumental activé. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
minimum:0
maximum:4
audio_weightnumberFacultatif

Poids de l’audio fourni en entrée dans le résultat, de 0 à 1 par pas de 0,01. Suno ne le prend pas en charge pour les chansons sans voix. S’applique uniquement avec vos propres paroles ou instrumental activé. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
minimum:0
maximum:1
weirdnessnumberFacultatif

Distance que la chanson peut prendre avec l’attendu, de 0 (classique) à 1 (aventureux), par pas de 0,01. S’applique uniquement avec vos propres paroles ou instrumental activé. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
minimum:0
maximum:1
style_weightnumberFacultatif

Degré de fidélité de la chanson à votre brief de style, de 0 à 1 par pas de 0,01. S’applique uniquement avec vos propres paroles ou instrumental activé ; ailleurs, il renvoie une erreur explicite. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
minimum:0
maximum:1
vocal_genderstringFacultatif

Oriente la voix principale vers le féminin ou le masculin. C’est une préférence, pas une garantie, et nous n’avons pas testé à quelle fréquence elle est respectée. S’applique uniquement avec vos propres paroles ou instrumental activé ; l’envoyer avec des paroles générées renvoie une erreur explicite. Ne change pas le prix.

Valeur par défaut
Non définie
Valeurs autorisées
"female""male"
negative_promptstringFacultatif

Styles, sons ou ambiances à écarter de la chanson, sous forme de courte liste séparée par des virgules, par exemple « harsh distortion, spoken word ». Facultatif. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
minLength:1
maxLength:500
titlestringFacultatif

Titre de la chanson, jusqu’à 80 caractères. S’applique avec vos propres paroles ou avec instrumental activé ; avec des paroles générées, le modèle choisit le titre. Facultatif. Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
minLength:1
maxLength:80
instrumentalbooleanFacultatif

À activer pour un morceau sans voix. prompt décrit alors le style (jusqu’à 1 000 caractères) et lyrics n’est pas nécessaire. Désactivé par défaut. Ne change pas le prix.

Valeur par défaut
false
generate_lyricsbooleanFacultatif

Activé par défaut : quand lyrics est vide et instrumental désactivé, le modèle écrit les paroles à partir de prompt. Les paroles que vous fournissez ne sont jamais réécrites. Ne le désactivez que si vous envoyez des paroles ou activez instrumental. Ne change pas le prix.

Valeur par défaut
true
lyricsstringFacultatif

Les mots à chanter, jusqu’à 5 000 caractères, une ligne par rangée. Les balises de section comme [Verse], [Chorus], [Bridge] et [Outro], placées sur leur propre ligne, structurent la chanson et ne sont pas chantées. Lors de nos tests, chaque ligne a été chantée dans l’ordre écrit, et le refrain n’est pas revenu sauf si vous l’avez répété. À laisser vide pour que des paroles soient écrites (voir generate_lyrics). Ne change pas le prix.

Valeur par défaut
Non définie
Contraintes
minLength:1
maxLength:5000

Suivre la tâche

HTTP 202 signifie que la tâche est acceptée, pas terminée. Enregistrez le taskId renvoyé et interrogez cette tâche-là. N’en créez pas une seconde pendant l’attente.

Réponse acceptée
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

La réponse d’acceptation inclut l’estimation afin que votre application affiche le même montant dans l’historique des tâches et la facturation.

Consulter la tâche
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Commencez vers 2 secondes d’intervalle, puis espacez progressivement. Arrêtez-vous sur un état final. Après une coupure réseau, interrogez le taskId d’origine. Ne relancez la création qu’avec la clé d’idempotence et le corps d’origine.

Ou laissez le rappel venir à vous
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Passez callBackUrl à la création de la tâche et l’enregistrement terminé vous est envoyé en POST — plus de boucle d’interrogation du tout. Chaque livraison porte X-Webhook-Timestamp, X-Webhook-Signature et X-Webhook-Payload-Version. La signature est un HMAC-SHA256 en base64 sur taskId.timestamp.sha256(body) : vérifiez-la donc sur les octets bruts, car analyser le JSON puis le re-sérialiser les modifie et le contrôle échouera. Les livraisons en échec sont réessayées, le même taskId peut donc arriver deux fois — rendez le gestionnaire idempotent. Répondez 2xx d’abord, traitez ensuite : un gestionnaire lent est compté comme une livraison ratée.

Lire le résultat

Ne traitez output que lorsque state vaut succeeded. En cas d’échec, consultez errorCode, errorMessage et request_id. Les coûts et états des exemples ne constituent pas une facture réelle.

Exemple de réponse terminée
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "suno/v6-wild/text-to-audio",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.mp3",
          "mime": "audio/mpeg",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.mp3?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

Pour chaque fichier disponible, ouvrez ou téléchargez assets[].url directement, sans en-tête Authorization. Le lien signé expire à expiresAt : relisez la tâche pour le renouveler tant que le fichier est dans sa période de conservation. Un fichier en attente ou indisponible n’a pas d’URL. Traitez les liens signés comme des données privées.

SDK et intégrations

Utilisez SpicyAPI dans votre application, terminal, assistant IA ou workflow visuel. Choisissez un guide de configuration.

À utiliser dans ComfyUI

Installez les nœuds SpicyAPI depuis ComfyUI Manager ou avec la commande ci-dessous, puis cherchez Suno v6 Wild · Text to Music sur le canevas. Le nœud propose les mêmes options que cette page et affiche son prix avant de s’exécuter.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi