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.

5 min readSume
All posts

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.

Music Router request fields (read 2026-10-08)
FieldAcceptedNote
modelsume/music-auto (default), lyria-3.5, lyria-3-proUnknown ids fail with 400 model_not_found and catalog_url
prompt1 to 5000 charactersPut exclusions here; control length here
negative_promptomitted or ""A non-empty value is not supported
duration, duration_secondsneverRejected by Sume
image_urlpublic HTTPS image or nullOptional visual conditioning
metadata, mode, webhook_url, wait_timeout_secondsas on Music 1.0metadata 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

All Media tools posts

Written by Sume