API 文档AI 模型接口语音Fish Audio

语音合成

将文本合成为语音。同步接口,提交后直接返回二进制音频流。

将文本合成为语音。支持音色模型 ID、零样本克隆、多说话人对话,以及语速、音量与输出格式控制。

同步接口:提交后直接返回音频二进制流,无需轮询任务。仅接受 application/json 与 application/msgpack。建议先上传参考音色再调用本接口,可提升音质并降低延迟。内联参考音频(references)必须使用 MessagePack,JSON 无法携带二进制。

Base URL

  • https://api.autorouter.top — Production

Authentication

BearerAuth: http (bearer) 使用 Bearer Token 认证。 格式: Authorization: Bearer sk-xxxxxx

Endpoints

POST /fishaudio/v1/tts

创建语音合成请求

传入文本与音色,响应返回音频流。多说话人对话仅 S2 系列(s2-pro、s2.1-pro、s2.1-pro-free)与 drama-3-preview 支持,不支持 s1。

Headers

NameTypeRequiredDescription
AuthorizationstringYes请求身份认证。格式:Bearer sk-xxxxxx
Content-TypestringYesapplication/json 或 application/msgpack。内联 references 必须使用 MessagePack
modelstringNoTTS 模型。可选值:s1、s2-pro、s2.1-pro(默认)、s2.1-pro-free、drama-3-preview。drama-3-preview 为预览模型,行为与可用性可能变化。省略或无法识别时回退到 s2.1-pro

Request Body

Content-Type: application/json

Example(单说话人):

{
  "text": "Hello! Welcome to Fish Audio.",
  "reference_id": "model-id",
  "temperature": 0.7,
  "top_p": 0.7,
  "prosody": {
    "speed": 1,
    "volume": 0,
    "normalize_loudness": true
  },
  "chunk_length": 300,
  "normalize": true,
  "format": "mp3",
  "sample_rate": 44100,
  "mp3_bitrate": 128,
  "latency": "normal",
  "max_new_tokens": 1024,
  "repetition_penalty": 1.2,
  "min_chunk_length": 50,
  "condition_on_previous_chunks": true,
  "early_stop_threshold": 1
}

Example(多说话人,仅 S2 系列):

{
  "text": "<|speaker:0|>Hello!<|speaker:1|>Hi there!",
  "reference_id": ["speaker-a-id", "speaker-b-id"]
}

Properties:

NameTypeRequiredDescription
textstringYes待合成文本。多说话人用 <|speaker:0|>、<|speaker:1|> 标记切换
reference_idstring | string[] | nullNo音色 ID。单说话人为字符串;多说话人为 ID 数组
referencesobject[] | object[][] | nullNo内联参考音频,用于零样本克隆。需 MessagePack,JSON 无法携带二进制
prosodyobject | nullNo语速、音量与响度归一化
formatstringNo输出格式:wav、pcm、mp3(默认)、opus
sample_rateinteger | nullNo采样率(Hz)。null 时按格式默认:多数 44100,opus 48000
mp3_bitrateintegerNoMP3 码率(kbps):64、128(默认)、192。仅 format=mp3 生效
opus_bitrateintegerNoOpus 码率(bps):-1000(默认,自动)、24000、32000、48000、64000。仅 format=opus 生效
latencystringNo延迟与质量权衡:normal(默认,最佳质量)、balanced、low
normalizebooleanNo是否规范化中英文文本(提升数字朗读稳定性)。默认 true
chunk_lengthintegerNo文本分段长度,[100, 300],默认 300
min_chunk_lengthintegerNo拆分新块前的最少字符数,[0, 100],默认 50
temperaturenumberNo表现力,[0, 1],默认 0.7。越高越多样
top_pnumberNonucleus sampling,[0, 1],默认 0.7
max_new_tokensintegerNo每个文本块最多生成的音频 token。默认 1024
repetition_penaltynumberNo重复惩罚。大于 1.0 减少重复。默认 1.2
condition_on_previous_chunksbooleanNo是否用前一段音频作为上下文以保持音色一致。默认 true
early_stop_thresholdnumberNo批处理提前停止阈值,[0, 1],默认 1
featuresstring[]No请求级功能开关,原样转发给推理后端。如 ["quality-guard"] 开启质量守卫
pronunciation_dictionaryobject[] | nullNo最多 3 个发音词典(平台引用或内联,二者互斥)

reference_idstring | string[] | null(可选)

