Ir al contenido principal

Suno v6 Mini API, el generador de canciones más ligero: una frase o su propia letra de entrada, dos canciones MP3 terminadas con voz de salida, al mismo precio fijo que v6.

Desde $0.072/solicitud

Playground

Enviar una solicitud

Inicio rápido

Los ejemplos usan las definiciones públicas de parámetros del endpoint seleccionado. Sustituye la clave de API y los medios de ejemplo, y envía la solicitud desde tu servidor.

SDK e integraciones
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Autenticación de API

Guarda la clave de API en la variable de entorno del servidor SPICY_API_KEY. Usa autenticación Bearer y Content-Type: application/json en las solicitudes 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-mini/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"

Generado a partir del esquema de entrada de este modelo: el mismo con el que la API valida cada solicitud.

Parámetros de entrada

Incluye estos campos en el objeto input del cuerpo de la solicitud. Los nombres y tipos coinciden con la API. No supongas un valor predeterminado si no está indicado.

promptstringObligatorio

El brief de estilo. Con letra propia o con instrumental activado, es solo el estilo: género, tempo, instrumentos, voz, ambiente, hasta 1000 caracteres. Sin letra y con generate_lyrics activado, es la idea de la canción y el modelo escribe las palabras a partir de ella, hasta 3000 caracteres. Describa los estilos con palabras; los prompts que nombran a artistas reales se rechazan. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
minLength:1
maxLength:3000
reference_audio_urlsarray<string>Opcional

Un archivo de audio de referencia (de 6 segundos a 30 minutos, de hasta 500 MB) que inspira la canción. Solo con letra generada: sin letra, instrumental desactivado, generate_lyrics activado. Use audio que tenga derecho a usar. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
maxItems:1
reference_video_urlsarray<string>Opcional

Un video de referencia (MP4, MOV o WebM, de hasta 100 MB y 241 segundos) en torno al cual se construye la canción, por ejemplo para ponerle música. Solo con letra generada: sin letra, instrumental desactivado, generate_lyrics activado. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
maxItems:1
image_urlsarray<string>Opcional

Hasta 5 imágenes de ambiente (JPEG, PNG, WebP o BMP, de hasta 10 MB cada una) en las que el modelo se inspira para el carácter de la canción. Solo con letra generada: sin letra, instrumental desactivado, generate_lyrics activado. En otros modos devuelve un error claro. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
maxItems:5
persona_modelstringOpcional

Le indica al modelo qué es persona_id: style_persona (toma su estilo musical) o voice_persona (toma su voz). Envíelo junto con persona_id. Se aplica solo con letra propia o con instrumental activado. No cambia el precio.

Valor predeterminado
Sin especificar
Valores permitidos
"style_persona""voice_persona"
persona_idstringOpcional

El ID de una persona o voz de Suno guardada que cantará o interpretará la canción. Opcional. Se aplica solo con letra propia o con instrumental activado. Úselo junto con persona_model. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
minLength:1
maxLength:200
varietyintegerOpcional

Cuánto varía el modelo su prompt de estilo, como un número entero de 0 (desactivado: sus etiquetas de estilo se usan exactamente como las escribió) a 4 (máximo). Por defecto 1. Es la descripción que da Suno de este ajuste; no lo hemos probado. Solo se aplica con letra propia o con instrumental activado. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
minimum:0
maximum:4
audio_weightnumberOpcional

Cuánto influye el audio de entrada en el resultado, de 0 a 1 en pasos de 0,01. Suno no lo admite para canciones sin voz. Se aplica solo con letra propia o con instrumental activado. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
minimum:0
maximum:1
weirdnessnumberOpcional

Cuánto puede alejarse la canción de lo esperado, de 0 (convencional) a 1 (arriesgado), en pasos de 0,01. Se aplica solo con letra propia o con instrumental activado. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
minimum:0
maximum:1
style_weightnumberOpcional

Qué tan estrictamente sigue la canción su brief de estilo, de 0 a 1 en pasos de 0,01. Se aplica solo con letra propia o con instrumental activado; en otros casos devuelve un error claro. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
minimum:0
maximum:1
vocal_genderstringOpcional

