Music generation API: the Sume Music Router with Lyria 3.5
Sume's Music Router turns a text prompt into a track via POST /v1/music-router/generate. sume/music-auto picks the engine, Lyria 3.5 today.

Sume's music generation API is the Music Router. Send a text prompt to POST /v1/music-router/generate and Sume creates an audio job. When model is omitted or set to sume/music-auto, Sume picks the engine, which is Lyria 3.5 today; you can also pin lyria-3.5 or lyria-3-pro to pass through to that engine.
Every detail below comes from the Music Router docs and the Music 1.0 docs.
How do I generate a track with the API?
Create a job with a prompt, then poll it and fetch the result. The request below is the docs example on the production host.
POST /v1/music-router/generatecreates the job.GET /v1/jobs/{id}/statusreports progress.GET /v1/jobs/{id}/resultreturns the finished job. Read the audio artifact fromresult.artifacts[]wheretypeisaudio, typicallyaudio/mpegon media.sume.com.
curl -X POST https://api.sume.com/v1/music-router/generate \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: music-router-001" \
-d '{
"model": "sume/music-auto",
"prompt": "Warm lo-fi hip hop, 84 BPM, C minor. Dusty Rhodes chords, brushed boom-bap drums, a muted trumpet answer at 0:10. A 30-second track. Instrumental, no vocals."
}'
curl https://api.sume.com/v1/jobs/$JOB_ID/result \
-H "Authorization: Bearer $SUME_API_KEY"Which model ids can I send?
The public model id is sume/music-router. Its catalog is at GET /v1/music-router/models and GET /v1/music-router/models/{model_id}.
sume/music-autois the default. Sume picks the engine: Lyria 3.5 today.lyria-3.5andlyria-3-proare explicit catalog ids that pass through to that engine.- An unknown id fails with
400 model_not_foundand acatalog_url. job.modelechoes the id you requested, sosume/music-autostayssume/music-auto.job.request.routed_modelnames the engine that ran, for examplelyria-3.5.
Which request fields does the Music Router accept?
The body is the Music 1.0 body plus an optional model. There is no seed, temperature, guidance, or duration parameter.
| Field | Required | Notes |
|---|---|---|
model | No | Routable id from the catalog. Omitted means sume/music-auto. |
prompt | Yes | 1–5000 characters. Put exclusions in the positive prompt. |
image_url | No | Optional public HTTPS image for visual conditioning, or null to clear. |
negative_prompt | No | Unsupported when non-empty. Omit it or send "". |
metadata | No | Caller metadata stored on the job; not sent to the provider. |
mode | No | async, sync, subscribe, or webhook. |
webhook_url | No | Public HTTPS callback for webhook mode. |
wait_timeout_seconds | No | 0–30, for sync and subscribe. |
How do I control the length and style of a track?
Steer length in the prompt: say “a 2-minute track”, or use section markers such as [0:00-0:30] Intro: …. The Music 1.0 page describes Lyria 3.5 output as full-length structured songs up to a few minutes.
To avoid generic musical choices, the docs suggest a scene-specific brief with seven axes, then one closing clause: “Instrumental, no vocals.” The axes are creative directions, not guaranteed output settings, so verify the generated audio.
- Emotion, stated precisely: “hushed, slightly melancholic”.
- Genre or lineage: neo-soul, bossa nova, synthwave.
- Tempo as a number: “72 BPM”.
- Key and mode: “D minor”.
- 2–4 instruments with texture: “Rhodes through tape wow”.
- An arc with one named moment: “breakdown to bass and claps at 0:20, full return at 0:28”.
- Era or production: “1998 production, dry and close”.
What are the Music Router's hard limits?
The docs list these hard constraints:
durationandduration_secondsare rejected. Length comes from the prompt.- A non-empty
negative_promptreturns HTTP 400 withpublic_reason=negative_prompt_unsupported, because Lyria does not support negative prompting. Write exclusions such as “no vocals, no spoken word” into the prompt instead. - The prompt maximum is 5000 characters.
- Image URLs must be public HTTPS.
What do I get back, and what does it cost?
A completed job returns Sume-hosted audio under result.artifacts[]. Use those media.sume.com URLs; raw provider URLs are not public outputs. result.lyrics carries the model-reported lyrics or section map when present. That is metadata from the model, not an audio measurement.
Every Music Router model charges the fixed Music price per audio generation, and the catalog lists the provider list price per model for reference. Current rates are on API pricing, and How Sume pricing works explains the wallet.
Should I still call Music 1.0?
Not for new integrations. Music 1.0 (sume/music-1.0) is retiring gradually. Its routes, POST /v1/music-1.0/generate and POST /v1/models/sume/music-1.0/runs, keep working and keep job.model = sume/music-1.0, but every request now resolves through the Music Router, and job.request.routed_model reports the engine there too. The docs say new integrations should call the router.
The Music Router is the sibling of Image Router and Video Router. For those, see image generation with reference images and an OpenRouter-compatible video API.
Sources
Related posts
Written by Sume