Music Router negative_prompt: send an empty string, not a list
Sume Music Router takes negative_prompt only omitted or as an empty string. Put exclusions in the prompt. Duration is refused too. Price stays $0.125.

Sume Music Router does not support a non-empty negative_prompt. Omit the field or send an empty string, and write what you want to avoid inside prompt, for example "instrumental, no vocals". The request is also refused if it carries duration or duration_seconds, so the length of the track is another thing you ask for in the prompt text. A generation costs the fixed $0.125 whatever the prompt says.
What the router accepts
The router body is the same as the Music 1.0 body, plus an optional model. These are the fields as the docs list them.
| Field | Accepted | Note |
|---|---|---|
| model | sume/music-auto (default), lyria-3.5, lyria-3-pro | Unknown ids fail with 400 model_not_found and catalog_url |
| prompt | 1 to 5000 characters | Put exclusions here; control length here |
| negative_prompt | omitted or "" | A non-empty value is not supported |
| duration, duration_seconds | never | Rejected by Sume |
| image_url | public HTTPS image or null | Optional visual conditioning |
| metadata, mode, webhook_url, wait_timeout_seconds | as on Music 1.0 | metadata is stored on the job and not sent to the provider |
Turn exclusions into positive words
A negative list works by naming what you do not want. A positive prompt has to name what you do want, and the docs example does both in one sentence: "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."
Three habits help. State the instrumentation you want, because a precise list leaves less room for the rest. Close with a short plain exclusion such as "Instrumental, no vocals". And put the length in words, as in "a 2-minute track", or use timed sections such as [0:00-0:30] Intro: ..., which the docs show as a way to control length.
A request builder that refuses the bad fields
This script builds the body offline and stops before it sends anything wrong. It fails loudly on a non-empty negative_prompt or a duration key, which is the same check that Sume makes, but earlier and for free.
import json, sys
BANNED = ("duration", "duration_seconds")
def music_body(prompt: str, model: str = "sume/music-auto", **extra) -> dict:
if not 1 <= len(prompt) <= 5000:
raise ValueError("prompt must be 1 to 5000 characters")
for key in BANNED:
if key in extra:
raise ValueError(f"{key} is rejected; write the length in the prompt")
if extra.get("negative_prompt", ""):
raise ValueError("non-empty negative_prompt is not supported")
return {"model": model, "prompt": prompt, **extra}
body = music_body(
"Warm lo-fi hip hop, 84 BPM. Dusty Rhodes chords, brushed drums. "
"A 30-second track. Instrumental, no vocals.",
negative_prompt="",
)
json.dump(body, sys.stdout, indent=2)Why the field exists but is empty
The docs list negative_prompt among the fields, and the rule is that Sume does not support a non-empty value: omit the field or send an empty string. If your client library fills it from a default, check what it sends. A default of a long list of unwanted words will turn into a request error, not into a changed track.
The same applies to duration. A client that copies a duration field from a video call into a music call gets a rejection before any payment, and the fix is to delete the field and write the length in the prompt. The docs also tell you to describe sections with time ranges when you want a structure, such as an intro and a drop, so the prompt is the single place where the shape of the track is set.
Cost of getting the prompt wrong
Because the price is fixed per accepted generation, a track with vocals you did not want costs the same $0.125 as a good one. Ten tries to fix a prompt cost 10 x $0.125 = $1.25. Spend the effort on the first prompt: list the instruments, name the tempo, and close with the exclusion.
Sources
Related posts
More in Media tools
- One 1920x1080 master to TikTok 9:16, 1:1 and 16:9 ads: $0.04
TikTok's page lists three ratios with minimum sizes. From one 1920x1080 clip, two video-filter crops make 9:16 and 1:1 at $0.02 each. The fractions are shown.
- One portrait, three languages: three 6-second lip-sync jobs for $1.80
A greeting in English, Spanish and Polish from one still: three 6-second H3 Max 768p jobs cost $1.80 plus TTS. Steps, the language check and limits.
- One TTS job per sentence, then a gapless concat: the Sume recipe
Generate narration one sentence at a time with tts_create, then join the takes with timeline audio. Fix one line without redoing the rest.
- Price plate over a product clip: Timeline compose overlay, $0.02
Sume Timeline compose overlay puts a price plate image on a product clip for $0.02. Width_ratio 0.05 to 1, margin_ratio 0 to 0.45, and the stack-key error.
Written by Sume