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
- Stripe wants enabled_events trimmed; Sume sends only terminal events
Stripe advises subscribing only to needed event types. Sume sends only terminal job and run events, with the URL set on each request. Here is the mapping.
- Stripe resend keeps auto-retries; Sume redeliver uses no attempt
Stripe's manual resend does not cancel automatic retries and works 15 to 30 days. Sume redeliver sends a fresh signature after ten attempts and keeps the URL.
- Stripe says one restricted key per service: Sume scopes per job
Stripe recommends restricted keys, one per service. Sume keys have fixed scopes. Map each webhook operation to its scope and give the handler no more.
- Stripe replays a saved 500 for the same key; Sume releases it
Stripe saves the first result for a key, even a 500, and replays it. Sume replays a finished receipt, but a create that fails with 402 or 503 releases its key.
Written by Sume