← 所有文章

Claude Code API Error 500 与 "Authorization Failed: Internal Server Error" 修复指南

修复 Claude Code 登录报错 Authorization failed: Internal server error 与使用中报 API Error: 500:查官方状态、处理回调与网关 ENABLE_TOOL_SEARCH=false,或切换 API Key 模式。

UniRoute ·

无论你是在登录 Claude Code 时卡在 "Authorization failed: Internal server error",还是在编码中途弹出 "API Error: 500",都说明上游认证/API 服务端或中间网关发生了内部故障,与你的提示词或业务代码无关。请按下方对应的情形立即处理。

情形一:登录时报 Authorization failed: Internal server error

  1. 查看 status.claude.com: 重点检查 claude.ai、Console 和 Claude Code 三个组件是否正在发生故障。
  2. 重新运行 /login(若遇到瞬时 OAuth 报错可先等几分钟): 运行 /login 是官方针对 Login expired 或 OAuth token revoked 的标准修复做法(code.claude.com/docs/en/errors,2026-10-27);如果是瞬时 OAuth 异常,建议先等待几分钟再重新运行 /login。
  3. 按终端具体提示处理浏览器回调或本地监听失败: 根据 code.claude.com/docs/en/errors(2026-10-27):
    • 若终端提示 "The browser can't return the sign-in to Claude Code automatically":手动在浏览器打开终端显示的授权 URL,再把浏览器给出的授权码粘贴到 Paste code here >。
    • 若终端提示 "Couldn't start the local listener that receives the browser sign-in":先重新运行同一命令;若仍然失败,请改用 token 或 API Key 登录。
  4. 更换浏览器或关闭代理/VPN,并用 /status 排查环境变量冲突: 尝试在无代理/VPN 的纯净浏览器窗口完成授权;同时在 Claude Code 中运行 /status 查看当前生效凭据——由于 ANTHROPIC_API_KEY 环境变量优先级高于 /login,若本地残留了失效的 Key,会覆盖网页登录。
  5. 改用 API Key 模式(跳过网页 OAuth 登录): 如果网页 OAuth 持续失败,可通过 ANTHROPIC_API_KEY 或 apiKeyHelper 直接使用 API Key 模式:
    • Anthropic 官方 API Key: 在 Anthropic Console 创建密钥并在终端设置 export ANTHROPIC_API_KEY="sk-ant-..."。
    • UniRoute API Key(一条命令配好): 创建 UniRoute API Key 后即可免网页登录接入 Claude Code。截至 2026-10-27,折扣渠道可用时,Anthropic Claude 模型低至官方 API 价的 42%(例如 Claude Sonnet 5.5 为 $0.84 / $4.20 每百万输入/输出 Token,官方为 $2 / $10;Claude Opus 5.5 为 $1.68 / $8.40,官方为 $4 / $20);折扣渠道不可用时,会自动切到与官方同价的标准渠道(渠道说明;实时价格见 定价页面,完整说明见 Claude Code CLI 接入教程):
      npx --yes --package=https://uniroute.app/community/uniroute-setup-0.1.2.tgz uniroute-setup models
      npx --yes --package=https://uniroute.app/community/uniroute-setup-0.1.2.tgz uniroute-setup configure claude --model MODEL_ID
      

来源与背景说明: "Authorization failed: Internal server error" 这句完整报错并未直接出现在 Claude Code 官方错误文档(截至 2026-10-27)中,但大量用户在 anthropics/claude-code Issue #36004([BUG] Authorization failed: "Internal server error" prevents Claude Code login)与 Issue #10705([BUG] OAuth Request Failed Internal server error)中报告了网页 OAuth 授权回调与 Token 交换阶段的这一报错;上方步骤结合了官方登录恢复说明(code.claude.com/docs/en/errors,2026-10-27)与社区实测做法。

情形二:使用中途报 API Error: 500

根据 Claude Code 官方错误文档(2026-10-27),使用中途触发 500 时的标准原文为:

API Error: 500 Internal server error. This is a server-side issue, usually temporary — try again in a moment. If it persists, check https://status.claude.com.

