开发者文档RESTOpenAPI 3.0Agent 技能包

Fish Audio 中文版 API 接入文档

Fish Audio 中文版 API 的用法很简单:提交一段文本,拿回一个音频地址。上传 3–60 秒参考音频即可建立音色(3–10 秒清晰干声效果最好),支持普通话、英语、14 种中文方言、7 种民族语言和 100 多个语种。接口有 REST 和机读的 OpenAPI 3.0 两种形态,扣子、Dify、n8n、WorkBuddy、OpenClaw、ComfyUI、Claude Code、Codex 都能直接接。

文档版本 1.0 · 发布 2026-10-23 · 更新 2026-10-23 · 本站开发者团队

是什么
本站的语音开放接口,12 个 REST 接口,管声音克隆、语音合成、8 维情绪控制、声音设计和降噪
适合做什么
把「一段文字变成某个人的声音」这件事自动化:短剧多角色、方言口播、有声书长文
谁能用
旗舰会员。密钥放在请求头 sign 里;API 不另收费,和套餐共用字符额度
怎么接
工作流平台导入 openapi.json;Agent 客户端导入官方技能包;ComfyUI 装官方节点
100+语种
12个接口
8 维情绪向量
10,000字符每次
获取 API Key查看 openapi.json

本页为 Fish Audio 中文版(fishaudio.hk)自有接口文档;如需 Fish Audio 官方 API,请前往 fish.audio。

从哪条路接 Fish Audio 中文版 API

三条路按你的习惯选,每一条十分钟内都能跑出第一段音频。

Fish Audio 中文版 API 怎么开通、密钥在哪

API 向旗舰会员开放,密钥就是请求头里的 sign。网页端能用的功能,API 都能调;API 本身不加收费用,用的是套餐里的字符额度。这份文档不用登录就能完整阅读。

网页端注册赠送的 150,000 字符和不限次数的声音克隆只在网页端使用,不包含 API 调用。密钥如果泄露,添加企业微信联系我们重置。

三步跑通 Fish Audio 中文版 API

顺序是固定的:先拿到音色 ID,再提交合成任务,最后轮询取结果。

  1. 拿音色 ID:调 GET /api/third/reference/list,从 list[].audioId 里取一个;没有现成音色就先用 /reference/upload 上传一段 3–60 秒的干声。
  2. 提交合成任务:调 POST /api/third/tts/create,audioId 填上一步的值,返回 taskId。
  3. 轮询取结果:每 2 秒调一次 GET /api/third/tts/result?taskId=,status 变成 2 时取 voiceUrl。等待期间别重复提交任务。
# 1) 拉音色列表,取 audioId
curl "https://openapi.aivoiceapi.cn/api/third/reference/list?page=1&pageSize=10" \
  -H "sign: $VOICE_API_KEY"

# 2) 提交合成任务,拿 taskId
curl -X POST https://openapi.aivoiceapi.cn/api/third/tts/create \
  -H "sign: $VOICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "content": "欢迎来到 Fish Audio 中文版",
        "audioId": "<audioId>",
        "style": "2",
        "speed": 1.0,
        "targetSpeech": "mandarin"
      }'

# 3) 轮询,status=2 时读 voiceUrl
curl "https://openapi.aivoiceapi.cn/api/third/tts/result?taskId=<taskId>" \
  -H "sign: $VOICE_API_KEY"
import os, time, requests

BASE = "https://openapi.aivoiceapi.cn"
H = {"sign": os.environ["VOICE_API_KEY"]}

# 1) 拉音色
r = requests.get(f"{BASE}/api/third/reference/list",
                 headers=H, params={"page": 1, "pageSize": 10}).json()
assert r["code"] == 0, r["msg"]  # 先看 code,再看数据
audio_id = r["data"]["list"][0]["audioId"]

# 2) 提交任务
r = requests.post(f"{BASE}/api/third/tts/create", headers=H, json={
    "content": "欢迎来到 Fish Audio 中文版",
    "audioId": audio_id,
    "style": "2",
    "speed": 1.0,
    "targetSpeech": "mandarin",
}).json()
assert r["code"] == 0, r["msg"]
task_id = r["data"]["taskId"]

# 3) 每 2 秒查一次,不要重复提交
while True:
    time.sleep(2)
    r = requests.get(f"{BASE}/api/third/tts/result",
                     headers=H, params={"taskId": task_id}).json()
    assert r["code"] == 0, r["msg"]
    data = r["data"]
    if data["status"] == 2:
        print(data["voiceUrl"]); break
    if data["status"] == 3:
        raise RuntimeError("合成失败")
const BASE = "https://openapi.aivoiceapi.cn";
const KEY = process.env.VOICE_API_KEY;
const H = { sign: KEY, "Content-Type": "application/json" };
const sleep = ms => new Promise(r => setTimeout(r, ms));

// 1) 拉音色
const listRes = await fetch(
  `${BASE}/api/third/reference/list?page=1&pageSize=10`,
  { headers: { sign: KEY } }
).then(r => r.json());
if (listRes.code !== 0) throw new Error(listRes.msg); // 先看 code
const audioId = listRes.data.list[0].audioId;

// 2) 提交任务
const createRes = await fetch(`${BASE}/api/third/tts/create`, {
  method: "POST",
  headers: H,
  body: JSON.stringify({
    content: "欢迎来到 Fish Audio 中文版",
    audioId,
    style: "2",
    speed: 1.0,
    targetSpeech: "mandarin",
  }),
}).then(r => r.json());
if (createRes.code !== 0) throw new Error(createRes.msg);
const taskId = createRes.data.taskId;

// 3) 每 2 秒查一次,不要重复提交
while (true) {
  await sleep(2000);
  const res = await fetch(
    `${BASE}/api/third/tts/result?taskId=${taskId}`,
    { headers: { sign: KEY } }
  ).then(r => r.json());
  if (res.code !== 0) throw new Error(res.msg);
  if (res.data.status === 2) { console.log(res.data.voiceUrl); break; }
  if (res.data.status === 3) throw new Error("合成失败");
}

跑通的标志是第 2 步拿到 data.taskId,第 3 步在 status=2 时拿到 data.voiceUrl。

