所有接口的错误响应统一为一个 error 对象,含 message、type、code 三个字段。排查问题时请提供 error.message 末尾括号里的 request id。
错误响应格式
模型接口:
json
{
"error": {
"message": "模型 gpt-5.4-mini-typo 当前不可用:请核对调用名是否与模型广场一致(区分大小写);名称无误则为线路暂时故障,请稍后重试。 (request id: 2026092121260443445983882)",
"type": "new_api_error",
"code": "model_not_found"
}
}`error.message` 是给人看的中文说明,会告诉你发生了什么、该怎么改;程序判断请用 HTTP 状态码与
error.code / error.type,这两个字段稳定、不会因文案调整而变。参数校验类错误(如字段类型不对、max_tokens 与 max_completion_tokens 混用)会保留原始英文提示,便于对照 SDK 文档。鉴权失败时(Key 缺失、写错或已删除)返回 401,type 为 new_api_error、code 为空字符串,message 为中文提示「本次请求鉴权未通过…」并带本次请求 ID:
json
{
"error": {
"code": "",
"message": "本次请求鉴权未通过;仅凭此错误无法确认是 本站令牌还是上游凭据问题,也不能据此判断 云上创造 API Key 已失效。请核对请求鉴权配置,具体以错误 code 与控制台令牌状态为准;持续失败请联系站方。 (request id: 202610040133100287101778268d9d6esaiHA3z)",
"type": "new_api_error"
}
}判断是否鉴权失败请以 HTTP 状态码 401 和
error.type 为准,不要匹配 message 文案(文案可能随提示优化而调整)。常见错误码
| HTTP 状态 | error.code / error.type | 含义与处理 |
|---|---|---|
| 401 | new_api_error(code 为空) | Key 缺失、写错或已删除;检查 Authorization: Bearer <key>(x-api-key 只在 /v1/messages、/v1/models 有效,其它端点只带它也会 401) |
| 503 | model_not_found | 调用名不存在,或该模型所有线路暂时不可用;对照 模型广场 的调用名,名称无误则稍后重试。调用名写错时 message 末尾会附最多 3 个近似的可用调用名,形如「…;你是否想用:qwen3.8-flash」(只做提示,不会自动改用) |
| 403 | insufficient_user_quota | 账户余额不足,message 里有剩余额度与本次需预扣的金额;充值后重试 |
| 402 | free_tier_daily_exhausted | 福利版(*-free)每位用户每天最多 100 次(三个福利版合计,按北京时间自然日,成功失败都计),用尽后返回本错误;message 为「福利版今日额度已用尽(每日 100 次),请明天再来或换用付费版模型。」。本错误不扣费、不会自动换线路;北京时间 0 点重置,或把模型名改为去掉 -free 的付费版 |
| 402 | free_tier_exhausted | 福利版模型的上游免费档在高峰时出现瞬时限流时返回本错误(与每日上限无关);message 为「本站的 X 福利版模型当前额度紧张(高峰繁忙),请稍后重试;如需稳定使用,请把模型名改为 Y(付费版,按量计费)。」(X 为你请求的福利版名,Y 为去掉 -free 的付费版名)。本错误不扣费、不会自动换线路;建议退避 30–60 秒后重试,或按提示把模型名改为付费版 |
| 400 | invalid_request / invalid_request_error | 请求本身有误:参数类型不对、模型与协议不匹配、纯文本模型收到图片等;message 里有具体字段与改法。重试不会成功,按提示改请求。上游只回了笼统的 400(没有指明哪个字段有误)时,网关会先自动换一条线路重试一次,仍失败才返回给你 |
| 400 | (code 为空,message 为「模型 X 暂未开放调用,请联系站方开通。」) | 站方尚未为该模型配置价格,暂不能调用;请联系站方。调用名拼错时先返回的是上面的 503 model_not_found,不是这一条 |
| 400 | sensitive_words_detected | message 为「内容审查不通过…」:提示词或参考素材触发了安全过滤,修改后重试;本次不扣费 |
| 400 | capability_unsupported | 所选参数当前没有可用线路支持(如某个参数值只有部分线路支持、而这些线路暂不可用);不扣费。message 以一句中文建议开头,例如「您选择的质量为「极致」,目前对应线路暂时异常,请更换质量为「高」(可选:高 / 中 / 低 / 自动)。」,后面才是技术原因,并给出可替换的取值。按建议换参数,或稍后重试 |
| 400 | channel_param_unsupported | 请求里某个参数或取值当前没有线路能接(如部分线路不支持的 background、1.5K 档等)。平台已尝试所有可接线路;message 同样以一句中文建议开头(可替换的取值),其后为最后一条线路的说明。去掉该参数或按建议换取值后重试。不扣费 |
| 400 | channel_request_unsupported | 请求的功能组合(如工具类型、输出格式、会话回放方式)当前线路不支持,平台已自动换线路一次仍无法处理。message 为「当前线路不支持本次请求的功能组合(如工具类型、输出格式或会话回放方式),已尝试其他线路仍无法处理。请调整请求参数后重试。」。按提示调整参数后重试。不扣费 |
| 429 | free_tier_rate_limited(福利版)/ upstream_error 等(透传上游) | 模型接口(/v1/*)付费模型不限频;福利版 *-free 每位用户每分钟最多 20 次(三个福利版合计,成功失败都计),超出返回 429 free_tier_rate_limited,JSON 错误体 + Retry-After 响应头,message 为「本站福利版模型每位用户每分钟最多 20 次请求(各福利版模型合计),当前已超出,请 S 秒后重试;如需更高频率,请把模型名改为 Y(付费版,按量计费)。」(S 为到本分钟窗口结束的秒数),按 Retry-After 等待后重试即可,被拒的请求不扣费。其余 429 仅在上游线路繁忙时出现,message 为「线路繁忙,请稍后重试」,降低并发、指数退避重试即可。查询接口另有限流(429 响应体为空),见 速率限制 |
| 499 | client_disconnected | 客户端在收到响应前自己断开(多为客户端超时过短);上游是否已执行无法确认,费用以实际账单为准(通常不扣)。多见于使用日志(客户端已断开,通常收不到这条响应);把客户端读超时调到 ≥300 秒(Claude 系列)或 ≥150 秒(其它模型),流式与非流式都要,见 创建对话补全 的「客户端读超时」 |
| 502 | upstream_rejected(type:OpenAI 格式 server_error、Anthropic 格式 api_error) | 上游线路对本次请求返回了 401 / 403,平台已换线路重试仍失败;不是你的 Key 有问题,稍后重试即可 |
| 503 | upstream_rejected(Anthropic 格式 type 为 overloaded_error) | 已重试,但当前没有可用线路承接本次请求;稍后重试 |
| 500 / 502 / 504 | upstream_error 等 | 上游线路暂时故障,message 为「上游线路…请稍后重试」;换一个模型通常能立即恢复 |
| 502 | empty_response | 上游返回 200 但流里没有任何有效内容(/v1/chat/completions、/v1/messages、/v1/responses 均适用)。网关在你还没收到任何字节时会自动换一条线路重试一次;仍为空才返回本错误,message 为「上游已接收请求,但没有返回任何有效的流式数据,本次结果未完成。请稍后重试;费用状态请以实际账单为准。」 |
| 502 | bad_response | 上游返回 2xx 后响应体不可解析,或在流中返回了错误事件。为避免重复执行和重复计费,不重放,返回本错误并附上游原因;已收到的片段不能视为成功结果,请重试 |
| 503 | native_protocol | 所选协议在该模型当前线路上没有原生支持,且本次请求不允许转换(如会话续接);换用该模型的推荐协议(见 协议选择)或稍后重试。不扣费 |
| 502 | upstream_acceptance_unknown | 与上游的连接在请求发出后中断,无法确认上游是否已受理。已向上游发出且无法确认受理时不重试;流式请求在上游没回任何响应头时会自动换线路。请确认后再决定是否重试,费用以实际账单为准 |
| 502 | (响应含 Cloudflare 字样,无 JSON 错误体) | 不是本站网关返回的错误:单次请求超过约 100 秒仍未回首字节时被网络边缘截断,服务端可能已完成并计费。规避:对话用 stream: true(持续有字节不会被截);长耗时请求走国内通道 https://api.acapi.top(网络边缘超时更宽松,最长 300 秒)。费用以实际账单为准 |
| 400 | (/v1/embeddings 用了对话模型) | 本站模型都是对话模型,暂无向量(Embeddings)模型;对 /v1/embeddings 传对话模型会返回 400(message 说明该模型不支持 embeddings 操作),不扣费,重试不会成功 |
| 502 | upstream_invalid_embedding | /v1/embeddings 上游返回 200 但没有向量结果(data[].embedding);网关已自动换线路重试一次仍失败,本次不扣费 |
会话绑定错误码(session_*)
只在使用会话绑定(请求头 X-CA-Session-ID,见 会话亲和;本站已开启)时出现。都是在发往上游之前返回,不扣费,会话绑定本身保持不变:
| HTTP 状态 | error.code | 含义与处理 |
|---|---|---|
| 400 | session_id_invalid | X-CA-Session-ID 格式不对:只能是 1–128 位字母、数字、. _ -,且只能传一个 |
| 400 | session_request_invalid | 请求体无法读取或解析,按提示修正请求 |
| 400 | session_state_unsupported | message 为「当前会话状态暂不支持本次请求,请新开会话重试。」:只在带 previous_response_id 续接、且当前线路无法承载会话状态时出现(不续接的会话请求可以由平台转换协议承接,不会出现此错误);换一个新的 X-CA-Session-ID 重试 |
| 403 | session_identity_required | 会话绑定需要有效的 API Key 身份 |
| 408 | session_request_closed | 客户端在请求发出前已断开 |
| 409 | session_expired | 显式会话 24 小时内没有成功请求已过期;换一个新的 X-CA-Session-ID,或带 X-CA-Session-Reset 重置 |
| 409 | session_state_unbound | 续接的上一轮响应不属于当前会话(或会话已换代),请从新一轮开始。由平台转换承接的 Responses 请求不保存会话状态,用它的 id 做 previous_response_id 续接也会得到此错误;请自带历史或换新的 X-CA-Session-ID |
| 409 | session_state_credential_changed | 会话绑定的线路凭据已变更,续接状态无法沿用;开新会话 |
| 409 | session_credential_unavailable | message 为「当前会话绑定的线路凭据暂不可用,请新开会话重试。」;开新会话 |
| 409 | session_reset_conflict / session_binding_conflict | 重置或并发绑定冲突;X-CA-Session-Reset 的值须等于响应头 X-CA-Session-Generation 的当前值,稍后重试 |
| 503 | session_supplier_unavailable | message 为「当前会话绑定的线路暂时不可用,请新开会话重试;持续失败请联系站方。」:绑定的线路当前不可用,且本次请求不能换线路(例如续接上一轮响应);开新会话或稍后重试 |
| 503 | session_storage_unavailable / session_configuration_unavailable | 会话服务暂时不可用,稍后重试 |
常见中文提示
下面几种情况,error.message 会是固定的中文提示(末尾仍带 (request id: …)),状态码、type、code 不变:
| 提示文案 | 常见状态 | 含义与处理 |
|---|---|---|
| 会话历史与当前线路不兼容,请 /compact 或新开会话再试。 | 400 | 会话历史里带了当前线路不认的字段或签名(如其它线路生成的思考签名、工具调用记录);在 Claude Code 里执行 /compact 或新开会话 |
| 上游线路暂时拒绝请求,已自动重试仍失败,请稍后再试。 | 502 / 503 | 即上表的 upstream_rejected;不是 Key 问题,稍后重试 |
| 上游连接中断,本次未扣费,请重试。 | 5xx | 上游连接被对端中断(HTTP/2 GOAWAY);平台已退回预扣,直接重试即可 |
排查建议
- ·收到 400 时先看
error.message,会说明出错的字段或该怎么改 - ·400 多数是请求本身有误,重试不会成功;个别 400(「暂未开放调用」)需联系站方开通。429 与 5xx 可按指数退避重试(
upstream_acceptance_unknown除外:先确认上一次是否已生效) - ·流式请求的错误分"流开始前"与"流开始后"两种,见 流式输出
- ·找站方排查时,把
error.message末尾的(request id: …)一起发来,能直接定位到那一次请求 - ·换通道试试:连不上、超时、响应明显变慢或收到空响应时,把 Base URL 在国内通道
https://api.acapi.top与国外通道https://acapi.top之间换一个再试(API Key、模型名不用改,两个地址模型完全一样),见 协议选择 的「通道选择」