Endpoints da API
Substituir trecho
API de substituição de trecho
https://udioapi.pro/api/v2/replace-sectionGere novamente uma parte de uma música que você já criou, como alguns segundos com falha ou um verso que você quer cantado de outra forma, e receba a música completa com esse trecho refeito.
Como funciona
- Escolha uma janela de tempo em uma música concluída. A música é renderizada novamente em torno dessa janela e devolvida como faixas completas, geralmente duas variações, pelo mesmo fluxo de tarefas da geração de música.
- Cerca de 10 segundos de cada lado da janela também são renderizados novamente para que o novo trecho se encaixe. Todo o resto permanece igual, exceto por uma nova codificação do áudio.
- Regras da janela, verificadas antes de qualquer cobrança de créditos: no mínimo 10 segundos, no máximo 50% da música e no máximo 480 segundos, e infill_end_s não pode ultrapassar a duração da música.
- Se você não enviar lyrics, a letra cantada dentro da janela é preenchida automaticamente a partir dos tempos de cada palavra da música. Envie você mesmo quando quiser outras palavras.
- Um resultado cuja duração difere da original em mais de 15 segundos é descartado. Se não sobrar nenhum resultado, a tarefa termina como FAILED e seus créditos são reembolsados; mover o início ou o fim da janela alguns segundos costuma resolver.
- 5 créditos por solicitação, cobrados quando a solicitação é aceita. Solicitações rejeitadas na validação e tarefas que falham são reembolsadas automaticamente.
- Só é possível editar músicas criadas com /v2/generate ou /v2/extend com a mesma chave de API. Áudio enviado e resultados de substituições anteriores não são aceitos como origem.
Início rápido
{
"origin_task_id": "gen2cd84c4e3ecb94ed6a9137a8f12138ca1bksv",
"audio_id": "24015dc4-1b81-4033-9f41-cf47a3fae958",
"infill_start_s": 70,
"infill_end_s": 85,
"prompt": "Same melody and arrangement, cleaner vocal in this part"
}style, title e full_lyrics são opcionais. Quando omitidos, são usados os valores da música original.
Resposta
{
"code": 200,
"message": "success",
"workId": "rep2a15b5bbc14304ca89fcc7b7eae29c8a7bksv",
"data": {
"task_id": "rep2a15b5bbc14304ca89fcc7b7eae29c8a7bksv"
}
}Consulte o workId retornado a cada 5–10 segundos até o status ser SUCCESS ou FAILED, usando a API de status da tarefa
Parâmetros
Parâmetros obrigatórios
origin_task_idobrigatóriostringtask_id da música concluída que você quer editar, conforme retornado por /v2/generate ou /v2/extend.
audio_idobrigatóriostringid da música dentro dessa tarefa (response_data[].id). Uma tarefa geralmente retorna duas músicas; escolha a que será editada.
infill_start_sobrigatórionumberInício do trecho em segundos: 0 ou mais, com até duas casas decimais.
infill_end_sobrigatórionumberFim do trecho em segundos. Deve estar pelo menos 10 segundos depois de infill_start_s e não pode passar do fim da música.
promptobrigatóriostringComo o trecho deve mudar, até 1000 caracteres, por exemplo "Same melody and arrangement, cleaner vocal in this part".
Parâmetros opcionais
lyricsopcionalstringLetra a ser cantada no trecho, até 5000 caracteres. Por padrão, a letra cantada atualmente na janela.
styleopcionalstringEstilo musical do resultado, até 1000 caracteres. Por padrão, o estilo da música original.
titleopcionalstringTítulo do resultado, até 80 caracteres. Por padrão, o título original.
full_lyricsopcionalstringLetra completa da música editada, até 5000 caracteres. Por padrão, a letra original.
callback_urlopcionalstringURL pública que recebe o resultado final, com os mesmos itens de response_data no status da tarefa. A consulta funciona com ou sem ela.
Resultados
Quando a tarefa é concluída, response_data contém as novas músicas completas. Cada item tem seus próprios id, audio_url e duration. Se apenas uma variação manteve a duração original, só ela é retornada.
{
"code": 200,
"message": "success",
"data": {
"type": "SUCCESS",
"request_body": {
"origin_task_id": "gen2cd84c4e3ecb94ed6a9137a8f12138ca1bksv",
"audio_id": "24015dc4-1b81-4033-9f41-cf47a3fae958",
"infill_start_s": 70,
"infill_end_s": 85,
"prompt": "Same melody and arrangement, cleaner vocal in this part"
},
"response_data": [
{
"id": "3a8248e4-07b0-4ceb-92b7-34b7615d2552",
"audio_url": "https://…/3a8248e4-07b0-4ceb-92b7-34b7615d2552.mp3",
"image_url": "https://…/3a8248e4-07b0-4ceb-92b7-34b7615d2552.jpeg",
"status": "complete",
"title": "Harbor Lights",
"duration": 119.6,
"model_name": "chirp-v6-mini"
},
{
"id": "eac654a1-5c07-4b6c-896a-59061d323e11",
"audio_url": "https://…/eac654a1-5c07-4b6c-896a-59061d323e11.mp3",
"image_url": "https://…/eac654a1-5c07-4b6c-896a-59061d323e11.jpeg",
"status": "complete",
"title": "Harbor Lights",
"duration": 120.84,
"model_name": "chirp-v6-mini"
}
]
}
}Quando todos os resultados alteraram a duração da música ou o trecho não pôde ser renderizado, a tarefa fica como FAILED e os créditos são reembolsados:
{
"code": 200,
"message": "success",
"data": {
"type": "FAILED",
"response_data": [
{
"status": "FAILED",
"fail_message": "Generation failed. Your credits have been refunded. The result changed the song length (119.6s -> 225.36s / 224.6s), so it was discarded. Try moving the section start or end by a few seconds.",
"error_message": "Generation failed. Your credits have been refunded. The result changed the song length (119.6s -> 225.36s / 224.6s), so it was discarded. Try moving the section start or end by a few seconds."
},
{
"status": "FAILED",
"fail_message": "Generation failed. Your credits have been refunded. The result changed the song length (119.6s -> 225.36s / 224.6s), so it was discarded. Try moving the section start or end by a few seconds.",
"error_message": "Generation failed. Your credits have been refunded. The result changed the song length (119.6s -> 225.36s / 224.6s), so it was discarded. Try moving the section start or end by a few seconds."
}
]
}
}Exemplos de código
cURL
curl -X POST "https://udioapi.pro/api/v2/replace-section" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"origin_task_id": "gen2cd84c4e3ecb94ed6a9137a8f12138ca1bksv",
"audio_id": "24015dc4-1b81-4033-9f41-cf47a3fae958",
"infill_start_s": 70,
"infill_end_s": 85,
"prompt": "Same melody and arrangement, cleaner vocal in this part"
}'JavaScript
const response = await fetch('https://udioapi.pro/api/v2/replace-section', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"origin_task_id": "gen2cd84c4e3ecb94ed6a9137a8f12138ca1bksv",
"audio_id": "24015dc4-1b81-4033-9f41-cf47a3fae958",
"infill_start_s": 70,
"infill_end_s": 85,
"prompt": "Same melody and arrangement, cleaner vocal in this part"
})
});
const { workId } = await response.json();
// Poll https://udioapi.pro/api/v2/feed?workId=... every 5-10 seconds until SUCCESS or FAILED.Python
import requests
response = requests.post(
"https://udioapi.pro/api/v2/replace-section",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"origin_task_id": "gen2cd84c4e3ecb94ed6a9137a8f12138ca1bksv",
"audio_id": "24015dc4-1b81-4033-9f41-cf47a3fae958",
"infill_start_s": 70,
"infill_end_s": 85,
"prompt": "Same melody and arrangement, cleaner vocal in this part"
},
)
work_id = response.json()["workId"]
# Poll https://udioapi.pro/api/v2/feed?workId=... every 5-10 seconds until SUCCESS or FAILED.Respostas de erro
{
"code": 400,
"message": "The section must be at least 10 seconds long (requested 9.99s)."
}{
"code": 400,
"message": "The section can cover at most 50% of the song and 480s (max 59.8s for this song, requested 65s)."
}{
"code": 400,
"message": "\"infill_end_s\" must not exceed the song length (119.6s)."
}{
"code": 400,
"message": "The provided \"origin_task_id\" is invalid or could not be found. Use the task_id of a completed song generated with your API key."
}{
"code": 400,
"message": "\"audio_id\" 1234 does not belong to this task. Use one of the song ids returned for \"origin_task_id\"."
}{
"code": 400,
"message": "Only songs generated with this API can be edited: send \"origin_task_id\" and \"audio_id\", without \"upload_url\" or \"model\"."
}{
"code": 402,
"message": "No available credits"
}{
"code": 401,
"message": "Invalid API key"
}