官方说明指出,5xx 属于 API 内部的意外失败,与你的 prompt、设置或账户无关。请按以下 4 步处理:

  1. 查看 status.claude.com: 确认 Anthropic API 或当前接入网关是否正在发生故障。
  2. 等 1 分钟再试,不要循环重试,先核对用量与工作区改动: 原消息仍保留在会话中(长 prompt 可直接输入 try again),但重试前请先停掉自动重试脚本,确认上一轮是否已经修改了本地文件或产生了计费记录。
  3. LLM 网关用户(设置了 ANTHROPIC_BASE_URL)——设置 ENABLE_TOOL_SEARCH=false: 官方文档(2026-10-27)特别说明,如果 ANTHROPIC_BASE_URL 指向 LLM 网关且每个请求都报 500,请设置环境变量 ENABLE_TOOL_SEARCH=false 后再试。
  4. 状态页无故障但仍持续报错时运行 /feedback: 若 status.claude.com 显示正常但直连请求仍持续报 500,可在 Claude Code 会话内运行 /feedback 反馈。

遇到官方侧持续 5xx 或过载时的补充说明: Claude 的过载取决于全球服务器的综合负载;通过 UniRoute(接入指南)发出的请求会综合路由到各区域里最稳定可用的容量,且在请求尚未开始流式返回时若遇到上游 529,会自动切换上游重试(边界:流式返回一旦开始便无法中途切换,且不承诺永不过载或永不报错)。


还没解决?用诊断器逐项排查

如果你的环境使用了自定义网关、OpenRouter 或外层重试脚本,且上方步骤仍未解决 500 报错,可使用下方交互式诊断器逐层定位。本指南同时覆盖 Anthropic 官方直连、OpenRouter 以及 UniRoute 三种接入路径——只有当排查证据明确指向凭证失效、路由配置错误或特定账户余额不足时,替换密钥、切换服务商或补充余额才有意义。

Claude Code 500 错误快速排错

选择当前请求的服务路径、观测到的错误状态以及是否已有输出或工具执行,查看最重要下一步、停止条件与核对入口。

最重要下一步先核对原请求与用量

执行进度未知:请勿假设请求未生效。先按事发时间戳与模型 ID 核对服务端请求记录、本地工作区改动及用量账单,确认原请求是否仍在处理或已完成扣费。

错误含义与排查重点

错误状态尚未确认:先在 Claude Code 中运行 /status 核对当前服务地址与模型,并在对应服务的调用记录中按事发时间查找真实 HTTP 状态码与错误类型,缺失字段保持“未知”。

当前服务核查重点

目标服务未知:先在 Claude Code 中运行 /status 并私下检查 .claude/settings.json 或环境变量中的 ANTHROPIC_BASE_URL。确认请求究竟发往 api.anthropic.com、OpenRouter 还是 https://api.uniroute.app 后,再去对应平台查记录。

网关映射保持未知:中间网关或代理可能重写、合并或转换上游 HTTP 状态码。终端或网关返回的 500 不能直接证明是 Anthropic 上游产生了 api_error。

停止重试与计费提醒

停止条件:只要原请求是否被上游接收、是否已执行工具动作或是否已产生扣费仍处于“已开始”或“未知”状态,就必须先停下重发动作。重复提交同一提示词可能触发新一轮生成与重复扣费;缺少记录或报错码均不等于零消费。

具体排查步骤
  1. 第一步(核对原请求与副作用):记录事发时间(含时区)与完整模型 ID,先检查本地工作区是否有文件修改或工具命令执行,再到对应服务后台核对是否已产生成功/失败记录与实际费用。
  2. 第二步(确认实际服务路径):在 Claude Code 内运行 /status 并私下核对 ANTHROPIC_BASE_URL,分清请求发往 Anthropic、OpenRouter 还是 UniRoute,切勿跨平台混查账单或误换 Key。
  3. 第三步(对账后再决定后续操作):待原请求的执行结果与账单状态核对清楚后,若故障仍持续或记录缺失,请整理脱敏摘要(不含 Key、提示词或完整响应)联系对应服务的私有支持。

本工具的选项与分诊计算仅在当前页内存中完成,切换选项或重置不会发送或保存您的输入;主动点击下方文档或控制台链接时会正常跳转导航。分诊建议仅用于安排排查顺序,不能替代原请求与账单核对。

1. 先确认实际请求路径与真实错误类别

先在终端运行 claude --version 记录客户端版本;在 Claude Code 会话内输入 /status,确认当前生效的供应商、完整模型 ID 与认证状态。如果拿不准请求实际发往哪里,请私下检查 .claude/settings.json 与当前 Shell 环境变量中的 ANTHROPIC_BASE_URL。UniRoute Claude Code 接入教程说明了根地址 https://api.uniroute.app 与凭证配置方式;若您通过 OpenRouter 接入,可对照 Claude Code 接入 OpenRouter 指南核对其专用地址与密钥。

