API de clonage vocal et de génération avec voix (non recommandé)

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

⛔ Ancienne chaîne, non recommandée pour les nouvelles intégrations. Cette page décrit la chaîne persona d'origine (voice_task_id / generate-with-voice). Elle fonctionne toujours, mais n'est plus recommandée aux clients ; le menu de gauche la signale comme « non recommandé ».

Pour une nouvelle intégration, utilisez l'【Recommandé】 API de profil vocal : créez un profil vocal à partir d'un échantillon de voix (POST /api/music/voice-profile/create), puis servez-vous-en pour reprendre une chanson choisie ou pour en chanter une nouvelle. Le profil vocal est une ressource de premier ordre : il peut être listé, consulté et supprimé, et son audio source est conservé de façon permanente.

Si votre produit a besoin de la boucle complète « créer une voix → la réutiliser durablement → reprendre des chansons », privilégiez la nouvelle chaîne.

Avertissement important : une voix clonée peut expirer.

Le voice_id / voice_task_id produit par le clonage vocal n'est pas une ressource utilisable indéfiniment : il peut cesser de fonctionner à cause de sa durée de validité, de l'état du compte ou de l'état de la voix. Les intégrateurs ne doivent pas cloner une fois puis réutiliser pour toujours un identifiant de voix mis en cache localement.

Bonne pratique :

  • Conservez voice_task_id, voice_id, is_available, updated_at et l'heure de la dernière génération réussie.
  • Avant chaque génération avec une voix clonée, appelez GET /api/voice/clone/tasks/{voice_task_id} ou POST /api/voice/clone/tasks/{voice_task_id}/check et confirmez que is_available=true.
  • Si l'endpoint renvoie que la voix est indisponible, que la tâche n'existe pas ou selected voice is not ready, invitez l'utilisateur à cloner à nouveau ou à choisir une autre voix disponible.
  • Ne promettez pas à l'utilisateur final qu'une voix clonée est un « actif permanent » ; indiquez dans l'interface du produit que « la voix peut expirer et nécessiter une nouvelle validation ou un nouveau clonage ».

Description du point d'accès

Ce groupe d'endpoints crée une voix réutilisable et génère des chansons avec elle. L'appelant n'a besoin que de la clé API émise par la plateforme ; le serveur se charge de la soumission des tâches, de la synchronisation d'état, de la facturation et des téléchargements.

Authentification : Authorization: Bearer YOUR_API_KEY

Facturation :

Déroulé des appels

  1. Appelez POST /api/voice/clone/validate pour envoyer la voix source et obtenir un voice_task_id.
  2. Attendez ou interrogez GET /api/voice/clone/tasks/{voice_task_id} jusqu'à obtenir validate_info.
  3. L'utilisateur lit ce texte à voix haute et enregistre l'audio de vérification.
  4. Appelez POST /api/voice/clone/tasks/{voice_task_id}/generate pour soumettre l'audio de vérification.
  5. Appelez POST /api/voice/clone/tasks/{voice_task_id}/check ou continuez à interroger la tâche jusqu'à is_available=true.
  6. Appelez POST /api/music/generate-with-voice pour générer une chanson avec cette voix.
  7. L'endpoint de génération renvoie d'abord des tâches de substitution ; une fois la génération terminée et le song_id réel obtenu, les endpoints de téléchargement permettent de récupérer un fichier unique ou une archive.
  8. (Facultatif) Quand la voix n'est plus nécessaire, appelez DELETE /api/voice/clone/voices/{voice_task_id} pour la supprimer ; la sémantique est en section 6.

Il existe aussi le clonage en une étape : sur la première page d'enregistrement/d'envoi de voix de l'espace de travail, vous pouvez choisir de tout terminer d'un coup ; le système réalise alors la validation et la création de la voix ensemble, sans que vous ayez à enregistrer un second audio de vérification ; facturé 5 ¥ par appel, remboursé en cas d'échec.

Champs de la tâche de voix

