跳转到主要内容

Claude Code API Error 500 怎么办:恢复原会话,不重做已完成操作

Claude Code 报 API Error 500,先看出在任务中途、登录这一步,还是某个旧会话每轮都报。任务被打断时恢复原会话,核对已执行的文件和外部操作,只继续剩余步骤。

LaoZhang AI Team发布于更新于 28 分钟阅读
文章目录
Claude Code 500 和 529 中断后的原会话恢复、状态核对与继续工作流程

Claude Code 终端报 API Error: 500,先看它出在哪一步:任务进行到一半、登录这一步,还是只在某个恢复的旧会话里每一轮都报。走官方 Anthropic 连接时,当前的完整提示是:

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.

官方把它解释为 API 内部的意外故障,不是你的提示词、设置或账号引起的;原消息还留在对话里,等一分钟后回复 try again 就能重发。需要小心的是任务中途断开的情况:文件可能已经改好,工具调用可能已经执行,部署也可能已被远端接收。这时先找到原会话,核对实际完成了什么,再只继续未完成的步骤,不把整项任务重做一遍。以上依据截至 2026 年 10 月 5 日的官方错误说明;下面的恢复命令和核对流程未在真实故障会话里实测。

先看 500 出现在哪一步:重试、重新登录还是核对进度

当前提示它说明什么下一步
API Error: 500 Internal server error,任务中途出现,正文和工具调用都还没开始API 内部发生意外错误查错误末尾指定的服务状态,等待约一分钟,再在原会话回复 try again
登录时出现 OAuth error: Request failed with status code 500,或浏览器授权页显示 Authorization failed登录这一步失败,任务还没开始不用核对进度;先查状态,再按下文重置登录
某个恢复的旧会话每一轮都报 500,新开的会话却正常很可能与这段对话保存下来的内容有关先更新再恢复一次;仍失败就用新会话对照,带核实过的交接说明继续
报错末尾写的是网关或中转地址,不是 status.claude.com请求经过自定义 ANTHROPIC_BASE_URL,500 可能是网关自己返回的,也可能是转述上游先查该网关或中转服务的状态和错误正文
Repeated 529 Overloaded errors,尚未开始正文或工具调用当前服务或模型暂时过载,已经进行过适用的自动重试等几分钟;任务允许且有其他可用模型时,可用 /model 切换
The response above may be incomplete响应在中途失败,已完成输出会保留,完整工具调用可能已经执行先读保留结果,再按下文恢复会话、核对状态、继续剩余工作
Server is temporarily limiting requests (not your usage limit)与套餐额度无关的短暂服务端节流短等后再试;持续出现时查服务状态
You've hit your session limit 或 weekly limit,带重置时间真正的订阅用量窗口耗尽用 /usage 核对,等显示的重置时间;换模型不能恢复共享窗口
Request rejected (429) 或明确的支出上限提示API key、云项目或网关限制,需要看具体错误正文用 /status 确认请求路径,再查对应控制台;不要无限重试支出上限

表中的 500、529 和用量判断来自Claude Code 错误文档;登录和旧会话两行的依据见下面对应小节;直接 API 的 429 还可能是月度支出上限,见 API 错误参考。网关可能返回自己的状态或转述上游错误,要以实际服务方的说明为准。

按任务中途、登录阶段、旧会话和529过载分流,并区分完整与未完成输出块

错误末尾的状态地址很有用:Anthropic 路径指向 Claude Status,Bedrock、Google Cloud、Microsoft Foundry 指向对应云厂商的状态页,自定义 ANTHROPIC_BASE_URL 则写出网关主机。走中转时看到 500,先查中转服务本身,而不是干等 Anthropic 恢复。状态页绿色不能证明你的请求正常,也不能据此认定账号、登录或原会话已损坏。如果错误其实出现在网页或第三方应用,可转到Claude 内部服务器错误的入口分流;自己写代码直接调 API 收到 500,看Claude API 500 内部服务器错误:有限重试与失败处理。

