API de generación en modo personalizado

Actualizado el 2026-09-18 · equipo de Suno-API

Descripción del endpoint

El modo personalizado sirve para cuando ya tienes letra, estilo y título listos y quieres controlar la voz que canta, la fuerza con que se sigue el estilo y el grado de aleatoriedad de la generación.

Endpoint: POST /api/music/create/custom

Facturación: De pago, actualmente 0,6 ¥ por llamada por defecto. Cada llamada suele devolver 2 canciones; el importe realmente cobrado sigue la configuración de precios actual del back-office.

Max Mode / Variety: este endpoint admite los parámetros opcionales max_mode y variety (0-4). Con max_mode activado, esta llamada se factura al doble (0,6 → 1,2 ¥ por llamada); variety no cuesta nada extra. Qué significan y cómo enviarlos está en la sección «Parámetros avanzados» del Resumen de la nueva API.

Tiempos de espera y timeouts (importante): es un endpoint síncrono — el pedido solo se acepta y se entrega a generación cuando llega la respuesta. Según lo medido, la mayoría de las peticiones responden en 1-3 segundos, alrededor del 10% tardan más de 30 segundos y la más lenta ronda los 230 segundos. Configura el timeout del cliente en 300 segundos o más; no recibir respuesta no significa que no se haya generado nada, y no reintentes justo después de un timeout (eso duplica el pedido y vuelve a cobrar). Si la conexión se cayó, confírmalo más tarde con GET /api/music/songs. Consulta «Tiempos de espera y configuración de timeout» en el Resumen de la nueva API.

Parámetros de la petición

Headers

Parámetro Tipo Obligatorio Notas
Authorization string sí Bearer YOUR_API_KEY
Content-Type string sí application/json

Parámetros del body

Parámetro Tipo Obligatorio Por defecto Notas
model string no suno-v6 Nombre de modelo para el cliente: suno-v6, suno-v6-wild o suno-v6-mini
lyrics string no - Letra; puede quedar vacía en un instrumental
style_tags string sí - Etiquetas de estilo; varias pueden separarse con comas
song_title string no - Título de la canción
instrumental boolean no false Si generar un instrumental
negative_tags string no - Estilos o efectos que no quieres que aparezcan
vocal_gender string no - Género de la voz: m, f, male o female
style_weight number no - Influencia del estilo, de 0.0 a 1.0
weirdness_constraint number no - Aleatoriedad, de 0.0 a 1.0
wait_completion boolean no false Si esperar a que termine la generación antes de responder

Notas sobre los parámetros avanzados

Género de la voz vocal_gender

Influencia del estilo style_weight

Controla con qué fuerza el resultado sigue style_tags. Cuanto más alto, más tiende el resultado a seguir las etiquetas que enviaste.

Aleatoriedad weirdness_constraint

Controla cuánto varía y experimenta el resultado. Valores altos suelen dar más variación; valores bajos suelen dar un resultado más seguro.

Ambos parámetros numéricos van de 0.0 a 1.0, y 0 es un valor explícito válido. Solo omitir el campo por completo significa «no especificado».

Al rellenarlos, ten en cuenta que son fracciones decimales, no enteros de porcentaje. Referencia sugerida: de 0.0 a 0.3 es conservador, de 0.4 a 0.6 es equilibrado, de 0.7 a 1.0 es más experimental; si no tienes preferencia clara usa 0.5 o simplemente omítelos. Ejemplo: weirdness_constraint: 0.5, nunca 50 ni 50%.

Con instrumental=true el resultado es instrumental, así que la letra y el género de la voz no actúan como en una canción cantada; si necesitas voz, envía false u omite el campo. Los campos booleanos deben usar true/false de JSON, no cadenas.

Ejemplo de petición en Python

import requests

response = requests.post(
    'https://www.suno-api.io/api/music/create/custom',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
    json={
        'model': 'suno-v6',
        'lyrics': '[Verse]\nLa noche cae sobre el mar\nuna brisa pasa junto a la ventana',
        'style_tags': 'Mandopop, acoustic guitar, warm vocal',
        'song_title': 'Brisa de la tarde junto al mar',
        'vocal_gender': 'male',
        'style_weight': 0.68,
        'weirdness_constraint': 0.32,
    },
    timeout=300,
)
response.raise_for_status()
songs = response.json()

Modo de recibo de aceptación (opcional)

Este endpoint también admite el modo de recibo de aceptación de la API de generación en modo simple: con "accept_mode": "async" en el body (o la cabecera X-Accept-Mode: async), el endpoint devuelve 202 y un número de recibo de inmediato, la generación continúa en segundo plano, y sigues el progreso con GET /api/music/requests/{request_id}.

Encaja con clientes que no deben mantener conexiones largas, o que no quieren que un timeout se interprete como «no se ha generado nada». Sin ese parámetro, el comportamiento es exactamente el de antes.

curl -X POST https://www.suno-api.io/api/music/create/custom \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --max-time 300 \
  -d '{
    "style_tags": "Mandopop, acoustic guitar, warm vocal",
    "song_title": "Brisa de la tarde junto al mar",
    "vocal_gender": "male",
    "accept_mode": "async"
  }'

La forma de la respuesta y el método de sondeo están en la sección «Modo de recibo de aceptación» de la API de generación en modo simple.

Validación de parámetros

Estos casos devuelven HTTP 400, y el message del error nombra el campo inválido:

Límites de los campos de texto

Estos campos también devuelven HTTP 400 si son demasiado largos, y nunca entran en generación ni se precobran. La cuenta es por carácter Unicode (un carácter han cuenta como 1) e incluye los espacios iniciales y finales:

Campo Límite
prompt (letra, compatible con lyrics) 3000 caracteres
style_tags (estilo, compatible con tags, style) 1000 caracteres
negative_tags (estilos excluidos) 1000 caracteres
song_title (título, compatible con title) 100 caracteres

El mensaje de error tiene la forma style_tags must not exceed 1000 characters; received 2772: la primera palabra es el campo que se pasó y el final es el recuento medido, así que ante un 400 puedes recortar usando esos dos números en lugar de probar campo a campo. Las convenciones generales están en «Límites de campos de texto» del Resumen de la nueva API.

Respuesta

El endpoint suele devolver un array con 2 canciones. Una petición asíncrona arranca normalmente en pending; guarda el song_id y lee el estado final y la dirección de audio con la API de consulta de canciones. Los campos de canción son los mismos que en la API de generación en modo simple.

Campos compatibles

Campo recomendado Campo compatible
vocal_gender vocalGender
style_weight styleWeight
weirdness_constraint weirdnessConstraint

Las integraciones nuevas deben usar snake_case en todo. Si una misma petición lleva snake_case y camelCase, prevalece el valor en snake_case.

SiguienteAPI de generación de voz hablada (Speech)

Obtener una clave de API

Crea una clave de API en la consola después de registrarte. Cada generación cuesta 0,6 ¥ y devuelve 2 pistas, las descargas son ilimitadas y no hace falta número de teléfono.

Obtener clave de API Volver al resumen