Referencia de API
Suno Voces
Enroll a custom voice from a validated recording and check its status.
01
Descripción general
Usa el endpoint de voces y lee el resultado de la misma respuesta.
Inicio rápido
- Cree una Clave de API y establézcala como RUNAPI_API_KEY.
- Envíe una solicitud POST cuyo cuerpo coincida con el esquema de la solicitud.
- Lea el resultado en el cuerpo de la respuesta exitosa.
Endpoint
- URL base
https://runapi.ai- Versión de la API
v1- Autenticación
Authorization: Bearer YOUR_API_TOKEN
02
Modelos compatibles
Abra una página de modelo para conocer los precios actuales, los límites de velocidad y los detalles de uso comercial.
03
Cuerpo JSONEsquema de solicitud
Envíe únicamente los campos declarados para este endpoint.
Cuerpo de la solicitud2 campos
namestring
Opcional
Nombre de voz.
source_audio_urlstring
Obligatorio
URL pública de la grabación de voz a clonar.
04
HTTP 200Respuesta de éxito
POST /api/v1/voices
Esquema de respuesta
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
}
Ejemplo de respuesta
JSON
{
"billing": {
"refund": null,
"reservation": null,
"settlement": null
},
"voice": {
"id": "res_0123456789abcdef0123456789abcdef0123456789abcdef",
"name": "Studio Voice"
}
}
05
HTTP 401Errores
POST /api/v1/voices
Esquema de respuesta
JSON
{
"properties": {
"error": {
"description": "Mensaje de error legible por personas.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Ejemplo de respuesta
JSON
{
"error": "Authentication required"
}
06
HTTP 400Errores
POST /api/v1/voices
Esquema de respuesta
JSON
{
"oneOf": [
{
"properties": {
"error": {
"description": "Mensaje de error legible por personas.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
},
{
"properties": {
"error": {
"description": "Resumen de validación legible por personas.",
"type": "string"
},
"errors": {
"additionalProperties": {
"items": {
"type": "string"
},
"type": "array"
},
"description": "Mensajes de validación con clave por campo de solicitud público, con un array de cadenas legibles por personas para cada campo.",
"type": "object"
}
},
"required": [
"error",
"errors"
],
"type": "object",
"unevaluatedProperties": false
}
]
}
Ejemplo de respuesta
JSON
{
"error": "Validation failed",
"errors": {
"source_audio_url": [
"is required"
]
}
}
07
HTTP 402Errores
POST /api/v1/voices
Esquema de respuesta
JSON
{
"properties": {
"error": {
"description": "Mensaje de error legible por personas.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Ejemplo de respuesta
JSON
{
"error": "Insufficient balance"
}
08
HTTP 429Errores
POST /api/v1/voices
Esquema de respuesta
JSON
{
"properties": {
"error": {
"description": "Mensaje de error legible por personas.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Ejemplo de respuesta
JSON
{
"error": "API key credit limit exceeded"
}
09
HTTP 409Errores
POST /api/v1/voices
Esquema de respuesta
JSON
{
"properties": {
"error": {
"description": "Mensaje de error legible por personas.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Ejemplo de respuesta
JSON
{
"error": "The request uses features that are not supported for the selected model"
}
10
HTTP 429Errores
POST /api/v1/voices
Esquema de respuesta
JSON
{
"properties": {
"error": {
"description": "Mensaje de error legible por personas.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Ejemplo de respuesta
JSON
{
"error": "Rate limit reached. Please retry later."
}
11
HTTP 503Errores
POST /api/v1/voices
Esquema de respuesta
JSON
{
"properties": {
"error": {
"description": "Mensaje de error legible por personas.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Ejemplo de respuesta
JSON
{
"error": "Service under maintenance, please try again later"
}
12
HTTP 504Errores
POST /api/v1/voices
Esquema de respuesta
JSON
{
"properties": {
"error": {
"description": "Mensaje de error legible por personas.",
"type": "string"
}
},
"required": [
"error"
],
"type": "object",
"unevaluatedProperties": false
}
Ejemplo de respuesta
JSON
{
"error": "The request timed out"
}
13
Ejemplos de código generados
Usa cURL directamente o instala un SDK para tu lenguaje. Cada muestra envía la solicitud validada que se muestra en esta referencia.
Instalar
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"
)