Inclina la voz principal hacia femenina o masculina. Es una preferencia, no una garantía, y no hemos probado con qué frecuencia se cumple. Solo se aplica con letra propia o con instrumental activado; enviarlo con letra generada devuelve un error claro. No cambia el precio.

Valor predeterminado
Sin especificar
Valores permitidos
"female""male"
negative_promptstringOpcional

Estilos, sonidos o ambientes que se deben dejar fuera de la canción, como una lista breve separada por comas, por ejemplo “harsh distortion, spoken word”. Opcional. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
minLength:1
maxLength:500
titlestringOpcional

Nombre de la canción, hasta 80 caracteres. Se aplica con letra propia o con instrumental activado; con letra generada, el modelo elige el título. Opcional. No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
minLength:1
maxLength:80
instrumentalbooleanOpcional

Actívelo para una pista sin voz. prompt describe entonces el estilo (hasta 1000 caracteres) y lyrics no es necesario. Desactivado por defecto. No cambia el precio.

Valor predeterminado
false
generate_lyricsbooleanOpcional

Activado por defecto: cuando lyrics está vacío e instrumental está desactivado, el modelo escribe la letra a partir de prompt. La letra que usted aporta nunca se reescribe. Desactívelo solo si envía una letra o activa instrumental. No cambia el precio.

Valor predeterminado
true
lyricsstringOpcional

Las palabras que se cantan, hasta 5000 caracteres, un verso por línea. Las etiquetas de sección como [Verse], [Chorus], [Bridge] y [Outro], en líneas propias, dan forma a la estructura y no se cantan. En nuestras pruebas, cada línea se cantó en el orden escrito y el coro no se repitió a menos que usted lo repitiera. Déjelo vacío para que se escriba una letra (consulte generate_lyrics). No cambia el precio.

Valor predeterminado
Sin especificar
Restricciones
minLength:1
maxLength:5000

Seguir la tarea

HTTP 202 significa que la tarea se aceptó, no que haya terminado. Guarda el taskId devuelto y consulta esa tarea. No crees otra mientras esperas el resultado.

Solicitud aceptada
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 respuesta de aceptación incluye la estimación para que tu aplicación pueda mostrar el mismo importe en el historial de tareas y en la facturación.

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

Empieza consultando cada 2 segundos aproximadamente y ve espaciando los intentos. Párate en un estado final. Si se cae la conexión, consulta el taskId original. Vuelve a crear la tarea solo con la clave de idempotencia y el cuerpo originales.

O recibe el resultado por callback
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);
});

Pasa callBackUrl al crear la tarea y recibirás el registro terminado por POST, sin un bucle de consultas de estado. Cada entrega lleva X-Webhook-Timestamp, X-Webhook-Signature y X-Webhook-Payload-Version. La firma es un HMAC-SHA256 en base64 sobre taskId.timestamp.sha256(body), así que debes verificarla con los bytes originales: si analizas el JSON y vuelves a serializarlo, los bytes cambian y la verificación falla. Las entregas fallidas se reintentan, de modo que el mismo taskId puede llegar dos veces; haz que tu manejador sea idempotente. Responde 2xx primero y haz el trabajo después: un manejador lento se trata como una entrega fallida.

Leer el resultado

Procesa output solo cuando state sea succeeded. Si falla, consulta errorCode, errorMessage y request_id. Los costos y estados de ejemplo no representan una factura real.

Ejemplo de respuesta completada
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "suno/v6-mini/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"
  }
}

Para cada archivo disponible, abre o descarga assets[].url directamente, sin la cabecera Authorization de la API. El enlace firmado expira en expiresAt: vuelve a consultar la tarea para renovarlo mientras el archivo siga dentro del periodo de conservación. Un archivo pendiente o no disponible no trae URL. Trata los enlaces firmados como datos privados.

SDK e integraciones

Usa SpicyAPI en tu app, terminal, asistente de IA o flujo visual. Elige una guía de configuración.

Úsalo en ComfyUI

Instala los nodos de SpicyAPI desde ComfyUI Manager o con el comando de abajo y busca Suno v6 Mini · Text to Music en el lienzo. El nodo tiene las mismas opciones que esta página y muestra su precio antes de ejecutarse.

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