故障排查指南
API 401 或 404 错误:密钥、base URL 或模型 id 错误
读取状态码,找出三者中哪一个出错(密钥、base URL、模型 id),并用一条 curl 请求确认修复。

你的请求因状态码而失败,你不确定该先动哪里。简短回答:401 通常指向密钥,404 通常意味着你敲错了地方——要么是地址(base URL 和路径),要么是模型 id。按顺序检查三件事,再用一条 curl 命令验证修复。
OpenAI 的错误码页面(2026 年 10 月 26 日查看)列出了两条 401 消息:“Invalid Authentication”和“Incorrect API key provided”。它给出的修复方法对两者相同:检查密钥或生成新密钥。该页面没有记录 API 本身的 404,因此对于 404,下面的规则来自 OpenAI 兼容端点的工作方式,而非该页面。
快速区分它们#
向右滚动表格 →
| 状态码 | 服务器在说什么 | 先看什么 |
|---|---|---|
| 401 | 通常是:我不接受这个密钥 | 密钥,以及它属于哪个提供商 |
| 每个模型都 404 | 通常是:这个地址上什么都没有 | base URL 和 /v1 |
| 只有一个模型 404 | 通常是:地址没问题,这个模型 id 未知 | 模型 id |
消息的措辞取决于服务器和你的工具(Cline、Aider、OpenCode 和 Continue 各自以自己的方式包装错误),所以从数字开始,然后用下面的 curl 检查确认。
401:密钥与端点不匹配#
经典情况:你把工具迁移到新提供商,改了 base URL,却把旧提供商的密钥留在了配置里。地址是新的,密钥是旧的,服务器返回 401。什么都没坏;密钥只是属于另一家。
要检查什么:
- 密钥是哪个提供商签发的? 它必须是你正在调用的地址对应的那个。一个服务的密钥在另一个服务上无效。
- 多余字符。 随密钥一起粘贴的空格或换行,或者混进值里的引号。
- 工具从哪里读取它。 在一个终端里设置了环境变量,而编辑器启动的终端里没有设置,这是常见原因。如果工具同时有配置文件和 环境变量,弄清楚哪个优先。
- 已撤销或删除的密钥。 你删除或撤销的密钥会停止工作——创建一个新的并放进配置。
如果你不确定密钥如何工作或该放在哪里,什么是 API 密钥以及如何安全存储它用通俗的话讲清楚了。
每个模型都 404:地址错了#
CheapTokens 的 base URL 是 https:/。工具和 SDK 会自己追加端点路径,所以常见的失误都与 /v1 有关:
- 缺少
/v1: 工具最终调用的是https:/。/ api. cheaptokens. dev/ chat/ completions - 重复的
/v1: 你把完整路径粘贴到一个已经会添加它的字段里,结果得到https:/。/ api. cheaptokens. dev/ v1/ v1/ chat/ completions - 风格不对: OpenAI 风格的工具和 OpenAI SDK 接受的地址带
/v1。Anthropic SDK 和 Claude Code 接受的地址不带/v1:https:/。/ api. cheaptokens. dev
如果你曾想知道 base URL 到底是什么,以及工具会添加其中哪一部分,这篇说明会带你过一遍。关于 Anthropic 方面,见使用 CheapTokens 的 Anthropic Python SDK。
只有一个模型 404:模型 id#
这一条会坑到那些从价格表或另一个提供商复制名称的人。价格表可能写 DeepSeek-;API 需要完整的网关 id,带开发者前缀和版本:
向右滚动表格 →
| 你在哪里看到的 | API 需要什么 |
|---|---|
| DeepSeek-V4-Flash | deepseek- |
| GLM-5.3-Flash | zai- |
| MiniMax-M2.7 | MiniMaxAI/ |
价格标签里的短 id 不被 API 接受,而且拼写很重要:大写字母、斜杠、-0731 后缀。从 CheapTokens 文档复制 id,而不是凭记忆输入——不同提供商对同一个模型的命名不同。要查看你的密钥可用的确切 id,用相同的 Authorization 头调用 GET https:/,然后从列表中复制 id:
curl https://api.cheaptokens.dev/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"如果表中的命名逻辑看起来奇怪,如何阅读 AI 模型名称解释了别名与固定版本。
用一条 curl 命令验证修复#
把工具排除在外,直接调用 API。用你自己的密钥替换密钥占位符:
curl https://api.cheaptokens.dev/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-V4-Flash-0731",
"messages": [{"role": "user", "content": "Say hi in one word."}],
"max_tokens": 20
}'这一个请求包含了所有三个嫌疑对象:头里的密钥、第一行里的 base URL、正文里的模型 id。返回带 choices 数组的 JSON 回复意味着三者都正确,而你的工具做得不同之处就是问题所在。如果失败,一次只改一个东西:
- 401 → 换成你从 CheapTokens 获取的密钥,再运行一次。
- 404 → 把 URL 与上面的逐字符比较,然后比较模型 id。
curl 工作后,把同样的三个值复制到工具里:密钥、base URL(https:/,或对于 Anthropic SDK 和 Claude Code 不带 /v1)以及完整模型 id。
如果仍然不工作#
- 工具里同样的错误,curl 正常。 工具从别处读取了旧的密钥或 URL:第二个配置文件、保存的配置文件、环境变量。更改后重启工具。
- 不确定模型 id 是否正确。 用你的密钥调用
GET /v1/models,然后从列表中复制 id。 - 连接被拒绝、超时、证书错误。 那不是 401 或 404;见常见连接错误。
- 不确定第一个请求应该是什么样。 你的第一个 API 请求逐步讲解,文档有完整参考。
值得保持的习惯:当调用失败时,先读数字。401 通常意味着密钥,404 通常是地址或模型 id,而 curl 能一锤定音。这样能在你打开任何日志之前解决大部分这类错误。



