Saltar al contenido principal
POST
/
v1
/
music
/
generations
curl --request POST \
  --url https://api.apimart.ai/v1/music/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "flowmusic",
    "title": "My Song",
    "sound_prompt": "upbeat pop music with piano",
    "bpm": "120",
    "length": 60
  }'
import requests

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

payload = {
    "model": "flowmusic",
    "title": "My Song",
    "sound_prompt": "upbeat pop music with piano",
    "bpm": "120",
    "length": 60
}

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";

const payload = {
  model: "flowmusic",
  title: "My Song",
  sound_prompt: "upbeat pop music with piano",
  bpm: "120",
  length: 60
};

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_01K8AYYM6R03TGZ3Q2P0TZVNPX"
    }
  ]
}
{
  "error": {
    "message": "sound_prompt and lyrics cannot both be empty",
    "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 \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "flowmusic",
    "title": "My Song",
    "sound_prompt": "upbeat pop music with piano",
    "bpm": "120",
    "length": 60
  }'
import requests

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

payload = {
    "model": "flowmusic",
    "title": "My Song",
    "sound_prompt": "upbeat pop music with piano",
    "bpm": "120",
    "length": 60
}

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";

const payload = {
  model: "flowmusic",
  title: "My Song",
  sound_prompt: "upbeat pop music with piano",
  bpm: "120",
  length: 60
};

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_01K8AYYM6R03TGZ3Q2P0TZVNPX"
    }
  ]
}
{
  "error": {
    "message": "sound_prompt and lyrics cannot both be empty",
    "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)
sound_prompt
string
Prompt que describe el estilo musical o el sonidoEjemplo: "upbeat pop music with piano"
sound_prompt y lyrics no pueden estar ambos vacíos (debe enviarse al menos uno). Cada solicitud genera solo una pieza musical.
lyrics
string
Texto de la letra; puede obtenerse primero con la interfaz de generar letras y luego rellenarse aquíEjemplo: "[Verse 1]\nPor larga que sea la noche, amanecerá\n..."
title
string
Título de la música generada
bpm
string
BPM (pulsaciones por minuto), debe ser ≥ 1Ejemplo: "120"
length
integer
Duración de la generación (segundos)Rango admitido: 1 ~ 240 segundos
seed
string
Semilla aleatoria, utilizada para reproducir resultados
Enviar el mismo valor de seed con la misma solicitud generará resultados similares, pero no se garantiza que sean completamente idénticos.

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: Generación solo con prompt de estilo

{
  "model": "flowmusic",
  "title": "My Song",
  "sound_prompt": "upbeat pop music with piano",
  "bpm": "120",
  "length": 60
}

Escenario 2: Letra + estilo para crear la canción

{
  "model": "flowmusic",
  "title": "Perseverancia",
  "lyrics": "[Verse 1]\nPor larga que sea la noche, amanecerá\n...",
  "sound_prompt": "energetic rock with electric guitar",
  "length": 120
}
Consultar el resultado de la tareaLa generació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.

Ejemplo de resultado de tarea completada

Ejemplo de respuesta de consulta (GET /v1/music/tasks/{task_id}):
{
  "code": 200,
  "data": {
    "id": "task_01KWXVB61E28THHFBSYXWA4FAJ",
    "status": "completed",
    "progress": 100,
    "created": 1783413184,
    "completed": 1783413236,
    "actual_time": 52,
    "cost": 0.048,
    "credits_cost": 0.48,
    "result": {
      "music": [
        {
          "clip_id": "a41aade4-993e-4d28-b56f-d97e7ef7167c",
          "title": "Regression Song",
          "duration_seconds": "181.70666667",
          "create_time": "2026-07-07T08:33:32.854073Z",
          "lyrics": "[Verse 1]\nWaking up to the morning light,\n...",
          "lyrics_id": "c302d603-81b6-552f-8122-e512928d6aa1",
          "lyrics_timing_markers": [[10, 12], [212, 36]],
          "audio_url": "https://cdn.apimart.ai/audio/flowmusic_a41aade4.m4a",
          "wav_url": "https://cdn.apimart.ai/audio/flowmusic_a41aade4.wav",
          "image_url": "https://cdn.apimart.ai/image/flowmusic_a41aade4_cover.jpg"
        }
      ]
    }
  }
}