错误处理
统一错误码
先依据 HTTP 状态和稳定的 error.code 决定是否重试,再记录 request_id 用于追踪。
错误响应
{
"request_id": "req_xxx",
"error": {
"code": "INVALID_API_KEY",
"message": "接口密钥无效"
}
}请求与平台错误
| 错误码 | HTTP | 含义 | 处理建议 |
|---|---|---|---|
INVALID_API_KEY | 401 | Bearer 头或密钥无效 | 检查服务端配置,不要原样重试 |
API_KEY_DISABLED | 401 | 密钥已禁用或删除 | 更换有效密钥 |
EMAIL_NOT_VERIFIED | 403 | 开发者邮箱未验证 | 先完成邮箱验证 |
INVALID_IDEMPOTENCY_KEY | 400 | 幂等键缺失或格式无效 | 生成 8~128 位安全字符 |
IDEMPOTENCY_CONFLICT | 409 | 同一幂等键用于不同请求 | 为新请求生成新幂等键 |
BALANCE_INSUFFICIENT | 409 | 可用积分不足 | 充值后用同一请求重试 |
FINAL_FILES_NOT_READY | 409 | 预览尚未完成或成品文件未准备好 | 等待 result.status=preview_ready 后再确认成品 |
API_RATE_LIMIT | 429 | 用户或密钥分钟配额已用完 | 遵循 Retry-After 后重试 |
API_CONCURRENCY_LIMIT | 429 | 任务并发数达到上限 | 等待已有任务结束 |
FILE_EXPIRED | 410 | 资源已过期 | 重新创建任务 |
API_UNAVAILABLE | 503 | 接口暂时不可用 | 指数退避并保持相同幂等键 |
图片质量问题
质量问题出现在任务的结构化 error 或 quality.issues 中。它们需要更换输入图片,不应自动反复提交原图。
| 错误码 | 含义 | 用户提示建议 |
|---|---|---|
NO_FACE | 未检测到人脸 | 上传正面、清晰且无遮挡的单人照片 |
MULTIPLE_FACES | 检测到多张人脸 | 裁剪为只包含一人的照片 |
IMAGE_BLURRY | 图片模糊 | 上传清晰原图或重新拍摄 |
IMAGE_TOO_DARK | 图片光线过暗 | 在光线充足的环境重新拍摄 |
IMAGE_OVEREXPOSED | 图片过曝 | 避免强光直射后重新拍摄 |
FACE_TOO_SMALL | 人脸占比过小 | 靠近后重新拍摄 |
FACE_TOO_LARGE | 人脸占比过大 | 稍微远离后重新拍摄 |
FACE_ANGLE_TOO_LARGE | 头部倾斜过大 | 保持头部端正 |
SHOULDERS_INCOMPLETE | 肩部区域不完整 | 上传包含完整肩部的正面照片 |
重试原则
- 网络中断、超时或 5xx:保持请求内容和幂等键不变,指数退避重试。
- 429:优先读取
Retry-After,等待后再提交。 - 4xx 参数、权限或图片质量错误:先修正原因,不要原样循环重试。
- 无法判断时,保留请求标识、接口路径、HTTP 状态和错误码。