API de clonagem de voz e geração com voz (não recomendado)

Atualizado em 2026-09-18 · equipe Suno-API

⛔ Cadeia antiga, não recomendada para novas integrações. Esta página descreve a cadeia persona inicial (voice_task_id / generate-with-voice). Continua a funcionar, mas já não é recomendada ao cliente; o menu da esquerda marca-a como "não recomendado".

Para novas integrações use a 【Recomendado】 API de perfil de voz: crie um perfil de voz a partir de uma amostra vocal (POST /api/music/voice-profile/create) e use-o para fazer uma versão de uma música escolhida ou para cantar uma música nova. O perfil de voz é um recurso de primeira classe: pode ser listado, consultado e eliminado, e o áudio de origem é mantido de forma permanente.

Se o seu produto precisa do circuito completo "criar uma voz → reutilizar a longo prazo → versionar músicas", dê prioridade à cadeia nova.

Aviso importante: uma voz clonada pode expirar.

O voice_id / voice_task_id gerado pela clonagem de voz não é um recurso utilizável para sempre: pode deixar de funcionar pelo período de validade, pelo estado da conta ou por alterações no estado da voz. Quem integra não deve clonar uma vez e reutilizar para sempre um ID de voz guardado em cache local.

Prática recomendada:

  • Guarde voice_task_id, voice_id, is_available, updated_at e a hora da última geração bem-sucedida.
  • Antes de cada geração com uma voz clonada, chame GET /api/voice/clone/tasks/{voice_task_id} ou POST /api/voice/clone/tasks/{voice_task_id}/check e confirme que is_available=true.
  • Se o endpoint devolver voz indisponível, tarefa inexistente ou selected voice is not ready, peça ao utilizador para clonar de novo ou escolher outra voz disponível.
  • Não prometa ao utilizador final que uma voz clonada é um "ativo permanente"; mostre na interface do produto que "a voz pode expirar e precisar de nova validação ou nova clonagem".

Descrição do endpoint

Este grupo de endpoints cria uma voz reutilizável e gera músicas com ela. Quem chama só precisa da API Key emitida pela plataforma; o servidor trata do envio da tarefa, da sincronização de estado, da cobrança e das descargas.

Autenticação: Authorization: Bearer YOUR_API_KEY

Cobrança:

Fluxo de chamadas

  1. Chame POST /api/voice/clone/validate para enviar a voz de origem e obter um voice_task_id.
  2. Aguarde ou consulte GET /api/voice/clone/tasks/{voice_task_id} até obter validate_info.
  3. O utilizador lê esse texto em voz alta e grava o áudio de verificação.
  4. Chame POST /api/voice/clone/tasks/{voice_task_id}/generate para enviar o áudio de verificação.
  5. Chame POST /api/voice/clone/tasks/{voice_task_id}/check ou continue a consultar a tarefa até is_available=true.
  6. Chame POST /api/music/generate-with-voice para gerar uma música com essa voz.
  7. O endpoint de geração devolve primeiro tarefas de marcador de posição; quando a geração terminar e tiver o song_id real, pode usar os endpoints de descarga para obter um ficheiro isolado ou um pacote.
  8. (Opcional) Quando já não precisar da voz, chame DELETE /api/voice/clone/voices/{voice_task_id} para a eliminar; a semântica está na secção 6.

Também existe a clonagem num passo: na primeira página de gravação/envio de voz do espaço de trabalho pode escolher concluir tudo de uma vez e o sistema faz a validação e a criação da voz juntas, sem precisar de gravar um segundo áudio de verificação; custa 5 ¥ por chamada e devolve o valor em caso de falha.

Campos da tarefa de voz

Campo Tipo Observações
voice_task_id number ID da tarefa de voz dentro da plataforma; todos os endpoints seguintes usam este ID
voice_id string ID de voz que pode ser usado para gerar músicas; é devolvido quando a tarefa fica disponível
voice_name string Nome da voz
description string Descrição da voz
style string Estilo da voz
singer_skill_level string Nível de canto; valores habituais: beginner, intermediate, professional
language string Idioma da voz de origem, por exemplo zh, en
validate_info string Texto de verificação que tem de ser lido em voz alta
validate_status string Estado da tarefa de validação
voice_status string Estado de criação da voz
is_available boolean Se já pode ser usada para gerar músicas
status string Estado da tarefa na plataforma
stage string Fase atual
error_code string Código de erro em caso de falha
error_message string Motivo da falha
source_duration_seconds number Duração do áudio de origem em segundos
created_at number Marca temporal de criação
updated_at number Marca temporal de atualização
completed_at number Marca temporal de conclusão

