错误

genkiln 的错误格式、所有 HTTP 错误码、任务错误码,以及哪些错误可以安全重试。

错误使用标准 HTTP 状态码,响应体为 JSON,包含稳定、可供程序判断的 code:

JSON
{
  "error": {
    "code": "invalid_request",
    "message": "input.duration: Invalid input",
    "param": "input.duration",
    "request_id": "req_01JC8ZW4H7J2K5M8N1P3Q6R9TV"
  }
}
字段说明
code下表中的稳定错误码。请根据它做判断,而不是 message。
message面向人的说明(英文),措辞可能调整。
param仅出现在部分 invalid_request 和 not_found 错误中:导致错误的字段,例如 input.image_urls.0。
task仅在任务已创建但无法启动时出现:已失败并退款的任务。见创建任务。
request_id本次请求的 ID。所有响应(无论成功与否)都会通过 X-Request-Id 响应头返回。

联系支持时请附上 request_id。

HTTP 错误码

HTTP错误码含义可重试?
400invalid_request请求格式错误或校验失败:JSON 无效、请求体超过 64 KB、未知字段、input 不合法、URL 不安全、metadata 过大、cursor 或 status 无效。否,请修正请求。
401invalid_api_keyAPI Key 缺失、格式错误、已删除或已过期。否。
402insufficient_credits余额低于任务费用,未创建任务。充值后。
403account_suspended该 API Key 所属账号已被停用,未创建任务。否,请联系客服。
403content_rejected提示词或输入素材被内容安全策略拒绝。否,请修改提示词或素材。
404not_found模型或任务不存在,或任务属于其他账号。否。
409idempotency_conflict该 Idempotency-Key 已用于不同的请求体。否,请换新 Key 或使用原请求体。
422model_unavailable模型暂时不可用。稍后。
429rate_limited请求过多,或同时进行的任务过多。是,等待 Retry-After 秒。
500internal_error我们这边出现问题。是,使用退避重试。
503service_busy暂时无法启动任务,已扣积分已退还。是,等待 Retry-After 秒。

429 和 503 响应带有 Retry-After 响应头,值为需要等待的秒数。

任务错误码

任务被受理后才失败的,原因写在任务自身的 error 对象中,而不是 HTTP 错误。见查询任务。

`error.code`含义
generation_failed生成失败。
content_rejected提示词或输入素材被内容安全策略拒绝。
invalid_input输入无法处理,例如图片 URL 无法下载。
timeout任务未在时限内完成。
service_busy服务暂时繁忙。
canceled任务被取消。

以上情况均自动退款。

安全重试

  • 只重试 429、500、503,以及没有收到响应的网络错误。
  • 使用带随机抖动的指数退避,并遵守 Retry-After。
  • POST /v1/tasks 请始终带上 Idempotency-Key,这样响应丢失后的重试会返回第一个任务,而不会重复扣费。