API de clonación de voz y generación con voz (no recomendado)

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

⛔ Cadena antigua, no recomendada para nuevas integraciones. Esta página describe la cadena persona inicial (voice_task_id / generate-with-voice). Sigue funcionando, pero ya no se recomienda a los clientes; el menú de la izquierda la marca como "no recomendado".

Para nuevas integraciones usa la 【Recomendado】 API de perfil de voz: crea un perfil de voz a partir de una muestra vocal (POST /api/music/voice-profile/create) y úsalo para versionar una canción concreta o para cantar una canción nueva. El perfil de voz es un recurso de primera clase: se puede listar, consultar y eliminar, y su audio de origen se conserva de forma permanente.

Si tu producto necesita el circuito completo "crear una voz → reutilizarla a largo plazo → versionar canciones", da prioridad a la cadena nueva.

Aviso importante: una voz clonada puede caducar.

El voice_id / voice_task_id que genera la clonación de voz no es un recurso utilizable para siempre: puede dejar de funcionar por su período de validez, por el estado de la cuenta o por cambios en el estado de la voz. Quien integra no debe clonar una vez y reutilizar para siempre un ID de voz guardado en caché local.

Práctica recomendada:

  • Guarda voice_task_id, voice_id, is_available, updated_at y la hora de la última generación correcta.
  • Antes de cada generación con una voz clonada, llama a GET /api/voice/clone/tasks/{voice_task_id} o a POST /api/voice/clone/tasks/{voice_task_id}/check y confirma que is_available=true.
  • Si el endpoint devuelve que la voz no está disponible, que la tarea no existe o selected voice is not ready, pide al usuario que vuelva a clonar o que elija otra voz disponible.
  • No prometas al usuario final que una voz clonada es un "activo permanente"; muestra en la interfaz del producto que "la voz puede caducar y requerir una nueva validación o una nueva clonación".

Descripción del endpoint

Este grupo de endpoints crea una voz reutilizable y genera canciones con ella. Quien llama solo necesita la API Key que emite la plataforma; el servidor se encarga de enviar la tarea, sincronizar el estado, facturar y descargar.

Autenticación: Authorization: Bearer YOUR_API_KEY

Facturación:

Flujo de llamadas

  1. Llama a POST /api/voice/clone/validate para subir la voz de origen y obtener un voice_task_id.
  2. Espera o consulta GET /api/voice/clone/tasks/{voice_task_id} hasta obtener validate_info.
  3. El usuario lee ese texto en voz alta y graba el audio de verificación.
  4. Llama a POST /api/voice/clone/tasks/{voice_task_id}/generate para enviar el audio de verificación.
  5. Llama a POST /api/voice/clone/tasks/{voice_task_id}/check o sigue consultando la tarea hasta que is_available=true.
  6. Llama a POST /api/music/generate-with-voice para generar una canción con esa voz.
  7. El endpoint de generación devuelve primero tareas de marcador de posición; cuando la generación termina y tienes el song_id real, puedes usar los endpoints de descarga para bajar un archivo suelto o un paquete.
  8. (Opcional) Cuando ya no necesites la voz, llama a DELETE /api/voice/clone/voices/{voice_task_id} para eliminarla; la semántica está en la sección 6.

También existe la clonación en un paso: en la primera página de grabación/subida de voz del espacio de trabajo puedes elegir terminarlo todo de una vez y el sistema completa la validación y la creación de la voz juntas, así que no tienes que grabar un segundo audio de verificación; cuesta 5 ¥ por llamada y se devuelve el importe si falla.

Campos de la tarea de voz

Campo Tipo Notas
voice_task_id number ID de la tarea de voz dentro de la plataforma; todos los endpoints posteriores usan este ID
voice_id string ID de voz que se puede usar para generar canciones; se devuelve cuando la tarea está disponible
voice_name string Nombre de la voz
description string Descripción de la voz
style string Estilo de la voz
singer_skill_level string Nivel de canto; valores habituales: beginner, intermediate, professional
language string Idioma de la voz de origen, por ejemplo zh, en
validate_info string Texto de verificación que hay que leer en voz alta
validate_status string Estado de la tarea de validación
voice_status string Estado de creación de la voz
is_available boolean Si ya se puede usar para generar canciones
status string Estado de la tarea en la plataforma
stage string Fase actual
error_code string Código de error en caso de fallo
error_message string Motivo del fallo
source_duration_seconds number Duración del audio de origen en segundos
created_at number Marca de tiempo de creación
updated_at number Marca de tiempo de actualización
completed_at number Marca de tiempo de finalización