Champ Type Remarques
voice_task_id number Identifiant de la tâche de voix dans la plateforme ; tous les endpoints suivants utilisent cet identifiant
voice_id string Identifiant de voix utilisable pour générer des chansons ; renvoyé quand la tâche est disponible
voice_name string Nom de la voix
description string Description de la voix
style string Style de la voix
singer_skill_level string Niveau de chant ; valeurs courantes : beginner, intermediate, professional
language string Langue de la voix source, par exemple zh, en
validate_info string Texte de vérification à lire à voix haute
validate_status string État de la tâche de validation
voice_status string État de création de la voix
is_available boolean Indique si la voix peut déjà servir à générer des chansons
status string État de la tâche sur la plateforme
stage string Étape en cours
error_code string Code d'erreur en cas d'échec
error_message string Cause de l'échec
source_duration_seconds number Durée de l'audio source en secondes
created_at number Horodatage de création
updated_at number Horodatage de mise à jour
completed_at number Horodatage de fin

1. Soumettre la voix source à validation

Point d'accès : POST /api/voice/clone/validate

Paramètres du corps

Paramètre Type Obligatoire Valeur par défaut Remarques
voice_url string Non - URL de l'audio de la voix source. Soit ce champ, soit file_base64
file_base64 string Non - Audio en base64. Soit ce champ, soit voice_url
file_name string Non - Nom du fichier ; recommandé avec file_base64
voice_name string Non généré automatiquement Nom de la voix
description string Non - Description de la voix
style string Non - Style de la voix
singer_skill_level string Non beginner Niveau de chant
language string Non zh Langue de la voix source
vocal_start_s number Oui - Seconde de début de la voix utile
vocal_end_s number Oui - Seconde de fin de la voix utile
source_duration_seconds number Non - Durée totale de l'audio source en secondes

vocal_end_s - vocal_start_s doit respecter le minimum de segment vocal. Envoyez un enregistrement vocal clair, sans accompagnement ni bruit manifestes.

Exemple de requête

curl -X POST https://www.suno-api.io/api/voice/clone/validate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "voice_url": "https://example.com/source-voice.wav",
    "voice_name": "Ma voix féminine en chinois",
    "description": "Voix féminine en chinois, claire et naturelle",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

Exemple de réponse

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Ma voix féminine en chinois",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. Interroger une tâche de voix

Point d'accès : GET /api/voice/clone/tasks/{voice_task_id}

Exemple de requête

curl https://www.suno-api.io/api/voice/clone/tasks/123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Exemple de réponse

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Ma voix féminine en chinois",
      "validate_info": "Lisez à voix haute le texte de vérification renvoyé ici",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. Régénérer le texte de vérification

Point d'accès : POST /api/voice/clone/tasks/{voice_task_id}/regenerate

À appeler lorsque le texte de vérification ne se prête pas à une lecture à voix haute ou qu'une nouvelle validation est nécessaire.

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/regenerate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

4. Soumettre l'audio de vérification et créer la voix

Point d'accès : POST /api/voice/clone/tasks/{voice_task_id}/generate

Paramètres du corps

Paramètre Type Obligatoire Valeur par défaut Remarques
verify_url string Non - URL de l'audio lu à partir du texte de vérification. Soit ce champ, soit file_base64
file_base64 string Non - Audio de vérification en base64. Soit ce champ, soit verify_url
file_name string Non - Nom du fichier ; recommandé avec file_base64
voice_name string Non nom de la tâche Nom de la voix
description string Non description de la tâche Description de la voix
style string Non style de la tâche Style de la voix
singer_skill_level string Non réglage de la tâche Niveau de chant

Exemple de requête

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "verify_url": "https://example.com/verify-voice.wav",
    "voice_name": "Ma voix féminine en chinois"
  }'

5. Vérifier si la voix est utilisable

Point d'accès : POST /api/voice/clone/tasks/{voice_task_id}/check

curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/check \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Quand la tâche est utilisable, is_available vaut true dans la réponse et un voice_id est renvoyé.

6. Supprimer une voix

