Request example
curl --request POST \
--url https://api.openveer.com/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.openveer.com/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.openveer.com/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));Response example
{
"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": "Insufficient balance",
"type": "invalid_request",
"param": "",
"code": "quota_not_enough"
}
}{
"error": {
"message": "Current group capacity is saturated, please retry later",
"type": "rate_limit_error",
"param": "",
"code": "rate_limit_error"
}
}Authentication
Authorization stringAll endpoints require Bearer Token authentication
Get your API Key:
Visit the API Key management page to get your API Key
Add it to the request header:
Authorization: Bearer YOUR_API_KEYRequest Parameters
model stringModel name, must be "flowmusic" (case-insensitive)
sound_prompt stringMusic style or sound description prompt
Example: "upbeat pop music with piano"
sound_prompt and lyrics cannot both be empty (at least one is required). Each request generates only one track.
lyrics stringLyrics text; you can first obtain lyrics from the Generate Lyrics endpoint and fill them in here
Example: "[Verse 1]\nEven the longest night turns to dawn\n..."
title stringTitle of the generated music
bpm stringBPM (beats per minute), must be ≥ 1
Example: "120"
length integerGeneration duration (seconds)
Supported range: 1 \~ 240 seconds
seed stringRandom seed, used to reproduce results
Passing the same seed value with the same request produces similar results, but exact reproducibility is not guaranteed.
Response
code integerResponse status code, 200 on success
data arraystatus stringTask status, submitted upon initial submission
task_id stringUnique task identifier, used to query task status and results
Use Cases
Scenario 1: Generate from a style prompt only
{
"model": "flowmusic",
"title": "My Song",
"sound_prompt": "upbeat pop music with piano",
"bpm": "120",
"length": 60
}Scenario 2: Lyrics + style to a full song
{
"model": "flowmusic",
"title": "Perseverance",
"lyrics": "[Verse 1]\nEven the longest night turns to dawn\n...",
"sound_prompt": "energetic rock with electric guitar",
"length": 120
}Query Task Results
Music generation is an asynchronous task; a task_id is returned after submission. Use the Get Task Status endpoint to query generation progress and results.
Completed Task Result Example
Query response example (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.openveer.com/audio/flowmusic_a41aade4.m4a",
"wav_url": "https://cdn.openveer.com/audio/flowmusic_a41aade4.wav",
"image_url": "https://cdn.openveer.com/image/flowmusic_a41aade4_cover.jpg"
}
]
}
}
}This documentation is built and hosted on Mintlify, a developer documentation platform.