本文档为云音工坊 IndexTTS2 系列 API 接口使用说明,核心围绕语音合成与声音克隆两大核心能力,详细梳理全接口调用流程、参数配置、请求示例及返回规范,助力开发者快速对接集成,高效实现文本转语音、自定义音色克隆等功能,适配各类语音交互场景开发需求。
如需在线使用请点击:Index-TTS2 在线语音合成 ,可以使用模式2体验,本接口支持声音的云端克隆,因为用户较多,为缓解服务器存储压力,音色仅保留7天,过期会自动清理音频和音色文件,如果需要实时文件上传克隆可查看《Index-TTS2 同步语音合成 API 接口文档》
IndexTTS2 音色克隆 API 文档
接口概述
IndexTTS2 音色克隆 API 允许用户上传音频文件,生成个性化语音模型。
接口地址
POST /api/v1/indextts2_cloning
注意:本接口克隆音色默认只保留6天,过期自动清理,过期后需要重新克隆!
请求方法
- POST
认证方式
需要在请求头中添加 API 密钥:
Authorization: Bearer YOUR_API_KEY
请求参数
基础参数
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| name | string | 是 | 音色名称 |
| description | string | 否 | 音色描述 |
音频上传参数(三选一)
1. 文件上传
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| speaker_file | file | 是 | 音频文件(MP3/WAV格式,≤20MB,5-30秒) |
| emotion_file | file | 否 | 情感音频文件(MP3/WAV格式,≤20MB,5-30秒) |
2. Base64 上传
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| speaker_file_base64 | string | 是 | 音频文件的 Base64 编码字符串 |
| emotion_file_base64 | string | 否 | 情感音频文件的 Base64 编码字符串 |
3. URL 上传
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| speaker_url | string | 是 | 音频文件的 URL 地址 |
| emotion_url | string | 否 | 情感音频文件的 URL 地址 |
请求示例
文件上传示例
curl -X POST "https://www.yuntts.com/api/v1/indextts2_cloning" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "name=我的音色" \
-F "description=个性化语音模型" \
-F "speaker_file=@speaker.mp3"
文件上传示例(包含情感参考音频)
curl -X POST "https://www.yuntts.com/api/v1/indextts2_cloning" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "name=我的音色" \
-F "description=个性化语音模型" \
-F "speaker_file=@speaker.mp3" \
-F "emotion_file=@emotion.mp3"
Base64 上传示例
curl -X POST "https://www.yuntts.com/api/v1/indextts2_cloning" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "name=我的音色" \
-F "description=个性化语音模型" \
-F "speaker_file_base64=BASE64_STRING"
Base64 上传示例(包含情感参考音频)
curl -X POST "https://www.yuntts.com/api/v1/indextts2_cloning" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "name=我的音色" \
-F "description=个性化语音模型" \
-F "speaker_file_base64=BASE64_STRING" \
-F "emotion_file_base64=EMOTION_BASE64_STRING"
URL 上传示例
curl -X POST "https://www.yuntts.com/api/v1/indextts2_cloning" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "name=我的音色" \
-F "description=个性化语音模型" \
-F "speaker_url=https://example.com/speaker.mp3"
URL 上传示例(包含情感参考音频)
curl -X POST "https://www.yuntts.com/api/v1/indextts2_cloning" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "name=我的音色" \
-F "description=个性化语音模型" \
-F "speaker_url=https://example.com/speaker.mp3" \
-F "emotion_url=https://example.com/emotion.mp3"
响应格式
成功响应
{
"code": 200,
"msg": "上传成功!",
"id": "uspeech:c73d0681-3ca6-4956-979d-7a4c02ef1bee"
}
错误响应
{
"code": "error_code",
"msg": "错误消息",
"error": {
"error": {
"message": "错误详情",
"type": "error_type",
"param": "参数名称",
"code": "error_code"
}
}
}
错误码说明
| 错误码 | 说明 |
|---|---|
| method_not_allowed | 仅支持 POST 请求 |
| empty_name | 请输入音色名称 |
| missing_speaker_file | 请提供音频文件(三种方式选其一) |
| invalid_file_format | 音频文件格式不支持,请使用 MP3 或 WAV 格式 |
| file_too_large | 音频文件大小超过限制,请使用不超过 20MB 的文件 |
| duration_out_of_range | 音频时长必须在 5 到 30 秒之间 |
| invalid_emotion_file_format | 情感音频文件格式不支持,请使用 MP3 或 WAV 格式 |
| emotion_file_too_large | 情感音频文件大小超过限制,请使用不超过 20MB 的文件 |
| emotion_duration_out_of_range | 情感音频时长必须在 5 到 30 秒之间 |
| request_failed | 请求失败 |
| missing_name | 未提供音色名称 |
| missing_speaker | 未提供任意一个 speaker_* 字段 |
| invalid_speaker_base64 | speaker_file_base64 解码失败 |
| unsupported_audio_format | 音频格式不是 MP3/WAV |
| file_too_large | 音频文件太大 |
| sample_rate_too_low | 音频采样率过低(需要≥16kHz) |
注意事项
- 音频文件格式必须为 MP3 或 WAV
- 音频文件大小不超过 20MB
- 音频时长在 5 到 30 秒之间
- 每个请求只能使用一种上传方式
- 情感音频文件是可选的
IndexTTS2 删除音色接口 API 文档
接口概述
IndexTTS2 删除音色 API 允许用户删除已创建的个性化音色模型。
接口地址
POST /api/v1/indextts2_delete
请求方法
- POST
认证方式
需要在请求头中添加 API 密钥:
Authorization: Bearer YOUR_API_KEY
请求参数
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| voice_id | string | 是 | 要删除的音色 ID |
请求示例
curl -X POST "https://www.yuntts.com/api/v1/indextts2_delete" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"voice_id": "uspeech:c73d0681-3ca6-4956-979d-7a4c02ef1bee"}'
响应格式
成功响应
{
"code": 200,
"msg": "删除成功!"
}
错误响应
{
"code": "error_code",
"msg": "错误消息",
"error": {
"error": {
"message": "错误详情",
"type": "error_type",
"param": "参数名称",
"code": "error_code"
}
}
}
错误码说明
| 错误码 | 说明 |
|---|---|
| method_not_allowed | 仅支持 POST 请求 |
| missing_voice_id | 请提供音色 ID |
| voice_not_found | 未找到指定的音色 |
| unauthorized | API 密钥无效 |
| forbidden | 没有权限删除该音色 |
| request_failed | 请求失败 |
注意事项
- 音色 ID 是创建音色时返回的唯一标识符
- 删除音色后,该音色将无法恢复
- 只能删除用户自己创建的音色
IndexTTS2 查询音色接口 API 文档
接口概述
IndexTTS 查询音色 API 允许用户查询已创建的个性化音色模型列表。
接口地址
POST /api/v1/indextts_query
请求方法
- POST
认证方式
需要在请求头中添加 API 密钥:
Authorization: Bearer YOUR_API_KEY
请求参数
无额外请求参数,请求体为一个空的 JSON 对象:{}
请求示例
curl -X POST "https://www.yuntts.com/api/v1/indextts_query" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
响应格式
成功响应
{
"code": 200,
"message": "查询成功!",
"data": {
"code": 0,
"list": [
{
"id": "uspeech:fb00d8bd-5ec3-42da-821a-460ab71e5efc",
"name": "测试名称",
"description": "测试描述",
"model": "IndexTeam/IndexTTS-2",
"audio_url": "https://www.yuntts.com/wp-content/uploads/audio-tts/moren.mp3",
"avatar_url": "https://www.yuntts.com/wp-content/uploads/avatar-tss/ai.webp",
"created_at": "2026-04-16 23:44:18",
"updated_at": "2026-04-16 23:44:18"
}
],
"total_voices": 1
}
}
错误响应
{
"code": "error_code",
"msg": "错误消息",
"error": {
"error": {
"message": "错误详情",
"type": "error_type",
"param": "参数名称",
"code": "error_code"
}
}
}
错误码说明
| 错误码 | 说明 |
|---|---|
| method_not_allowed | 仅支持 POST 请求 |
| unauthorized | API 密钥无效 |
| forbidden | 没有权限查询音色列表 |
| request_failed | 请求失败 |
注意事项
- 该接口返回用户所有已创建的个性化音色
- 每个音色包含 ID、名称、描述和创建时间等信息
- 确保 API 密钥有效且具有查询权限
IndexTTS2 合成音频接口 API 文档
接口概述
IndexTTS2 合成音频 API 允许用户使用个性化或公共音色生成高质量的语音合成音频。支持多种情感控制方式和高级参数设置。
接口地址
POST /api/v1/indextts2_generate
请求方法
- POST
认证方式
需要在请求头中添加 API 密钥:
Authorization: Bearer YOUR_API_KEY
请求参数
与 indextts2_infer(上传音频合成)的区别:本接口使用已克隆的音色 ID(voice),无需每次上传参考音频。
Body(application/json)
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
text |
string | 是 | - | 要合成的文本内容,最大 600 字符 |
voice |
string | 否 | jay_klee |
克隆好的音色 ID |
interval_silence |
int | 否 | 200 |
句间静音间隔(毫秒) |
max_text_tokens_per_sentence |
int | 否 | 120 |
每句最大 token 数 |
emo_random |
boolean | 否 | - | 是否启用随机情感(不传则不启用) |
stream_mode |
boolean | 否 | false |
true=流式直接返回 WAV 音频;false=返回 JSON(含 audio_url) |
emo_control_method |
int | 否 | 0 |
情感控制方式:0=不控制,1=权重,2=向量,3=文本 |
emo_weight |
float | 条件 | - | 情感影响强度,范围 0~1(模式 1/2/3 下可选) |
emo_vec |
array | 条件 | - | 8 维情绪向量(仅模式 2,所有元素之和不能超过 1.5) |
emo_text |
string | 条件 | - | 情感描述文本(仅模式 3) |
四种模式请求示例
模式一:基础合成(无情感控制)
{
"text": "你好,欢迎使用语音合成服务",
"voice": "jay_klee",
"interval_silence": 200,
"max_text_tokens_per_sentence": 120,
"emo_random": false,
"stream_mode": false,
"emo_control_method": 0
}
emo_control_method可省略,默认为 0。
模式二:权重情感控制
{
"text": "今天真是太开心了!",
"voice": "jay_klee",
"interval_silence": 200,
"max_text_tokens_per_sentence": 120,
"stream_mode": false,
"emo_control_method": 1,
"emo_weight": 0.8
}
仅通过
emo_weight控制情感强度,不需要向量或文本。
模式三:向量情感控制
{
"text": "这个消息让我感到非常震惊",
"voice": "jay_klee",
"interval_silence": 200,
"max_text_tokens_per_sentence": 120,
"stream_mode": false,
"emo_control_method": 2,
"emo_vec": [0.1, 0.2, 0.0, 0.3, 0.1, 0.0, 0.2, 0.4],
"emo_weight": 0.6
}
8 维情感向量,仅在
emo_control_method = 2时生效;所有元素之和不能超过 1.5。
模式四:文本情感控制
{
"text": "谢谢大家的支持与鼓励",
"voice": "jay_klee",
"interval_silence": 200,
"max_text_tokens_per_sentence": 120,
"stream_mode": false,
"emo_control_method": 3,
"emo_text": "用温柔而感激的语气说",
"emo_weight": 0.7
}
响应
非流式模式 (stream_mode=false,默认)
成功响应 (200):
{
"code": 200,
"message": "合成成功!",
"data": {
"audio_url": "https://example.com/wp-content/uploads/audio/processed/xxx.wav",
"format": "wav",
"char_count": 15,
"cost": 0.0045,
"balance": 9.8
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
audio_url |
string | 合成后的 WAV 音频文件下载地址 |
format |
string | 固定值 "wav" |
char_count |
int | 合成文本的计费字符数 |
cost |
float | 本次扣除的积分/金额 |
balance |
float | 账户剩余余额 |
流式模式 (stream_mode=true)
| 场景 | Content-Type | 说明 |
|---|---|---|
| 成功 | audio/wav |
直接返回 WAV 音频二进制流 |
| 失败 | application/json |
返回 JSON 错误 |
流式响应头:
Content-Type: audio/wav
Content-Disposition: inline
X-Accel-Buffering: no
错误响应
{
"code": 400,
"error": "empty_text",
"message": "请输入要合成的文本!"
}
常见错误码
| HTTP | error | 说明 |
|---|---|---|
| 400 | empty_text |
text 字段为空 |
| 400 | text_too_long |
文本超过 600 字符 |
| 400 | invalid_emo_control_method |
emo_control_method 不在 0~3 范围 |
| 400 | invalid_emo_vec |
情绪向量维度/范围不符合要求 |
| 401 | empty_key |
缺少 Authorization 请求头 |
| 401 | invalid_key |
API Key 无效 |
| 402 | insufficient_balance |
账户余额不足 |
| 405 | method_not_allowed |
使用了非 POST 方法 |
| 500 | missing_api_key |
服务端 API 密钥未配置 |
| 500 | request_failed |
上游服务请求失败 |
| 500 | stream_error |
流式合成失败(收到非音频响应) |
| 500 | invalid_response |
非流式模式下收到非 WAV 响应 |
| 500 | audio_save_failed |
生成的音频文件保存失败 |
| 500 | order_create_failed |
订单创建失败(会自动退款) |
注意事项
- 文本内容长度建议不超过 600 字符
- 选择基于情绪音频的控制方式时,需要在克隆阶段上传了情绪参考音频
- 情感向量总和不能超过 1.5,否则会返回错误
- 音色 ID 可以通过查询音色接口获取
- 确保 API 密钥有效且具有合成权限
- 字符统计规则:去空白字符后,汉字计2字符,其他字符计1字符
- 计费逻辑:字符成本 = 字符数 × 字符兑换比例 × 用户类型折扣,最低扣费0.01元
- 计费完整文档请查看《IndexTTS2 API接口使用字符计费说明》


评论(0)