1. Enviar a voz de origem para validação

Endpoint: POST /api/voice/clone/validate

Parâmetros do corpo

Parâmetro Tipo Obrigatório Predefinido Observações
voice_url string Não - URL do áudio da voz de origem. Este ou file_base64
file_base64 string Não - Áudio em base64. Este ou voice_url
file_name string Não - Nome do ficheiro; recomendado quando usa file_base64
voice_name string Não gerado automaticamente Nome da voz
description string Não - Descrição da voz
style string Não - Estilo da voz
singer_skill_level string Não beginner Nível de canto
language string Não zh Idioma da voz de origem
vocal_start_s number Sim - Segundo de início da voz útil
vocal_end_s number Sim - Segundo de fim da voz útil
source_duration_seconds number Não - Duração total do áudio de origem em segundos

vocal_end_s - vocal_start_s tem de cumprir o mínimo do trecho de voz. Envie uma gravação vocal clara, sem acompanhamento nem ruído evidentes.

Exemplo de requisição

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": "A minha voz feminina em chinês",
    "description": "Voz feminina em chinês, clara e natural",
    "style": "Mandopop",
    "singer_skill_level": "intermediate",
    "language": "zh",
    "vocal_start_s": 1.2,
    "vocal_end_s": 18.5,
    "source_duration_seconds": 20
  }'

Exemplo de resposta

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "A minha voz feminina em chinês",
      "language": "zh",
      "validate_status": "submitted",
      "is_available": false,
      "status": "validate_submitted",
      "stage": "validate_submitted",
      "created_at": 1780480000,
      "updated_at": 1780480000
    }
  }
}

2. Consultar uma tarefa de voz

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

Exemplo de requisição

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

Exemplo de resposta

{
  "success": true,
  "message": "",
  "data": {
    "voice": {
      "voice_task_id": 123,
      "voice_name": "A minha voz feminina em chinês",
      "validate_info": "Leia em voz alta o texto de verificação devolvido aqui",
      "validate_status": "success",
      "is_available": false,
      "status": "validate_ready",
      "stage": "validate_callback"
    }
  }
}

3. Gerar de novo o texto de verificação

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

Use quando o texto de verificação não for adequado para leitura em voz alta ou quando for preciso refazer a validação.

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 o áudio de verificação e criar a voz

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

Parâmetros do corpo

Parâmetro Tipo Obrigatório Predefinido Observações
verify_url string Não - URL do áudio lido a partir do texto de verificação. Este ou file_base64
file_base64 string Não - Áudio de verificação em base64. Este ou verify_url
file_name string Não - Nome do ficheiro; recomendado quando usa file_base64
voice_name string Não nome da tarefa Nome da voz
description string Não descrição da tarefa Descrição da voz
style string Não estilo da tarefa Estilo da voz
singer_skill_level string Não definição da tarefa Nível de canto

Exemplo de requisição

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": "A minha voz feminina em chinês"
  }'

5. Verificar se a voz está disponível

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

Quando a tarefa está disponível, o is_available da resposta é true e é devolvido um voice_id.

6. Eliminar uma voz

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

Cobrança: grátis.

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

Exemplo de resposta

{
  "success": true,
  "message": "",
  "data": {
    "voice_task_id": 123,
    "deleted": true
  }
}
Campo Tipo Observações
voice_task_id number ID da tarefa de voz eliminada
deleted boolean Sempre true, indica que o pedido de eliminação foi aceite

O que acontece depois da eliminação

7. Gerar uma música com uma voz clonada

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

Cobrança: 1,2 ¥ por chamada.

Parâmetros do corpo