排查时请同时记录观测到的 HTTP 状态码与结构化错误类型(error.type)。需要注意的是,客户端终端摘要、中间网关响应与上游模型服务响应是三层不同的观测结果:中间网关可能重写或合并上游错误码,仅凭网关或终端返回的 500,不能直接断定是 Anthropic 官方上游发生了内部故障。

错误状态分诊对照表

下表按 Anthropic API 官方错误文档整理了常见状态码与错误类型。若请求经过第三方网关,网关自身的错误映射规则可能与官方直连不同。

观测到的状态码或现象需要区分的实际含义首要处理动作
401、authentication_error认证凭证问题(Key 格式有误、已撤销、已过期,或网关剥离了订阅登录所需的 anthropic-beta OAuth 标头)立即停止重试,在本地核对当前目标服务对应的有效密钥与认证配置。
402、billing_error计费或付款问题立即停止重试,前往当前接收请求的服务后台核查账单与可用额度。
403、permission_error资源或权限被拒绝立即停止重试,检查组织/工作区权限、Key 可用模型范围与渠道权限。
429、rate_limit_error速率限流或支出限额结合错误体与服务后台区分短时限流、月度层级支出上限(无 retry-after)与 Claude Code 工作区支出限额(可能带 retry-after),切勿无条件重试。
500、api_error(Anthropic 直连)服务端内部意外错误先查看实时服务状态并核对原请求是否已执行,仅在状态明确且预算允许时做有限退避。
529、overloaded_error(Anthropic 直连)服务暂时高负载过载先降低并发提交频率、切换模型,或参阅 Claude API 529 Overloaded 排查指南。
504、请求超时或连接断开观测结果不完整(上游可能仍在处理)重新发送前,先核对原请求记录、Token 消耗与本地工作区状态。
HTTP 200 后出现流式错误流式传输启动后中途失败(如 SSE error 事件或未收到 message_stop 提前断流)保留已收到的回复片段,检查是否已触发工具动作并核对账单。

如果响应头包含 request-id 或错误响应体包含 request_id,请私下保存该标识以便向对应服务提交私密工单。需要注意,流式请求在返回 HTTP 200 之后仍可能在中途发生 SSE 错误,此时不会再走常规 HTTP 状态码报错流程;部分非官方网关也可能不返回该标识。

如果您遇到的是 stream idle timeout - partial response received(流式空闲超时与部分响应中断),请转阅 Claude 流式空闲超时排查指南,按事件时间线、本地 SSE 探针和工具副作用核对流程处理;若遇到 Repeated 529 Overloaded errors 或 overloaded_error,请参阅 Claude API 529 过载报错指南。

2. 围绕单笔事故按顺序排查与恢复

排查时请先锁定单次失败请求作为基准。记录带时区的准确事发时间与完整模型 ID,能够帮您把这笔故障请求与并发子代理(Subagents)、后台自动压缩(Compaction)、SDK 自动重试或团队其他成员的调用区分开。

单笔请求排查与恢复顺序表

核查环节具体操作判断依据与停止条件
实时服务状态按当前目标服务查询 Claude 官方状态页 或 OpenRouter 状态页;UniRoute 路径同时核对控制台错误记录与支持反馈。记录事发时间窗口(任何今日服务状态均以您当时的实时查询为准)。状态页显示正常也不能排除单条路由或单账户异常。
实际生效的目标地址检查 /status、所选模型与设置优先级(项目级、用户级或环境变量),确认使用了目标服务文档规定的 Base URL。若目标地址配错,仅针对该项配置做最小修正,并在持久化修改前备份原文件。
错误细节与网关边界将报错时间与调用记录、HTTP 状态码及独立的上游状态码逐一比对。缺失字段保持“未知”。网关状态码与上游状态码可能不一致;若网关改写了错误响应体,还可能影响客户端对不兼容能力字段的自动回退。
重试归属权查明 Claude Code 客户端、底层 SDK、代理层或您自己的包装脚本是否已经在自动重试。任何额外重试策略只应由单一层级负责。开始诊断前,先停掉外层循环重试脚本。
流式输出与工具进度确认终端是否已打印部分回答,或代理是否已开始修改文件、运行 Bash 命令、调用 MCP 工具。只要已有进度或进度未知,必须先核对本地变更与用量账单,严禁直接重放可能修改文件或外部系统的任务。
受控恢复验证待服务状态恢复或配置问题修复后,可考虑发送一次不含私有项目代码的简短测试请求。这是一笔新的计费请求。发起前请先确认目标服务地址、预算上限以及上一笔请求的最终状态。
持续失败处置整理脱敏后的故障摘要,联系当前实际处理该请求的服务商支持渠道。一旦达到预设重试上限,或原请求执行结果仍无法确认,立即停止继续尝试。

