Music prompt rejected? Revise the flagged part, keep the brief
When a Sume music request is rejected on policy, rewrite only the flagged content, keep the tempo, key and instruments, and retry inside your spend cap.

If a Sume music request is rejected on policy, change only the content that was flagged and keep the rest of the musical brief: tempo, key, instruments, and the arc. Sume's Music 1.0 page says to revise the flagged content while retaining the brief, to retry only within the budget you authorized, and not to strip the request down to a generic bed.
This matters more now that Lyria 3.5 is generally available. Google's Gemini API changelog (read 2026-10-02) lists full-length song generation from text and image inputs on 2026-09-03, so a long, specific brief is the normal request, and one flagged phrase should not cost you the other six details.
Is a policy rejection the same as a 400 validation error?
No. Two different things can stop a music job. A validation error means the request body broke a rule, and the fix is to change the field. A policy rejection means the content of the prompt was refused, and the fix is to rewrite that content. The Music Router and Music 1.0 share the same body and the same rules, so the table applies to both.
| Symptom | Cause | What to change |
|---|---|---|
| HTTP 400, negative_prompt_unsupported | A non-empty negative_prompt was sent | Omit the field or send an empty string; put exclusions in the positive prompt |
| Request rejected for duration or duration_seconds | Those fields are unrecognized on Music 1.0 | Remove them; steer length in the prompt text |
| Policy rejection | The prompt content was refused | Rewrite the flagged content, keep the musical brief |
| Image URL refused | image_url is not public HTTPS | Pass a public HTTPS image or omit it |
What should I keep when I rewrite?
Keep the parts that make the track yours. The docs describe a seven-axis brief: emotion, genre, tempo as a number, key and mode, two to four instruments with texture, an arc with one named moment, and era or production. Those axes are creative direction, not guaranteed settings, so listen to the result.
Change only the clause that triggered the refusal. If you cannot tell which clause it was, remove one candidate at a time rather than rewriting the whole prompt into something safe and generic. A stripped prompt will pass, but it throws away the reason you wrote a brief in the first place.
How do I retry without paying twice?
Send the same Idempotency-Key only when you resend the identical request; a revised prompt is a new request and needs a new key. Sume's job pages say not to resubmit a paid request just because a local process timed out, so poll the job first. Check the status before you decide a request failed.
Music is a fixed price per accepted generation: $0.125 on the Music 1.0 page. Set your own ceiling on how many revisions a track gets, for example three, then hand the brief to a person.
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: score-rev2-001" \
-d '{"prompt": "Hushed neo-soul nocturne, 72 BPM, D minor. Rhodes, sub bass, brushed snare. Instrumental, no vocals."}'What if the router picks an engine I did not expect?
Omit model and Sume sends the job to sume/music-auto, which routes to Lyria 3.5 today. The job's request.routed_model names the engine that ran. Read it before you blame the prompt.
What should I log for each revision?
Keep a short log per track: the brief, the version number, the error or reason you saw, and what you changed. After a few tracks the log shows which kinds of phrasing get refused, and you can write the first version of the next brief to avoid them. It also keeps retries inside your cap, because each attempt is written down.
Sources
Related posts
More in Developers
- Mux direct upload chunks: multiples of 256 KB, UpChunk at ~5 MB
Mux direct uploads need chunks in multiples of 256 KB; UpChunk sends about 5 MB. A chunk-size helper and the upload states to wait on before using an asset.
- Mux Robots webhook events vs Sume job events: a verifier
Mux sends robots.job.{workflow}.{status} on every change. Sume sends only job.completed, job.failed and job.canceled, signed. Verify them in Python.
- Nano Banana edit slow? Thinking can't be turned off, expect 202
Google says Nano Banana thinking cannot be disabled. On Sume a call that outlasts 30 seconds returns 202 with a job id. How to handle both without paying twice.
- Netflix subtitle limit: 42 characters per line, and max_chars
Netflix's English timed text spec allows 42 characters per line and two lines. Sume's caption design.phrasing.max_chars accepts 4 to 60, so 42 fits.
Written by Sume