FishSpeech Docs
API Reference

迁移指南

从旧版 Open API 路径迁移到当前 CN /v1 API。

迁移指南

新接入应使用当前 CN /v1 路径,并以 https://kittaaudio.com/api 作为 Base URL。旧客户端里可能存在历史 /api/open/* 路径、海外 OpenAPI 路径或早期草案路径。迁移时请统一到当前 CN 合同。

Base URL: https://kittaaudio.com/api

推荐迁移顺序

  1. 先迁移只读接口,例如 Usage、音色列表和任务详情。
  2. 再迁移任务创建接口,例如同步 TTS、异步 TTS、ASR、图片、视频和口型同步。
  3. 灰度期间同时记录旧路径和新路径的请求量、状态码和 requestId
  4. 确认生产流量不再依赖旧路径后,再删除 SDK 中的旧路径分支。

不要一次性替换所有接口后直接上线。扣费接口需要特别关注重试和额度对账。

路径迁移表

下表左侧是旧路径或旧概念,右侧是当前 CN /v1 路径。

旧路径或旧概念当前 CN API
旧 Profile 查询GET /v1/usage
旧同步 TTSPOST /v1/tts/speech
旧异步 TTS 创建POST /v1/tts/tasks
旧 TTS 任务列表GET /v1/tts/tasks
旧 TTS 任务详情GET /v1/tts/tasks/{taskId}
旧实时 TTSGET /v1/tts/live
旧语音转文字创建POST /v1/asr/tasks
旧语音转文字列表GET /v1/asr/tasks
旧语音转文字详情GET /v1/asr/tasks/{taskId}
旧实时 ASRGET /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/ttsPOST /api/open/tts/jobsPOST /api/open/speech-to-textPOST /api/open/lip-sync/createGET /api/open/lip-sync/listGET /api/open/lip-sync/query?id=... 都应迁移到上表对应的当前 CN 路径。

如果旧客户端曾使用海外路径,例如 POST /v1/speech/ttsPOST /v1/speech/transcriptionsPOST /v1/media/lip-sync/jobs,也应迁移到 POST /v1/tts/speechPOST /v1/asr/tasksPOST /v1/lip-sync/tasks

字段迁移要点

TTS

当前 CN TTS 请求只需要这些公开字段:

{
  "text": "Hello",
  "voiceId": "clara",
  "model": "kitta-tts-v1",
  "speed": 1,
  "emotion": "calm"
}

textvoiceIdmodel 为必填;speedemotion 为可选。迁移 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-idx-kitta-credits-charged 返回元数据。
  • 异步 TTS 创建任务返回 { taskId, status, creditsCharged }
  • TTS、ASR、图片、视频和口型同步任务详情都使用任务 DTO,并保留 creditsCharged、时间戳和错误字段。
  • 列表接口返回 datapagination
  • Usage 取代旧 Profile,用于查询余额、API 用量和近期流水。

计费迁移检查

迁移扣费接口时请同时检查:

  • 同步 TTS 是否读取 x-kitta-credits-charged
  • 异步任务创建和任务详情是否保存 creditsCharged
  • ASR、图片、视频和口型同步是否按任务 DTO 对账。
  • 用量页是否改为读取 GET /v1/usage,而不是旧 Profile 字段。

灰度验证清单

  • 使用测试 token 调用 GET /v1/usage,确认鉴权和 Base URL 正确。
  • 调用 GET /v1/voices,选取一个可用 voiceIddefaultModel
  • 用短文本调用 POST /v1/tts/speech,验证音频响应和扣费响应头。
  • 创建一个异步 TTS 任务并查询到终态。
  • 用短音频创建 ASR 任务,确认 transcriptcreditsCharged
  • 创建一个短口型同步任务,确认 taskId、状态轮询和最终 resultVideoUrl
  • 故意使用错误 token 和不足额度场景,确认 SDK 能解析嵌套 error 响应。

完成以上验证后,再把生产流量切到当前 CN /v1 路径。

On this page