Models

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.

5 min readSume
All posts

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/generate creates the job.
  • GET /v1/jobs/{id}/status reports progress.
  • GET /v1/jobs/{id}/result returns the finished job. Read the audio artifact from result.artifacts[] where type is audio, typically audio/mpeg on 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-auto is the default. Sume picks the engine: Lyria 3.5 today.
  • lyria-3.5 and lyria-3-pro are explicit catalog ids that pass through to that engine.
  • An unknown id fails with 400 model_not_found and a catalog_url.
  • job.model echoes the id you requested, so sume/music-auto stays sume/music-auto. job.request.routed_model names the engine that ran, for example lyria-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.

From Music Router and Music 1.0, read 2026-09-25.
FieldRequiredNotes
modelNoRoutable id from the catalog. Omitted means sume/music-auto.
promptYes1–5000 characters. Put exclusions in the positive prompt.
image_urlNoOptional public HTTPS image for visual conditioning, or null to clear.
negative_promptNoUnsupported when non-empty. Omit it or send "".
metadataNoCaller metadata stored on the job; not sent to the provider.
modeNoasync, sync, subscribe, or webhook.
webhook_urlNoPublic HTTPS callback for webhook mode.
wait_timeout_secondsNo0–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:

  • duration and duration_seconds are rejected. Length comes from the prompt.
  • A non-empty negative_prompt returns HTTP 400 with public_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