Endpoints de la API

Reemplazar sección

API de reemplazo de sección

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

Vuelve a generar una parte de una canción que ya creaste, como unos segundos con un fallo o un verso que quieres cantado de otra forma, y recibe la canción completa con esa parte rehecha.

Cómo funciona

  • Elige una ventana de tiempo en una canción terminada. La canción se vuelve a renderizar alrededor de esa ventana y se devuelve como pistas completas, normalmente dos variaciones, mediante el mismo flujo de tareas que la generación de música.
  • Unos 10 segundos a cada lado de la ventana también se vuelven a renderizar para que la nueva parte encaje. Todo lo demás se mantiene igual, salvo una nueva codificación del audio.
  • Reglas de la ventana, comprobadas antes de cobrar créditos: al menos 10 segundos, como máximo el 50% de la canción y como máximo 480 segundos, e infill_end_s no puede superar la duración de la canción.
  • Si no envías lyrics, la letra que se canta dentro de la ventana se completa automáticamente a partir de los tiempos de cada palabra de la canción. Envíala tú cuando quieras otras palabras.
  • Un resultado cuya duración difiere de la original en más de 15 segundos se descarta. Si no queda ningún resultado, la tarea termina como FAILED y se reembolsan tus créditos; mover el inicio o el final de la ventana unos segundos suele resolverlo.
  • 5 créditos por solicitud, cobrados cuando se acepta la solicitud. Las solicitudes rechazadas en la validación y las tareas que fallan se reembolsan automáticamente.
  • Solo se pueden editar canciones creadas con /v2/generate o /v2/extend con la misma clave de API. El audio subido y los resultados de reemplazos anteriores no se admiten como origen.

Inicio 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 y full_lyrics son opcionales. Si se omiten, se usan los valores de la canción original.

Respuesta

{
  "code": 200,
  "message": "success",
  "workId": "rep2a15b5bbc14304ca89fcc7b7eae29c8a7bksv",
  "data": {
    "task_id": "rep2a15b5bbc14304ca89fcc7b7eae29c8a7bksv"
  }
}

Consulta el workId devuelto cada 5–10 segundos hasta que el estado sea SUCCESS o FAILED, con la API de estado de tareas

Parámetros

Parámetros obligatorios

origin_task_idobligatoriostring

task_id de la canción terminada que quieres editar, tal como lo devuelve /v2/generate o /v2/extend.

audio_idobligatoriostring

id de la canción dentro de esa tarea (response_data[].id). Una tarea suele devolver dos canciones; elige la que quieres editar.

infill_start_sobligatorionumber

Inicio de la sección en segundos: 0 o más, con hasta dos decimales.

infill_end_sobligatorionumber

Fin de la sección en segundos. Debe estar al menos 10 segundos después de infill_start_s y no pasar del final de la canción.

promptobligatoriostring

Cómo debe cambiar la sección, hasta 1000 caracteres, por ejemplo "Same melody and arrangement, cleaner vocal in this part".

Parámetros opcionales

lyricsopcionalstring

Letra que se cantará dentro de la sección, hasta 5000 caracteres. Por defecto, la letra que se canta ahora en la ventana.

styleopcionalstring

Estilo musical del resultado, hasta 1000 caracteres. Por defecto, el estilo de la canción original.

titleopcionalstring

Título del resultado, hasta 80 caracteres. Por defecto, el título original.

full_lyricsopcionalstring

Letra completa de la canción editada, hasta 5000 caracteres. Por defecto, la letra original.

callback_urlopcionalstring

URL pública que recibe el resultado final, con los mismos elementos que response_data en el estado de la tarea. La consulta funciona con o sin ella.

Resultados

Cuando la tarea tiene éxito, response_data contiene las nuevas canciones completas. Cada elemento tiene su propio id, audio_url y duration. Si solo una variación conservó la duración original, solo se devuelve esa.

{
  "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"
      }
    ]
  }
}

Si todos los resultados cambiaron la duración de la canción o la sección no se pudo renderizar, la tarea queda como FAILED y se reembolsan los créditos:

{
  "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."
      }
    ]
  }
}

Ejemplos 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.

Respuestas de error

400 · Sección de menos de 10 segundos
{
  "code": 400,
  "message": "The section must be at least 10 seconds long (requested 9.99s)."
}
400 · Sección mayor que el 50% de la canción
{
  "code": 400,
  "message": "The section can cover at most 50% of the song and 480s (max 59.8s for this song, requested 65s)."
}
400 · La sección termina después de la canción
{
  "code": 400,
  "message": "\"infill_end_s\" must not exceed the song length (119.6s)."
}
400 · Tarea de origen desconocida o sin terminar
{
  "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 no pertenece a la tarea
{
  "code": 400,
  "message": "\"audio_id\" 1234 does not belong to this task. Use one of the song ids returned for \"origin_task_id\"."
}
400 · No se admite audio subido
{
  "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 · Clave de API no válida
{
  "code": 401,
  "message": "Invalid API key"
}