登录时报 OAuth error 500:任务还没开始,先查状态再重置登录

在登录这一步报 500,任务还没开始,没有需要核对的半成品,后面的进度清单用不上。用户报告里见到的形式有三种:终端显示 OAuth error: Request failed with status code 500,有时前面先出现 OAuth error: timeout of 15000ms exceeded;浏览器停在 claude.ai 的授权页,显示 Authorization failed — Internal server error;或者终端显示 OAuth error: Failed to fetch user roles: Request failed with status code 500。这些来自 2026 年 3 月到 4 月的 GitHub 报告(#33226、#44271、#44725),Anthropic 在这些帖子里没有确认原因;官方登录与认证排查也没有为 OAuth 500 单列修法,下面的顺序是把事故记录和官方的登录重置步骤合起来用。

  1. 先看 Claude Status 历史。登录链路本身会出事故:2026 年 8 月 24 日 UTC 16:02–16:08 和 20:00–20:08 各有一次 Claude.ai 登录故障,记录里写明包括用订阅登录 Claude Code。这类事故可能只持续几分钟,结束后重试一次。
  2. 状态正常仍失败,按官方的重置流程:运行 /logout,关闭 Claude Code,重新运行 claude 再登录一次。浏览器没有自动打开,或授权链接在窄终端里折行点不了,就按 c 复制链接到浏览器打开。看到 OAuth error: Invalid code 是登录码过期或复制不全,浏览器打开后尽快完成。/logout 会清掉所有保存的凭据,包括 MCP 服务器的登录和插件的敏感配置,之后要重新授权。
  3. 在 WSL2、SSH 远程机或容器里登录时,浏览器运行在另一台主机上,授权后的跳转回不到 Claude Code 的本机回调端口。浏览器会显示一段登录码,把它粘贴到终端的 Paste code here if prompted 提示处;粘贴没反应就改用 claude auth login,它从标准输入读取登录码。WSL2 里浏览器打不开时,可以把 BROWSER 环境变量设成 Windows 浏览器的路径。
  4. 同一个账号在另一台机器上能登录,问题更可能在当前机器的本地网络路径:防火墙策略、代理,或回调端口被拦截。#44725 的报告者就是一台受组策略防火墙管理的 Windows 机器失败、另一台正常,这只是单个案例,不是已确认的通用原因。
  5. 用 /status 确认当前用的是哪种认证方式。shell 配置里遗留的 ANTHROPIC_API_KEY,只要你曾同意使用,就会取代订阅登录;-p 模式下只要存在就会使用它。走的是 API key 还是订阅、各自怎么计费,见Claude Code API Key 和订阅计费怎么选:先看 /status。

系统时钟和 macOS 钥匙串针对的是另一种情况:登录能成功,但过一阵又反复要求登录。令牌校验依赖时间戳,所以先确认系统时间准确;macOS 上 claude doctor 报 macOS Keychain is not writable 时,按官方步骤解锁钥匙串,再 /logout 和 /login。不需要为此重装 Claude Code,也不要删除整个 ~/.claude 目录。提示不是 500,而是登录过期、未登录、令牌被吊销或钥匙串保存失败时,看Claude 提示无法认证:先查事故,再修本机或账号。

Claude Code 自动重试几次?要看中断发生在哪一步

官方说的是瞬时故障最多重试 10 次,不能改写成“所有错误总共尝试 10 次”。响应前的服务端错误、过载和超时属于常规重试范围;掉线、停滞流与响应中断还有各自条件。最终报错出现时,Claude Code 已经完成了适用于该故障的重试。自动重试规则明确区分以下情况:

  • 思考已结束,正文或工具调用尚未开始:从 v2.1.284 起,这时发生的服务端错误或过载仍可重试,最多两次。不能把“已经输出思考”直接当成不可重试。
  • 已完成一个正文块或工具调用,或思考结束后已开始正文或工具调用:原请求不再重放,以免同一个工具调用执行两次。Claude Code 保留完成的输出,执行完整的工具调用,并从工具结果继续处理。
  • 响应已经完整结束:后续掉线不需要重试,完整结果保留。

因此,“看到一点流式文字”和“一个内容块已经完成”也不是同一条件。停滞流在尚未产生响应、或只完成思考的部分情形下还会额外重发一次,其预算不同。排查时读完整提示和重试倒计时,不自行补一个“再试十次”的循环。

进程退出后,怎样找回正确的原会话?

如果原来的 Claude Code 还在运行,留在该会话里读保留输出,先不要新建会话或清空对话。只有界面完全无响应时,才先尝试 Ctrl+C 取消当前操作;仍无响应再关闭终端、重新启动。官方稳定性排查提供了这一处理顺序,但重新启动本地进程不会取消已经被外部服务接收的操作。

进程已退出时,回到原项目目录,在终端运行:

bash
claude --resume

在选择器中选中刚才中断的对话。已经进入另一个 Claude Code 会话时,也可以输入 /resume 打开选择器。成功判断不是“Claude 能启动”,而是恢复的对话确实包含原任务,以及中断前最后完成的工具调用或消息。核对对话中的文件名、工作目标和最后结果,避免在相似标题的另一条会话里继续。

如果错误信息或之前保存的输出提供了 session ID,用准确 ID 恢复更直接。下面的占位符要替换为真实 ID:

bash
claude --resume <session-id>

根据当前会话恢复错误说明,从 v2.1.223 起,按 ID 恢复会先查当前项目,再查这台机器上的其他项目;旧版本的查找范围更窄。选择器里找不到交互会话时,可按 Ctrl+A 扩大到本机所有项目。claude -p 和 Agent SDK 创建的会话不出现在交互选择器中,应使用原运行 JSON 输出的 session_id。

出现 No conversation found with session ID 时,依次检查 ID 是否抄错、会话是否运行在另一台机器,以及记录是否已被清理。本地记录默认保留期为 30 天,且受清理规则影响;正确 ID 也不能恢复已删除的记录。不要把“没找到”直接解释为 500 破坏了整个项目。

恢复失败,或提示会话仍在另一终端运行

如果看到 Failed to resume the conversation,按提示用 claude --resume 加上会话 ID 再恢复一次。CLI 会以退出码 1 结束;运行中的 /resume 恢复失败则会保留当前会话,这不代表已经切回目标对话。v2.1.285 之前的版本遇到无法读取的记录条目时,官方建议先 claude update 再恢复。恢复失败说明并不保证每份记录都能找回。

如果代理视图提示 This session is running in another terminal 或对话已在另一个进程中打开,继续使用那个进程;确实要更换终端时,先有意识地退出原进程。不要让两个执行者同时续接同一对话。当前代理视图会阻止它检测到的重复打开,不能据此假定所有启动方式都能自动避免并发写入。

另一个特殊提示是 This session has no saved transcript:从父对话转到后台的会话,如果在第一条响应完成前停止,可能还没有自己的已保存记录,父对话仍完整。应回父对话继续;respawn 或代理列表中的重新启动会开始空白对话,不等于恢复后台进度。这些后台会话条件要与普通恢复失败分开。

恢复的旧会话每轮都报 500,新开会话却正常

会话能恢复,但之后每发一条消息都报 500,等待和 try again 都没用,而另开的新会话工作正常:这时问题很可能出在这段对话保存下来的内容上,而不是服务整体。能查到的线索来自用户报告。#58827 里,体量较大的旧会话恢复后报 API Error: 500 status code (no body),新对话正常,报告者在本地记录里找到了 API 重放时不接受的内容,比如空的思考块和空的工具结果;#70650 里,一个连续跑了几天的会话每次都返回 500 api_error,/rewind 之后照旧,另开标签页的新会话正常。两份报告都已关闭,版本较旧,Anthropic 没有就这类 500 给出结论。

官方错误文档对几种 400 错误写过同样的模式:旧版本把 API 拒收的内容存进历史,恢复后每一轮都失败;处理办法是 claude update 后再恢复,仍失败就用 /clear 开一段不带这些内容的对话,“如果那里也报错,原因在请求路径上,而不在保存的对话里”。这段说明针对的是 400,不是 500,但它的判断方法可以借用:

  1. 先尽量救原会话。运行 claude update,再用会话 ID 恢复一次。
  2. 恢复后仍然每轮 500,先按下一节的清单把进度核对清楚、写成交接说明,再在同一项目目录开新会话做对照。
  3. 新会话也报 500,问题在请求路径上:回头查服务状态、/status 显示的认证方式和网关。新会话正常,这段旧对话就别再反复重试,按下文“原会话确实恢复不了”的方式在新会话里继续。

不要手动编辑 ~/.claude 下的会话记录文件,也不要用第三方工具“修复”它;保留原记录,用 /feedback 反馈时附上 session ID 和报错时间。

发 continue 前,核对文件、工具、后台任务和外部结果

先把中断前的操作分成“已确认完成”“确认未完成”和“结果未知”。完整工具结果是线索,真实文件、进程和目标系统的记录才决定下一步。

用实际文件、进程和外部记录把中断操作分为已完成、未完成、未知,只继续原授权内剩余步骤

中断前可能做过的操作去哪里核对核对后怎样继续
编辑或生成文件工作树、文件内容、git diff;未跟踪文件也要看改动已正确落盘就保留,只补未完成部分
测试、构建、迁移或长命令原终端、进程、日志、报告,必要时数据库迁移记录仍在运行就等待或明确停止;已结束则按真实结果决定是否重跑
后台 Shell 或子代理任务原会话任务列表、任务输出、关联进程确认原任务是否还活着,不启动第二份相同任务
提交或分支操作当前分支、最近提交、提交内容已提交就从该提交继续,不再重复提交相同改动
PR、CI 或部署目标平台的 PR、run 或 deployment ID,以及关联提交已接受或已启动就查现有记录,不再次触发
API、数据库、消息或付款操作目标记录、请求 ID、业务唯一标识或幂等键已成功的不再发送;未知的先查目标系统,不能只凭终端报错重做

对于 Git 仓库,以下是只读核对命令,在原项目目录执行:

bash
git status --short
git diff --stat
git diff
git diff --cached
git branch --show-current
git log -3 --oneline

git diff 只显示未暂存改动,git diff --cached 显示暂存改动;未跟踪文件要按 git status 列出的路径查看内容。工作树干净也可能是改动已提交,不能推出“什么都没做”。这些命令仍不能证明提交是否已推送,或远端部署是否结束,后者要查远端记录。

后台任务也不会因为界面报错就必然停止。如果上一回合启动了测试服务或迁移,先看原任务输出、进程和锁定状态,再决定等待、停止或重跑。对于已经被远端接受的请求,结束本地进程不会自动撤销它。

结果未知的外部写入是停止点。例如终端显示部署请求出错,而平台上已经有 deployment ID,就继续查询该部署;没有收到 ID 时,用对应提交、时间或平台日志查找。仍无法确认是否已执行,就先取得平台证据或联系该服务的支持方,不让 Claude 猜测“应该失败了”。

核对完后,让原会话只继续剩余步骤

官方对交互式不完整响应的建议是回复 continue,从最后完成的内容块继续。最后一个被打断的内容块会丢弃,因此句子、工具调用或原计划的尾部可能缺失。不完整响应说明强调,保留输出不等于整个任务已完成。

只有文本输出、没有待核对操作的对话,可以直接继续。包含文件修改和外部操作的任务,更适合在原会话给出已确认的进度与剩余范围。例如,假设你已经查明两个文件修改完成、测试尚未执行,且没有触发部署,可以发送:

继续中断的任务。当前已核对:
- src/parser.ts 和 tests/parser.test.ts 的修改已落盘,内容符合原任务;保留这些改动。
- 命令日志显示测试尚未启动,也没有运行中的测试进程。
- 部署平台没有本次提交的部署记录,不要触发部署。

先对照会话里最后完成的工具结果和当前文件,确认这些状态。
只继续原任务剩余的本地测试;不要重新编辑已完成文件、重做提交或进行外部写入。
完成后报告测试结果和仍未完成的步骤。若发现实际状态与上述核对不一致,先指出差异,停止对应操作。

文件名、结果和剩余步骤要替换为你的真实记录,不能把示例当成已完成状态。若原任务还包含部署、数据库写入或消息发送,把它们分别列明:已有记录继续查询,确认未执行且仍有原授权的操作才进入剩余步骤。

继续成功的判断是:从已验证进度向前推进,新增结果能与剩余任务对应,原先完成的操作没有重复。再次中断时,更新这张进度清单,仍按相同顺序恢复。

-p、SDK 或云端会话有一条例外:主对话被截断的响应包含文本但没有工具调用时,当前版本可自动让它从中断处继续,最多连续三次。这是“继续部分文本”,不是重放原始请求,也不是带工具任务可以无条件重跑。交互选择器不显示 -p 和 SDK 会话时,按原输出的 session ID 恢复。非交互式条件不能套到所有任务。

原会话确实恢复不了,怎样转到新会话?

按 ID 重试、适用的更新后仍无法恢复,或者恢复后每轮都报 500、而新会话对照正常时,才把新会话作为后备方案。先在项目外部保留一份简短交接:原目标、已有文件改动、最近提交、测试和后台任务状态、外部操作 ID,以及尚未完成的步骤。新会话先读取相关文件与记录,核对清单,再继续剩余工作。

不要向新会话只说“把刚才的任务重做一遍”。对话记录不可用和项目文件丢失是两件事;恢复失败本身也不能证明之前的提交、部署或数据库写入失败。

恢复会话和回滚代码是两种操作

恢复会话是找回工作上下文;/rewind 的代码恢复会尝试还原被跟踪的文件。仅因服务端报错,不需要先回滚再重做;先看现有改动是否正确。

确实需要撤销错误编辑时,注意当前回滚警告:链接或非普通文件、已变化的目录、不能安全读取的备份会被跳过,跳过文件保留当前内容;No files were restored 表示一个文件也没还原。默认清理期之后,界面仍可能列出 checkpoint,但备份已经不可用。

因此,读还原提示并重新核对文件和 Git 差异,不能只看“还原”按钮就认定全部成功。远端部署、数据库记录和已经发送的消息仍要到各自系统核对;本地代码还原不是这些操作的撤销凭证。

529、临时节流和真实额度耗尽,等待方式不同

在官方 Claude Code 的 Anthropic 错误路径上,529 表示服务暂时过载,不是你的个人用量上限,也不计入额度。几分钟后再试,或在原任务能接受、账户有可用替代模型时用 /model 切换;容量按模型分别计算,但切换不保证另一模型一定有空余。529 处理建议不能推导出需要充值或升级套餐;备用模型怎么配置,见Claude Code 报 529 过载怎么办:换模型还是等待。

Server is temporarily limiting requests (not your usage limit) 则是短暂节流,与套餐额度无关。当前版本会先自动退避,再显示最终提示;短等后再试,不按 session 或 weekly 的重置时间等待。

真正显示 session 或 weekly limit 时,运行 /usage,按提示的重置时间恢复。session 和 weekly 窗口跨模型共享,换模型不会解除限制;明确的 Opus 或 Sonnet 家族限制才可换到家族之外的可用模型。当前 CLI 可以留在会话中等待重置后继续。若准备手动接管,先查看是否已启用自动继续,避免同时手动重跑任务。用量窗口规则与 Desktop 的勾选设置分别管理,不能以一个入口的设置推断另一个入口。

如果是 429,先用 /status 确认当前走订阅、API key、云厂商还是网关,再查相应限额。已获确认的 ANTHROPIC_API_KEY 可能使请求改走 API 计费路径;核对时只记录凭证类型,不分享密钥。直接 API 的支出上限 429 可能没有 retry-after,等几分钟不会恢复权限,见 API 错误参考。若问题是用量为何消耗得快,再看Claude Code 的上下文、缓存和 MCP 用量审计。

同一路径仍失败,保存哪些材料?

先保存完整错误、发生时间和时区、Claude Code 版本、当前模型、/status 显示的连接方式、适用的服务状态,以及已有的 request ID。对于恢复问题,再补 session ID、最后完成的操作、实际文件与外部状态、恢复命令的结果,以及新会话对照是否正常。登录失败则补浏览器授权页的提示、是否在 WSL2、SSH 或容器里,以及同一账号在另一台机器能否登录。共享材料前移除密钥、私人对话和客户代码。

500 在短等后仍失败、529 在等待或可接受的模型切换后仍失败,或者原会话反复无法恢复时,停止随机换 key、清空会话和整项重跑。Anthropic 路径按官方报告方式使用 /feedback;云厂商或自定义网关先找对应支持方。状态页绿色仍可报告请求级失败。

常见问题

Claude Code 一直报 500,切换到 Sonnet 有用吗?

官方给 500 的步骤是查状态、等一分钟后重发、持续出现且没有公布事故时用 /feedback 反馈,里面没有换模型。换模型是 529 过载的建议,因为容量按模型分别计算。500 时切到 Sonnet 后恢复,可能只是恰好错开了故障,不能说明原模型或账号有问题;任务允许时可以试,但别把它当成排查结论。

登录 Claude Code 时报 500,需要重装吗?

不需要先重装。登录这一步的 500 先看 Claude Status 有没有登录相关事故,然后 /logout、关闭、重新运行 claude 登录;在 WSL2、SSH 或容器里改用粘贴登录码或 claude auth login。同一账号在别的机器能登录时,再查本机防火墙、代理和回调端口。

Claude Code 529 是用量上限吗?

在官方 Claude Code 的 529 分支中不是:它表示服务暂时过载,也不计入个人额度。真实用量上限会显示 session、weekly 或模型家族限制及重置时间;自定义网关的返回还需看服务商说明。

响应可能不完整,能直接输入 continue 吗?

可以用 continue 从最后完成的内容块继续,但包含文件、命令或外部写入的任务应先核对结果。Claude Code 会保留已完成内容并执行完整工具调用,所以不要把报错理解成此前什么都没执行。

claude --resume 找不到会话,换目录就能解决吗?

不一定。v2.1.223 起按 ID 查找已覆盖本机其他项目;还要检查 ID、运行机器和记录保留情况。交互选择器可用 Ctrl+A 扩大项目范围,但 -p 与 SDK 会话不会显示在其中,应使用原 JSON 的 session_id。当前查找条件与旧版不同。

恢复会话后,还需要重新跑测试或部署吗?

先查现有结果。测试仍在运行就等待,已完成就读报告;部署已被远端接收就查现有 deployment ID。只有确认未完成、仍在原授权范围内的步骤才继续,不能用恢复会话代替执行结果核对。

参考来源12

本文引用的外部页面,按正文出现顺序排列。最后更新于 2026年10月5日。

  1. 1.官方错误说明code.claude.com/docs/zh-CN/errors
  2. 2.API 错误参考platform.claude.com/docs/en/api/errors
  3. 3.Claude Statusstatus.claude.com
  4. 4.#33226github.com/anthropics/claude-code/issues/33226
  5. 5.#44271github.com/anthropics/claude-code/issues/44271
  6. 6.#44725github.com/anthropics/claude-code/issues/44725
  7. 7.官方登录与认证排查code.claude.com/docs/zh-CN/troubleshoot-install
  8. 8.Claude Status 历史status.claude.com/history
  9. 9.自动重试规则code.claude.com/docs/en/errors
  10. 10.稳定性排查code.claude.com/docs/es/troubleshooting
  11. 11.#58827github.com/anthropics/claude-code/issues/58827
  12. 12.#70650github.com/anthropics/claude-code/issues/70650
更多 Claude Code