Point d'accès : DELETE /api/voice/clone/voices/{voice_task_id}

Facturation : gratuite.

curl -X DELETE https://www.suno-api.io/api/voice/clone/voices/123 \
  -H "Authorization: Bearer YOUR_API_KEY"

Exemple de réponse

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
Champ Type Remarques
voice_task_id number Identifiant de la tâche de voix supprimée
deleted boolean Toujours true, indique que la demande de suppression a été acceptée

Ce qui se passe après la suppression

7. Générer une chanson avec une voix clonée

Point d'accès : POST /api/music/generate-with-voice

Facturation : 1,2 ¥ par appel.

Paramètres du corps

Paramètre Type Obligatoire Valeur par défaut Remarques
voice_task_id number Oui - Identifiant d'une tâche de voix déjà disponible
voice_id string Non - Champ de vérification facultatif ; s'il est envoyé, il doit correspondre au voice_id de la tâche
customMode boolean Non false false correspond au mode inspiration, true au mode avancé
prompt string Oui - En mode inspiration, la description de la chanson ; en mode avancé, les paroles. Ni l'un ni l'autre ne peut être vide
style string Oui en mode avancé - Étiquettes de style ; ne peut pas être vide quand customMode=true
title string Oui en mode avancé - Titre de la chanson ; ne peut pas être vide quand customMode=true
negativeTags string Non - Style à exclure
instrumental boolean Non false Champ de compatibilité ; la génération avec voix clonée est toujours traitée comme une chanson chantée
waitAudio boolean Non false Champ de compatibilité ; cet endpoint renvoie toujours les tâches de substitution de façon asynchrone et n'attend pas l'audio
model string Non suno-v6 Modèle de génération ordinaire ; suno-v6, suno-v6-wild ou suno-v6-mini
vocalGender string Non - Préférence de genre vocal
lyricsMode string Non - Champ de compatibilité ; la chaîne de soumission actuelle avec voix clonée ne change pas à elle seule le mode de paroles
weirdnessConstraint number Non - Force créative
styleWeight number Non - Poids du style
audioWeight number Non valeur par défaut de la plateforme Audio Influence (importance de l'audio de référence), plage 0.0-1.0. Si le champ n'est pas envoyé, la valeur par défaut de la plateforme s'applique (équivalent à 25 % dans l'interface officielle) ; 0 est une valeur valide qui signifie ne pas se rapprocher du tout de la référence. Ce champ est étroitement lié au sourceClipId de la ligne suivante : avec une source il vise l'audio de référence, sans source il vise la voix clonée ; la plateforme n'a que ce seul curseur pour les deux cas, ne le scindez donc pas en deux paramètres par usage
sourceClipId string Non - Identifiant réel du clip dans l'espace de travail de la chanson source. S'il est envoyé, on entre dans la reprise avec voix clonée ; sinon, c'est une génération ordinaire avec voix clonée
sourceAudioUrl string Non - Champ d'affichage de la source ; il n'intervient ni dans la propriété ni dans la décision de compte, le serveur se fonde sur son enregistrement en base
sourceTitle string Non - Champ d'affichage de la source ; il n'intervient ni dans la propriété ni dans la décision de compte
clientSubmissionId string Non - Champ de compatibilité Create UI ; une déduplication fiable côté API client doit passer par l'en-tête Idempotency-Key

suno-v6, suno-v6-wild et suno-v6-mini sont pris en charge ; un modèle vide est traité comme suno-v6. Les anciens modèles V5/V5.5 sont retirés, mais d'anciennes tâches peuvent encore afficher leurs noms.

La structure de requête partagée interprète aussi des champs de compatibilité Create UI comme task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId et voiceId, mais ce ne sont pas des paramètres client valides pour cet endpoint : la tâche de voix doit être envoyée via voice_task_id, la vérification facultative de voix via voice_id, et la génération musicale avec voix ne lit jamais les champs sound.

Comment remplir les paramètres de génération

En-têtes

