返回博客

故障排查指南

API 401 或 404 错误:密钥、base URL 或模型 id 错误

读取状态码,找出三者中哪一个出错(密钥、base URL、模型 id),并用一条 curl 请求确认修复。

作者:CheapTokens Team发布于 4 分钟阅读

错误卡片,状态码 401,并提示检查密钥、base URL 和模型 id
本页内容
  1. 快速区分它们
  2. 401:密钥与端点不匹配
  3. 每个模型都 404:地址错了
  4. 只有一个模型 404:模型 id
  5. 用一条 curl 命令验证修复
  6. 如果仍然不工作

你的请求因状态码而失败,你不确定该先动哪里。简短回答: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。什么都没坏;密钥只是属于另一家。

要检查什么:

  1. 密钥是哪个提供商签发的? 它必须是你正在调用的地址对应的那个。一个服务的密钥在另一个服务上无效。
  2. 多余字符。 随密钥一起粘贴的空格或换行,或者混进值里的引号。
  3. 工具从哪里读取它。 在一个终端里设置了环境变量,而编辑器启动的终端里没有设置,这是常见原因。如果工具同时有配置文件和 环境变量,弄清楚哪个优先。
  4. 已撤销或删除的密钥。 你删除或撤销的密钥会停止工作——创建一个新的并放进配置。

如果你不确定密钥如何工作或该放在哪里,什么是 API 密钥以及如何安全存储它用通俗的话讲清楚了。

每个模型都 404:地址错了#

CheapTokens 的 base URL 是 https://api.cheaptokens.dev/v1。工具和 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-V4-Flash;API 需要完整的网关 id,带开发者前缀和版本:

你在哪里看到的 API 需要什么
DeepSeek-V4-Flash deepseek-ai/DeepSeek-V4-Flash-0731
GLM-5.3-Flash zai-org/GLM-5.3-Flash
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7

价格标签里的短 id 不被 API 接受,而且拼写很重要:大写字母、斜杠、-0731 后缀。从 CheapTokens 文档复制 id,而不是凭记忆输入——不同提供商对同一个模型的命名不同。要查看你的密钥可用的确切 id,用相同的 Authorization 头调用 GET https://api.cheaptokens.dev/v1/models,然后从列表中复制 id:

bash
curl https://api.cheaptokens.dev/v1/models \
  -H "Authorization: Bearer YOUR_API_KEY"

如果表中的命名逻辑看起来奇怪,如何阅读 AI 模型名称解释了别名与固定版本。

用一条 curl 命令验证修复#

把工具排除在外,直接调用 API。用你自己的密钥替换密钥占位符:

bash
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://api.cheaptokens.dev/v1,或对于 Anthropic SDK 和 Claude Code 不带 /v1)以及完整模型 id。

如果仍然不工作#

  • 工具里同样的错误,curl 正常。 工具从别处读取了旧的密钥或 URL:第二个配置文件、保存的配置文件、环境变量。更改后重启工具。
  • 不确定模型 id 是否正确。 用你的密钥调用 GET /v1/models,然后从列表中复制 id。
  • 连接被拒绝、超时、证书错误。 那不是 401 或 404;见常见连接错误。
  • 不确定第一个请求应该是什么样。 你的第一个 API 请求逐步讲解,文档有完整参考。

值得保持的习惯:当调用失败时,先读数字。401 通常意味着密钥,404 通常是地址或模型 id,而 curl 能一锤定音。这样能在你打开任何日志之前解决大部分这类错误。