Fish Audio 中文版 API 怎么鉴权、返回什么

Base URL 与鉴权

https://openapi.aivoiceapi.cn

每个请求带请求头 sign: <你的密钥>。也可以放在 query 里(?sign=),但优先用请求头。密钥错误或旗舰会员到期时,会返回「sign无效」或「会员已过期」。

统一响应

{
  "code": 0,
  "msg": "操作成功",
  "data": { }
}
  • code=0 表示成功,7 是通用失败,1001 是字数超限。
  • 失败时 HTTP 状态码仍可能是 200,所以一律先判断 code。
  • 失败时 msg 是中文原因,可以直接展示给用户。
核心板块 · 接口清单

Fish Audio 中文版 API 接口清单

一共 12 个接口,分四组:声音模型 3 个、语音合成 4 个、降噪 2 个、声音设计 3 个。路径都以 /api/third 开头,除 openapi.json 外都要带 sign 头。机读规范地址:https://openapi.aivoiceapi.cn/api/third/openapi.json,可以直接导入扣子、Dify、n8n。

声音模型3 个接口

POST/api/third/reference/upload创建声音模型

传一段音频建立音色,拿到的 audioId 可以马上用来合成。

表单(multipart/form-data)类型必填默认说明
filebinary是—mp3 / wav / m4a,≤50MB,2–60 秒,建议 3–10 秒干声
namestring是—音色名称
describestring否—音色描述
curl -X POST https://openapi.aivoiceapi.cn/api/third/reference/upload \
  -H "sign: $VOICE_API_KEY" \
  -F "file=@/path/voice.wav" \
  -F "name=主播A" \
  -F "describe=温和女声"
{
  "code": 0, "msg": "操作成功",
  "data": { "audioId": "role_xxx", "name": "主播A", "describe": "温和女声" }
}
GET/api/third/reference/list获取声音模型列表

列出账号里所有可用音色,网页端建的和接口上传的都在里面。page 默认 1,pageSize 默认 10、最大 30。

Query 参数类型必填默认说明
pageint否1页码
pageSizeint否10每页条数,最大 30
GET /api/third/reference/list?page=1&pageSize=10
sign: YOUR_API_KEY
{
  "code": 0, "msg": "操作成功",
  "data": {
    "list": [
      { "audioId": "role_xxx", "name": "主播A", "describe": "温和女声" }
    ],
    "total": 8, "page": 1, "pageSize": 10
  }
}
DELETE/api/third/reference/delete删除声音模型

按 audioId 删除音色,删除后不能再用于合成。

Query 参数类型必填默认说明
audioIdstring是—模型 ID
curl -X DELETE "https://openapi.aivoiceapi.cn/api/third/reference/delete?audioId=role_xxx" \
  -H "sign: $VOICE_API_KEY"
{ "code": 0, "msg": "操作成功", "data": {} }

语音合成4 个接口

POST/api/third/file/uploadCustom上传情绪参考音频

上传一段情绪参考音频,拿到的文件名用在合成接口的 emotionPath 上(genre=2 时)。这是临时文件,会被定时清理,过期要重新上传。

表单(multipart/form-data)类型必填默认说明
filebinary是—mp3 / wav / m4a,≤50MB,时长 2–60 秒
curl -X POST https://openapi.aivoiceapi.cn/api/third/file/uploadCustom \
  -H "sign: $VOICE_API_KEY" \
  -F "file=@/path/emotion.wav"
{
  "code": 0, "msg": "操作成功",
  "data": { "emotionPath": "20260817_xxxxxx.wav" }
}

参数详解:情绪控制三种方式 →

POST/api/third/tts/create提交合成任务(异步)

提交后立刻返回 taskId,结果用 /tts/result 查。最多 30 个任务同时排队;生成的音频和记录只保留 1 天,记得及时下载。content 里可以插停顿标记:#0.3# #0.5# #1.0# #1.5# #2.0# #3.0#。

请求体(JSON)类型必填默认说明
contentstring是—要合成的文本,上限 10000 字符,超出返回 code=1001
audioIdstring是—音色 ID,来自 /reference/list 或 /reference/upload
stylestring是—必须是字符串。"1"=V2.0,"2"=V2.5(只有它支持情绪),"3"=方言 / 多语言。所选 style 不支持传入的 targetSpeech 时,服务端会改写为 "3"
speednumber否1.00.5–2.0,一位小数;方言 / 多语言链路上限 1.5,服务端会自动压缩
targetSpeechenum否自动判定目标语言或方言,57 个取值,建议总是显式传;枚举外的语言改用 style="3" 且不传本字段
genreint否0情绪控制方式,只在 style="2" 时生效:0=跟随参考音频,1=情绪向量(配 ext),2=情绪参考音频(配 emotionPath)
extobjectgenre=1—8 维情绪向量 happy / angry / sad / afraid / disgusted / melancholic / surprised / calm,每维 0–1,可同时给多个;传未知字段会报错
emotionPathstringgenre=2—来自 /file/uploadCustom 的文件名
{
  "content": "欢迎来到 Fish Audio 中文版。",
  "audioId": "role_xxx",
  "style":   "2",
  "speed":   1.0,
  "targetSpeech": "mandarin"
}
{
  "code": 0,
  "msg": "操作成功",
  "data": { "taskId": "task_xxx", "status": 1 }
}

参数详解:style / genre / ext 参数详解 →参数详解:targetSpeech 全量取值 →

GET/api/third/tts/list查询合成历史

分页列出历史合成任务,pageSize 最大 30。

Query 参数类型必填默认说明
pageint否1页码
pageSizeint否10每页条数,最大 30
GET /api/third/tts/list?page=1&pageSize=10
sign: YOUR_API_KEY
{
  "code": 0, "msg": "操作成功",
  "data": {
    "list": [
      { "taskId": "task_xxx", "status": 2, "voiceUrl": "https://.../xxx.mp3" }
    ],
    "total": 42, "page": 1, "pageSize": 10
  }
}
GET/api/third/tts/result按 taskId 查结果

用提交时拿到的 taskId 查,建议 2 秒一次;下载音频时同样要带 sign(请求头或 URL 参数都行)。