1. Enviar la voz de origen a validación

Endpoint: POST /api/voice/clone/validate

Parámetros del cuerpo

Parámetro Tipo Obligatorio Por defecto Notas
voice_url string No - URL del audio de la voz de origen. Este o file_base64
file_base64 string No - Audio en base64. Este o voice_url
file_name string No - Nombre de archivo; recomendable si usas file_base64
voice_name string No generado automáticamente Nombre de la voz
description string No - Descripción de la voz
style string No - Estilo de la voz
singer_skill_level string No beginner Nivel de canto
language string No zh Idioma de la voz de origen
vocal_start_s number Sí - Segundo de inicio de la voz útil
vocal_end_s number Sí - Segundo de fin de la voz útil
source_duration_seconds number No - Duración total del audio de origen en segundos

vocal_end_s - vocal_start_s debe cumplir el mínimo del fragmento de voz. Sube una grabación vocal clara, sin acompañamiento ni ruido evidentes.

Ejemplo de petición

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": "Mi voz femenina en chino",
    "description": "Voz femenina en chino, clara y natural",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

Ejemplo de respuesta

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Mi voz femenina en chino",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. Consultar una tarea de voz

Endpoint: GET /api/voice/clone/tasks/{voice_task_id}

Ejemplo de petición

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

Ejemplo de respuesta

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "Mi voz femenina en chino",
      "validate_info": "Lee en voz alta el texto de verificación que se devuelve aquí",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. Volver a generar el texto de verificación

Endpoint: POST /api/voice/clone/tasks/{voice_task_id}/regenerate

Úsalo cuando el texto de verificación no sea adecuado para leerlo en voz alta o cuando haya que rehacer la validación.

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. Enviar el audio de verificación y crear la voz

Endpoint: POST /api/voice/clone/tasks/{voice_task_id}/generate

Parámetros del cuerpo

Parámetro Tipo Obligatorio Por defecto Notas
verify_url string No - URL del audio leído a partir del texto de verificación. Este o file_base64
file_base64 string No - Audio de verificación en base64. Este o verify_url
file_name string No - Nombre de archivo; recomendable si usas file_base64
voice_name string No nombre de la tarea Nombre de la voz
description string No descripción de la tarea Descripción de la voz
style string No estilo de la tarea Estilo de la voz
singer_skill_level string No ajuste de la tarea Nivel de canto

Ejemplo de petición

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": "Mi voz femenina en chino"
  }'

5. Comprobar si la voz está disponible

Endpoint: 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 '{}'

Cuando la tarea está disponible, is_available en la respuesta es true y se devuelve un voice_id.

6. Eliminar una voz

Endpoint: DELETE /api/voice/clone/voices/{voice_task_id}

Facturación: gratis.

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

Ejemplo de respuesta

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
Campo Tipo Notas
voice_task_id number ID de la tarea de voz eliminada
deleted boolean Siempre true, indica que la solicitud de eliminación se ha aceptado

Qué ocurre tras la eliminación

7. Generar una canción con una voz clonada

Endpoint: POST /api/music/generate-with-voice

Facturación: 1,2 ¥ por llamada.

Parámetros del cuerpo

