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

语音转文字

使用 transcribe-1 或 transcribe-1-pro 转写音频,可选时间戳与情绪标记。

使用 transcribe-1 或 transcribe-1-pro 将音频转写为文本,可选返回时间戳分段与情绪标记。

该接口为 BETA:仅接受 multipart/form-data(文件上传)或 application/msgpack,不支持 JSON + Base64 音频。

Base URL

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

Authentication

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

Endpoints

POST /fishaudio/v1/asr

创建语音转写请求

上传音频文件,返回转写文本。可通过 model Header 选择转写模型。

Headers

NameTypeRequiredDescription
AuthorizationstringYes请求身份认证。格式:Bearer sk-xxxxxx
modelstringNoASR 模型。transcribe-1(默认,省略时使用):通用转写;transcribe-1-pro:多人对话转写,文本中保留情绪与人声事件标记。multipart 与 MessagePack 均通过此 Header 指定

Request Body

Content-Type: multipart/form-data 或 application/msgpack

multipart 请求由客户端自动设置 Content-Type 与 boundary。MessagePack 请求需设置 Content-Type: application/msgpack,并将 audio 编码为原始二进制字节。

Example:

{
  "audio": "<binary>",
  "language": "zh",
  "ignore_timestamps": false
}

Properties:

NameTypeRequiredDefaultDescription
audiofileYes—multipart 为音频文件上传;MessagePack 为原始音频字节
languagestring | nullNo未设置可选语种提示,如 en、zh、ja。无论是否传入,服务端仍会自动检测
ignore_timestampsbooleanNotrue设为 false 时请求带时间戳的分段。对齐会增加处理时间;对短于 30 秒的音频延迟更明显

Responses

200: 转写成功

Content-Type: application/json

401: 无权限

Content-Type: application/json

402: 余额不足

Content-Type: application/json

503: 服务过载

Content-Type: application/json

请求示例

下方为 multipart 示例。Content-Type(含 boundary)由 HTTP 客户端自动设置;请勿手动写成不含 boundary 的 multipart/form-data,否则请求会失败。Go 示例通过 FormDataContentType() 显式设置。MessagePack 写法见下方。

curl --request POST https://api.autorouter.top/fishaudio/v1/asr \
  --header "Authorization: Bearer sk-xxxxxx" \
  --header "model: transcribe-1-pro" \
  --form audio=@conversation.wav \
  --form ignore_timestamps=false

MessagePack 请求示例

需设置 Content-Type: application/msgpack,并将 audio 编码为原始二进制字节。

import msgpack
import requests

url = "https://api.autorouter.top/fishaudio/v1/asr"

with open("conversation.wav", "rb") as f:
    payload = msgpack.packb({
        "audio": f.read(),
        "ignore_timestamps": False,
    })

headers = {
    "Authorization": "Bearer sk-xxxxxx",
    "model": "transcribe-1-pro",
    "Content-Type": "application/msgpack",
}

response = requests.post(url, headers=headers, data=payload)
print(response.text)

响应示例

{
  "text": "<|speaker:0|>你好。<|speaker:1|>[高兴]很开心认识你。<|speaker:0|>我也是。",
  "duration": 6.4,
  "segments": [],
  "language_code": "zh",
  "language": "Chinese"
}

响应字段说明:

NameTypeDescription
textstring完整转写文本。Pro 模型会内联说话人标记(如 <|speaker:0|>),并可包含情绪与人声事件标记(如 [高兴]、[laughter])
durationnumber音频时长(秒)
segmentsobject[]{ "text", "start", "end" } 数组,时间戳单位为秒。跳过时间戳、对齐失败或未检测到语音时为空数组
segments[].textstring分段文本(不含说话人/情绪/事件标记)
segments[].startnumber分段开始时间(秒)
segments[].endnumber分段结束时间(秒)
language_codestring | null检测到的 ISO 639-1 语种代码,如 en、ja。业务逻辑请用此字段
languagestring | null检测到的语种名称,如 English,仅供展示

多人对话响应格式

Pro 模型将说话人轮次写在 text 字符串内部,使用 <|speaker:N|> 标记。数字标签 N 标识其后文本的说话人,直到下一个标记。同一标签再次出现表示该说话人再次发言。标签仅在单次录音内有效,不是跨请求的人名或身份。

上方 200 响应示例中,ignore_timestamps=true 时跳过时间戳:说话人 0 说「你好。」,说话人 1 说「[高兴]很开心认识你。」,说话人 0 说「我也是。」。[高兴] 描述说话人 1 的表达方式。

当 ignore_timestamps=false(如上方 curl 示例)时,text 中仍保留相同标记;segments 包含带时间的语音分段,对齐结果不含说话人、情绪与事件标记。segments 不是说话人轮次,也没有 speaker_id 字段。

接口不单独返回说话人列表或情绪字段。需要说话人轮次或情绪信息时,请解析 text 中的内联标记。

错误处理

HTTP 401 / 403 鉴权错误

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

HTTP 402 余额不足

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

HTTP 503 服务过载

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

目录