Query 参数类型必填默认说明
taskIdstring是—任务 ID
GET /api/third/tts/result?taskId=task_xxx
sign: YOUR_API_KEY
{
  "code": 0,
  "msg": "操作成功",
  "data": {
    "taskId":   "task_xxx",
    "status":   2,                       // 1=处理中 2=已完成 3=失败
    "voiceUrl": "https://.../xxx.mp3"    // status=2 时才有
  }
}

参数详解:轮询节奏与任务上限 →

语音降噪2 个接口

POST/api/third/denoise/upload提交降噪

上传一段 3–60 秒的音频去噪,返回 taskId。每个账号同时最多 5 个降噪任务进行中,降噪不单独计费。

表单(multipart/form-data)类型必填默认说明
filebinary是—音频文件,3–60 秒
curl -X POST https://openapi.aivoiceapi.cn/api/third/denoise/upload \
  -H "sign: $VOICE_API_KEY" \
  -F "file=@/path/noisy.wav"
{
  "code": 0, "msg": "操作成功",
  "data": { "taskId": "dn_xxx" }
}
GET/api/third/denoise/poll查询降噪结果

这里的 status 是字符串(processing / completed / failed),和合成接口的数字状态不一样;完成后取 filePath,失败时看 message。

Query 参数类型必填默认说明
taskIdstring是—降噪任务 ID
GET /api/third/denoise/poll?taskId=dn_xxx
sign: YOUR_API_KEY
{
  "code": 0, "msg": "操作成功",
  "data": {
    "status":   "completed",   // processing | completed | failed
    "filePath": "https://.../clean.wav",
    "message":  ""             // status=failed 时是失败原因
  }
}

声音设计3 个接口

POST/api/third/dubbing/create提交声音设计(异步)

不需要参考音频,用一句文字描述或一组方言参数直接生成音色并合成,返回 dubbId。同时最多 5 个任务进行中,结果保留 1 天。

请求体(JSON)类型必填默认说明
contentstring是—要合成的文本,上限 1000 字节,一个汉字 3 字节
engineint否1设计方式:1=描述设计,2=方言设计
descriptionstringengine=1—用一句话描述音色,例如「温和的女声,语速适中,像电台主播」。engine=2 时如果填了,会整体按描述生成,其他参数忽略
languageenum否—语言 / 方言,见下方取值表。仅 engine=2 生效
genderenum否—male / female。仅 engine=2 生效
ageenum否—child / teen / youth / middle_aged / elderly。仅 engine=2 生效
pitchenum否—very_low / low / medium / high / very_high。仅 engine=2 生效
voiceStyleenum否自然留空=自然,whisper=耳语。仅 engine=2 生效
accentenum否—英文口音,只在 language="english" 时可用,取值见参数规则「声音设计」小节
{
  "content": "欢迎来到 Fish Audio 中文版",
  "engine":  1,
  "description": "温和的女声,语速适中,像电台主播"
}
{
  "content":  "今天天气不错,出去走走吧",
  "engine":   2,
  "language": "sichuan",
  "gender":   "female",
  "age":      "youth",
  "pitch":    "medium",
  "voiceStyle": "",
  "accent":   ""
}
{
  "code": 0, "msg": "操作成功",
  "data": { "dubbId": "dubb_xxx" }
}

参数详解:声音设计参数取值表 →

GET/api/third/dubbing/result查询声音设计结果

用 dubbId 查,完成后取 voiceUrl。

Query 参数类型必填默认说明
dubbIdstring是—声音设计任务 ID
GET /api/third/dubbing/result?dubbId=dubb_xxx
sign: YOUR_API_KEY
{
  "code": 0, "msg": "操作成功",
  "data": {
    "dubbId":   "dubb_xxx",
    "status":   2,                       // 1=处理中 2=已完成 3=失败
    "voiceUrl": "https://.../xxx.mp3"    // status=2 时才有
  }
}
GET/api/third/dubbing/list声音设计任务列表

分页列出任务;接口不返回当时的设计参数和文案,需要展示的话请自己保存。

Query 参数类型必填默认说明
pageint否1页码
pageSizeint否10每页条数,最大 30
GET /api/third/dubbing/list?page=1&pageSize=10
sign: YOUR_API_KEY
{
  "code": 0, "msg": "操作成功",
  "data": {
    "list": [
      { "dubbId": "dubb_xxx", "status": 2, "voiceUrl": "https://.../xxx.mp3" }
    ],
    "total": 3, "page": 1, "pageSize": 10
  }
}
核心板块 · 参数规则

Fish Audio 中文版 API 参数怎么填

分「语音合成」和「声音设计」两块。接口卡片里的「参数详解」链接会跳到这里对应的小节。

语音合成(/tts/create)

style 必须传字符串

"style": "2" 正确,"style": 2 会返回类型错误。

  • "1" V2.0 基础合成:不支持情绪,genre 只能是 0。
  • "2" V2.5:唯一支持情绪控制的档位。
  • "3" 方言 / 多语言:不支持;传了 genre / ext 不会报错,但不生效。

传入的 targetSpeech 不被所选 style 支持时,服务端会把 style 改成 "3",响应里会返回改写后的值。

情绪控制有三种方式(只在 style="2" 时)

  • genre=0:跟着参考音频的情绪走,默认值,不用传别的。
  • genre=1:用 ext 传 8 维情绪向量(happy / angry / sad / afraid / disgusted / melancholic / surprised / calm),每维 0–1,可以多维一起给;出现未知字段会直接报错。
  • genre=2:先调 /file/uploadCustom 拿到文件名,再填进 emotionPath。

网页端的情绪控制是专业会员权益;用旗舰会员的 API Key 调接口时默认可用,不用另外开通。

targetSpeech(目标语言 / 方言)

可以不传,但强烈建议显式传。不传时服务端按文本自动判断,短句或中英混排容易判错。

  • mandarin、english:style 1 / 2 / 3 都能用,支持情绪。
  • ja、es、ar:style="2" 时支持情绪;传 style="1" 会被改成 "3"。
  • 其余 14 种中文方言、5 种民族语言和 33 种外语:style 传 "3",不支持情绪。
  • 枚举里没有的语言会直接报「暂不支持该语言」,任务不会创建。这时改用 style="3" 并且不传 targetSpeech,交给多语言模型按文本处理。

