Claude Code 报错 400(API Error: 400)意思是“请求本身被拒绝了”,和账号认证无关。最常见的原因有五类:版本太旧、模型名写错、上下文或附件超限、第三方网关不兼容、对话历史损坏。先看报错里 400 后面的那句英文,再对照下面的小节处理,大多数情况升级 Claude Code 或执行一次 /rewind、/compact 就能恢复。

先分清:400 和 401、403、429 不是一回事
按 Claude Code 官方错误参考(Error reference),400 属于“请求错误”(Request errors),问题出在请求内容上:字段、模型名、长度、对话结构。它和下面几类报错的处理方向完全不同:
- 401 / 403:认证或权限问题,要查登录和密钥,见 Claude Code 报错 401/403 认证错误排查;
- 429:额度或限流问题,要等重置或降低并发;
- 500 / 529:服务端临时故障或过载,一般稍后重试即可。
所以遇到 400,重新登录、换 Key 通常没用,重点是看报错原文里的关键字。
排查前的三步准备
- 运行
claude --version看当前版本,官方文档里很多 400 都是“旧版本不支持新模型或新字段”导致的; - 运行
/status确认当前用的是哪个模型、哪种凭据,以及是否走了第三方网关; - 把报错完整复制下来,重点看
API Error: 400 ...后面的英文,下面每一节都按这段文字匹配。
升级命令是:
claude update
原因一:版本太旧,报 thinking.type.enabled is not supported
报错原文:
API Error: 400 ... "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.
官方说明:你的 Claude Code 版本低于所选模型要求的最低版本,客户端发了新模型已经不接受的思考参数。处理方法:
- 运行
claude update后重启 Claude Code。官方列出的最低版本:Opus 4.7 需要 v2.1.111,Opus 4.8 需要 v2.1.154,Sonnet 5 需要 v2.1.197,Opus 5 需要 v2.1.219,Opus 5.5 需要 v2.1.280,Sonnet 5.5 需要 v2.1.284; - 如果你在 stable(稳定)更新通道,更新后可能仍低于上面的版本,需要切到 latest 通道再更新;
- 暂时没法升级的话,用
/model改选 Opus 4.6 或 Sonnet 4.6。
原因二:模型名不对,报 There's an issue with the selected model
报错原文类似:
There's an issue with the selected model (claude-...). It may not exist or you may not have access to it. Run /model to pick a different model.
意思是模型名无法识别,或你的账号没有这个模型的权限。处理方法:
- 交互模式下直接运行
/model,从列表里选; - 非交互模式(
-p)用--model传入正确的别名或 ID,或设置ANTHROPIC_MODEL环境变量; - 尽量用
sonnet、opus这类别名,别名会自动指向维护中的默认模型,不会过期; - 如果改了还是回到旧模型,说明别处还写着旧 ID,按官方“设置模型的优先级”逐个检查,比如 settings.json 配置文件 里的
model字段。
相近的报错还有 Model 'xxx' not found(按名称切换时 API 确认不了这个模型存在)和 Model "xxx" is not a recognized model id(传入的是显示名之类不能当 ID 的字符串)。处理思路一样:用 /model 不带参数打开列表,照列表里的名字填写。
原因三:上下文或附件超限,报 Prompt is too long / Request too large
这一类报错内容超了,常见三种:
Prompt is too long,交互界面里显示为Context limit reached · /compact or /clear to continue:对话加附件超过了模型的上下文窗口。运行/compact压缩对话,或/clear重新开始;Request too large (max 32MB):请求体超过 API 的 32MB 上限,通常是贴了大量内容、图片或附件。运行/compact可以去掉累积的图片和附件;如果提示compacting cannot make it fit,就按两次 Esc 回退到加入大内容之前,或直接/clear;max_tokens must be greater than thinking.budget_tokens:思考预算比最大输出长度还大,没给回答留空间。把CLAUDE_CODE_MAX_OUTPUT_TOKENS调到大于思考预算即可。
官方建议:大文件尽量 给路径而不是把内容整段粘贴,让 Claude 分块读取,能从根本上减少这类报错。
原因四:对话历史损坏,报 tool_use / tool_result 相关 400
报错原文是下面任意一种:
API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.
API Error: 400 orphaned tool_result in conversation history. Run /rewind to recover the conversation.
API Error: 400 duplicate tool_use ID in conversation history. Run /rewind to recover the conversation.
API Error: 400 ... unexpected `tool_use_id` found in `tool_result` blocks
API Error: 400 ... thinking blocks ... cannot be modified
官方解释:对话历史里 tool_use、tool_result、thinking 这几种块的顺序乱了,API 不接受。处理方法:
- 如果你用的是 Opus 4.7 或 Opus 4.8,先运行
claude update,v2.1.156 之前的版本在正常调用工具时就可能触发这个错误,而且/rewind清不掉; - 运行
/rewind,或连按两次 Esc,退回到出错之前的检查点继续工作。

