Skip to main content
A API de projetos do Suno Studio gerencia projetos de música multifaixa por meio de um único endpoint:
O action na requisição determina o tipo de operação. A chave primária do Project usa id de forma unificada; version_id representa a versão atual do projeto, e todas as operações de modificação e exportação devem enviar a versão mais recente para evitar sobrescritas simultâneas.

Visão geral das operações

As operações assíncronas retornam imediatamente um task_id. Use a interface gratuita /suno/tasks para consultar, ou envie callback_url para receber o resultado em estado final.

Criar e ler

Todas as operações de modificação devem enviar um Header Idempotency-Key exclusivo. Após a criação bem-sucedida, o data.id na resposta é o ID do Project. Um novo projeto vazio pode não ter version_id antes do primeiro salvamento.
A resposta de leitura contém o state completo. Um novo projeto vazio retorna {"tracks":[],"timing":{"bps":2}}, que pode ser usado diretamente para o primeiro salvamento. timing.bps representa as batidas por segundo, com padrão de 2 (120 BPM), e deve ser positivo; startBeats, endBeats e readStartBeats dos trechos usam a unidade de batidas do projeto, e não é possível tratar diretamente as posições de compassos na análise de áudio como coordenadas da linha do tempo.

Salvar o estado completo

O primeiro salvamento de um novo projeto vazio pode omitir version_id; após o primeiro salvamento gerar uma versão, os salvamentos subsequentes devem enviar o valor mais recente. Se a versão tiver mudado, a interface retornará HTTP 409. Nesse caso, execute retrieve novamente, mescle as modificações e envie-as com uma nova chave de idempotência; não tente novamente cegamente a solicitação antiga.

Carregar e adicionar faixas

Após o upload bem-sucedido, leia o ID do áudio em response.data.candidate.audio_id. Em seguida, adicione-o ao projeto:
A adição de faixa preserva por padrão a velocidade de reprodução do áudio e converte a duração do áudio em número de batidas de acordo com o timing.bps do projeto. Após cada save, add_track, commit_candidate ou remove_track, o novo version_id na resposta deve ser usado.

Gerar e substituir

generate_track gera candidatos de faixa de áudio para um intervalo do projeto; replace_section retorna dois candidatos de substituição local. Nenhuma das duas operações seleciona automaticamente o resultado artístico. O modelo deve usar nomes públicos: chirp-v3-5, chirp-v4, chirp-v4-5, chirp-v4-5-plus, chirp-v5, chirp-v5-5, chirp-v6, chirp-v6-wild ou chirp-v6-mini; a disponibilidade para operações específicas ainda depende do estado final da tarefa, e nomes não suportados retornarão 400 antes do envio. Não haverá mudança automática para outro modelo.
generate_track também deve fornecer render_audio_id (áudio de exportação do projeto concluído), stem_control_tags e o áudio de origem source_audio_id. batch_size é de 1–4, com padrão de 2; start_seconds e end_seconds são os segundos do áudio de origem. O intervalo de substituição com fixed=true deve ser menor que 26 segundos. Após selecionar um candidato, confirme-o:
Os candidatos estão vinculados à versão do projeto no momento da geração. Quando o projeto já tiver mudado, candidatos antigos não poderão ser confirmados diretamente. Candidatos de substituição local são confirmados na faixa original que contém o único trecho de origem; candidatos de take completo mantêm a posição original e substituem o trecho original; candidatos de intervalo substituem apenas o intervalo solicitado e preservam os trechos anteriores e posteriores. Quando não for possível corresponder de forma confiável à duração, é retornado 400 e o projeto original é preservado; nesse caso, não envie start_beats nem end_beats. Candidatos de nova faixa devem ser confirmados em uma faixa vazia salva antecipadamente, usando por padrão o ponto inicial do trecho de origem, ou enviando explicitamente um intervalo sem sobreposição; trechos existentes sobrepostos na mesma faixa retornarão 400. Não gere primeiro e crie uma nova faixa depois, caso contrário a mudança de versão fará o candidato expirar.

Exportar a música completa

O servidor lê o estado autoritativo do projeto da versão especificada e monta os parâmetros de exportação. Quando start_beats e end_beats são omitidos, o padrão é exportar desde o ponto inicial mais cedo até o ponto final mais tardio de todos os trechos audíveis; faixas/trechos silenciosos não participam e, quando existem faixas solo, apenas as faixas solo são selecionadas. Um projeto vazio ou sem faixas audíveis válidas retorna 400. O resultado em estado final contém render_id, audio_id, audio_url e duração. O projeto é vinculado ao ambiente de execução no momento da criação, e não pode ser migrado entre ambientes ou ter failover automático.
Apenas faça upload ou processe áudios para os quais você tenha direito legal de uso. A API de projetos está atualmente em Beta; persista as URLs finais de áudio nos resultados importantes.

Consulta e recuperação de falhas

Envie a solicitação acima para /suno/tasks. As tarefas de Projects indicam sucesso quando finished_at existe e response.success=true; response.success=false indica falha. O retorno HTTP 200 ou task_id na submissão apenas representa que foi aceita, não que o áudio está concluído. A mesma Idempotency-Key com a mesma solicitação retornará o resultado original (incluindo falhas), e não gerará novamente nem cobrará em duplicidade automaticamente. Para tentar novamente explicitamente uma operação que falhou, primeiro consulte a tarefa original para confirmar a falha e, então, use uma nova chave; não reenvie enquanto a tarefa original ainda estiver em processamento ou o resultado for incerto. As categorias de erro incluem studio_unavailable / studio_model_unavailable (503, temporariamente incapaz de processar ou modelo indisponível), studio_model_unsupported (400, o modelo não oferece suporte à operação), studio_state_invalid (400, o estado do projeto ou o escopo de exportação é inválido), too_many_requests (429), studio_audio_unavailable (403, o áudio referenciado não pode ser usado para exportação do projeto) e content_rejected (403). Preserve trace_id para investigação.