# Fish Audio S2.1 Pro - Core.Today AI API > Fish Audio's current production TTS: 83 languages, bracketed natural-language emotion and tone control, 1M+ Voice Library voices and voice cloning. 61% listening-test win rate over S2 Pro with ~70 ms time-to-first-audio upstream. Billed per UTF-8 byte. - **Provider**: Fish Audio - **Model ID**: fishaudio/s2.1-pro - **Category**: Audio & TTS - **Credits**: 105 per 1,000 Korean characters (0.034875 credits per UTF-8 byte; ~35 credits per 1,000 English characters) - **Speed**: Fast - **Quality**: Ultra ## Features - 83 languages from a single model (Korean, English, Japanese, Chinese, …) - Natural-language emotion and tone tags in brackets: [happy], [whispering], [laughing], [break] - 1M+ Voice Library voices via reference_id, plus cloned voices - 61% listening-test win rate over S2 Pro, ~70 ms time-to-first-audio upstream - mp3 / wav / opus output, speed and volume prosody control - Byte-proportional billing with no per-request minimum ## Use Cases - Korean narration for shorts, ads and explainer videos - Multilingual product voice-overs from one model - Audiobooks and long-form storytelling with emotion tags - Announcements and IVR prompts - Podcast intros and character voices ## API Endpoint Base URL: https://api.core.today/v1 Create Prediction: POST /predictions Get Status: GET /predictions/{job_id} ## Authentication Header: X-API-Key: YOUR_API_KEY ## Input Parameters ### Required - **text**: string - Text to synthesize (UTF-8). Billed by UTF-8 bytes — one Korean character is 3 bytes. Emotion, tone and effect cues go in brackets before the text they steer, e.g. [happy] Welcome!, [whispering] …, [laughing], [break]. ### Optional - **reference_id**: string (default: 2f06c7a428e9431fadd60af4dfe91763) - Voice ID (32-hex id from the Fish Audio Voice Library). 37 curated voices (15 Fish Official Korean, 18 Korean community, 4 robot/character) can be previewed and copied from the Voice Gallery on this model's Core.Today Docs page (docs/models/fishaudio/…); any other public or cloned voice id works too — you are responsible for the rights to the voice you pass. - **format**: string (default: mp3) - Output audio format. Options: mp3, wav, opus - **mp3_bitrate**: integer (default: 128) - MP3 bitrate in kbps (mp3 only). Options: 64, 128, 192 - **speed**: number (default: 1.0) - Speaking rate multiplier, 0.5–2.0 (1.0 = default). - **volume**: number (default: 0) - Volume adjustment in dB, -20 to 20 (0 = default). - **latency**: string (default: balanced) - balanced favors low latency (default); normal favors stability — a good choice for batch generation. Options: balanced, normal - **normalize**: boolean (default: true) - Expand numbers, dates and units into spoken form. - **temperature**: number (default: 0.7) - Sampling temperature, 0.1–1.0. Lower is more consistent, higher more expressive. - **top_p**: number (default: 0.7) - Nucleus sampling probability mass, 0.1–1.0. - **chunk_length**: integer (default: 200) - Internal chunk length, 100–300. Affects phrasing of long passages. ## Examples ### Core.Today intro (calm narration voice) The line every gallery voice reads, rendered with the default voice. ```json { "model": "fishaudio/s2.1-pro", "input": { "text": "안녕하세요, 코어닷투데이입니다. 하나의 API 키로 이미지, 영상, 음성 생성 모델을 모두 연결해 보세요.", "reference_id": "2f06c7a428e9431fadd60af4dfe91763", "format": "mp3" } } ``` ### Emotion tags Bracketed natural-language cues steer tone sentence by sentence. ```json { "model": "fishaudio/s2.1-pro", "input": { "text": "[excited] 드디어 새 모델이 나왔어요! [whispering] 그런데 가격은 그대로예요. [laughing]", "reference_id": "4e118bfbb83e401c84699c09b5f08257" } } ``` ## Response Format ```json { "job_id": "abc123", "status": "pending | processing | completed | failed", "result": "URL or data (when completed)" } ``` ## Usage Flow 1. POST /predictions with model and input -> receive job_id 2. GET /predictions/{job_id} -> poll until status is completed or failed 3. Result contains output URL(s) ## Tips - The 15 Fish Official Korean voices (지우, 민준, …) are designed by Fish rather than cloned from a person, which makes their rights position the simplest — a good baseline to compare against - The 4 robot voices are registered as English but were measured on Korean: our gateway synthesized a Korean line and our own ASR transcribed it back at 0.85–0.97 similarity. Voices that failed that test are not in the gallery - Voices cloned from named characters or identifiable voice actors are deliberately absent. You can still pass any reference_id to the API — the rights to that voice are yours to clear - Put emotion cues at the start of a sentence ([happy] …); tone and effect tags like [whispering] or [laughing] can go anywhere - Korean is 3 UTF-8 bytes per character — 1,000 Korean characters cost about 105 credits, 1,000 English characters about 35 - Copy a reference_id from the Voice Gallery at the bottom of this docs page; every sample reads the same Core.Today line so you can compare timbre - Use latency=normal for batch jobs where stability matters more than time-to-first-audio - Keep normalize=true for numbers and dates; turn it off only when you spell things out yourself ## Documentation https://docs.fish.audio/features/text-to-speech