枚举收录 57 个,服务端实际支持 100 多个语种,枚举里没有不代表不能用,可以试传。

speed 与轮询

  • speed 入参上限 2.0;方言 / 多语言链路的模型上限是 1.5,服务端下发前会自动压缩,入参不用改。
  • 提交后建议每 2 秒查一次 /tts/result,直到 status 变成 2 或 3。
  • status=1 时继续等,不要重复提交任务;最多 30 个任务同时排队。

targetSpeech 全部取值(57 个)

支持情绪控制5

style="2" 时可以配 genre / ext;mandarin、english 三个 style 都能用

  • mandarin普通话
  • english英语
  • ja日语
  • es西班牙语
  • ar阿拉伯语

中文方言14

这一组固定走 style="3",不支持情绪控制

  • sichuan四川话
  • northeast东北话
  • henan河南话
  • shaanxi陕西话
  • guizhou贵州话
  • yunnan云南话
  • guilin桂林话
  • jinan济南话
  • shijiazhuang石家庄话
  • gansu甘肃话
  • ningxia宁夏话
  • qingdao青岛话
  • yue粤语
  • nan闽南语

民族语言5

固定走 style="3",不支持情绪控制

  • ug维吾尔语
  • bo藏语
  • mn蒙古语
  • kk哈萨克语
  • ky柯尔克孜语

其他语言33

固定走 style="3",不支持情绪控制

  • ko韩语
  • fr法语
  • de德语
  • ru俄语
  • pt葡萄牙语
  • it意大利语
  • th泰语
  • vi越南语
  • id印尼语
  • ms马来语
  • hi印地语
  • fa波斯语
  • tr土耳其语
  • ur乌尔都语
  • bn孟加拉语
  • ta泰米尔语
  • nl荷兰语
  • pl波兰语
  • sv瑞典语
  • no挪威语
  • da丹麦语
  • fi芬兰语
  • el希腊语
  • cs捷克语
  • hu匈牙利语
  • uk乌克兰语
  • he希伯来语
  • fil菲律宾语
  • my缅甸语
  • km高棉语
  • lo老挝语
  • ne尼泊尔语
  • sw斯瓦希里语

声音设计(/dubbing/create)

engine=1 描述设计

只需要 content 和 description,用一句话描述音色,例如「温和的女声,语速适中,像电台主播」。

engine=2 方言设计

用下表的英文取值组合出音色,支持 12 种中文方言和 10 种英文口音。如果同时传了 description,会整体按描述生成,下表参数全部忽略。

文案怎么写:中文方言用普通话文案即可;粤语、维吾尔语、英文要用对应语言写;闽南语只支持台罗拼音(Tâi-lô),不支持汉字。

参数可选值
language(中文方言)sichuan 四川 / northeast 东北 / henan 河南 / shaanxi 陕西 / guizhou 贵州 / yunnan 云南 / guilin 桂林 / jinan 济南 / shijiazhuang 石家庄 / gansu 甘肃 / ningxia 宁夏 / qingdao 青岛
language(其他)chinese 普通话 / cantonese 粤语 / minnan 闽南语 / uyghur 维吾尔语 / english 英文;表外语言直接传英文语言名(如 Thai)
accent(英文口音)american / british / australian / canadian / indian / chinese / korean / japanese / portuguese / russian;只在 language="english" 时可用
gendermale 男声 / female 女声
agechild 儿童 / teen 少年 / youth 青年 / middle_aged 中年 / elderly 老年
pitchvery_low 极低 / low 低 / medium 中 / high 高 / very_high 极高
voiceStyle留空 = 自然(默认)/ whisper 耳语

Fish Audio 中文版网页功能在 API 里怎么对应