音色模型 ID,来自 Fish Audio 音色库或你的自定义模型。

  • 单说话人: 传入字符串,例如 "model-id"。也可不传,改用 references 做零样本克隆。
  • 多说话人(对话): 传入 ID 数组,例如 ["speaker-a-id", "speaker-b-id"]。文本中用 <|speaker:0|>、<|speaker:1|> 标记说话人切换。说话人下标与数组下标对应。

多说话人仅 S2 系列与 drama-3-preview 支持,不支持 s1。

referencesobject[] | object[][] | null(可选)

内联参考音频,用于零样本克隆。必须使用 MessagePack,不能用 JSON。

  • 单说话人: ReferenceAudio 对象数组。
  • 多说话人: 二维数组,每个内层数组对应一位说话人的参考样本。说话人下标与 reference_id 数组下标对应。

audiostring (binary)(必选)

参考音频的原始字节。支持 WAV、MP3、FLAC。建议使用 10~30 秒清晰、背景噪音少的语音。

textstring(必选)

参考音频中的精确转写文本。准确度会直接影响克隆质量。

prosodyobject(可选)

语速、音量与响度调整。

speednumber(可选)

语速倍率,[0.5, 2.0]。1.0(默认)为正常语速,0.5 为半速,2.0 为倍速。

volumenumber(可选)

音量调整(dB)。0(默认)不变,正值更响,负值更轻。

normalize_loudnessboolean(可选)

是否归一化响度,使感知音量更一致。默认 true。仅 S2 系列(s2-pro、s2.1-pro、s2.1-pro-free)生效;s1 接受该字段但无效果。

formatstring(可选)

输出音频格式,默认 mp3。各格式限制如下:

格式采样率默认采样率其他
WAV / PCM8 kHz、16 kHz、24 kHz、32 kHz、44.1 kHz44.1 kHz16-bit、单声道
MP332 kHz、44.1 kHz44.1 kHz单声道;码率 64 / 128(默认)/ 192 kbps
Opus48 kHz48 kHz单声道;码率 -1000(自动)、24 / 32(默认)/ 48 / 64 kbps

pronunciation_dictionaryobject[] | null(可选)

合成时应用的发音词典,最多 3 个。平台引用与内联字面量两种形式互斥,同一请求只能选一种。服务端解析并合并后转发给推理引擎做替换。

匹配规则为纯子串、最左最长;默认不区分大小写,条目可设置 case_sensitive。无法解析的引用会被静默丢弃,请求仍会成功。

idstring(引用必选)

平台已注册的词典 ID。与 version 成对使用。模式:^[A-Za-z0-9_-]{1,128}$。

versionstring(引用必选)

词典的不可变版本号。必须显式指定,没有隐式 latest。模式:^[A-Za-z0-9_-]{1,128}$。

itemsobject[](内联必选)

内联词典的替换条目,最多 5000 条。每条包含:

  • key(string,必选):要匹配的源字符串,纯子串匹配,无分词、无正则。长度 [1, 256]。
  • value(string,必选):替换用的音素形式。不要自行包含 <|phoneme_start|> / <|phoneme_end|>,引擎会内部包裹。长度 [1, 1024]。key 或 value 含上述标记的请求会被拒绝。
  • case_sensitive(boolean,可选):是否区分大小写。默认 false。

Responses

200: 合成成功,返回音频流

Content-Type: 随 format 变化的音频类型(如 audio/mpeg)

401: 无权限

Content-Type: application/json

402: 余额不足

Content-Type: application/json

503: 服务过载

Content-Type: application/json

请求示例

curl -X POST "https://api.autorouter.top/fishaudio/v1/tts" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-xxxxxx" \
  -H "model: s2.1-pro" \
  --output speech.mp3 \
  -d '{
  "text": "Hello! Welcome to Fish Audio.",
  "reference_id": "model-id",
  "format": "mp3",
  "sample_rate": 44100,
  "mp3_bitrate": 128,
  "latency": "normal"
}'

响应示例

<binary audio stream>

响应字段说明:

NameTypeDescription
(body)binary成功时为音频二进制流,编码与请求的 format 一致。响应使用 Transfer-Encoding: chunked
statusinteger错误状态码(失败时)
messagestring错误说明(失败时)
reasonstring | null补充原因,可为 null

错误处理

HTTP 401 / 403 鉴权错误

  • 401 Unauthorized:API Key 无效或已过期
  • 403 Forbidden:API Key 无权访问此模型(检查 token 的模型白名单)

HTTP 402 余额不足

返回 insufficient user quota。请前往 AutoRouter 控制台充值。

HTTP 503 服务过载

服务端负载过高,无法处理请求。请稍后重试。

目录