如果问题涉及客户端安装、登录循环、高内存占用或本地设置未生效,可结合 Claude Code 官方故障排查文档定位对应章节,并在客户端内运行 /doctor 检查本地配置与扩展状态(应用任何自动修复建议前请先人工确认)。排查 500 错误时,不需要删除原本正常的账户登录状态。

看懂错误响应结构,但不要公开粘贴完整响应体

下面是一个符合 Anthropic 错误结构的合成示例(仅用于演示字段层级,并非真实的生产故障抓包或 UniRoute 事故记录):

{
  "type": "error",
  "error": {
    "type": "api_error",
    "message": "Illustrative server failure"
  },
  "request_id": "req_example_only"
}

排查时利用这一结构区分机器可读的错误分类(error.type)与人类可读的描述(error.message)。切勿将完整响应体直接复制到公开 GitHub Issue 或群聊中,因为回显内容或调试日志可能包含私有提示词与项目代码。如果您收到的是代理服务器返回的 HTML 错误页、缺少 error.type 或没有 request_id,请按网关/代理链路排查,不要凭空补造上例中的字段。

3. 在重试之前先设定明确的上限与停止条件

根据 Anthropic 官方 TypeScript SDK 文档,官方 SDK 默认会对连接错误、408、409、429 以及 >=500 的服务端错误自动执行 2 次指数退避重试,并在响应包含 retry-after 标头时遵循该等待时间;开发者可通过 SDK 客户端的 maxRetries 参数调整或关闭这一行为。请注意,maxRetries 是 SDK 编程接口选项,并不是 Claude Code 终端的通用全局开关;实际行为取决于您当前使用的客户端版本与接入方式。

如果您自己维护外层调用脚本或网关封装,针对已确认未产生副作用的瞬时故障,合理的起始策略是:在固定的总耗时与费用预算内,最多允许 1 到 2 次带随机抖动(Jitter)的递增退避重试,并严格遵守服务端返回的整数秒 retry-after 与 x-should-retry 标头。这只是一项应用层防护建议,绝不代表任何失败请求都可以无条件安全重发;更不要在底层 SDK 已经开启自动重试的情况下,再在外层脚本叠加一层循环重试。

遇到以下情况必须立即停止重试:

  • 认证、计费或权限报错(401 / 402 / 403): 必须先修复对应服务的密钥、权限或账户账单问题。
  • 触及未解除支出限额或限流原因不明的 429: 根据 Anthropic API 速率与支出限额文档,组织触及月度层级支出上限(Monthly Tier Spend Cap)时会返回不带 retry-after 标头的 429(Messages API 中 error.details.error_code 为 enforced_spend_limit_reached),继续重试只会持续失败;普通自设组织或工作区支出限额通常返回 HTTP 400(invalid_request_error),而 Claude Code 专用工作区支出限额(Claude Code Workspace Limit)触发的 429 则可能携带 retry-after 标头。因此,有 retry-after 不代表必然是普通短时限流,缺少 retry-after(尤其经过可能剥离标头的网关时)也不必然证明是月度层级支出上限。请结合错误响应体、服务后台的限额配置以及实际返回的标头(Anthropic API 直连返回 retry-after 与 anthropic-ratelimit-requests-* / anthropic-ratelimit-tokens-* 等标准限流头,claude.ai 订阅或 Claude Code 计划场景还会读取 anthropic-ratelimit-unified-* 计划头;第三方网关标头保持未知)综合判断,在限额未解除前停止重试,切勿盲目上调付费限额。
  • 已产生部分输出或工具执行状态未知: 重新提交同一句提示词会发起一轮新的模型生成并可能再次扣费。响应头中的 request-id 仅用于日志追踪与工单查询,不是幂等去重键(Idempotency Key)。

4. 逐笔核对请求记录与实际费用

