GET

/v1/schemas/fish-audio/audio/v1/tts/stream/with-timestamp

kind inputactivity audiohash 282b4d02…extracted Nov 10, 2026version currentsource upstream spec ↗
fieldrecorded source
schemaSource linked above.

upstream-spec

Source trace
698642cc0dd247e854fa9711b7d1d26916770ad466e2ae77dc9d983379dc5647
{
  "fetchedAt": 1794288623,
  "extractorVersion": "2",
  "verifiedAt": null
}

Request body

21 properties · 1 required · 5 $defs
propertytypedescriptionconstraints
text*stringText to convert to speech.
temperaturenumberControls expressiveness. Higher is more varied, lower is more consistent.0 ≤ n ≤ 1 · default: 0.7
top_pnumberControls diversity via nucleus sampling.0 ≤ n ≤ 1 · default: 0.7
referencesReferenceAudio[] | ReferenceAudio[][]Inline voice references for zero-shot cloning. Requires MessagePack (not JSON). For single speaker, provide an array of ReferenceAudio objects. For multiple speakers, provide an array of arrays where each inner array contains references for one speaker. **Mult…nullable
reference_idstring | string[]Voice model ID(s) from Fish Audio library or your custom models. For single-speaker synthesis, provide a string. For multi-speaker synthesis (dialogue), provide an array of model IDs. **Multi-speaker is available with the S2 family (`s2-pro`, `s2.1-pro`, `s2.1…nullable · default: null
prosodyProsodyControlControls for adjusting the prosody (rhythm and intonation) of generated speech.nullable
chunk_lengthintegerText segment size for processing.100 ≤ n ≤ 300 · default: 300
normalizebooleanRewrites numbers, dates, units and symbols as spoken words before synthesis, improving stability. Uses `language` when it is set and otherwise detects the language of each text chunk.default: true
languagestringBCP-47 language tag of the text, for example `en`, `es-MX` or `zh-CN`. Case-insensitive, and `_` is read as `-`. Used only by text normalization (how numbers, dates, units and symbols are spelled out before synthesis) and by word-timestamp alignment. It is not passed to the speech model and does not change the voice, accent or audio quality; a wrong tag only changes how those tokens are spelled out. Omit it, or send `auto` or an empty string, to detect the language per chunk. A tag without dedicated normalization rules skips normalization instead of failing. Without a region, Spanish follows Spain conventions; send `es-MX` for Mexican readings. When `normalize` is false it only affects word timestamps. For text that mixes languages, leave it unset.length ≤ 35 · nullable
formatenumOutput audio format.wav | pcm | mp3 | opus · default: "mp3"
sample_rateintegerAudio sample rate in Hz. When null, uses the format's default (44100 Hz for most formats, 48000 Hz for opus).nullable
mp3_bitrateenumMP3 bitrate in kbps. Only applies when format is mp3.64 | 128 | 192 · default: 128
opus_bitrateenumOpus bitrate in bps. -1000 for automatic. Only applies when format is opus.-1000 | 24000 | 32000 | 48000 | 64000 · default: -1000
latencyenumLatency-quality trade-off. normal: best quality, balanced: reduced latency, low: lowest latency.low | normal | balanced · default: "normal"
max_new_tokensintegerMaximum audio tokens to generate per text chunk.default: 1024
repetition_penaltynumberPenalty for repeating audio patterns. Values above 1.0 reduce repetition.default: 1.2
min_chunk_lengthintegerMinimum characters before splitting into a new chunk.0 ≤ n ≤ 100 · default: 50
condition_on_previous_chunksbooleanUse previous audio as context for voice consistency.default: true
early_stop_thresholdnumberEarly stopping threshold for batch processing.0 ≤ n ≤ 1 · default: 1
featuresstring[]Optional request-scoped TTS feature flags forwarded verbatim to the inference backend. Use ["quality-guard"] to enable the quality guard for this synthesis request. Feature availability is determined by the inference backend.default: []
pronunciation_dictionaryPronunciationDictionaryRef[] | PronunciationDictionaryInline[]Optional list of up to 3 pronunciation dictionaries to apply during synthesis. Provide either references to platform-managed dictionaries OR inline literal dictionaries (the two forms are mutually exclusive in a single request). The server resolves and merges …nullable · default: null

Types

5 $defs

PronunciationDictionaryInlineobject

Inline literal pronunciation dictionary. The server forwards the entries directly to the inference engine without contacting the platform.

items*PronunciationItem[]Replacement entries for this dictionary. See the top-level `pronunciation_dictionary` field description for replacement semantics.items ≤ 5000

PronunciationDictionaryRefobject

Reference to a server-managed pronunciation dictionary. The server resolves contents via the platform pronunciation-dictionaries API and forwards the full merged dictionary to the inference engine, which performs the substitution.

id*stringDictionary identifier as registered on the platform.
version*stringImmutable version identifier for the dictionary. Version is required — there is no implicit `latest`.

PronunciationItemobject

A single key/value entry in a pronunciation dictionary. The inference engine replaces every occurrence of `key` in the request text with `value` during synthesis. With the default `type: "phoneme"` the value is spoken as a phonetic form; with `type: "alias"` i…

key*stringSource substring to match. Pure substring match — no tokenization, no regex. Overlapping matches resolve leftmost-longest. For CJK text include enough context to disambiguate. For `type: "alias"` the key must not start or end with whitespace and must not conta…length ≥ 1 · length ≤ 256
value*stringReplacement for the key during synthesis. For `type: "phoneme"` this is a phonetic representation; dictionary authors should NOT include the `<|phoneme_start|>` / `<|phoneme_end|>` markers themselves, because the inference engine wraps the value with those mar…length ≥ 1 · length ≤ 1024
typeenumHow `value` replaces `key`. `phoneme` (default) speaks the value as a phonetic form. `alias` substitutes the literal text, which then goes through the same text normalization as the rest of the request. Omitted or `null` means `phoneme`, so existing dictionari…phoneme | alias · default: "phoneme"
case_sensitivebooleanWhen true the match is case-sensitive; when false ASCII case folding is applied.default: false

ProsodyControlobject

Controls for adjusting the prosody (rhythm and intonation) of generated speech.

speednumberSpeaking rate multiplier. Valid range: 0.5 to 2.0. 1.0 = normal speed, 0.5 = half speed, 2.0 = double speed. Useful for adjusting pacing without regenerating audio.default: 1
volumenumberVolume adjustment in decibels (dB). 0 = no change, positive values = louder, negative values = quieter.default: 0
normalize_loudnessbooleanNormalize output loudness for more consistent perceived volume. Applies to the S2 family (`s2-pro`, `s2.1-pro`, `s2.1-pro-free`); on `s1` it is accepted but has no effect.default: true

ReferenceAudioobject

A voice sample with its transcript, used for zero-shot voice cloning. The model will attempt to match the voice characteristics from the audio sample.

audio*stringRaw audio bytes of the voice sample. Supported formats: WAV, MP3, FLAC. For best results, use 10-30 seconds of clear speech with minimal background noise.format: binary
text*stringThe exact transcript of what is spoken in the audio sample. Accuracy is important for voice cloning quality.

Validate a payload

before you spend tokens
shell
$ curl -X POST https://modelschemas.com/v1/validate \
    -d '{"provider":"fish-audio","endpointId":"v1/tts/stream/with-timestamp","payload":{…}}'
→ {"valid": false, "errors": [{"path": "#", "keyword": "required", …}]}