原因五:接第三方 API / 网关,报 Extra inputs are not permitted
设置了 ANTHROPIC_BASE_URL 接中转或网关的用户最容易遇到:
API Error: 400 ... context_management: Extra inputs are not permitted
官方说明:Claude Code 会发送 context_management、工具搜索的 defer_loading 等测试版字段,同时带上启用它们的 anthropic-beta 请求头。如果网关转发了请求体却丢了这个请求头,或者把请求转给了格式不同的上游,就会被拒绝。处理方法:
- 报错里有
context_management:升级到 v2.1.304 或更高,新版收到这个拒绝后会自动去掉该字段再发一次; - 报错里有
defer_loading或tool_reference:升级到 v2.1.305 或更高,新版会自动去掉工具搜索字段重发; - 网关是你自己维护的:配置成转发
anthropic-beta请求头; - 兜底方案:启动前设置环境变量关闭实验性功能:
# macOS / Linux
export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
# Windows PowerShell
$env:CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS = "1"

常见报错与解决速查表
| 报错关键字 | 原因 | 解决方法 |
|---|---|---|
| thinking.type.enabled is not supported | 版本低于模型要求 | claude update,或 /model 换 4.6 系列 |
| There's an issue with the selected model | 模型名无效或无权限 | /model 重选,用别名 |
| Prompt is too long | 超出上下文窗口 | /compact 或 /clear |
| Request too large (max 32MB) | 请求体过大 | /compact,大文件给路径 |
| max_tokens must be greater than thinking.budget_tokens | 思考预算过大 | 调大 CLAUDE_CODE_MAX_OUTPUT_TOKENS |
| orphaned tool_result / duplicate tool_use ID | 对话历史损坏 | /rewind 或连按两次 Esc |
| Extra inputs are not permitted | 网关丢了 beta 请求头 | 升级到 v2.1.305+,或设 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 |
| tools.N.custom.input_schema: JSON schema is invalid | 某个 MCP 工具参数定义不合法 | 升级,或停用对应 MCP 服务器 |
最后一行和 MCP 有关:报错里的 N 只是工具在列表中的序号,不是名字。官方建议先升级到 v2.1.300 以上(新版会去掉被拒工具的参数再重试),还不行就逐个停用 MCP 服务器定位。MCP 的添加和停用方法可以看 Claude Code 配置 MCP 教程。
常见问题 FAQ
Claude Code 报错 400 要重新登录吗?
一般不用。400 是请求内容被拒,和登录无关;只有 401、403 才需要查登录和密钥。
升级后还是报 thinking.type.enabled 怎么办?
用 claude --version 确认版本是否真的到了模型要求的最低版本。稳定通道的最新版可能还不够新,需要切到 latest 通道;也可以先 /model 改用 4.6 系列模型。
用中转 API 一直报 400,是中转的问题吗?
如果报错里有 Extra inputs are not permitted,多半是网关没转发 anthropic-beta 请求头或上游格式不兼容。先升级 Claude Code,再试 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1,仍不行就联系网关服务方。
还没装好 Claude Code 的话,可以先看 Claude Code Windows 安装教程(2026)。