Parámetro Tipo Obligatorio Por defecto Notas
voice_task_id number Sí - ID de una tarea de voz ya disponible
voice_id string No - Campo opcional de verificación; si lo envías debe coincidir con el voice_id de la tarea
customMode boolean No false false es modo inspiración, true es modo avanzado
prompt string Sí - En modo inspiración, la descripción de la canción; en modo avanzado, la letra. Ninguno de los dos puede estar vacío
style string Sí en modo avanzado - Etiquetas de estilo; no puede estar vacío cuando customMode=true
title string Sí en modo avanzado - Título de la canción; no puede estar vacío cuando customMode=true
negativeTags string No - Estilo a excluir
instrumental boolean No false Campo de compatibilidad; la generación con voz clonada siempre se trata como canción con voz
waitAudio boolean No false Campo de compatibilidad; este endpoint siempre devuelve tareas de marcador de posición de forma asíncrona y no espera a que el audio termine
model string No suno-v6 Modelo de generación normal; puedes usar suno-v6, suno-v6-wild o suno-v6-mini
vocalGender string No - Preferencia de género vocal
lyricsMode string No - Campo de compatibilidad; la ruta actual de envío con voz clonada no cambia por sí sola el modo de letra
weirdnessConstraint number No - Fuerza creativa
styleWeight number No - Peso del estilo
audioWeight number No valor por defecto de la plataforma Audio Influence (cuánto pesa el audio de referencia), rango 0.0-1.0. Si no se envía, se aplica el valor por defecto de la plataforma (equivalente al 25% de la interfaz oficial); 0 es un valor válido y significa no acercarse en absoluto a la referencia. Está muy ligado al sourceClipId de la fila siguiente: con una fuente apunta al audio de referencia y sin fuente apunta a la voz clonada; la plataforma solo tiene este deslizador para ambos casos, así que no lo dividas en dos parámetros por caso de uso
sourceClipId string No - ID real del clip en el espacio de trabajo de la canción de origen. Si lo envías se entra en el versionado con voz clonada; si no, es generación normal con voz clonada
sourceAudioUrl string No - Campo de presentación de la fuente; no participa en la titularidad ni en la decisión de cuenta, el servidor usa su registro en base de datos
sourceTitle string No - Campo de presentación de la fuente; no participa en la titularidad ni en la decisión de cuenta
clientSubmissionId string No - Campo de compatibilidad de Create UI; para deduplicar de forma fiable en la API de cliente hay que usar la cabecera Idempotency-Key

Se admiten suno-v6, suno-v6-wild y suno-v6-mini; un modelo vacío se trata como suno-v6. Los modelos antiguos V5/V5.5 están retirados, pero las tareas históricas pueden seguir mostrando los nombres antiguos.

La estructura de petición compartida también interpreta campos de compatibilidad de Create UI como task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId y voiceId, pero no son parámetros válidos de cliente para este endpoint: la tarea de voz debe enviarse como voice_task_id, la verificación opcional de voz como voice_id, y la generación musical con voz nunca lee los campos de sound.

Cómo rellenar los parámetros de generación

Cabeceras

Cabecera Obligatoria Notas
Authorization: Bearer ... Sí Token de la API de cliente
Content-Type: application/json Sí Cuerpo JSON
Idempotency-Key No, muy recomendable Hasta 128 caracteres. Con el mismo usuario, token, endpoint, clave y cuerpo solo se factura y se crea una tarea

Comportamiento de Idempotency-Key:

Condiciones de versionado con sourceClipId

El versionado desde una fuente en la API de cliente lo gestiona el servidor: el acceso a la canción de origen se resuelve en servidor y el cliente no envía ningún dato de cuenta. Si la operación es posible lo decide la respuesta real del endpoint.

La fuente debe pertenecer al usuario de API actual, ser una canción del espacio de trabajo terminada y que no sea pending:, y tener audio disponible. Se admiten la generación normal, las fuentes de subida normal y la canción final de la subida reforzada; los registros intermedios de la subida reforzada se rechazan antes de facturar. El servidor solo acepta el ID de canción de origen que envía el cliente y nunca un ID de cuenta; una fuente no disponible o sin terminar devuelve error antes de facturar.

Ejemplo de petición

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": "Escribe una canción pop china sobre la orilla del mar en una noche de verano",
    "style": "Mandopop, warm piano, emotional",
    "title": "Brisa de mar en una noche de verano",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

Ejemplo de respuesta

