让 AI 直接调用 AnyVoice 语音接口
语音克隆 API:文本进、音频 URL 出。上传 3–60 秒参考音频即可克隆音色(推荐 3–10 秒清晰干声), 支持普通话、英语、14 种中文方言、7 种民族语言与 100+ 语种;提供 REST 接口与机读 OpenAPI 3.0 规范, 扣子、Dify、n8n、WorkBuddy、OpenClaw、ComfyUI、Claude Code、Codex 均可直接接入。
这是什么:AnyVoice 语音开放接口,10 个 REST 端点覆盖声音克隆、语音合成、8 维情绪向量控制与音频降噪。
适合什么:短剧多角色批量配音、方言口播、有声书长文本——需要把「文本变成某个人的声音」自动化的场景。
谁能用:旗舰会员。密钥即请求头 sign;API 不另收费,与套餐共享字符额度。
怎么接:扣子 / Dify / n8n 导入 openapi.json;WorkBuddy / Claude Code / Codex 导入官方技能包;ComfyUI 走 HTTP 节点。
我该走哪条路新增
按你的情况选一条,每条都能在 10 分钟内跑通。
账号与密钥
API 能力面向旗舰会员开放,密钥即请求头中的 sign。全部功能均支持 API 接口调用, API 不额外收费,与套餐共享字符额度。下面的文档可先通读,无需登录。
未开通:点右侧按钮开通旗舰会员,开通即生效。已开通:点右侧按钮直接显示密钥,可复制。
按钮按账号状态自动变化:未登录 → 「登录后开通」;已登录未开通 → 「立即开通」;已开通 → 「查看我的密钥」, 点开后在本区域显示 sk_****9970、复制、本月已用字符。
快速开始
两步跑通:取音色 ID → 同步合成。
- 拿到音色 ID:调
GET /api/third/reference/list,取list[].roleId;也可先用/reference/upload上传 3–60 秒干声创建自己的音色。 - 合成语音:调
POST /api/third/tts/sync,audioId填上一步的roleId,返回status=2时取voiceUrl。
# 1) 取音色列表,拿到 roleId
curl "https://openapi.anyvoice.cn/api/third/reference/list?page=1&pageSize=10" \
-H "sign: $VOICE_API_KEY"
# 2) 同步合成,返回 voiceUrl
curl -X POST https://openapi.anyvoice.cn/api/third/tts/sync \
-H "sign: $VOICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "今天天气不错",
"audioId": "<roleId>",
"style": "2",
"speed": 1.0,
"targetSpeech": "mandarin"
}'预期结果:数秒内返回 data.voiceUrl。
import os, requests
BASE = "https://openapi.anyvoice.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
role_id = r["data"]["list"][0]["roleId"]
# 2) 同步合成
r = requests.post(f"{BASE}/api/third/tts/sync", headers=H, json={
"content": "今天天气不错",
"audioId": role_id,
"style": "2",
"speed": 1.0,
"targetSpeech": "mandarin",
}).json()
assert r["code"] == 0, r["msg"]
data = r["data"]
if data["status"] == 2:
print(data["voiceUrl"])
else:
print("处理中,用 taskId 轮询 /tts/result:", data["taskId"])const BASE = "https://openapi.anyvoice.cn";
const H = { sign: process.env.VOICE_API_KEY, "Content-Type": "application/json" };
// 1) 取音色
const listRes = await fetch(
`${BASE}/api/third/reference/list?page=1&pageSize=10`,
{ headers: { sign: process.env.VOICE_API_KEY } }
).then(r => r.json());
if (listRes.code !== 0) throw new Error(listRes.msg); // 永远先判 code
const roleId = listRes.data.list[0].roleId;
// 2) 同步合成
const ttsRes = await fetch(`${BASE}/api/third/tts/sync`, {
method: "POST",
headers: H,
body: JSON.stringify({
content: "今天天气不错",
audioId: roleId,
style: "2",
speed: 1.0,
targetSpeech: "mandarin",
}),
}).then(r => r.json());
if (ttsRes.code !== 0) throw new Error(ttsRes.msg);
const { status, voiceUrl, taskId } = ttsRes.data;
console.log(status === 2 ? voiceUrl : `处理中,轮询 taskId=${taskId}`);鉴权与响应约定
Base URL
https://openapi.anyvoice.cn鉴权
每个请求带请求头 sign: <你的密钥>。也支持 query ?sign=,但优先用请求头。
sign: YOUR_API_KEY密钥无效或旗舰会员过期时返回「sign无效」/「会员已过期」。
统一响应格式
{
"code": 0,
"msg": "操作成功",
"data": { }
}code=0成功;7通用失败;1001字数超限。- 永远先判
code,失败时 HTTP 状态码仍可能是 200。 - 失败时
msg是中文原因,可直接透传给用户。
接口清单
10 个端点分四组:语音合成 4 个、音色管理 3 个、情绪参考音频 1 个、降噪 2 个。 所有路径前缀 /api/third,均需 sign 头(openapi.json 除外)。 机读规范:https://openapi.anyvoice.cn/api/third/openapi.json,可直接导入扣子 / Dify / n8n。
语音合成
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/third/tts/sync | 首选。同步合成,服务端内部最多轮询 90s,一次调用拿结果 |
| POST | /api/third/tts/create | 异步创建任务,立刻返回 taskId |
| GET | /api/third/tts/result?taskId= | 查询任务结果 |
| GET | /api/third/tts/list?page=1&pageSize=10 | 合成历史列表,pageSize 最大 30 |
音色 / 参考音频(克隆模型)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/third/reference/list | 音色列表,返回 list[].roleId / name / voicePath |
| POST | /api/third/reference/upload | multipart:file(音频) + name(必填) + describe(选填),返回 audioId |
| DELETE | /api/third/reference/delete?audioId= | 删除音色 |
情绪参考音频(临时文件)
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/third/file/uploadCustom | multipart file,mp3/wav/m4a,2–60 秒,≤50MB。返回 {"emotionPath":"文件名"} |
降噪
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/third/denoise/upload | multipart file,时长 3–60 秒。返回 {"taskId":"..."} |
| GET | /api/third/denoise/poll?taskId= | 返回 {"status":"processing|completed|failed","filePath":"..."} |
合成请求体(/tts/sync 与 /tts/create 相同)
{
"content": "要合成的文本", // 必填,上限 10000 字符,超出 code=1001
"audioId": "音色ID", // 必填,来自 /reference/list 的 roleId
"style": "2", // 必填,字符串!"1"=V2.0 "2"=V2.5(支持情绪) "3"=方言/多语言
"speed": 1.0, // 选填,0.5~2.0,一位小数,默认 1.0
"targetSpeech": "mandarin", // 选填但强烈建议传
"genre": 0, // 选填,情绪控制方式,仅 style="2" 生效
"ext": { "happy": 0.8 }, // genre=1 时使用的情绪向量
"emotionPath": "xxx.mp3" // genre=2 时必填,来自 /file/uploadCustom
} 响应 data:{ "taskId": "...", "status": 2, "voiceUrl": "https://..." }。 status:1=处理中,2=已完成(此时才有 voiceUrl),3=失败。
参数规则(容易踩的坑)
style 是字符串
"style": "2" ✅ "style": 2 ❌(返回类型错误)。
"1"V2.0 基础合成,genre只能传 0。"2"V2.5,唯一支持情绪控制的版本。"3"方言 / 多语言,不支持情绪控制——传了genre/ext不报错但也不生效。
传了 targetSpeech 而该语言不支持所选 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
Web 端情绪控制属专业会员能力;用旗舰会员 API Key 调本接口默认可用,无需额外开通。
targetSpeech(目标语言 / 方言)
非必填但强烈建议显式提交。不传时服务端按文本自动判定,短文本或中英混排容易判错。
mandarin/english:style 1/2/3 都支持,可用情绪控制ja/es/ar:style="2" 可用情绪控制;style="1" 会被升为 "3"- 其余(14 种中文方言 + 7 种民族语言 + 40 种独立语言):style 传 "3",不支持情绪控制
- 枚举外的语言会直接报错「暂不支持该语言」且任务不会创建。此时改为
style="3"且完全不传targetSpeech,由多语言模型按文本自行处理
枚举收录 57 个,服务端能力表实际支持 100+ 语种,枚举里没有不代表不支持,可直接试传。常用:mandarin english yue nan sichuan northeast henan shaanxi ja ko es fr de ru pt it th vi id ms ar hi tr
speed 与轮询
speed入参校验上限2.0;方言 / 多语言链路模型上限只有1.5,服务端下发前自动压缩,不影响入参。- 用
/tts/create时建议 2 秒一次轮询/tts/result,直到status变为 2 或 3。 /tts/sync内部就是这个逻辑(2s 间隔、90s 上限);超时会带着taskId返回status=1,此时继续用/tts/result兜底,不要重复创建任务。
API 参数与 AnyVoice 网页版功能的对应关系新增
| 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 同样不单独计费 |
智能体接入
六个平台底层都是同一套 /api/third/* 接口与同一份额度,按你在用的平台选一个 tab, 每个 tab 里都是可整段粘贴的内容。
扣子 2.0 起同时支持 Skill 与插件两条路:Skill 可直接上传 SKILL.md 技能包 zip,插件走 OpenAPI 导入。要在工作流节点里用就选插件。
把技能包目录打包成 .zip,在扣子的 Skill / 技能管理里上传导入——Anthropic 那套 SKILL.md + 脚本的目录结构是兼容的。导入后点「部署」,在对话里 @ 这个技能即可使用。
# 下载并打包
git clone https://github.com/OpenApiTTS/autoclaw-skill-tts
cd autoclaw-skill-tts && zip -r ../anyvoice-skill.zip .
# 或直接下载现成 zip:
https://github.com/OpenApiTTS/autoclaw-skill-tts/archive/refs/heads/main.zip要在工作流节点里调用就走这条。扣子 → 插件 → 创建插件 → 选择「导入」→ 粘贴 OpenAPI 地址:
https://openapi.anyvoice.cn/api/third/openapi.json授权方式选 Service(服务认证)→ Location 选 Header → Parameter name 填 sign → Service token 填你的 API Key。
Location: Header
Parameter name: sign
Service token: YOUR_API_KEY逐个调试工具通过后点「发布」,然后在你的智能体(Bot)里添加该插件。典型编排:reference/list 取音色 → tts/sync 合成 → 取 data.voiceUrl。
常见坑:插件未发布就无法在智能体里选中;参数 style 必须以字符串传(扣子表单里填 "2" 而不是 2);扣子上的 Skill 目前只能单个使用、多个 Skill 之间不能互相调用,需要串多步时用插件 + 工作流兜底。
WorkBuddy 原生支持 SKILL.md 技能机制,直接导入官方技能包即可;也可以走 OpenAPI 自定义工具在工作流里编排。
下载技能包后,在 WorkBuddy 里选择导入自定义 Skill(或把目录放进它的技能目录)。技能包就是一个标准的 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把 API Key 写进环境变量并重启客户端,之后在对话里直接描述需求即可,WorkBuddy 会按 SKILL.md 的 SOP 自动完成取音色 → 合成 → 落盘。
export VOICE_API_KEY="YOUR_API_KEY"
# 然后直接说:
把这段文案用四川话合成语音,存到桌面:巴适得很,安逸得板。需要在工作流里精细编排时用这条路。新建自定义工具 → 从 OpenAPI 导入,鉴权选自定义请求头,Header 名 sign,值填 API Key。典型编排:reference/list 取音色 → tts/sync 合成 → 取 data.voiceUrl。
https://openapi.anyvoice.cn/api/third/openapi.json两种都不方便时,配一个 POST 请求节点即可:
POST https://openapi.anyvoice.cn/api/third/tts/sync
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 自定义工具:导入规范 → 配置自定义 Header 鉴权 → 在工作流里串两个节点。
Dify:工具 → 自定义 → 导入 OpenAPI Schema;n8n:HTTP Request 节点或 Custom API 均可,推荐直接导入规范地址。
https://openapi.anyvoice.cn/api/third/openapi.json鉴权类型选自定义 Header(不是 Bearer),名称 sign,值填 API Key。
Auth Type: Custom Header
Header: sign
Value: YOUR_API_KEY先 reference/list 取音色,再 tts/sync 合成,输出取 data.voiceUrl。长文本改用 tts/create + 循环轮询 tts/result。
常见坑:响应判断要看 body 里的 code 字段而不是 HTTP 状态码;style 必须传字符串 "2";n8n 的 HTTP 节点记得把 Content-Type 设为 application/json。
OpenClaw 支持技能(Skill)目录,把官方技能包放进去即可用自然语言驱动。
把整个目录复制到 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在 OpenClaw 的运行环境里配置环境变量,然后重启客户端——它在启动时就已读取环境变量。
export VOICE_API_KEY="YOUR_API_KEY"把这段文案用四川话合成语音,存到桌面:巴适得很,安逸得板。常见坑:技能目录规范以 OpenClaw 当前文档为准;若它只输出命令而不执行,说明缺少本地命令执行权限,需在设置里放开。
ComfyUI 分两种场景:① 在工作流内部调用我们的接口,走 HTTP / 脚本节点;② 让 Agent(Claude Code 等)同时驱动 ComfyUI 和我们的接口,这时两边各装一个 Skill。工作流本身没有 SKILL.md 机制。
用任意支持 HTTP 请求的节点包(如 comfyui-web-request 类节点)配置:
URL: https://openapi.anyvoice.cn/api/third/tts/sync
Method: POST
Headers:
sign: YOUR_API_KEY
Content-Type: application/json
Body (JSON):
{
"content": "要合成的文本",
"audioId": "音色ID",
"style": "2",
"targetSpeech": "mandarin"
}从响应里取 data.voiceUrl,接给「下载文件 / 加载音频」节点落盘,再进下游的数字人或视频合成流程。
单个工作流里合成长文本容易超时,改用 /tts/create 拿 taskId,再用一个循环节点每 2 秒轮询 /tts/result,直到 status 为 2 或 3。
若装了 Python 脚本执行类节点,把技能包放进 ComfyUI 目录后直接调官方封装:
git clone https://github.com/OpenApiTTS/autoclaw-skill-tts
python3 skill-openapi/scripts/tts.py tts \
--text "要合成的文本" --lang mandarin -o output/out.mp3想让 Claude Code / Codex 既生成配音又跑 ComfyUI 工作流时,装两个 Skill:我们的技能包负责语音,ComfyUI 的 Comfy Skills 负责驱动 ComfyUI。之后一句话就能串起「生成配音 → 喂进数字人工作流」。
# 语音能力
git clone https://github.com/OpenApiTTS/autoclaw-skill-tts ~/.claude/skills/anyvoice-tts
# ComfyUI 能力(插件市场)
/plugin marketplace add Comfy-Org/comfy-skills常见坑:ComfyUI 默认没有内置 HTTP 节点,需要先装对应节点包;工作流里存 API Key 时注意导出 workflow.json 会把密钥一起带出去(改用环境变量或脚本节点读取)。
两者都能直接执行本地命令,用官方技能包最省事;也可以配成 MCP。
复制到项目级 .claude/skills/ 或全局 ~/.claude/skills/,Claude Code 会按 description 自动识别何时使用。
git clone https://github.com/OpenApiTTS/autoclaw-skill-tts ~/.claude/skills/anyvoice-tts
export VOICE_API_KEY="YOUR_API_KEY"Codex 读取项目根目录的 AGENTS.md。把技能包放进仓库,并在 AGENTS.md 里加一行指引:
## 语音合成
需要 TTS / 声音克隆 / 降噪时,先读 `skill-openapi/SKILL.md`,
用 `python3 skill-openapi/scripts/tts.py` 执行,密钥在环境变量 VOICE_API_KEY。把 SKILL.md 全文粘贴进对话,并补充运行环境信息:
以上是接口说明书。脚本位于 <脚本绝对路径>,API Key 已配置在环境变量 VOICE_API_KEY。
现在:把「今天天气不错」合成语音,保存为 out.mp3。在 MCP 配置里指向技能包脚本:
{
"mcpServers": {
"anyvoice": {
"command": "python3",
"args": ["<技能包绝对路径>/scripts/tts.py", "mcp"],
"env": { "VOICE_API_KEY": "YOUR_API_KEY" }
}
}
}常见坑:Windows 上命令是 python 而非 python3;中文长文本不要用 --text 直接传参,改从 stdin 读取,必要时先 chcp 65001。
官方 Agent 技能包(Skill)
我们把鉴权、参数推导、轮询、下载全部封装成了一个技能包,仅依赖 Python 3 标准库,无需 pip install。 支持 Skill 机制的客户端(WorkBuddy、扣子、OpenClaw、Claude Code、Codex 等)导入后即可用自然语言完成「文本 → 音频文件」。
获取技能包
# 克隆
git clone https://github.com/OpenApiTTS/autoclaw-skill-tts
# 或下载 zip 后解压
curl -L -o anyvoice-skill.zip https://github.com/OpenApiTTS/autoclaw-skill-tts/archive/refs/heads/main.zip仓库:https://github.com/OpenApiTTS/autoclaw-skill-tts | 直接下载 zip:main.zip
各平台支持情况
| 平台 | 推荐接入方式 | 说明 |
|---|---|---|
| 扣子 Coze | Skill / 插件 | Skill 支持上传技能包 zip;需要在工作流节点里调用时用 OpenAPI 插件 |
| WorkBuddy | Skill | 原生 SKILL.md 技能机制,导入即用;也可走 OpenAPI 自定义工具 |
| Dify / n8n | OpenAPI | 导入 openapi.json,鉴权选自定义 Header sign |
| OpenClaw | Skill | 放进技能目录,配好环境变量后重启客户端 |
| Claude Code | Skill | 放进 ~/.claude/skills/ 或项目 .claude/skills/,自动按需加载 |
| Codex | Skill / AGENTS.md | 放进仓库并在 AGENTS.md 里加一行指引 |
| ComfyUI | HTTP / 脚本节点 | 工作流本身无 SKILL.md 机制;若由 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.anyvoice.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 "今天天气不错" -o out.mp3 # 合成(不传 --voice 自动用第一个音色)
python3 scripts/tts.py tts --text "你好" --voice abc123 -o out.mp3
python3 scripts/tts.py tts --text "巴适得很" --lang sichuan -o out.mp3 # 方言 / 多语言
python3 scripts/tts.py tts --text "太好啦" --emotion happy=0.8 -o out.mp3 # 情绪控制
python3 scripts/tts.py tts --text - -o out.mp3 < 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 时只打印音频 URL,便于管道接后续处理。Windows 上命令用 python 而非 python3。
技能包还在哪些目录可以找到新增
GitHub 仓库 OpenApiTTS/autoclaw-skill-tts; 扣子插件商店 [提交后填];Dify 市场 [提交后填];MCP 目录 [提交后填]。
如果你是 AI 助手,请按以下步骤操作
本节为纯文本步骤,供 Agent 直接执行。
- 获取凭证:向用户索要 API Key;以环境变量
VOICE_API_KEY或请求头sign传入。用户没有时引导其在本页「账号与密钥」点「立即开通」开通旗舰会员,开通后同一按钮变为「查看我的密钥」。 - 获取参考音频:3–60 秒、单人、清晰、wav/mp3。若用户未提供请索要;不要使用未经用户授权的他人声音。也可先调
/denoise/upload降噪。 - 选音色:调
GET /api/third/reference/list取roleId;或POST /api/third/reference/upload上传参考音频得到audioId。 - 合成语音:调
POST /api/third/tts/sync,传content+audioId+style+targetSpeech;需要情绪时style="2"配genre/ext。 - 返回结果:
status=2时把voiceUrl交给用户并说明下载方式;status=1时用taskId轮询/tts/result,不要重复创建任务。 - 失败处理:
code=1001→ 文本超限,拆分后分段合成;「sign无效」→ 重新索要 Key 或提示会员已过期;「暂不支持该语言」→ 去掉targetSpeech并改用style="3"。
把这段话发给你的 AI
我想用 AnyVoice(anyvoice.cn)的语音开放接口克隆声音并生成一段配音。请你:
1. 先阅读 https://anyvoice.cn/developer/ 里「如果你是 AI 助手」那一节的步骤,接口规范在 https://openapi.anyvoice.cn/api/third/openapi.json;
2. 帮我把它接到你这里(优先用官方技能包 skill-openapi,其次直接调 REST 接口);
3. 鉴权是请求头 sign,需要 API Key 或参考音频时告诉我,我来提供;
4. 然后用我的声音把下面这段话生成为 mp3 并给我链接:
(在这里写你要生成的文案)
注意:style 必须是字符串;响应永远先判 code 字段,不要只看 HTTP 状态码。限制与配额
字符数
单次请求上限 10000 字符(旗舰会员),超出返回 code=1001。长文请分段。
并发
在途任务数默认 30,账号可加量。降噪任务单用户进行中上限 5 个。
分页
列表类接口 pageSize 上限 30。
参考音频
克隆音频 3–60 秒;情绪参考音频 2–60 秒、≤50MB、mp3/wav/m4a;降噪音频 3–60 秒。
计费
API 不额外收费,与旗舰会员套餐共享字符额度。控制台可看本月已用字符数。
临时文件
/file/uploadCustom 上传的情绪参考音频会被定时清理,过期需重新上传。
一眼看完新增
| 项 | 值 |
|---|---|
| 单次字符 | 10000(旗舰会员) |
| 在途任务 | 30 |
| 降噪进行中 | 5 |
| 分页 | pageSize ≤ 30 |
| 克隆参考音频 | 3–60 秒,推荐 3–10 秒 |
| 情绪参考音频 | 2–60 秒,≤50MB,mp3/wav/m4a |
| 降噪音频 | 3–60 秒 |
| 计费 | 与旗舰会员套餐共享字符额度,API 不另收费 |
| 生成记录 | 保留 1 天,请及时下载 |
| 临时文件 | 定时清理 |
安全与合规
- 仅克隆本人或已获授权的声音,请勿用于冒充、诈骗、误导或侵权。
- API Key 通过环境变量注入,不要写入前端代码、仓库或公开文档;分发技能包时 Key 应单独传递。
- 生成音频添加 AI 生成标识(依据《互联网信息服务深度合成管理规定》),对外发布时须保留。
- API 生成记录仅保留 1 天,请及时下载音频;会员上传的声音模型保存在账号内;临时情绪参考音频定时清理。
- 参考音频仅用于克隆与生成,可自行删除,具体以隐私政策与服务条款为准。
- AnyVoice 基于 IndexSpeech 团队开源的 IndexTTS2.5 模型能力构建,与 IndexSpeech 团队无隶属关系。 模型仓库:github.com/index-tts/index-tts。
典型接法与用量新增
来自 AnyVoice 2026 年 6–9 月付费用户的真实用法,已脱敏。
短剧多角色批量配音
接法:reference/upload 建多个角色音色 → tts/create 并发提交 → tts/result 轮询落盘。
参数:style="2",按角色情绪传 ext。
用量:单个工作室两周 3,800 余条台词、480 余个角色音色,平均每条 5 字。
方言口播
接法:一个音色 + tts/sync 循环,按地区切换 targetSpeech。
参数:style="3",targetSpeech=sichuan / henan / …,普通话文案直接生成。
用量:单个电商账号两个月 2,800 余条,同时用普通话、济南话、青岛话、英语。
有声书长文本
接法:文本按 150–250 字分段 → 同一 audioId 顺序 tts/sync → 拼接。
参数:style="2",genre=0 跟随参考音频情绪。
用量:单个创作者 36 天近 2,000 条、17 万余字,17 个角色音色。
常见问题
全部问答默认展开,不折叠,便于搜索引擎与 AI 完整抓取;同一内容以 FAQPage 结构化数据写入页头。
AnyVoice 有 API 吗?怎么开通?
有。API 面向旗舰会员开放,开通后,在本页「账号与密钥」点「查看我的密钥」即可获取,可复制。未开通时同一按钮显示「立即开通」。API 不另收费,与旗舰会员套餐共享字符额度。
语音克隆 API 怎么收费?和网页版额度什么关系?
API 不单独计费,消耗的是旗舰会员套餐的字符额度,控制台可查本月已用。网页端注册赠送的 150,000 字符仅限网页端使用,不含 API。
扣子怎么接 AnyVoice 声音克隆?
两种方式:上传官方技能包 zip 作为 Skill;或在插件里从 OpenAPI 导入 openapi.json,鉴权选自定义请求头 sign。见「智能体接入」扣子 tab。
Dify / n8n 怎么导入 openapi.json?
新建自定义工具 → 从 OpenAPI 导入 https://openapi.anyvoice.cn/api/third/openapi.json → 鉴权选自定义 Header,名称 sign。
Claude Code / Codex 怎么用技能包?
克隆仓库后放进 ~/.claude/skills/(Claude Code)或项目仓库并在 AGENTS.md 加一行指引(Codex),配置 VOICE_API_KEY 即可用自然语言下达合成任务。
有 MCP server 吗?
目前通过官方技能包(SKILL.md + 脚本)与 OpenAPI 规范接入;MCP 版本待定。
API 支持哪些语言和方言?
targetSpeech 枚举收录 57 个,含 14 种中文方言、7 种民族语言与 40 种独立语言;服务端能力表实际支持 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。
一次最多合成多少字?长文本怎么办?
旗舰会员单次上限 10000 字符,超出返回 code=1001。长文本按自然段切成 150–250 字,用同一个 audioId 顺序合成后拼接,音色保持一致。
返回 status=1 一直不变怎么办?
用返回的 taskId 每 2 秒轮询 /tts/result,直到 status 为 2 或 3;不要重复创建任务,否则会占用在途任务配额。
鉴权为什么不是 Bearer Token?
本接口用自定义请求头 sign 携带密钥。多数平台的「自定义 Header」鉴权都能配置,名称填 sign、值填 API Key。也支持 query ?sign=,但优先用请求头。
上传别人的声音能用 API 克隆吗?
不能。仅可克隆本人或已获明确授权的声音,生成音频带 AI 生成标识,违规使用将被终止服务。
现在就把它接到你的 AI 里
复制接入说明发给你的 AI,或直接导入 openapi.json。