迁移指南
从旧版 Open API 路径迁移到当前 CN /v1 API。
迁移指南
新接入应使用当前 CN /v1 路径,并以 https://kittaaudio.com/api 作为 Base URL。旧客户端里可能存在历史 /api/open/* 路径、海外 OpenAPI 路径或早期草案路径。迁移时请统一到当前 CN 合同。
Base URL: https://kittaaudio.com/api推荐迁移顺序
- 先迁移只读接口,例如 Usage、音色列表和任务详情。
- 再迁移任务创建接口,例如同步 TTS、异步 TTS、ASR、图片、视频和口型同步。
- 灰度期间同时记录旧路径和新路径的请求量、状态码和
requestId。 - 确认生产流量不再依赖旧路径后,再删除 SDK 中的旧路径分支。
不要一次性替换所有接口后直接上线。扣费接口需要特别关注重试和额度对账。
路径迁移表
下表左侧是旧路径或旧概念,右侧是当前 CN /v1 路径。
| 旧路径或旧概念 | 当前 CN API |
|---|---|
| 旧 Profile 查询 | GET /v1/usage |
| 旧同步 TTS | POST /v1/tts/speech |
| 旧异步 TTS 创建 | POST /v1/tts/tasks |
| 旧 TTS 任务列表 | GET /v1/tts/tasks |
| 旧 TTS 任务详情 | GET /v1/tts/tasks/{taskId} |
| 旧实时 TTS | GET /v1/tts/live |
| 旧语音转文字创建 | POST /v1/asr/tasks |
| 旧语音转文字列表 | GET /v1/asr/tasks |
| 旧语音转文字详情 | GET /v1/asr/tasks/{taskId} |
| 旧实时 ASR | GET /v1/asr/live |
| 旧图像任务创建 | POST /v1/images/tasks |
| 旧图像任务列表 | GET /v1/images/tasks |
| 旧图像任务详情 | GET /v1/images/tasks/{taskId} |
| 旧视频任务创建 | POST /v1/videos/tasks |
| 旧视频任务列表 | GET /v1/videos/tasks |
| 旧视频任务详情 | GET /v1/videos/tasks/{taskId} |
| 旧口型同步创建 | POST /v1/lip-sync/tasks |
| 旧口型同步列表 | GET /v1/lip-sync/tasks |
| 旧口型同步详情 | GET /v1/lip-sync/tasks/{taskId} |
| 旧音色列表 | GET /v1/voices |
旧路径示例:POST /api/open/tts、POST /api/open/tts/jobs、POST /api/open/speech-to-text、POST /api/open/lip-sync/create、GET /api/open/lip-sync/list、GET /api/open/lip-sync/query?id=... 都应迁移到上表对应的当前 CN 路径。
如果旧客户端曾使用海外路径,例如 POST /v1/speech/tts、POST /v1/speech/transcriptions、POST /v1/media/lip-sync/jobs,也应迁移到 POST /v1/tts/speech、POST /v1/asr/tasks、POST /v1/lip-sync/tasks。
字段迁移要点
TTS
当前 CN TTS 请求只需要这些公开字段:
{
"text": "Hello",
"voiceId": "clara",
"model": "kitta-tts-v1",
"speed": 1,
"emotion": "calm"
}text、voiceId、model 为必填;speed、emotion 为可选。迁移 SDK 时应把内部音色选择统一映射到 voiceId,把模型选择统一映射到 model。
同步 TTS 成功响应不是 JSON,而是音频二进制。扣费通过响应头 x-kitta-credits-charged 返回。
ASR
当前 ASR 创建任务使用:
{
"audioUrl": "https://example.com/audio.mp3",
"model": "kitta-asr-v1",
"durationSeconds": 65,
"languageHints": ["zh"],
"language": "zh"
}audioUrl 为必填。旧客户端如果使用 snake_case 音频字段,需要在 SDK 层转换为 audioUrl。
口型同步
当前口型同步创建任务使用:
{
"model": "kitta-lip-sync-v1",
"inputMode": "video",
"videoUrl": "https://example.com/video.mp4",
"audioUrl": "https://example.com/audio.mp3",
"durationSeconds": 12
}图片驱动时传 inputMode: "image" 和 imageUrl,可选 referenceImageUrl。
音色
当前公开 CN /v1 只提供 GET /v1/voices。创建、删除和单个音色详情不是当前公开合同的一部分。旧 SDK 如果暴露音色管理方法,应在 CN 版本中标记为不可用,或改为引导用户使用站内产品能力。
错误结构迁移
旧客户端可能按顶层 code / message 解析错误。当前 CN /v1 错误结构是:
{
"error": {
"code": "invalid_request",
"message": "Invalid request",
"requestId": "req_xxx"
}
}迁移 SDK 时应读取 response.error,并保留未知字段。
响应兼容
典型差异:
- 同步 TTS 成功时返回音频二进制,并通过
x-kitta-request-id、x-kitta-credits-charged返回元数据。 - 异步 TTS 创建任务返回
{ taskId, status, creditsCharged }。 - TTS、ASR、图片、视频和口型同步任务详情都使用任务 DTO,并保留
creditsCharged、时间戳和错误字段。 - 列表接口返回
data和pagination。 - Usage 取代旧 Profile,用于查询余额、API 用量和近期流水。
计费迁移检查
迁移扣费接口时请同时检查:
- 同步 TTS 是否读取
x-kitta-credits-charged。 - 异步任务创建和任务详情是否保存
creditsCharged。 - ASR、图片、视频和口型同步是否按任务 DTO 对账。
- 用量页是否改为读取
GET /v1/usage,而不是旧 Profile 字段。
灰度验证清单
- 使用测试 token 调用
GET /v1/usage,确认鉴权和 Base URL 正确。 - 调用
GET /v1/voices,选取一个可用voiceId和defaultModel。 - 用短文本调用
POST /v1/tts/speech,验证音频响应和扣费响应头。 - 创建一个异步 TTS 任务并查询到终态。
- 用短音频创建 ASR 任务,确认
transcript和creditsCharged。 - 创建一个短口型同步任务,确认
taskId、状态轮询和最终resultVideoUrl。 - 故意使用错误 token 和不足额度场景,确认 SDK 能解析嵌套
error响应。
完成以上验证后,再把生产流量切到当前 CN /v1 路径。