{
  "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": "Brisa de mar en una noche de verano",
        "prompt": "Escribe una canción pop china sobre la orilla del mar en una noche de verano"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Brisa de mar en una noche de verano",
        "prompt": "Escribe una canción pop china sobre la orilla del mar en una noche de verano"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

Sobre las tareas de marcador de posición y el song_id final

generate-with-voice es un endpoint de generación asíncrona. Una respuesta correcta solo significa que la tarea de generación se ha enviado, no que la canción esté terminada.

Significado de los campos clave de la respuesta:

Campo Notas
client_request_id ID de seguimiento de esta petición de generación. Una petición suele generar 2 canciones y ambos resultados comparten este client_request_id.
items[].placeholder_id ID de marcador de posición local de la plataforma, normalmente con la forma pending:{client_request_id}:{index}. No es el ID final de la canción.
items[].client_request_index Índice del resultado dentro de la misma petición, normalmente 0 y 1.
items[].status Estado inicial tras el envío, por ejemplo submitted. El éxito o fallo posterior sigue el registro final de la tarea.

Atención: un placeholder_id que empieza por pending: no sirve como song_id final ni puede pasarse a /api/music/query ni a los endpoints de descarga. Llamar a /api/music/query solo con valores pending:* puede devolver un array vacío [], porque la canción real aún no ha terminado o la tarea de marcador de posición todavía no se ha sustituido por el ID final.

Ejemplo incorrecto:

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

Flujo correcto:

  1. Llama a POST /api/music/generate-with-voice para enviar la tarea de generación con voz.
  2. Guarda client_request_id, items[].placeholder_id y items[].client_request_index de la respuesta.
  3. Consulta GET /api/music/generate-with-voice/results?client_request_id=cu_xxx en bucle.
  4. Cuando items[].song_id tenga valor y no empiece por pending:, llama a /api/music/query, /api/music/download-file o /api/music/download-all.

La versión actual añade un endpoint público de consulta:

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

Devuelve los resultados de las tareas del mismo client_request_id bajo el usuario actual, para que el cliente pueda consultar por sí mismo el song_id final. En la lista devuelta:

Si solo guardaste el client_request_id o un ID de marcador de posición pending:*, llama primero a este endpoint de resultados; si aún no aparece el song_id real, envía el client_request_id al soporte técnico para que lo localicen.

Consultar los resultados de la generación con voz

Endpoint: GET /api/music/generate-with-voice/results

Facturación: gratis.

Parámetros de query

Parámetro Tipo Obligatorio Notas
client_request_id string Sí ID de seguimiento que devolvió generate-with-voice

Ejemplo de petición

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"

Ejemplo de respuesta en proceso

{
  "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": "Brisa de mar en una noche de verano"
      }
    ]
  }
}

Ejemplo de respuesta terminada

{
  "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": "Brisa de mar en una noche de verano",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

Valores del status de nivel superior

Valor Notas
not_found Todavía no existe ninguna tarea con ese client_request_id bajo el usuario actual
processing Al menos un resultado sigue sin terminar; sigue consultando
completed Todos los resultados han terminado; ya puedes consultar o descargar con el song_id
partial Algunos terminados y otros fallidos; procesa primero los song_id terminados
failed Todos los resultados han fallado; revisa items[].error_message

8. Descargar un archivo suelto

Endpoint: POST /api/music/download-file

Parámetros del cuerpo

Parámetro Tipo Obligatorio Notas
song_id string Sí ID de la canción
kind string Sí Tipo de descarga: audio, cover, wav, video

Ejemplo de petición

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 respuesta es un flujo de archivo; el Content-Type y el nombre de archivo siguen lo que devuelva el backend.

9. Descargar los recursos de la canción en un paquete

Endpoint: POST /api/music/download-all

Parámetros del cuerpo

Parámetro Tipo Obligatorio Notas
song_id string Sí ID de la canción

Ejemplo de petición

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

El paquete suele contener el audio, la portada y metadata.json; si algún tipo de recurso aún no se ha generado, no se incluye en el archivo comprimido.

Errores habituales

message Notas
voice audio is required Al enviar la voz de origen no se indicó ni voice_url ni file_base64
invalid voice task id El ID de tarea de voz de la ruta no es válido
voice validation is not ready Aún no hay texto de verificación, así que no se puede enviar el audio de verificación
selected voice is not ready La voz elegida todavía no puede generar canciones (no está lista, está eliminada o no pertenece a la cuenta actual)
selected voice does not match voice task El voice_id de la petición no coincide con la tarea
voice task is required Falta voice_task_id al generar una canción con voz
record not found La tarea / canción no existe, no pertenece a la cuenta de la API Key actual o ya ha sido eliminada (si consultas esta tarea después de eliminar la voz verás lo mismo)

Los errores de este grupo siempre devuelven HTTP 200: decide el resultado por el campo success del cuerpo (false es fallo, con el motivo en message) y no te guíes solo por el código de estado HTTP. La semántica completa de eliminar una voz (si sigue siendo utilizable, si se puede restaurar) está en la sección 6.

Siguiente【Recomendado】 API de perfil de voz

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