Parâmetro Tipo Obrigatório Predefinido Observações
voice_task_id number Sim - ID de uma tarefa de voz já disponível
voice_id string Não - Campo opcional de verificação; se o enviar tem de coincidir com o voice_id da tarefa
customMode boolean Não false false é o modo inspiração, true é o modo avançado
prompt string Sim - No modo inspiração, a descrição da música; no modo avançado, a letra. Nenhum dos dois pode estar vazio
style string Sim no modo avançado - Etiquetas de estilo; não pode estar vazio quando customMode=true
title string Sim no modo avançado - Título da música; não pode estar vazio quando customMode=true
negativeTags string Não - Estilo a excluir
instrumental boolean Não false Campo de compatibilidade; a geração com voz clonada é sempre tratada como música com voz
waitAudio boolean Não false Campo de compatibilidade; este endpoint devolve sempre tarefas de marcador de posição de forma assíncrona e não espera pelo áudio
model string Não suno-v6 Modelo de geração normal; pode usar suno-v6, suno-v6-wild ou suno-v6-mini
vocalGender string Não - Preferência de género vocal
lyricsMode string Não - Campo de compatibilidade; a rota atual de envio com voz clonada não altera por si só o modo de letra
weirdnessConstraint number Não - Força criativa
styleWeight number Não - Peso do estilo
audioWeight number Não predefinição da plataforma Audio Influence (quanto pesa o áudio de referência), intervalo 0.0-1.0. Se não for enviado, aplica-se a predefinição da plataforma (equivalente a 25% na interface oficial); 0 é um valor válido e significa não se aproximar nada da referência. Está fortemente ligado ao sourceClipId da linha seguinte: com fonte aponta ao áudio de referência e sem fonte aponta à voz clonada; a plataforma só tem este deslizador para os dois casos, por isso não o divida em dois parâmetros por caso de uso
sourceClipId string Não - ID real do clip no espaço de trabalho da música de origem. Se o enviar entra no versionamento com voz clonada; se não, é geração normal com voz clonada
sourceAudioUrl string Não - Campo de apresentação da fonte; não participa na titularidade nem na decisão de conta, o servidor usa o seu registo na base de dados
sourceTitle string Não - Campo de apresentação da fonte; não participa na titularidade nem na decisão de conta
clientSubmissionId string Não - Campo de compatibilidade do Create UI; para deduplicar de forma fiável na API de cliente é preciso usar a cabeçalho Idempotency-Key

suno-v6, suno-v6-wild e suno-v6-mini são suportados; um modelo vazio é tratado como suno-v6. Os modelos antigos V5/V5.5 foram retirados, mas tarefas históricas podem continuar a mostrar os nomes antigos.

A estrutura de requisição partilhada também interpreta campos de compatibilidade do Create UI como task, soundType, soundLoop, soundBpm, soundKey, voiceTaskId e voiceId, mas não são parâmetros de cliente válidos para este endpoint: a tarefa de voz tem de ser enviada como voice_task_id, a verificação opcional de voz como voice_id, e a geração musical com voz nunca lê os campos de sound.

Como preencher os parâmetros de geração

Cabeçalhos

Cabeçalho Obrigatório Observações
Authorization: Bearer ... Sim Token da API de cliente
Content-Type: application/json Sim Corpo JSON
Idempotency-Key Não, fortemente recomendado Até 128 caracteres. Com o mesmo utilizador, token, endpoint, chave e corpo só se cobra e se cria uma tarefa

Comportamento do Idempotency-Key:

Condições de versionamento com sourceClipId

O versionamento a partir de uma fonte na API de cliente é tratado no servidor: o acesso à música de origem é resolvido no servidor e o cliente não envia dados de conta. Se a operação é possível decide-o a resposta real do endpoint.

A fonte tem de pertencer ao utilizador de API atual, ser uma música do espaço de trabalho concluída e que não seja pending:, e ter áudio disponível. São suportadas a geração normal, as fontes de envio normal e a música final do envio reforçado; os registos intermédios do envio reforçado são rejeitados antes da cobrança. O servidor só aceita o ID da música de origem enviado pelo cliente e nunca um ID de conta; uma fonte indisponível ou inacabada devolve erro antes da cobrança.

Exemplo de requisição

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": "Escreve uma canção pop chinesa sobre a beira-mar numa noite de verão",
    "style": "Mandopop, warm piano, emotional",
    "title": "Brisa do mar numa noite de verão",
    "negativeTags": "noise, low quality",
    "instrumental": false,
    "model": "suno-v6"
  }'

Exemplo de resposta

{
  "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 do mar numa noite de verão",
        "prompt": "Escreve uma canção pop chinesa sobre a beira-mar numa noite de verão"
      },
      {
        "placeholder_id": "pending:cu_1780480000_abcd1234:1",
        "client_request_id": "cu_1780480000_abcd1234",
        "client_request_index": 1,
        "status": "submitted",
        "type": "voice_generate",
        "title": "Brisa do mar numa noite de verão",
        "prompt": "Escreve uma canção pop chinesa sobre a beira-mar numa noite de verão"
      }
    ],
    "pre_consumed_quota": 600000,
    "billing_source": "wallet"
  }
}

Sobre as tarefas de marcador de posição e o song_id final

generate-with-voice é um endpoint de geração assíncrona. Uma resposta bem-sucedida significa apenas que a tarefa de geração foi enviada, não que a música esteja concluída.

Significado dos campos principais da resposta:

