StepAudio 3 Music preview is free, then retired: keep your API stable
stepaudio-3-music-preview is free for a limited time, then retired for a paid version. How to keep a music integration stable, and which Sume ids stay put.

StepFun's StepAudio 3 Music is exposed as stepaudio-3-music-preview on an asynchronous HTTP task API (POST /v1/audio/music), billed free for a limited time. The model page says the preview name is used during the free trial, the preview version is retired when the trial ends, and a paid version is added. So the practical rule is: keep the model id out of your code, and plan for the id and the price to change on a date you do not control. On Sume the stable id is sume/music-auto, described in the Music Router docs.
What exactly is changing on StepFun's side?
Two things, per the page: the model name (a formal paid version replaces the preview) and billing (free to paid). The page does not give a date, so do not hard-code one. Treat any pipeline that depends on free output as one that will need a budget line later.
Which Sume ids stay stable?
The Music Router docs say sume/music-auto is the default and Sume picks the engine (Lyria 3.5 today); you can also pin lyria-3.5 or lyria-3-pro from GET /v1/music-router/models. The older sume/music-1.0 is retiring gradually: its routes keep working and keep job.model = sume/music-1.0, but every request resolves through the router, and new integrations should call POST /v1/music-router/generate.
| Question | StepFun page | Sume docs |
|---|---|---|
| Model id today | stepaudio-3-music-preview | sume/music-auto (default), lyria-3.5, lyria-3-pro |
| Billing | Free (limited time) | Fixed Music price per audio generation |
| What happens to the id | Preview retired, paid version added | sume/music-1.0 routes keep working; new code uses the router |
| How to see the engine | Not stated | job.request.routed_model |
How do I keep my own integration stable?
Store the id in config. Read job.request.routed_model if you need to know which engine ran; on Sume job.model echoes the id you requested. Pin an explicit engine only if you need that engine and accept that it may leave the catalog; unknown ids fail with 400 model_not_found and a catalog_url. For the same advice about another vendor's retired models, see Suno old models retired.
Sources
Related posts
More in Developers
- Sume 503: provider_capacity_exceeded vs provider_not_configured
Sume 503s differ: provider_capacity_exceeded: retry later, same key; provider_not_configured is no hard retries, job_ledger_not_configured is an outage
- Sume API errors: a 13-line function that says retry or fix
Map a failed Sume response to out-of-credit, wait, back off, fix the key, retry with the same key, or fix the request, using the documented error envelope.
- sume/auto for an image series: why to pin a model id instead
sume/auto never tells you which model ran, and job.model stays sume/auto. For a series that must match, send one catalog id such as google/nano-banana-2.
- SUME_API_BASE_URL has /v1, the SDK baseUrl does not: which is right?
The Sume CLI base URL is https://api.sume.com/v1 and it sends x-api-key by default; the SDK baseUrl is https://api.sume.com with no /v1. Both env sets compared.
Written by Sume