错误码与重试
统一结构化错误体、HTTP 状态码语义、平台特有错误码(额度暂停、密钥状态、安全防护处置等),以及按错误类型的退避与重试建议
平台对所有接口采用统一的结构化错误体:无论数据平面还是控制平面,出错时都返回相同形态的错误对象,便于您在应用侧统一识别、本地化与重试。本页说明错误体结构、HTTP 状态码语义、平台特有错误码,以及按错误类型的退避重试建议。
错误体结构
出错时,响应体为如下结构(数据平面按所兼容协议的 error 对象形态返回,以兼容既有 SDK):
{
"error": {
"code": "<字符串错误码>",
"message": "<面向用户的可读说明>",
"request_id": "<请求追踪标识>"
}
}| 字段 | 用途 |
|---|---|
code | 字符串错误码,用于程序判定(如 quota_exceeded / key_suspended / not_found) |
message | 可读的中文说明,便于排查与展示 |
request_id | 请求追踪标识;反馈或申诉时请提供此标识,便于平台定位该次请求 |
优先按
code判定。 请在应用侧以code字段做程序分支,message仅用于展示——message文案可能随版本优化,code保持稳定。HTTP 状态码用于粗分类,code用于细分原因。
HTTP 状态码语义
| 状态码 | 含义 | 典型原因 |
|---|---|---|
400 | 参数错误 | 请求体缺字段、字段格式或取值非法 |
401 | 未认证 | 密钥缺失、格式不正确(非 Authorization: Bearer <密钥>) |
403 | 无权限 | 密钥未被授权调用所请求的模型 |
404 | 资源不存在 | 路径或资源不存在;越权访问不属于本账户的资源亦归为 404(按归属隔离) |
409 | 状态冲突 | 对已注销 / 已暂停的密钥或不可变更状态执行操作 |
429 | 额度暂停或限速 | 触发账户信用额度暂停,或触发限速 |
5xx | 服务端异常 | 平台侧临时故障,通常可重试 |
平台特有错误码
在 HTTP 语义之上,平台以 code 字段细分常见原因。下表为常见错误码(具体取值以实际响应为准):
code | 典型 HTTP | 含义 | 处理建议 |
|---|---|---|---|
invalid_request | 400 | 请求参数缺失或非法 | 按 message 修正请求体,修正后重试 |
unauthorized | 401 | 密钥缺失或格式错误 | 检查请求头是否为 Authorization: Bearer <密钥>、密钥是否以 tsxt- 前缀开头 |
key_suspended | 401 / 409 | 该密钥已被暂停(主动暂停或安全排查) | 在控制台恢复该密钥,或改用其他可用密钥;详见 API 密钥管理 |
key_revoked | 409 | 该密钥已注销,不再鉴权 | 申请新密钥并切换;注销不可逆 |
model_forbidden | 403 | 该密钥未被授权调用所请求的模型 | 确认 model 取自 模型列表接口、且在该密钥授权范围内 |
not_found | 404 | 路径或资源不存在,或越权访问 | 核对路径与资源标识;确认资源属于本账户 |
quota_exceeded | 429 | 账户当月用量触及汇总信用额度上限,账户达额暂停 | 暂缓重试、触发内部告警;待进入新结算月或完成提额后恢复,详见 额度管理 |
rate_limited | 429 | 触发限速 | 按 Retry-After(若有)退避后重试 |
guardrail_blocked | 400 / 200 | 请求或响应被安全防护处置(注入防护 / 应拒答 / 脱敏等) | 调整查询表述;若为误拒,凭 request_id 申诉,详见 安全防护处置 |
upstream_unavailable | 5xx | 后端模型暂不可用(平台已自动重试与切换仍未成功) | 短暂退避后重试;平台会在异常时自动重试与切换,偶发性失败通常可恢复 |
internal_error | 5xx | 平台侧临时异常 | 退避后重试;持续出现请凭 request_id 反馈 |
达额暂停(
quota_exceeded/429)。 平台采用单层汇总信用额度约束全部密钥,账户当月用量达上限时全部密钥一并暂停。此时数据平面查询返回429,控制平面的查询、账单、额度等管理功能照常可用。额度核减、预警、达额恢复与提额详见 额度管理。
安全防护处置(
guardrail_blocked)。 当请求或响应触发注入防护、敏感信息脱敏或应拒答处置时,平台返回结构化护栏处置结果。若正常请求被误判,请留存request_id并按 安全防护处置 · 误拒说明与申诉路径 提交申诉。
退避与重试建议
不同错误的可重试性不同,请按下表区别处理,避免无效重试造成请求堆积:
| 错误类型 | 是否可重试 | 建议策略 |
|---|---|---|
400 参数错误 | 否(需修正) | 按 message 修正请求体后再发起,不要原样重试 |
401 / 403 认证与权限 | 否(需处置) | 检查密钥与模型授权;修正后再调用,不要密集重试 |
404 资源不存在 | 否 | 核对路径与资源标识,不重试 |
409 状态冲突 | 否 | 改用可用密钥或目标状态后再操作 |
429 额度暂停(quota_exceeded) | 否(需恢复) | 不要立即重试;暂缓并告警,待新结算月或提额恢复 |
429 限速(rate_limited) | 是(需退避) | 按 Retry-After 或指数退避后重试 |
5xx 服务端异常 | 是(需退避) | 指数退避 + 抖动重试,设上限次数;超过上限转告警 |
推荐的重试要点:
- 指数退避 + 抖动。 对
5xx与rate_limited,每次重试间隔按指数增长并加入随机抖动,避免重试风暴。 - 设重试上限。 为可重试错误设定最大重试次数(如 2~3 次),超过即转入告警与降级,不无限重试。
- 区分对待
429。 先看code:rate_limited退避后可重试,quota_exceeded(额度暂停)则应暂缓并告警、等待恢复,而非重试。 - 流式断流。 流式中途断开按 流式响应 · 断流与重试建议 处理;只有产出
usage末帧的那次生成才计入用量。 - 留存
request_id。 任何需要反馈或申诉的错误,请连同request_id一并提供,便于平台定位。
示例:对
429的区分处理。 收到429时,先读error.code:若为rate_limited,按退避重试;若为quota_exceeded,识别为达额暂停后停止重试、触发内部告警,并在控制台查看额度状态、按需提交提额申请。
错误码与各能力页的对应
| 您遇到的 | 前往 |
|---|---|
quota_exceeded / 达额 429 | 额度管理 |
guardrail_blocked / 误拒申诉 | 安全防护处置 |
key_suspended / key_revoked / model_forbidden | API 密钥管理 |
| 接入排错(401/403/404 自检清单) | 快速接入指南 · 常见接入问题 |
| 流式断流重试 | 流式响应 |