Campo Observações
client_request_id ID de seguimento deste pedido de geração. Um pedido gera normalmente 2 músicas e ambos os resultados partilham este client_request_id.
items[].placeholder_id ID de marcador de posição local da plataforma, normalmente na forma pending:{client_request_id}:{index}. Não é o ID final da música.
items[].client_request_index Índice do resultado dentro do mesmo pedido, normalmente 0 e 1.
items[].status Estado inicial após o envio, por exemplo submitted. O sucesso ou a falha posteriores seguem o registo final da tarefa.

Atenção: um placeholder_id que começa por pending: não serve como song_id final nem pode ser passado a /api/music/query ou aos endpoints de descarga. Chamar /api/music/query só com valores pending:* pode devolver um array vazio [], porque a música real ainda não terminou ou a tarefa de marcador de posição ainda não foi substituída pelo ID final.

Exemplo incorreto:

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

Fluxo correto:

  1. Chame POST /api/music/generate-with-voice para enviar a tarefa de geração com voz.
  2. Guarde client_request_id, items[].placeholder_id e items[].client_request_index da resposta.
  3. Consulte GET /api/music/generate-with-voice/results?client_request_id=cu_xxx em ciclo.
  4. Quando items[].song_id tiver valor e não começar por pending:, chame /api/music/query, /api/music/download-file ou /api/music/download-all.

A versão atual acrescenta um endpoint público de consulta:

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

Devolve os resultados das tarefas do mesmo client_request_id sob o utilizador atual, para o cliente poder consultar por si o song_id final. Na lista devolvida:

Se só guardou o client_request_id ou um ID de marcador de posição pending:*, chame primeiro este endpoint de resultados; se ainda não encontrar o song_id real, envie o client_request_id ao apoio técnico para o localizarem.

Consultar os resultados da geração com voz

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

Cobrança: grátis.

Parâmetros de query

Parâmetro Tipo Obrigatório Observações
client_request_id string Sim ID de seguimento devolvido por generate-with-voice

Exemplo de requisição

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"

Exemplo de resposta em processamento

{
  "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 do mar numa noite de verão"
      }
    ]
  }
}

Exemplo de resposta concluída

{
  "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 do mar numa noite de verão",
        "audio_url": "https://...",
        "image_url": "https://...",
        "duration": 180.5
      }
    ]
  }
}

Valores do status de nível superior

Valor Observações
not_found Ainda não existe nenhuma tarefa com esse client_request_id sob o utilizador atual
processing Pelo menos um resultado continua inacabado; continue a consultar
completed Todos os resultados terminaram; já pode consultar ou descarregar com o song_id
partial Alguns concluídos e outros falhados; trate primeiro os song_id concluídos
failed Todos os resultados falharam; veja items[].error_message

8. Descarregar um ficheiro isolado

Endpoint: POST /api/music/download-file

Parâmetros do corpo

Parâmetro Tipo Obrigatório Observações
song_id string Sim ID da música
kind string Sim Tipo de descarga: audio, cover, wav, video

Exemplo de requisição

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

A resposta é um fluxo de ficheiro; o Content-Type e o nome do ficheiro seguem o que o backend devolver.

9. Descarregar os recursos da música num pacote

Endpoint: POST /api/music/download-all

Parâmetros do corpo

Parâmetro Tipo Obrigatório Observações
song_id string Sim ID da música

Exemplo de requisição

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

O pacote costuma conter o áudio, a capa e metadata.json; se algum tipo de recurso ainda não tiver sido gerado, não entra no ficheiro comprimido.

Erros frequentes

message Observações
voice audio is required Ao enviar a voz de origem não foi indicado voice_url nem file_base64
invalid voice task id O ID da tarefa de voz no caminho não é válido
voice validation is not ready Ainda não há texto de verificação, por isso não é possível enviar o áudio de verificação
selected voice is not ready A voz escolhida ainda não pode gerar músicas (não está pronta, foi eliminada ou não pertence à conta atual)
selected voice does not match voice task O voice_id do pedido não coincide com a tarefa
voice task is required Falta o voice_task_id ao gerar uma música com voz
record not found A tarefa / música não existe, não pertence à conta da API Key atual ou já foi eliminada (ao consultar esta tarefa depois de eliminar a voz vê o mesmo)

Os erros deste grupo devolvem sempre HTTP 200: decida o resultado pelo campo success do corpo (false é falha, com o motivo em message) e não olhe apenas para o código de estado HTTP. A semântica completa de eliminar uma voz (se continua utilizável, se pode ser restaurada) está na secção 6.

Próximo【Recomendado】 API de perfil de voz

Obter uma chave de API

Crie uma chave de API no console após o cadastro. Cada geração custa ¥0,6 e devolve 2 faixas, os downloads são ilimitados e não é preciso número de telefone.

Obter chave de API Voltar à visão geral