API 参数网页端对应说明
style="1"V2.0 极速引擎中英文,长文本稳定
style="2"V2.5 高保真引擎唯一支持情绪;中英日西阿
style="3"方言与多语言不支持情绪
genre 0 / 1 / 2情绪三种控制方式只在 style="2" 时
speed语速滑杆 0.5–2.0x方言链路上限 1.5
targetSpeech「选择配音语言」弹窗网页端开放 14 种方言 + 7 种民族语言 + 35 种外语;API 枚举 57 个,实际支持 100+
/reference/upload创建声音模型API 允许 3–60 秒,建议 3–10 秒干声
/denoise/*AI 降噪网页端免费不计额度;API 也不单独计费
/dubbing/create engine=1声音设计 · 描述设计用 description 描述音色
/dubbing/create engine=2声音设计 · 方言设计12 种中文方言 + 10 种英文口音
核心板块 · 智能体接入

Fish Audio 中文版 API 接入扣子、Dify、Claude Code

六个平台底下调的是同一组 /api/third/* 接口,扣的也是同一份额度。点你在用的平台,每个标签里的内容都能整段复制。

扣子 2.0 以后有两种接法:Skill 直接上传技能包 zip,插件走 OpenAPI 导入。要在工作流节点里调用,就选插件。

1方式 A:上传技能包 zip(Skill)

把技能包目录打成 .zip,在扣子的 Skill 管理里上传;它兼容 SKILL.md 加脚本的目录结构。导入后点「部署」,在对话里 @ 这个技能就能用。

# 下载并打包
git clone https://github.com/OpenApiTTS/autoclaw-skill-tts
cd autoclaw-skill-tts && zip -r ../fishaudio-cn-skill.zip .

# 或直接下载现成 zip:
https://github.com/OpenApiTTS/autoclaw-skill-tts/archive/refs/heads/main.zip
2方式 B:创建插件并导入接口

扣子 → 插件 → 创建插件 → 导入 → 粘贴 openapi.json 地址:

https://openapi.aivoiceapi.cn/api/third/openapi.json
3插件鉴权

授权方式选 Service,Location 选 Header,Parameter name 填 sign,Service token 填 API Key。

Location:        Header
Parameter name:  sign
Service token:   YOUR_API_KEY
4发布并在智能体里添加

每个工具调试通过后点「发布」,再到智能体里添加插件。常见编排:reference/list 取音色 → tts/create 提交 → 轮询 tts/result 取 data.voiceUrl。

常见坑:插件没发布,智能体里就选不到;style 在扣子表单里要填字符串 "2";扣子的 Skill 目前只能单独使用、不能互相调用,多步串联请用插件加工作流。

WorkBuddy 自带 SKILL.md 技能机制,导入官方技能包就能用;需要精细编排时也可以走 OpenAPI 自定义工具。

1方式 A:导入官方技能包(推荐)

导入技能包,或把目录放进它的技能目录。技能包是标准的 SKILL.md + scripts/ 结构,WorkBuddy 能直接识别。

git clone https://github.com/OpenApiTTS/autoclaw-skill-tts
# 或下载 zip:https://github.com/OpenApiTTS/autoclaw-skill-tts/archive/refs/heads/main.zip
2配好密钥,直接用中文描述需求

把 API Key 写进环境变量并重启客户端,然后直接用中文说你要什么,WorkBuddy 会按 SKILL.md 的步骤取音色、合成、保存。

export VOICE_API_KEY="YOUR_API_KEY"

# 然后直接说:
把这段文案合成语音,存到桌面:欢迎来到 Fish Audio 中文版。
3方式 B:OpenAPI 自定义工具

新建自定义工具,从 OpenAPI 导入,鉴权选自定义请求头,Header 名 sign,值填 API Key。

https://openapi.aivoiceapi.cn/api/third/openapi.json
4方式 C:纯 HTTP 节点

前两种都不方便时,配一个 POST 请求节点:

POST https://openapi.aivoiceapi.cn/api/third/tts/create
Header: sign: YOUR_API_KEY
Header: Content-Type: application/json
Body:
{
  "content": "{{输入文本}}",
  "audioId": "{{音色ID}}",
  "style": "2",
  "targetSpeech": "mandarin"
}
取值:data.voiceUrl

常见坑:setx / export 设置后必须重启 WorkBuddy;自定义工具没保存或没发布时,工作流里选不到;成功与否看 body 里的 code,不看 HTTP 状态码。

两者都走 OpenAPI 自定义工具:导入规范、配好请求头鉴权、工作流里串起来。

1新建自定义工具,从 OpenAPI 导入

Dify 在「工具 → 自定义 → 导入 OpenAPI Schema」;n8n 用 HTTP Request 节点或 Custom API,推荐直接导入规范地址。

https://openapi.aivoiceapi.cn/api/third/openapi.json
2鉴权

鉴权类型选自定义 Header(不是 Bearer),名称 sign,值填 API Key。

Auth Type:  Custom Header
Header:     sign
Value:      YOUR_API_KEY
3工作流编排

reference/list → tts/create → 循环查 tts/result,输出取 data.voiceUrl。

常见坑:看 code 不看 HTTP 状态;style 传字符串 "2";n8n 的 HTTP 节点要把 Content-Type 设为 application/json。

OpenClaw 支持技能目录,放进官方技能包就能用自然语言驱动。

1下载并放好技能包

把整个目录复制到 OpenClaw 的技能目录(SKILL.md 和 scripts/tts.py 的相对位置不要动)。

git clone https://github.com/OpenApiTTS/autoclaw-skill-tts

skills/
└── skill-openapi/
    ├── SKILL.md
    ├── scripts/tts.py
    └── target-speech-enum.csv
2配置密钥

在 OpenClaw 的运行环境里设好环境变量,然后重启客户端。

export VOICE_API_KEY="YOUR_API_KEY"
3直接用中文描述需求
把这段文案合成语音,存到桌面:欢迎来到 Fish Audio 中文版。

常见坑:技能目录规范以 OpenClaw 当前文档为准;只输出命令不执行,说明没开本地命令执行权限。

最省事的是装官方节点包:克隆到 custom_nodes 后重启,画布里会多出「上传音色 / 选择已有音色 / 合成语音 / 一键合成」四个节点;长文会自动切段再拼回去,轮询也不用自己写。不方便装节点包时,也可以用 HTTP 节点或脚本节点;想让 Claude Code 之类的 Agent 同时驱动 ComfyUI 和本站接口,看最后一种方式。

1方式 0:安装官方节点(推荐)

三种装法任选,不用 pip install,只依赖 Python 标准库和 ComfyUI 自带的 torch。装好后重启 ComfyUI,在 audio/VoiceClone 分类下能搜到四个节点。密钥建议放环境变量。仓库:comfyui-voiceclone-tts

# ① git clone
cd ComfyUI/custom_nodes
git clone https://github.com/OpenApiTTS/comfyui-voiceclone-tts

# ② ComfyUI-Manager → Install via Git URL
https://github.com/OpenApiTTS/comfyui-voiceclone-tts

# ③ 下载 zip 解压到 ComfyUI/custom_nodes/comfyui-voiceclone-tts/

# 设好密钥再重启 ComfyUI
export VOICE_API_KEY="YOUR_API_KEY"
ComfyUI 画布中的声音克隆与语音合成节点
2拖入示例工作流

仓库 workflows/ 目录下有两个示例,拖进画布就能跑:basic_tts.json(一键合成 → PreviewAudio)、multi_role.json(两个角色各一句,各接 SaveAudio)。下载示例工作流 →

3方式 1:HTTP POST 节点

用任意支持 HTTP 请求的节点包配置:

URL:    https://openapi.aivoiceapi.cn/api/third/tts/create
Method: POST
Headers:
  sign: YOUR_API_KEY
  Content-Type: application/json
Body (JSON):
{
  "content": "要合成的文本",
  "audioId": "音色ID",
  "style": "2",
  "targetSpeech": "mandarin"
}
4取出音频地址

从响应里取 data.voiceUrl,接到「下载文件 / 加载音频」节点保存,再进后面的数字人或视频流程。

5长文本走异步

单个工作流里合成长文本容易超时,改用 /tts/create 拿 taskId,再用循环节点每 2 秒查一次 /tts/result,直到 status 为 2 或 3。

6方式 2:脚本节点调技能包

装了 Python 脚本执行类节点的话,把技能包放进 ComfyUI 目录后直接调:

git clone https://github.com/OpenApiTTS/autoclaw-skill-tts

python3 skill-openapi/scripts/tts.py tts \
  --text "要合成的文本" --lang mandarin -o output/out.wav
7方式 3:让 Agent 同时驱动两边

想让 Claude Code / Codex 既生成配音又跑 ComfyUI 工作流,就装两个 Skill:本站技能包负责语音,ComfyUI 的 Comfy Skills 负责驱动 ComfyUI。

# 语音能力
git clone https://github.com/OpenApiTTS/autoclaw-skill-tts ~/.claude/skills/fishaudio-cn-tts

# ComfyUI 能力(插件市场)
/plugin marketplace add Comfy-Org/comfy-skills

常见坑:节点搜不到,先看目录是不是 custom_nodes/comfyui-voiceclone-tts/ 这一层,再看有没有重启;环境变量要在启动 ComfyUI 之前设好;导出 workflow.json 会把输入框里的 API Key 一起带出去,所以密钥请放环境变量。

Codex 和 Claude Code 都能在本机跑命令,装官方技能包是最快的接法;想统一管理也可以配成 MCP。

1Claude Code:放进 skills 目录

克隆到全局 ~/.claude/skills/fishaudio-cn-tts(或项目内 .claude/skills/),再设置 VOICE_API_KEY。

git clone https://github.com/OpenApiTTS/autoclaw-skill-tts ~/.claude/skills/fishaudio-cn-tts
export VOICE_API_KEY="YOUR_API_KEY"
2Codex:写进 AGENTS.md

Codex 读项目根目录的 AGENTS.md。把技能包放进仓库,在 AGENTS.md 里加一段指引:

## 配音与声音克隆
需要 TTS / 声音克隆 / 降噪时,先读 `skill-openapi/SKILL.md`,
用 `python3 skill-openapi/scripts/tts.py` 执行,密钥在环境变量 VOICE_API_KEY。
3没有技能机制时

把 SKILL.md 全文贴进对话,再补一句运行环境说明:

以上是接口说明书。脚本位于 <脚本绝对路径>,API Key 已配置在环境变量 VOICE_API_KEY。
现在:把「欢迎来到 Fish Audio 中文版」合成语音,保存为 out.wav。
4(可选)配成 MCP

在 MCP 配置里指向技能包脚本:

{
  "mcpServers": {
    "fishaudio-cn": {
      "command": "python3",
      "args": ["<技能包绝对路径>/scripts/tts.py", "mcp"],
      "env": { "VOICE_API_KEY": "YOUR_API_KEY" }
    }
  }
}

常见坑:Windows 上命令是 python 不是 python3;中文长文本别用 --text 直接传,改从 stdin 读,必要时先 chcp 65001。

核心板块 · 官方 Skill

Fish Audio 中文版 API 官方技能包(Skill)

鉴权、参数推导、轮询、下载都已经封装进技能包,只依赖 Python 3 标准库,不用 pip install。WorkBuddy、扣子、OpenClaw、Claude Code、Codex 这类支持 Skill 的客户端导入后,用一句中文就能把文本变成音频文件。

获取

# 克隆仓库
git clone https://github.com/OpenApiTTS/autoclaw-skill-tts

# 或者下载 zip 再解压
curl -L -o fishaudio-cn-skill.zip https://github.com/OpenApiTTS/autoclaw-skill-tts/archive/refs/heads/main.zip

仓库:https://github.com/OpenApiTTS/autoclaw-skill-tts | 直接下载 zip:main.zip

各平台支持情况

平台推荐接入方式说明
扣子 CozeSkill / 插件Skill 上传技能包 zip;要在工作流节点里调用就用 OpenAPI 插件
WorkBuddySkill自带 SKILL.md 机制,导入就能用;也能走 OpenAPI 自定义工具
Dify / n8nOpenAPI导入 openapi.json,鉴权选自定义 Header sign
OpenClawSkill放进技能目录,设好环境变量后重启客户端
Claude CodeSkill放进 ~/.claude/skills/ 或项目 .claude/skills/,按需自动加载
CodexSkill / AGENTS.md放进仓库,在 AGENTS.md 里加一段指引
ComfyUI官方节点 / HTTP / 脚本节点推荐装官方节点包;由 Agent 驱动 ComfyUI 时两边各装一个 Skill

目录结构

skill-openapi/
├── SKILL.md               # 接口说明书,也是给 Agent 读的
├── scripts/
│   └── tts.py             # 命令行封装
└── target-speech-enum.csv # 语言 / 方言枚举

三者相对位置不能改,SKILL.md 按 scripts/tts.py 这个相对路径找脚本。

配置密钥

# macOS / Linux
export VOICE_API_KEY="<你的密钥>"
export VOICE_API_BASE="https://openapi.aivoiceapi.cn"   # 可选,默认就是这个地址

# Windows PowerShell(当前窗口)
$env:VOICE_API_KEY = "<你的密钥>"
# Windows 永久写入
setx VOICE_API_KEY "<你的密钥>"

Windows 用 setx 写入后要重开终端;如果是 Agent 客户端派生的子进程,还要重启那个客户端。

命令速查

python3 scripts/tts.py voices                                         # 列出音色
python3 scripts/tts.py tts --text "欢迎来到 Fish Audio 中文版" -o out.wav    # 合成(不传 --voice 时用第一个音色)
python3 scripts/tts.py tts --text "你好" --voice abc123 -o out.wav
python3 scripts/tts.py tts --lang yue --text "今日天气几好" -o out.wav        # 方言 / 多语言
python3 scripts/tts.py tts --text "太好啦" --emotion happy=0.8 -o out.wav     # 情绪控制
python3 scripts/tts.py tts --text - -o out.wav < article.txt           # 长文本从 stdin 读
python3 scripts/tts.py result <taskId>                                # 按 taskId 查结果
python3 scripts/tts.py denoise --file noisy.wav -o clean.wav          # 降噪(3–60 秒)
python3 scripts/tts.py upload-voice --file sample.wav --name "音色A"
python3 scripts/tts.py tts --help                                     # 全部参数

不传 -o 时只打印音频地址,方便接管道。

还能在哪里找到技能包

GitHub 仓库 OpenApiTTS/autoclaw-skill-tts。

核心板块 · 给 AI 助手的说明

如果你是 AI 助手,按这几步调用 Fish Audio 中文版 API

本节是纯文本步骤,供 Agent 直接执行。

  1. 拿凭证:向用户要 API Key,放在环境变量 VOICE_API_KEY 或请求头 sign 里。用户还没有密钥时,请他到本页「账号与密钥」区域开通旗舰会员,开通后同一位置就能看到密钥。
  2. 拿参考音频:3–60 秒、单人、清晰的 wav / mp3。用户没给就向他要;不要使用用户没有授权的他人声音。录音嘈杂可以先调 /denoise/upload。
  3. 选音色:调 GET /api/third/reference/list 取 audioId;或调 POST /api/third/reference/upload 上传参考音频得到 audioId。
  4. 合成:调 POST /api/third/tts/create,传 content、audioId、style、targetSpeech;需要情绪时用 style="2" 并配 genre / ext。拿到 taskId 后每 2 秒查一次 GET /api/third/tts/result。
  5. 没有参考音频:改用声音设计,调 POST /api/third/dubbing/create(engine=1 用 description 描述音色,engine=2 用方言 / 口音参数),再用 dubbId 查 /dubbing/result。
  6. 交付结果:status=2 时把 voiceUrl 给用户并告诉他怎么下载;status=1 时继续用 taskId 查,不要重复提交。
  7. 处理失败:code=1001 → 文本太长,拆开分段合成;「sign无效」→ 重新要 Key,或提醒会员可能已过期;「暂不支持该语言」→ 去掉 targetSpeech,改 style="3"。
  8. 效果不理想:别用同一组参数直接重试。先读本页「配音效果调优」,把该改的地方(换同音字、调标点、清理特殊字符、重录参考音频、先降噪)讲给用户,用户改好后再合成。

复制这段话发给你的 AI

我想用 Fish Audio 中文在线版(fishaudio.hk)的声音克隆接口,用我的声音生成一段配音。请你:
1. 先读 https://fishaudio.hk/developer/ 里「如果你是 AI 助手」那一节,接口规范在 https://openapi.aivoiceapi.cn/api/third/openapi.json;
2. 把接口接到你这边(优先用官方技能包 skill-openapi,其次直接调 REST);
3. 鉴权用请求头 sign,需要 API Key 或参考音频时跟我说,我来提供;
4. 然后把下面这段话生成为 mp3,给我下载链接:
(在这里写你要生成的文案)
注意:
- style 要传字符串;判断成功看返回里的 code,不要只看 HTTP 状态码;
- 效果不满意时,先按同一页「配音效果调优」里的清单告诉我该改什么(同音字、标点、特殊字符、重录参考音频、先降噪),在我没改任何输入之前,不要反复用同一组参数重试。

Fish Audio 中文版 API 生成效果不好怎么调

给 AI 助手和开发者的排查清单。结果不理想时不要直接重试,先对照下表找原因,把建议告诉用户,用户改了文本或参考音频再调接口。这些规则和网页端「配音技巧」一致。

现象提醒用户做什么接口这边怎么配合
个别字读错、多音字读错换成同音字;数字和英文缩写写成汉字只改 content,其他参数不动,重新调 /tts/create
停顿生硬、断句奇怪在停顿不对的地方加减标点,长句拆短只改 content;长文按 150–250 字分段依次合成
读出了奇怪的符号删掉表情、Markdown 标记、括号注释等不该读的字符提交前先清洗 content
音色不像本人换一段底噪更小、空白更少的参考音频,3–10 秒干声最好先 /denoise/upload 降噪,再 /reference/upload 重建音色
语气太平告诉用户可以直接指定情绪,不用靠参考音频去「演」style="2" + genre=1 传 ext,或 genre=2 传 emotionPath
语速不对先问清楚想要快还是慢speed 0.5–2.0(方言 / 多语言实际上限 1.5)
方言或外语读成了普通话确认目标语种;一段文本只写一种语言显式传 targetSpeech,方言和小语种配 style="3"

参考音频怎么录

  • 3–60 秒,建议 3–10 秒;一个人说话,清晰,没有背景音乐和混响。
  • 底噪越小、空白越少,克隆越像;录音嘈杂就先调 /api/third/denoise/upload。
  • 用平常说话的状态录,别刻意加快或表演;要强烈情绪时用 style="2" 的情绪参数。
  • 手机录音离嘴近一点,但避开喷麦;别边走边录,音量会忽大忽小。

文本怎么写

  • 读音不准:生僻字、多音字换同音字;数字、单位、英文缩写写成汉字(「2026 年」写成「二零二六年」,「3kg」写成「三公斤」)。
  • 停顿生硬:逗号是短停、句号是长停,按需要加减;太长的句子拆成两句。
  • 清理格式:表情、Markdown 标记、括号注释、连续空行都删掉。
  • 长文本:按自然段切成 150–250 字,用同一个 audioId 依次合成再拼起来。
  • 多语言:一段只写一种语言;中英混排时显式传 targetSpeech。

给 AI 助手的兜底话术

生成结果和预期不一样时,按下面的顺序排查,并把结论告诉用户:
1. 有字读错吗?→ 请用户把生僻字、多音字换成同音字,数字和英文缩写写成汉字;
2. 停顿怪吗?→ 请用户在断句处加减标点,长句拆短,长文按 150–250 字分段;
3. 文本里有表情、Markdown 标记、括号注释吗?→ 先清理再合成;
4. 音色不像吗?→ 请用户重录一段 3–10 秒的清晰干声,底噪越小越好;环境嘈杂就先调 /api/third/denoise/upload;
5. 语气太平吗?→ 用 style="2",配 genre=1 的 ext 情绪向量,或 genre=2 传 emotionPath;
6. 语种不对吗?→ 显式传 targetSpeech,方言和小语种配 style="3"。
用户没改任何输入之前,不要反复用同一组参数重试。
核心板块 · 限制与配额

Fish Audio 中文版 API 限制与配额

项值
单次字符10000(旗舰会员),超出返回 code=1001
同时排队的合成任务30,可以联系加量
降噪进行中5
声音设计进行中5
分页pageSize 最大 30
克隆参考音频3–60 秒,建议 3–10 秒
情绪参考音频2–60 秒,≤50MB,mp3 / wav / m4a
降噪音频3–60 秒
声音设计文本1000 字节(一个汉字 3 字节)
生成记录与音频保留 1 天,请及时下载(声音设计结果同样 1 天)
临时文件/file/uploadCustom 上传的情绪参考音频会定时清理,过期需重传
计费API 不另收费,与旗舰会员套餐共用字符额度;控制台可查本月已用字符

使用 Fish Audio 中文版 API 的安全与合规要求

  • 只克隆你本人或已获授权的声音,不能用于冒充、诈骗、误导或侵权。
  • API Key 用环境变量注入,不要写进前端代码、代码仓库或公开文档;分发技能包时 Key 单独给。
  • 生成的音频带 AI 生成标识(依据《互联网信息服务深度合成管理规定》),对外发布时要保留。
  • API 生成记录只保留 1 天;会员上传的声音模型保存在账号里;临时情绪参考音频会定时清理。
  • 参考音频只用于克隆和生成,可以自行删除,具体以隐私政策和服务条款为准。
  • 本站基于 Fish Audio 模型并做了增强,由独立团队运营。

Fish Audio 中文版 API 常见接法

短剧多角色批量配音

接法:reference/upload 为每个角色建音色 → tts/create 并发提交 → tts/result 轮询保存。

参数:style="2",按角色情绪传 ext。

方言口播

接法:一个音色 + tts/create → tts/result 循环,按地区切换 targetSpeech。

参数:style="3",targetSpeech=sichuan / yue 等。

有声书长文本

接法:文本按 150–250 字分段 → 同一个 audioId 依次 tts/create 并查 tts/result → 拼接。

参数:style="2",genre=0 跟随参考音频情绪。

Fish Audio 中文版 API 常见问题

Fish Audio 中文版有 API 吗?怎么开通?

有。旗舰会员可以直接用:在本页「账号与密钥」区域点按钮,已开通会显示并可复制密钥,没开通时按钮会引导你开通。API 不另收费,消耗旗舰会员套餐里的字符额度。

API 怎么收费?和网页版的免费额度有什么关系?

API 调用不另外收钱,扣的是旗舰会员套餐里的字符,本月用量在控制台能看到。网页端注册送的 150,000 字符只能在网页端用,不包含 API 调用。

本站 API 和 Fish Audio 官方 API 有什么区别?

本页介绍的是 Fish Audio 中文版(fishaudio.hk)自己的声音克隆接口:基于 Fish Audio 模型并做了增强,用 sign 请求头鉴权、按旗舰会员套餐计费,适合国内工作流和智能体直接接入。Fish Audio 官方 API 的申请、Key 和计费,请在 fish.audio 查看。

扣子怎么接 Fish Audio 中文版声音克隆?

两种方式任选:把官方技能包打成 zip 作为 Skill 上传;或者在插件里从 OpenAPI 导入 openapi.json,鉴权选 Service、Header、名称 sign。具体步骤见本页「智能体接入」的扣子标签。

Dify / n8n 怎么导入 openapi.json?

新建自定义工具,从 OpenAPI 导入 https://openapi.aivoiceapi.cn/api/third/openapi.json,鉴权选自定义 Header,名称填 sign,值填 API Key。工作流里按「取音色 → 提交合成 → 轮询结果」三个节点串起来。

Claude Code / Codex 怎么用技能包?

Claude Code 把仓库克隆到 ~/.claude/skills/ 或项目的 .claude/skills/;Codex 把技能包放进仓库,并在 AGENTS.md 里加一段指引。两者都要设置环境变量 VOICE_API_KEY,之后用中文下达合成任务即可。

有 MCP server 吗?

目前通过官方技能包(SKILL.md 加脚本)和 OpenAPI 规范接入,技能包脚本也可以按本页说明配成 MCP 使用;独立的 MCP 版本还在规划中。

API 支持哪些语言和方言?

targetSpeech 枚举收录 57 个:5 个支持情绪的语言、14 种中文方言、5 种民族语言和 33 种外语;服务端实际支持 100 多个语种,枚举外可以直接试传。情绪控制只在 mandarin、english、ja、es、ar 且 style="2" 时可用。

情绪控制怎么传参数?

在 style="2" 下三选一:genre=0 跟随参考音频;genre=1 用 ext 传 8 维情绪向量(happy、angry、sad、afraid、disgusted、melancholic、surprised、calm,每维 0–1);genre=2 传 emotionPath,文件名来自 /file/uploadCustom。

一次最多合成多少字?长文本怎么办?

旗舰会员单次上限 10000 字符,超出返回 code=1001。长文本建议按自然段切成 150–250 字,用同一个 audioId 依次合成再拼接,音色和语气能保持一致。

status 一直是 1 怎么办?

继续用同一个 taskId 每 2 秒查一次 /tts/result,直到 status 变成 2(完成)或 3(失败)。不要重复提交任务,否则会占掉排队名额,同时最多只能排 30 个任务。

为什么鉴权不是 Bearer Token?

本站接口用自定义请求头 sign 传密钥,大多数平台的「自定义 Header」鉴权都能配:名称填 sign,值填 API Key。也支持把 sign 放在 URL 参数里,但建议优先用请求头。

生成的音频保留多久?

API 生成的音频和记录只保留 1 天,声音设计结果同样 1 天,请拿到 voiceUrl 后尽快下载到自己的存储;会员上传的声音模型会一直保存在账号里。

可以用 API 克隆别人的声音吗?

不可以。只能克隆你本人或已获明确授权的声音,生成的音频带 AI 生成标识;用于冒充、诈骗或侵权会被终止服务。

现在就把 Fish Audio 中文版 API 接进你的 AI

复制接入说明发给你的 AI,或者直接导入 openapi.json。

获取 API Key

引用本文档:Fish Audio 中文版开发者文档 · 版本 1.0 · 2026-10-23 · https://fishaudio.hk/developer/

相关页面:声音克隆规则 · 常见问题 · 关于本站