Endpoints da API

Substituir trecho

API de substituição de trecho

POST
https://udioapi.pro/api/v2/replace-section

Gere 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óriostring

task_id da música concluída que você quer editar, conforme retornado por /v2/generate ou /v2/extend.

audio_idobrigatóriostring

id da música dentro dessa tarefa (response_data[].id). Uma tarefa geralmente retorna duas músicas; escolha a que será editada.

infill_start_sobrigatórionumber

Início do trecho em segundos: 0 ou mais, com até duas casas decimais.

infill_end_sobrigatórionumber

Fim 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óriostring

Como o trecho deve mudar, até 1000 caracteres, por exemplo "Same melody and arrangement, cleaner vocal in this part".

Parâmetros opcionais

lyricsopcionalstring

Letra a ser cantada no trecho, até 5000 caracteres. Por padrão, a letra cantada atualmente na janela.

styleopcionalstring

Estilo musical do resultado, até 1000 caracteres. Por padrão, o estilo da música original.

titleopcionalstring

Título do resultado, até 80 caracteres. Por padrão, o título original.

full_lyricsopcionalstring

Letra completa da música editada, até 5000 caracteres. Por padrão, a letra original.

callback_urlopcionalstring

URL 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

400 · Trecho com menos de 10 segundos
{
  "code": 400,
  "message": "The section must be at least 10 seconds long (requested 9.99s)."
}
400 · Trecho maior que 50% da música
{
  "code": 400,
  "message": "The section can cover at most 50% of the song and 480s (max 59.8s for this song, requested 65s)."
}
400 · Trecho termina depois da música
{
  "code": 400,
  "message": "\"infill_end_s\" must not exceed the song length (119.6s)."
}
400 · Tarefa de origem desconhecida ou não concluída
{
  "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."
}
400 · audio_id não pertence à tarefa
{
  "code": 400,
  "message": "\"audio_id\" 1234 does not belong to this task. Use one of the song ids returned for \"origin_task_id\"."
}
400 · Áudio enviado não é suportado
{
  "code": 400,
  "message": "Only songs generated with this API can be edited: send \"origin_task_id\" and \"audio_id\", without \"upload_url\" or \"model\"."
}
402 · Créditos insuficientes
{
  "code": 402,
  "message": "No available credits"
}
401 · Chave de API inválida
{
  "code": 401,
  "message": "Invalid API key"
}