如果请求发往 UniRoute,请打开 UniRoute 控制台查看本人用量记录,选择覆盖事故发生时间段的筛选范围,同时检查“成功”与“失败”条目。即使终端后来报告了连接中断或后续轮次报错,前面已经完成的轮次仍可能作为成功记录入账。请逐项比对模型 ID、时间戳、可用请求标识、Token 用量与实际扣款金额;部分在进入模型前即被拦截的错误条目可能不包含全部统计字段。

请求记录与费用核对表

您在终端观测到的现象需要核对的记录内容缺乏更多证据时仍保持“未知”的事项
客户端在收到确认响应前停止客户端报错时间、网关调用记录以及同一时间窗内相邻的已完成请求上游是否实际上已接收或开始处理该请求
在生成开始前即被明确拒绝记录在案的拒绝原因、匹配的失败条目,以及同一操作触发的其他成功尝试其他独立重试请求的扣费状态
出现部分回复或流式传输中断成功与失败记录、已统计的各分桶 Token 数及已记录的实际扣款尚未汇总上报的用量,或未完成记录的最终结算结果
回复看似完整但随后客户端报错匹配的已完成请求记录及其实际扣款金额终端显示的错误是否实际上来自下一轮自动请求(如工具回传或自动压缩)
找不到记录或缺少实际费用字段是否登录了正确账户、选对了服务商、时区与筛选条件,以及私有支持查询结果最终消耗与账本结算状态;查不到记录绝不等于 $0 免费调用

核对费用时,请使用该笔请求实际命中的模型与渠道费率规则。Claude Code API 价格与实际 Token 费用预算指南详细说明了普通未缓存输入、输出、5 分钟/1 小时缓存写入与缓存读取的拆分计费方式(如果网关剥离或改写了 cache_control 块,还可能导致本应命中缓存的轮次按未缓存输入计费)。当多个终端或子代理并发运行时,不能仅凭客户端本地 /usage 估算值或钱包总余额差值来反推单笔请求的扣费;此外,单把 API Key 设置的额度上限也与账户钱包总余额相互独立。

只要原请求的最终结果仍无法确认,就请继续标为“未知”,切勿仅凭一个报错码就推定已经自动退款或零消耗。对于直接发往 Anthropic 官方或 OpenRouter 的请求,请分别前往 Anthropic Console 或 OpenRouter Activity 页面核对各自账单;UniRoute 控制台无法显示其他平台的私有账户记录。

5. 准备脱敏的私密支持报告

在 UniRoute 控制台中,打开相关调用记录的详情页即可使用复制诊断摘要功能。发送前请先人工审阅复制出的字段,并补充您在终端本地观测到的客户端版本以及是否曾出现部分输出(因为仅靠服务端记录往往无法还原终端界面当时展示了什么)。如果某项 HTTP 状态码、Request ID 或错误分类并未返回,请如实保留为 未知(unknown)。

提交私密支持工单时,使用以下最小脱敏模板即可高效定位问题:

客户端与版本: Claude Code,本地观测到的具体版本号
时间与时区: 事故发生时间,注明所在时区(如 2026-10-16 10:15:00 +08:00)
服务与接口路径: 当前配置的服务商,/v1/messages
模型 ID: 客户端实际选择的完整模型 ID
观测到的 HTTP 状态码 / 错误类别: 实际观测值,缺失则填 unknown
Request ID: 如有则提供(仅限私密支持渠道,勿公开发布)
流式与工具进度: 无输出 / 部分输出 / 已触发工具动作 / 完整回复后报错 / unknown
已发生的重试次数: 观测到的尝试次数,或 unknown
用量与实际扣款: 控制台对应记录的数值,或 unknown

切勿在工单、群聊或公开 Issue 中附带 API Key、Authorization 请求头、Cookie、完整配置文件、 .heapsnapshot 内存快照、业务提示词、私有项目代码或完整响应正文。请勿将内部 Request ID 留在公开截图中;如确需在公开社区提问,请先隐去请求标识,仅通过服务商的私密支持渠道单独提供。

若故障请求由 UniRoute 处理,请将审阅后的脱敏摘要发送至页面底部公开的私密支持邮箱 support@uniroute.app。如需核对客户端配置与根地址,请参阅 Claude Code 第三方 API 接入教程;如需核算缓存与各分桶成本,请参阅 Claude Code API 价格与实际用量核对指南。

请记住:账户充值仅适用于已确认对应服务账户余额不足的情况,绝不是解决 HTTP 500 服务端错误的通用办法。唯有先理清实际请求路径、区分具体错误状态并核实已发生的工具动作与用量,才能安全、低成本地恢复开发工作。