错误码与限制

错误码、重试策略、请求频率限制与幂等键。

错误响应

{
  "code": -1,
  "message": "Voice not found",
  "data": {
    "error_code": "NOT_FOUND",
    "retryable": false,
    "request_id": "0b5e2f1a-…",
    "voice_id": "…"
  }
}
  • error_code:稳定的错误码,请据此处理错误。
  • retryable:为 true 时可以稍后用相同请求重试(建议指数退避);为 false 时需要修改请求或账户状态后再试。
  • request_id:本次请求的 ID,也在响应头 X-Request-Id 中,联系支持时请提供。
  • 其他字段为该错误的补充信息,例如 field(出错的参数)、index(批量中出错的条目)、required / available(所需与可用积分)。

错误码

HTTPerror_code可重试说明与处理
400INVALID_REQUEST否参数缺失或不合法,见 field
400CONSENT_REQUIRED否克隆声音时未传 consent=true
400SAMPLE_QUALITY_FAILED否克隆样本未通过质量检查,见 issues
400CONTENT_REJECTED否输入内容未通过安全审核
401UNAUTHORIZED否缺少 API 密钥,或密钥无效、已删除
402INSUFFICIENT_CREDITS否积分不足,见 required 和 available,购买积分后重试
403API_ACCESS_REQUIRED否当前套餐不含 API,请升级到标准版或以上
403UPGRADE_REQUIRED否超出套餐限制(字数、文件大小、时长),见 max_allowed 等字段
403VOICE_LIMIT_REACHED否声音名额已满,删除不用的声音或升级套餐
404NOT_FOUND否资源不存在或不属于你
409VOICE_NOT_READY否声音尚未可用(voice_status 为当前状态)
409IDEMPOTENCY_KEY_REUSED否同一个幂等键用于了不同的请求
409IDEMPOTENCY_IN_PROGRESS是使用同一幂等键的上一个请求仍在处理
413FILE_TOO_LARGE否上传文件超过 30MB
415UNSUPPORTED_AUDIO_FORMAT否只支持 WAV、MP3、OGG、WEBM、M4A
429RATE_LIMITED是请求过于频繁,按 Retry-After 秒数等待后重试
500INTERNAL_ERROR是服务器内部错误,稍后重试
503SYSTEM_BUSY是系统繁忙,稍后重试

任务本身失败(而不是创建请求失败)时,任务对象的 error.code 为 SYNTHESIS_FAILED,已扣积分会自动退还,可以重新创建任务。

请求频率限制

按账号计算,同一账号的所有密钥共用额度:

套餐每分钟请求数
标准版60
高级版120

每个响应都带有以下响应头:

响应头说明
X-RateLimit-Limit每分钟上限
X-RateLimit-Remaining当前窗口剩余次数
X-RateLimit-Reset当前窗口重置时间(Unix 秒)
Retry-After被限流时需要等待的秒数

此外,同时生成中的任务数受套餐并发上限限制(标准版 5 个、高级版 10 个)。超出的任务会自动排队,不会报错。

需要更高的限额请联系 [email protected]。

其他限制

项目限制
单次文字转语音字数按套餐,标准版及以上为 1,000 字
单次批量条数100 条
上传文件大小30MB,并受套餐上限约束
声音转换时长5 分钟
列表每页条数100(公共声音 50)

具体数值以 GET /account 返回的 limits 为准。

幂等键

网络超时后重试创建请求,可能导致重复创建和重复扣费。为所有创建类请求(POST /tts、POST /tts/batches、POST /voice-conversion、POST /voices)加上 Idempotency-Key 请求头即可避免:

curl https://voiceailabs.com/api/v1/tts \
  -H "Authorization: Bearer $VAL_API_KEY" \
  -H "Idempotency-Key: 4f9a1c2e-order-1024" \
  -H "Content-Type: application/json" \
  -d '{"voice_id": "VOICE_ID", "text": "你好"}'
  • 幂等键为 1–255 个可见 ASCII 字符,建议使用 UUID 或你系统中的业务 ID。
  • 24 小时内,用同一个键重复发送相同的请求,会直接返回第一次的结果(响应头 Idempotent-Replayed: true),不会再次创建和扣费。
  • 同一个键用于不同的请求内容时返回 IDEMPOTENCY_KEY_REUSED。
  • 只有成功的请求会被记录。请求失败(如积分不足)后,可以用同一个键修正后重试。
  • 如果持续收到 IDEMPOTENCY_IN_PROGRESS 超过 1 分钟,请用 GET /syntheses 确认任务是否已创建,再决定是否换一个新键重试。