En-tête Obligatoire Remarques
Authorization: Bearer ... Oui Jeton de l'API client
Content-Type: application/json Oui Corps JSON
Idempotency-Key Non, fortement recommandé Jusqu'à 128 caractères. À utilisateur, jeton, endpoint, clé et corps identiques, la facturation et la création de tâche n'ont lieu qu'une fois

Comportement de Idempotency-Key :

Conditions de reprise avec sourceClipId

La reprise à partir d'une source côté API client est gérée entièrement côté serveur : l'accès à la chanson source est résolu par le serveur et le client ne transmet aucune information de compte. La faisabilité est déterminée par la réponse réelle de l'endpoint.

La source doit appartenir à l'utilisateur d'API courant, être une chanson de l'espace de travail terminée qui n'est pas pending: et disposer d'un audio utilisable. Sont prises en charge la génération ordinaire, les sources d'envoi ordinaire et la chanson finale issue d'un envoi renforcé ; les enregistrements intermédiaires d'envoi renforcé sont refusés avant facturation. Le serveur n'accepte que l'identifiant de chanson source transmis par le client, jamais un identifiant de compte ; une source indisponible ou inachevée renvoie une erreur avant facturation.

Exemple de requête

curl -X POST https://www.suno-api.io/api/music/generate-with-voice \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "voice_task_id": 123,
    "customMode": true,
    "prompt": "Écris une chanson pop chinoise sur un bord de mer par nuit d'été",
    "style": "Mandopop, warm piano, emotional",
    "title": "Brise de mer par nuit d'été",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

Exemple de réponse

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "items": [
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:0",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Brise de mer par nuit d'été",
        "prompt": "Écris une chanson pop chinoise sur un bord de mer par nuit d'été"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Brise de mer par nuit d'été",
        "prompt": "Écris une chanson pop chinoise sur un bord de mer par nuit d'été"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

À propos des tâches de substitution et du song_id final

generate-with-voice est un endpoint de génération asynchrone. Une réponse réussie signifie seulement que la tâche de génération a été soumise, pas que la chanson est terminée.

Signification des champs clés de la réponse :

Champ Remarques
client_request_id Identifiant de suivi de cette requête de génération. Une requête génère généralement 2 chansons et les deux résultats partagent ce client_request_id.
items[].placeholder_id Identifiant de substitution local à la plateforme, généralement de la forme pending:{client_request_id}:{index}. Ce n'est pas l'identifiant final de la chanson.
items[].client_request_index Index du résultat dans la même requête, généralement 0 et 1.
items[].status État initial après soumission, par exemple submitted. La réussite ou l'échec ultérieur suit l'enregistrement final de la tâche.

Attention : un placeholder_id commençant par pending: ne peut pas servir de song_id final, ni être transmis à /api/music/query ou aux endpoints de téléchargement. Appeler /api/music/query avec seulement des valeurs pending:* peut renvoyer un tableau vide [], car la chanson réelle n'est pas encore terminée ou la tâche de substitution n'a pas encore été remplacée par l'identifiant final.

Exemple incorrect :

{
  "song_ids": "pending:cu_1780480000_abcd1234:0"
}

Parcours correct :

  1. Appelez POST /api/music/generate-with-voice pour soumettre la tâche de génération avec voix.
  2. Conservez client_request_id, items[].placeholder_id et items[].client_request_index de la réponse.
  3. Interrogez GET /api/music/generate-with-voice/results?client_request_id=cu_xxx en boucle.
  4. Quand items[].song_id a une valeur qui ne commence pas par pending:, appelez /api/music/query, /api/music/download-file ou /api/music/download-all.

La version actuelle ajoute un endpoint public de consultation :

GET /api/music/generate-with-voice/results?client_request_id=cu_xxx

Il renvoie les résultats des tâches du même client_request_id pour l'utilisateur courant, ce qui permet au client de retrouver lui-même le song_id final. Dans la liste renvoyée :

Si vous n'avez conservé que le client_request_id ou un identifiant de substitution pending:*, appelez d'abord cet endpoint de résultats ; si le song_id réel reste introuvable, transmettez le client_request_id au support technique pour qu'il le localise.

Consulter les résultats de la génération avec voix

Point d'accès : GET /api/music/generate-with-voice/results

Facturation : gratuite.

Paramètres de requête

Paramètre Type Obligatoire Remarques
client_request_id string Oui Identifiant de suivi renvoyé par generate-with-voice

Exemple de requête

curl -X GET "https://www.suno-api.io/api/music/generate-with-voice/results?client_request_id=cu_1780480000_abcd1234" \
  -H "Authorization: Bearer YOUR_API_KEY"

Exemple de réponse en cours

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "status": "processing",
    "items": [
      {
        "song_id": "",
        "placeholder_id": "pending:cu_1780480000_abcd1234:0",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "processing",
        "type": "voice_generate",
        "title": "Brise de mer par nuit d'été"
      }
    ]
  }
}

