错误码
三个接口面的错误格式、稳定的机器可读代码,以及每个代码对应的处理建议。
错误格式
三个接口面各有自己的错误形状,但都带一个稳定的机器可读标识和一个请求 id。message 是给人看的,会随语言变化,不要拿它做分支。
网关面(/v1、/v1beta、/v1/videos)返回 {error: {code, message}, request_id} 并使用真实 HTTP 状态码;控制台面(/api/v1)返回扁平信封;私有协议(/server)永远是 HTTP 200,错误在响应体里。
| 接口面 | 错误格式 |
|---|---|
| /v1、/anthropic、/gemini(含旧 /v1beta) | {"error": {"code", "message"}, "request_id"},HTTP 状态码即真实状态 |
| /api/v1 | {"code", "error_code", "message", "request_id"};422 另带 violations |
| /server | HTTP 200 + {"code": -1, "message": "…"},文案逐字兼容旧系统 |
{
"error": {"code": "insufficient_balance", "message": "余额不足,无法冻结本次调用。"},
"request_id": "req_01J…"
}{
"code": 422,
"error_code": "invalid_time_range",
"message": "时间范围不合法。",
"request_id": "req_01J…",
"violations": []
}- 网关面用 error.code,控制台面用 error_code,两者取值来自同一张代码表,含义一致。
- 同一个代码的 HTTP 状态码是固定的;反过来不成立,一个状态码下有多个代码。
控制台信封字段
控制台接口失败时返回下面这些字段。code 保留给早期客户端,请对 error_code 分支与本地化。
| 字段 | 类型 | 说明 |
|---|---|---|
| code | integer | HTTP 状态码。 |
| error_code | string | 稳定的机器可读错误标识,例如 invalid_credentials。 |
| message | string | 面向人的说明,随语言变化,不要用于分支。 |
| request_id | string | 与服务端日志对应的请求标识,联系支持时请附上。 |
| violations | array | 仅 422 出现:字段级校验失败列表,元素形如 {field, rule, message}。 |
网关错误码
| code | HTTP | 含义 | 处理建议 |
|---|---|---|---|
| invalid_api_key | 401 | 密钥不存在或格式错误 | 检查密钥与请求头 |
| api_key_expired | 401 | 密钥已过期 | 延长有效期或新建密钥 |
| api_key_disabled | 403 | 密钥已停用 | 在控制台启用或新建 |
| account_disabled | 403 | 账号被停用 | 联系支持处理 |
| ip_not_allowed | 403 | 来源 IP 不在白名单 | 更新密钥的 IP 白名单 |
| region_blocked | 403 | 区域策略禁止访问网关 | 参考区域说明或更换区域 |
| model_not_allowed | 403 | 密钥所属分组不允许该模型 | 更换分组或模型 |
| model_not_found | 404 | 模型不存在 | 以模型广场的名称为准 |
| model_not_supported | 422 | 该模型不支持这个操作 | 改用它支持的端点 |
| insufficient_balance | 402 | 余额不足以冻结本次调用 | 充值或使用套餐 |
| quota_exceeded | 429 | 套餐或资源包额度用尽 | 等待窗口重置或续费 |
| rate_limited | 429 | RPM / TPM 超限 | 按 Retry-After 退避重试 |
| concurrency_exceeded | 429 | 并发超限 | 降低并发或升级分组 |
| too_many_running_tasks | 429 | 该用户等待与运行中的任务过多 | 等已有任务结束后重试 |
| content_filtered | 422 | 内容安全拦截 | 调整输入内容 |
| invalid_request | 400 | 参数错误 | 对照文档修正请求 |
| invalid_json | 400 | 请求体不是合法 JSON,或含未声明字段 | 检查请求体 |
| idempotency_conflict | 409 | 幂等键与不同的请求体冲突 | 换一个新的键 |
| task_already_completed | 409 | 要取消的任务在上游已经完成 | 直接查询任务结果 |
| task_cancel_unavailable | 503 | 任务所在的上游账号暂时无法连接,现在不能取消 | 稍后重试取消 |
| idempotency_in_progress | 409 | 同一幂等键的首次请求仍在处理 | 稍后用同一个键重试 |
| no_account_available | 503 | 上游账号池暂无可用账号 | 稍后重试;平台会自动切换 |
| upstream_error | 502 | 上游返回错误 | 看 message,并附 X-Request-Id 联系支持 |
| upstream_timeout | 504 | 上游超时 | 重试或缩短请求 |
| stream_interrupted | 502 | 流式响应中断 | 重试;已生成部分按实际用量结算 |
| service_unavailable | 503 | 依赖组件暂时不可用 | 稍后重试 |
| not_found | 404 | 资源不存在或不属于调用者 | 确认 id 与归属 |
| asset_access_denied | 403 | 密钥的素材访问范围为 none,却引用了素材 | 在控制台把密钥改成 own 或 all |
| reference_asset_unavailable | 404 | 参考素材不存在、未上传完成,或超出密钥的素材访问范围 | 确认素材 id 与密钥的素材访问范围 |
| asset_not_deletable | 403 | 访问范围为 own 的密钥试图删除控制台上传的素材 | 在控制台删除,或使用访问范围为 all 的密钥 |
- 私有协议把这些代码映射成旧系统文案,例如 insufficient_balance → user remainingAmount is not enough,too_many_running_tasks → get lock failed,上游失败 → call api error。
- 4xx / 5xx 的失败调用不计费;流式响应中断时,已生成的部分按实际用量结算。
控制台错误码
| error_code | HTTP | 含义 | 处理建议 |
|---|---|---|---|
| unauthenticated | 401 | 未登录或会话已失效 | 重新登录 |
| invalid_credentials | 401 | 账号或密码不正确 | 检查后重试 |
| mfa_required | 401 | 账号开启了两步验证,登录验证码已发到邮箱 | 在 code 字段提交邮箱里的验证码 |
| mfa_invalid | 401 | 登录验证码错误或已过期 | 重新获取验证码后再试 |
| captcha_required | 428 | 需要先通过验证码挑战 | 取回验证码并带上 captcha_token |
| captcha_invalid | 422 | 验证码校验失败 | 重新取一次验证码 |
| account_locked | 423 | 连续失败次数过多,账号被临时锁定 | 按提示等待后重试 |
| account_disabled | 403 | 账号被停用 | 联系支持处理 |
| account_banned | 403 | 账号被封禁 | 联系支持申诉 |
| forbidden | 403 | 当前身份没有该操作的权限 | 换有权限的账号 |
| email_exists | 409 | 邮箱已被注册 | 改用登录或找回密码 |
| weak_password | 422 | 密码强度不足 | 换更长更随机的密码 |
| password_reused | 422 | 新密码与当前密码相同 | 换一个不同的密码 |
| verification_cooldown | 429 | 验证码发送过于频繁 | 按 Retry-After 等待 |
| verification_exhausted | 422 | 验证码错误次数过多 | 重新申请一个验证码 |
| invalid_time_range | 422 | 时间范围不合法 | 保证 start 早于 end |
| invalid_ledger_type | 422 | 分录类型不在枚举内 | 对照 type 取值表 |
| identity_already_linked | 409 | 该第三方账号已绑定到别的用户 | 先在原账号解绑 |
| wholesale_invalid | 422 | 批发请求的字段组合不合法 | 对照 kind 的必填字段 |
| wholesale_customer_not_bound | 422 | 客户未绑定到本代理 | 先请运营绑定客户 |
| wholesale_multiplier_out_of_policy | 422 | 代理价格倍率超出平台允许区间 | 联系运营调整代理档案 |
| agent_not_found | 404 | 当前账号没有代理档案 | 联系运营开通代理 |
| agent_suspended | 403 | 代理档案已停用 | 联系运营恢复 |
- 这张表覆盖账号安全与代理批发等常见错误,不是全量清单;未列出的代码同样遵循上面的信封与状态码约定。