FishSpeech Docs
API Reference

错误

CN /v1 API 通用错误结构、状态码、重试策略和排查字段。

错误

CN /v1 API 错误响应使用嵌套 JSON 结构。客户端应优先读取 error.codeerror.messageerror.requestId

{
  "error": {
    "code": "invalid_request",
    "message": "Invalid request",
    "requestId": "req_xxx"
  }
}

部分错误会携带额外字段,例如 supportedModels。客户端应允许 error 对象存在额外属性,不要用严格 schema 丢弃它们。

通用状态码

状态码含义是否建议自动重试
400请求体、路径参数、查询参数或 URL 字段错误否。应修正请求
401API Token 缺失、无效或已撤销否。应检查密钥和环境
402额度或积分不足否。应充值或降低任务规模
403当前账户无权访问该资源、模型或能力否。应检查权限
404查询的任务不存在或不属于当前账户通常否。应确认 taskId
500服务端错误、数据库错误或供应商错误是。有限次数退避重试

不同接口返回的状态码集合略有不同。同步 TTS 常见 400401403402500;任务详情接口还可能返回 404

常见错误码

code常见触发原因
unauthorized没有 Authorization: Bearer、token 错误、token 已撤销
forbiddenToken 有效但无权访问该能力、模型或任务
invalid_requestJSON 无效、字段类型不正确、模型不支持、缺少条件字段
insufficient_credits余额不足以创建任务或同步生成
not_found任务不存在或不属于当前账户
generation_failed供应商生成失败或内部任务处理失败

具体 code 名称可能随服务端实现扩展。SDK 不应只依赖固定枚举;未知 code 也应保留原始字段并按 HTTP 状态码处理。

额度不足示例

扣费类接口可能返回:

{
  "error": {
    "code": "insufficient_credits",
    "message": "Insufficient credits",
    "requestId": "req_xxx"
  }
}

遇到 402 时,不要立即重试同一个请求。应查询 GET /v1/usage,确认余额、近期任务和 apiUsage.totalCreditsCharged,或者缩短文本、音频、视频任务规模。

同步 TTS 的解析规则

同步 TTS 成功时返回音频二进制:

HTTP/1.1 200 OK
Content-Type: audio/mpeg
x-kitta-request-id: req_xxx
x-kitta-credits-charged: 24

只有错误响应才是 JSON。客户端应先判断状态码:

  • 2xx:按 Content-Type 处理音频,并读取 x-kitta-request-idx-kitta-credits-charged
  • 2xx:按错误 JSON 读取 error 对象。

任务接口重试策略

对任务创建接口,500 可以有限次数退避重试,但要避免重复创建任务:

  • 你方系统应记录内部任务 ID、请求时间、模型、输入 URL 或文本摘要。
  • 如果创建请求超时但不确定服务端是否成功,可以先查询任务列表,再决定是否重试。
  • 400401402403 不应自动重试。

对任务详情和列表接口,建议每 3 到 5 秒查询一次。任务进入 succeededfailed 后停止轮询。

排查字段

排查问题时请记录:

  • HTTP 方法和路径,例如 POST /v1/tts/speech
  • error.requestId 或同步 TTS 成功响应头 x-kitta-request-id
  • 发生时间和时区。
  • 你方内部用户 ID、任务 ID 或订单 ID。
  • 响应状态码、error.codeerror.message
  • 生成类请求的非敏感摘要,例如文本长度、音频时长、文件大小、模型 ID。

不要把完整 API Token、完整用户音频 URL 或隐私文本发送到公开渠道。

客户端类型建议

SDK 可把错误统一解析为:

type KittaApiError = {
  status: number;
  code?: string;
  message: string;
  requestId?: string;
  details?: Record<string, unknown>;
};

解析时把 response.error 展平为 SDK 错误对象,同时保留未知字段。这样服务端扩展 supportedModels 或其它诊断字段时,客户端不会丢失信息。

On this page