APIMODELSAPIMODELS
Docs/Fish Audio API

Fish Audio S2.1 Pro API

Fish Audio S2.1 Pro text-to-speech: 83 languages from one model id, twenty free voice clones, and mp3 / wav / pcm / opus output. Two billing tiers run the same model — $0.03 on standard and $0.005 on the economy tier, per 1,000 UTF-8 bytes.

Read this first: billed per byte, not per character

This model is billed on the UTF-8 byte length of your input text, while every other speech model here bills per character. A Latin letter is one byte, a Chinese character is three, an emoji is four. A thousand Chinese characters therefore costs three times a thousand English ones. If you are switching from another speech model, re-estimate CJK workloads on bytes rather than carrying the character count across.

TextBytesfish-s2.1-profish-s2.1-pro-free
1,000 English characters1,000$0.030$0.005
1,000 Chinese characters3,000$0.090$0.015
500 Chinese + 500 Latin2,000$0.060$0.010

Charged only on success. Your first 20 voice clones are free.

Choosing a tier

fish-s2.1-pro

$0.03 per 1,000 bytes. Use it whenever a person is waiting on the audio. We measured about 17 seconds for 2,000 bytes. Requests are covered by the provider’s paid-tier data agreement.

fish-s2.1-pro-free

$0.005 per 1,000 bytes, same model and same audio quality. Right for auditioning voices, prototyping and non-urgent batches. Three trade-offs below.

What the free tier costs you

  • It is slower. The same 2,000-byte passage took 41 seconds against 17 on the standard tier in our measurement.
  • There is no SLA. The provider commits to no time-to-first-audio and no uptime, so a slow or failed call is not something you can escalate.
  • Requests may be used by the provider to improve their models. The paid tier has a data agreement that prevents this; the free tier does not, so keep confidential text off it.

The upstream free window also has a published end date and has already been extended four times. Treat the price as temporary.

Code examples

# ─── 合成一段语音 ───────────────────────────────────────
curl -X POST https://api.apimodels.app/v1/audio/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "fish-s2.1-pro",
    "text": "Hello from apimodels.",
    "format": "mp3"
  }'
# { "code": 200, "data": { "taskId": "clxxx", "state": "pending" } }


# ─── 用克隆出来的音色说话 ────────────────────────────────
curl -X POST https://api.apimodels.app/v1/audio/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "fish-s2.1-pro",
    "text": "Now I speak in the cloned voice.",
    "reference_id": "YOUR_VOICE_ID",
    "format": "wav",
    "prosody": { "speed": 1.2 }
  }'


# ─── 取结果 ─────────────────────────────────────────────
curl "https://api.apimodels.app/v1/audio/generations?task_id=TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
# { "code": 200, "data": { "state": "completed", "resultUrls": ["https://r2.apimodels.app/..."] } }

Request parameters

FieldRequiredTypeDescription
modelYesstringfish-s2.1-pro / fish-s2.1-pro-free
textYesstringThe text to speak; up to 100,000 UTF-8 bytes per request
reference_idNostringVoice id, either one you cloned or one from the Fish voice library. voice_id is accepted as an alias. Library ids with preview audio are listed by GET /v1/voices/catalog?provider=fish (public, no key) and at apimodels.app/voices.
formatNostringmp3 (default) / wav / pcm / opus
prosodyNoobject{ speed, volume }. speed ranges 0.5-2.0. A flat speed field is accepted too.
mp3_bitrateNonumber64 / 128 / 192, mp3 only
sample_rateNonumberSample rate, e.g. 44100
latencyNostringbalanced (default, faster first audio) / normal (steadier)
chunk_lengthNonumber100-300, default 200. Smaller chunks start sooner; larger ones are more efficient for long text.
callback_urlNostringWebhook URL called when the task completes

Picking a voice

Without reference_id you get Fish's default voice, which can sound flat outside English. Pick one from the Fish voice library and pass its voice_id as reference_id:

GET https://api.apimodels.app/v1/audio/voices/fish/library?source=licensed&language=en&q=calm&page=1
Authorization: Bearer YOUR_API_KEY
FieldRequiredTypeDescription
sourceNostringlicensed (default, voices licensed by Fish Audio) / community (every public voice on the platform)
languageNostringLanguage code, e.g. en / zh / ar / ja
qNostringSearch by name
page / page_sizeNonumberPagination; page_size up to 50

Each voice comes back with voice_id, name, languages, preview_url, licensed and uses. Licensed voices are fewer (some languages, such as Arabic, have none yet). Community voices are uploaded by Fish Audio users and some imitate real people, so confirm you have the rights before commercial use. You can also clone your own voice.

No API key at hand? GET https://api.apimodels.app/v1/voices/catalog?provider=fish&source=licensed&language=ja returns the same ids, preview URLs and languages from a daily-refreshed catalog (parameters in the Voices API docs), or browse and preview them in the voice library.

Pricing for Fish licensed voices

Fish Audio licensed voices (licensed: true in the voice library, or anything listed with source=licensed) are billed at twice the rate and are not available on the evaluation tier: sending one to fish-s2.1-pro-free returns a 400. Community voices and your own clones are billed at the normal rate.

Per 1,000 UTF-8 bytesCommunity, clone or default voiceFish licensed voice
fish-s2.1-pro$0.03$0.06
fish-s2.1-pro-free$0.005Not available

Notes

  • Your first 20 voice clones are free; past 20 stored voices each extra slot is $1 and deleting one frees it again. Send a clean sample of ten seconds or more and a voice id comes back in roughly 5 to 20 seconds.
  • All 83 languages share one model id — no per-language endpoint and no premium for non-English speech.
  • Async: create a task for a taskId, then poll GET ?task_id= for the result.
  • Result files are deleted after 30 days; download or re-host them in time.
  • Charged only on success.

Try it in the Playground

FAQ

How is Fish Audio billed?

Per 1,000 UTF-8 bytes of input text, not per character. A Latin letter is one byte and a Chinese character is three, so 1,000 English characters costs $0.03 on the standard tier while 1,000 Chinese characters is 3,000 bytes and costs $0.09. The free tier is a sixth of that. Voice cloning is not billed, and failed requests are never charged.

How many free voice clones do I get on Fish Audio?

Twenty. Past twenty stored voices each additional slot costs $1, and deleting a voice frees that slot again, so the fee is for holding many voices rather than for cloning itself. Send a clean sample of at least ten seconds, get a voice id in roughly 5 to 20 seconds, then pass it as reference_id on later synthesis requests. The speech you generate afterwards is billed separately at the per-byte rate.

What is the difference between the standard and free Fish Audio tiers?

They run the same model, so the audio quality is identical. The free tier is six times more affordable but best-effort: the same 2,000-byte passage took 41 seconds against 17 on the standard tier in our measurement, there is no latency or uptime commitment, the provider may use free-tier requests to improve their models, and the free window has a published end date. Use the free tier to evaluate and prototype, the standard tier when someone is waiting.