drama-3-preview model id vs Sume TTS Router model ids
Fish selects drama-3-preview with a model header. Sume TTS Router takes a required model id from its catalog, and unknown ids fail with 400 model_not_found.

Fish Audio selects drama-3-preview with a model header, and an unrecognized value falls back to s2.1-pro. Sume's TTS Router takes a required model in the request body from GET /v1/tts-router/models, and an unknown id fails with 400 model_not_found. drama-3-preview is not a Sume id.
Fish facts are from its text-to-speech reference (read 2026-10-01); Sume facts are from the OpenAPI file.
How does Fish pick the model?
Its reference describes a model header: use s2.1-pro-free for the free developer tier, and drama-3-preview is a preview model whose behavior and availability may change. Allowed values are s1, s2-pro, s2.1-pro, s2.1-pro-free and drama-3-preview. If the header is omitted or unrecognized, the request falls back to s2.1-pro.
How does Sume pick the model?
Sume TTS 1.0 has no engine picker; model and model_id are rejected with 400. To choose a model, call POST /v1/tts-router/generate with a required model from the catalog, listed by GET /v1/tts-router/models. The response job.model echoes the requested id.
A mistyped id is an error, not a fallback, which is the opposite of the Fish header behavior.
| Fish Audio | Sume TTS Router | |
|---|---|---|
| Where | model header | model in the request body |
| Unrecognized value | Falls back to s2.1-pro | 400 model_not_found with the catalog URL |
| Preview model | drama-3-preview | Not in the catalog |
| Auth | Per Fish docs | Sume API key only |
Which ids does Sume list today?
The OpenAPI file lists sonic-3.6, sonic-3.5, sonic-3, sonic-latest and sonic-preview, and describes the v1 catalog as Sonic only. Read the live list from GET /v1/tts-router/models before hardcoding an id.
What should I change when moving a request?
Move the model choice from a header into the JSON body, use a catalog id, and send your Sume API key only; the schema says not to send provider credentials. Check for model_not_found in your error handling instead of relying on a default. For another header-to-body case see HeyGen's per-request model id.
Sources
Related posts
More in Developers
- Fix lens distortion in video by API with lenscorrection
Sume's video filter allowlists ffmpeg's lenscorrection, so barrel distortion from a wide action-cam clip can be corrected by coefficients you choose and test.
- Fix a yellow or blue color cast in a video by API (colortemperature)
Sume's video filter allowlists colortemperature, a Kelvin value from 1000 to 40000 with a default of 6500. Warm or cool a clip and mix it in part.
- FLUX.2 JSON prompt: on Sume it is text in the prompt field
BFL says FLUX.2 accepts JSON-structured prompts. On Sume, prompt is a plain string, so JSON goes in as text; other fields are typed.
- FLUX.2 LoRA API: finetune_id on BFL, not on Sume
BFL serves klein LoRAs through -finetuned endpoints with finetune_id. Sume rejects provider-specific parameters, so use reference images instead.
Written by Sume