Skip to content

Music

Music follows the same async pattern as video: create, poll, download.

import requests
job = requests.post(
"https://api.mixen.ai/v1/audio/music",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"model": "suno", "prompt": "Melancholic synth-pop about a city at night, female vocals"},
).json()
print(job["id"], job["status"])
Field Description
model suno / suno-v5 — a song with vocals, two tracks per request. lyria / lyria-pro — instrumental, one track
mode simple (from prompt) or custom (from lyrics + style + title). Lyria ignores this
prompt Track description for simple mode
lyrics Song lyrics for custom mode
style Genre, style, tags
title Track title

When you need specific lyrics rather than generated ones:

{
"model": "suno-v5",
"mode": "custom",
"title": "Night Tram",
"style": "indie rock, 90s, male vocals, live drums",
"lyrics": "First verse...\n\nChorus..."
}
curl https://api.mixen.ai/v1/audio/music/music_... \
-H "Authorization: Bearer $MIXEN_API_KEY"
curl -L https://api.mixen.ai/v1/audio/music/music_.../content \
-H "Authorization: Bearer $MIXEN_API_KEY" -o track.mp3

Statuses are the same: queuedin_progresscompleted or failed.

Suno returns two variants of the track per request — that is how the model behaves, not an error. Both appear in the poll response.

Music is billed per request rather than per second: the per_request_rub field in the catalog. Suno’s two tracks are one charge.