Saltar al contenido principal
POST
/
v1
/
music
/
generations
/
extendFlowMusic
curl --request POST \
  --url https://api.apimart.ai/v1/music/generations/extendFlowMusic \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "flowmusic",
    "clip_id": "abc123-def456",
    "extend_from_s": 30,
    "extend_s": 60,
    "instruction": "Continuar la melodía principal, añadiendo cuerdas"
  }'
import requests

url = "https://api.apimart.ai/v1/music/generations/extendFlowMusic"

payload = {
    "model": "flowmusic",
    "clip_id": "abc123-def456",
    "extend_from_s": 30,
    "extend_s": 60,
    "instruction": "Continuar la melodía principal, añadiendo cuerdas"
}

headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
const url = "https://api.apimart.ai/v1/music/generations/extendFlowMusic";

const payload = {
  model: "flowmusic",
  clip_id: "abc123-def456",
  extend_from_s: 30,
  extend_s: 60,
  instruction: "Continuar la melodía principal, añadiendo cuerdas"
};

const headers = {
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
};

fetch(url, {
  method: "POST",
  headers: headers,
  body: JSON.stringify(payload)
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
{
  "code": 200,
  "data": [
    {
      "status": "submitted",
      "task_id": "task_01KWXVCYB70YJ1WY9X22RVYRNP"
    }
  ]
}
{
  "error": {
    "message": "clip_id is required",
    "type": "invalid_request",
    "param": "",
    "code": "invalid_request"
  }
}
{
  "error": {
    "message": "Saldo insuficiente",
    "type": "invalid_request",
    "param": "",
    "code": "quota_not_enough"
  }
}
{
  "error": {
    "message": "La capacidad del grupo actual está saturada, inténtelo de nuevo más tarde",
    "type": "rate_limit_error",
    "param": "",
    "code": "rate_limit_error"
  }
}
curl --request POST \
  --url https://api.apimart.ai/v1/music/generations/extendFlowMusic \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "flowmusic",
    "clip_id": "abc123-def456",
    "extend_from_s": 30,
    "extend_s": 60,
    "instruction": "Continuar la melodía principal, añadiendo cuerdas"
  }'
import requests

url = "https://api.apimart.ai/v1/music/generations/extendFlowMusic"

payload = {
    "model": "flowmusic",
    "clip_id": "abc123-def456",
    "extend_from_s": 30,
    "extend_s": 60,
    "instruction": "Continuar la melodía principal, añadiendo cuerdas"
}

headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
const url = "https://api.apimart.ai/v1/music/generations/extendFlowMusic";

const payload = {
  model: "flowmusic",
  clip_id: "abc123-def456",
  extend_from_s: 30,
  extend_s: 60,
  instruction: "Continuar la melodía principal, añadiendo cuerdas"
};

const headers = {
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
};

fetch(url, {
  method: "POST",
  headers: headers,
  body: JSON.stringify(payload)
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
{
  "code": 200,
  "data": [
    {
      "status": "submitted",
      "task_id": "task_01KWXVCYB70YJ1WY9X22RVYRNP"
    }
  ]
}
{
  "error": {
    "message": "clip_id is required",
    "type": "invalid_request",
    "param": "",
    "code": "invalid_request"
  }
}
{
  "error": {
    "message": "Saldo insuficiente",
    "type": "invalid_request",
    "param": "",
    "code": "quota_not_enough"
  }
}
{
  "error": {
    "message": "La capacidad del grupo actual está saturada, inténtelo de nuevo más tarde",
    "type": "rate_limit_error",
    "param": "",
    "code": "rate_limit_error"
  }
}

Autenticación

Authorization
string
requerido
Todas las interfaces requieren autenticación mediante Bearer TokenObtener la API Key:Visite la página de gestión de API Keys para obtener su API KeyAl usarla, añádala en el encabezado de la solicitud:
Authorization: Bearer YOUR_API_KEY

Parámetros de solicitud

model
string
requerido
Nombre del modelo, debe ser siempre "flowmusic" (no distingue mayúsculas de minúsculas)
clip_id
string
requerido
clip_id de la música de origen, proveniente de result.music[].clip_id de una tarea completada con éxito
La tarea de origen debe haberse completado con éxito. Para audio externo, primero puede importarlo mediante subir audio para obtener un clip_id.
extend_from_s
number
requerido
Punto de tiempo (segundos) desde el que comienza la continuaciónNo puede superar la duración del clip de origen
extend_s
number
requerido
Duración de la continuación (segundos)Valor máximo: 164 segundos
instruction
string
requerido
Instrucción de edición para la continuación de la músicaEjemplo: "Continuar la melodía principal, añadiendo cuerdas"
title
string
Título de la música tras la continuación
seed
string
Semilla aleatoria, utilizada para reproducir resultados

Respuesta

code
integer
Código de estado de la respuesta, 200 en caso de éxito
data
array
Array de datos devueltos

Casos de uso

Escenario 1: Continuar 60 segundos desde el estribillo

{
  "model": "flowmusic",
  "clip_id": "abc123-def456",
  "extend_from_s": 30,
  "extend_s": 60,
  "instruction": "Continuar la melodía principal, añadiendo cuerdas"
}
Consultar el resultado de la tareaLa extensión de música es una tarea asíncrona; tras enviarla se devuelve un task_id. Utilice la interfaz Obtener estado de la tarea para consultar el progreso y el resultado de la generación. El producto de la extensión es un clip_id nuevo; utilice el nuevo clip_id para las operaciones posteriores.

Ejemplo de resultado de tarea completada

Ejemplo de respuesta de consulta (GET /v1/music/tasks/{task_id}):
{
  "code": 200,
  "data": {
    "id": "task_01KWXVCYB70YJ1WY9X22RVYRNP",
    "status": "completed",
    "progress": 100,
    "created": 1783413242,
    "completed": 1783413292,
    "actual_time": 50,
    "cost": 0.048,
    "credits_cost": 0.48,
    "result": {
      "music": [
        {
          "clip_id": "d2f589ea-5390-4e83-8e2f-4517420408fa",
          "title": "Untitled (Extended)",
          "duration_seconds": "39.95733333",
          "create_time": "2026-07-07T08:34:33.240020Z",
          "lyrics": "waking up to the morning light,\n...",
          "lyrics_id": "0452451b-9e54-5d9f-8437-8bff97c7bbc8",
          "lyrics_timing_markers": [[0, 12], [129, 20]],
          "audio_url": "https://cdn.apimart.ai/audio/flowmusic_d2f589ea.m4a",
          "wav_url": "https://cdn.apimart.ai/audio/flowmusic_d2f589ea.wav",
          "image_url": "https://cdn.apimart.ai/image/flowmusic_d2f589ea_cover.jpg"
        }
      ]
    }
  }
}