Exemple de réponse terminée

{
  "success": true,
  "message": "",
  "data": {
    "client_request_id": "cu_1780480000_abcd1234",
    "status": "completed",
    "items": [
      {
        "song_id": "song_abc123",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 0,
        "status": "completed",
        "type": "voice_generate",
        "title": "Brise de mer par nuit d'été",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

Valeurs du status de premier niveau

Valeur Remarques
not_found Aucune tâche avec ce client_request_id n'existe encore pour l'utilisateur courant
processing Au moins un résultat n'est pas terminé ; continuez à interroger
completed Tous les résultats sont terminés ; le song_id peut être consulté ou téléchargé
partial Certains résultats sont terminés, d'autres en échec ; traitez d'abord les song_id terminés
failed Tous les résultats ont échoué ; consultez items[].error_message

8. Télécharger un fichier unique

Point d'accès : POST /api/music/download-file

Paramètres du corps

Paramètre Type Obligatoire Remarques
song_id string Oui Identifiant de la chanson
kind string Oui Type de téléchargement : audio, cover, wav, video

Exemple de requête

curl -X POST https://www.suno-api.io/api/music/download-file \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "song_abc123",
    "kind": "audio"
  }' \
  --output song.mp3

La réponse est un flux de fichier ; le Content-Type et le nom du fichier suivent ce que renvoie le backend.

9. Télécharger les ressources de la chanson dans une archive

Point d'accès : POST /api/music/download-all

Paramètres du corps

Paramètre Type Obligatoire Remarques
song_id string Oui Identifiant de la chanson

Exemple de requête

curl -X POST https://www.suno-api.io/api/music/download-all \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "song_id": "song_abc123"
  }' \
  --output song.zip

L'archive contient généralement l'audio, la pochette et metadata.json ; si un type de ressource n'a pas encore été généré, il n'est pas inclus dans l'archive.

Erreurs courantes

message Remarques
voice audio is required Ni voice_url ni file_base64 n'a été fourni lors de l'envoi de la voix source
invalid voice task id L'identifiant de tâche de voix dans le chemin est invalide
voice validation is not ready Le texte de vérification n'est pas encore disponible, l'audio de vérification ne peut donc pas être soumis
selected voice is not ready La voix choisie ne peut pas encore générer de chansons (non prête, supprimée ou n'appartenant pas au compte courant)
selected voice does not match voice task Le voice_id de la requête ne correspond pas à la tâche
voice task is required voice_task_id est manquant lors de la génération d'une chanson avec voix
record not found La tâche / chanson n'existe pas, n'appartient pas au compte de la clé API courante, ou a déjà été supprimée (interroger cette tâche après avoir supprimé la voix donne le même résultat)

Les erreurs de ce groupe renvoient toujours HTTP 200 : jugez le résultat avec le champ success du corps (false signifie échec, avec la raison dans message) et ne vous fiez pas uniquement au code de statut HTTP. La sémantique complète de la suppression d'une voix (reste-t-elle utilisable, peut-elle être restaurée) se trouve en section 6.

Suivant【Recommandé】 API de profil vocal

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