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.
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.
| Text | Bytes | fish-s2.1-pro | fish-s2.1-pro-free |
|---|---|---|---|
| 1,000 English characters | 1,000 | $0.030 | $0.005 |
| 1,000 Chinese characters | 3,000 | $0.090 | $0.015 |
| 500 Chinese + 500 Latin | 2,000 | $0.060 | $0.010 |
Charged only on success. Your first 20 voice clones are free.
$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.
$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.
The upstream free window also has a published end date and has already been extended four times. Treat the price as temporary.
# ─── 合成一段语音 ───────────────────────────────────────
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/..."] } }| Field | Required | Type | Description |
|---|---|---|---|
| model | Yes | string | fish-s2.1-pro / fish-s2.1-pro-free |
| text | Yes | string | The text to speak; up to 100,000 UTF-8 bytes per request |
| reference_id | No | string | Voice id, either one you cloned or one from the Fish voice library. voice_id is accepted as an alias. |
| format | No | string | mp3 (default) / wav / pcm / opus |
| prosody | No | object | { speed, volume }. speed ranges 0.5-2.0. A flat speed field is accepted too. |
| mp3_bitrate | No | number | 64 / 128 / 192, mp3 only |
| sample_rate | No | number | Sample rate, e.g. 44100 |
| latency | No | string | balanced (default, faster first audio) / normal (steadier) |
| chunk_length | No | number | 100-300, default 200. Smaller chunks start sooner; larger ones are more efficient for long text. |
| callback_url | No | string | Webhook URL called when the task completes |
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
| Field | Required | Type | Description |
|---|---|---|---|
| source | No | string | licensed (default, voices licensed by Fish Audio) / community (every public voice on the platform) |
| language | No | string | Language code, e.g. en / zh / ar / ja |
| q | No | string | Search by name |
| page / page_size | No | number | Pagination; 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.
Try it in the Playground
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.
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.
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.