Référence API
Suno Voix
Enroll a custom voice from a validated recording and check its status.
01
Vue d'ensemble
Utilisez le point de terminaison voices et lisez le résultat dans la même réponse.
Démarrage rapide
- Créez une clé API et définissez-la comme RUNAPI_API_KEY.
- Envoyer une requête POST dont le corps correspond au schéma de requête.
- Lisez le résultat dans le corps de la réponse réussie.
Point de terminaison
- URL de base
https://runapi.ai- Version de l'API
v1- Authentification
Authorization: Bearer YOUR_API_TOKEN
02
Modèles pris en charge
Ouvrez une page de modèle pour consulter la tarification actuelle, les limites de débit et les conditions d'utilisation commerciale.
03
Corps JSONSchéma de requête
Envoyez uniquement les champs déclarés pour cet endpoint.
Corps de la requête2 champs
namestring
Optionnel
Nom de la voix.
source_audio_urlstring
Requis
URL publique de l'enregistrement vocal à cloner.
04
HTTP 200Réponse de succès
POST /api/v1/voices
Schéma de réponse
JSON
{
"properties": {
"billing": {
"properties": {
"refund": {
"oneOf": [
{
"properties": {
"refunded_at": {
"type": "string"
}
},
"required": [
"refunded_at"
],
"type": "object",
"unevaluatedProperties": false
},
{
"enum": [
null
]
}
]
},
"reservation": {
"oneOf": [
{
"properties": {
"amount_cents": {
"type": "integer"
}
},
"required": [
"amount_cents"
],
"type": "object",
"unevaluatedProperties": false
},
{
"enum": [
null
]
}
]
},
"settlement": {
"oneOf": [
{
"properties": {
"amount_micro_cents": {
"type": "integer"
},
"charged_amount_cents": {
"type": "integer"
}
},
"required": [
"charged_amount_cents",
"amount_micro_cents"
],
"type": "object",
"unevaluatedProperties": false
},
{
"enum": [
null
]
}
]
}
},
"required": [
"reservation",
"settlement",
"refund"
],
"type": "object",
"unevaluatedProperties": false
},
"voice": {
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"id"
],
"type": "object",
"unevaluatedProperties": false
}
},
"required": [
"voice",
"billing"
],
"type": "object",
"unevaluatedProperties": false
}
Exemple de réponse
JSON
{
"billing": {
"refund": null,
"reservation": null,
"settlement": null
},
"voice": {
"id": "res_0123456789abcdef0123456789abcdef0123456789abcdef",
"name": "Studio Voice"
}
}
05
HTTP 401Erreurs
POST /api/v1/voices
Schéma de réponse
JSON
{
"properties": {
"error": {
"description": "Message d'erreur lisible par l'humain.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemple de réponse
JSON
{
"error": "Authentication required"
}
06
HTTP 400Erreurs
POST /api/v1/voices
Schéma de réponse
JSON
{
"oneOf": [
{
"properties": {
"error": {
"description": "Message d'erreur lisible par l'humain.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
},
{
"properties": {
"error": {
"description": "Résumé de validation lisible par l'humain.",
"type": "string"
},
"errors": {
"additionalProperties": {
"items": {
"type": "string"
},
"type": "array"
},
"description": "Messages de validation indexés par champ de requête public, avec un tableau de chaînes lisibles par l'humain pour chaque champ.",
"type": "object"
}
},
"required": [
"error",
"errors"
],
"type": "object",
"unevaluatedProperties": false
}
]
}
Exemple de réponse
JSON
{
"error": "Validation failed",
"errors": {
"source_audio_url": [
"is required"
]
}
}
07
HTTP 402Erreurs
POST /api/v1/voices
Schéma de réponse
JSON
{
"properties": {
"error": {
"description": "Message d'erreur lisible par l'humain.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemple de réponse
JSON
{
"error": "Insufficient balance"
}
08
HTTP 429Erreurs
POST /api/v1/voices
Schéma de réponse
JSON
{
"properties": {
"error": {
"description": "Message d'erreur lisible par l'humain.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemple de réponse
JSON
{
"error": "API key credit limit exceeded"
}
09
HTTP 409Erreurs
POST /api/v1/voices
Schéma de réponse
JSON
{
"properties": {
"error": {
"description": "Message d'erreur lisible par l'humain.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemple de réponse
JSON
{
"error": "The request uses features that are not supported for the selected model"
}
10
HTTP 429Erreurs
POST /api/v1/voices
Schéma de réponse
JSON
{
"properties": {
"error": {
"description": "Message d'erreur lisible par l'humain.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemple de réponse
JSON
{
"error": "Rate limit reached. Please retry later."
}
11
HTTP 503Erreurs
POST /api/v1/voices
Schéma de réponse
JSON
{
"properties": {
"error": {
"description": "Message d'erreur lisible par l'humain.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemple de réponse
JSON
{
"error": "Service under maintenance, please try again later"
}
12
HTTP 504Erreurs
POST /api/v1/voices
Schéma de réponse
JSON
{
"properties": {
"error": {
"description": "Message d'erreur lisible par l'humain.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Exemple de réponse
JSON
{
"error": "The request timed out"
}
13
Exemples de code générés
Utilisez directement cURL, ou installez un SDK pour votre langage. Chaque exemple soumet la requête validée indiquée dans cette référence.
Installer
Shell
pip install runapi-suno
PYTHON
import os
from runapi.suno import SunoClient
client = SunoClient(api_key=os.environ["RUNAPI_API_KEY"])
result = client.voices.run(
source_audio_url="https://file.runapi.ai/source-vocal.mp3",
name="Studio Voice"
)