OrcaRouter

OpenAI API 401/403/404 怎么分?一张表+最小 curl 排查 Key、权限和路径

更新于 2026-10-27 · orcarouter.cyou

简答:OpenAI API 返回 401,先查 API Key、Bearer 格式、组织或项目;403,重点看响应体指出的地区、网络或访问控制;404,先核对最终 Base URL、接口路径、模型或资源 ID。先运行最小 curl,再按 error.type、error.code、error.message 分流;不要把不同服务的地址、模型名或权限规则混在一起。

定义:OpenAI API 的 401、403、404 是用于初步定位请求失败位置的 HTTP 状态码,分别常见于认证失败、访问被拒绝和路径或资源不可用,但最终原因必须结合响应体与具体服务文档判断。

先跑最小请求:先判断是 Key、权限还是地址

截至 2026 年 10 月 27 日,最稳妥的排查顺序不是反复改模型或请求体,而是先绕过业务代码、SDK 和插件,验证请求是否发到了预期接口。原生 OpenAI API 的模型列表接口是 https://api.openai.com/v1/models,认证示例使用 Authorization: Bearer。可参考OpenAI Models API Reference。

如果你使用兼容网关,只能把地址替换为该服务公开确认的 Base URL。先确认 Base URL 是否已经包含 /v1,以及 SDK 是否会自动追加版本路径;否则可能出现重复的 /v1/v1 或缺少版本路径。

状态码先看什么常见处理方向
401API Key、Bearer 格式、组织或项目确认变量已加载、密钥未写错或撤销,并核对请求使用的组织与项目。
403响应体中的拒绝原因按具体服务文档检查地区、网络访问控制、IP allowlist 或资源访问策略。
404最终 URL、接口路径、模型或资源 ID逐段核对 Base URL、版本路径、模型标识和资源所属项目。

401:先确认应用真的发出了正确的 API Key

OpenAI 官方错误代码文档把 401 细分为无效认证、错误 API Key、不是组织成员和 IP 未授权等情况。这里的重点是:不要只在终端检查变量,要确认实际发起请求的应用进程读取到了同一个值。可参考OpenAI API 官方错误代码文档。

  1. 检查变量是否为空:只输出长度和脱敏片段,例如 python -c "import os; k=os.getenv('OPENAI_API_KEY',''); print(len(k), k[:7], k[-4:] if k else '')"。不要打印完整密钥。
  2. 检查 Header:格式应为 Authorization: Bearer 你的密钥。如果环境变量本身已经包含 Bearer ,就不要再次拼接。
  3. 检查密钥归属:确认使用的是当前项目或组织对应的 Key,而不是旧环境、其他项目或已删除的密钥。
  4. 检查组织信息:如果错误信息涉及组织成员资格或组织 ID,按当前账户和项目设置核对,不要凭记忆填写 ID。
  5. 检查 IP allowlist:只有响应或项目配置明确涉及 IP 未授权时,才检查实际出口 IP。容器、云函数和 CI 的出口 IP 可能不同于本机。

如果最小 curl 仍返回 401,先修复密钥或组织配置,不要通过增加重试次数解决。若 curl 成功而业务程序失败,优先检查环境变量注入、进程重启、代理和 SDK 的 Base URL。

403:状态码只是初筛,必须按响应体定位拒绝原因

403 表示服务器理解请求但拒绝授权,但不同服务返回 403 的具体原因并不完全相同。OpenAI 官方错误代码页明确列出不支持的国家、地区或领土这一类原因;Azure OpenAI 官方文档还列出网络访问控制、IP 限制、私有端点和资源状态等排查方向。不要把“403”等同于“API Key 一定错了”。

修复访问控制后,重新执行一次最小请求即可。日志中只保留状态码、错误类型、脱敏后的路径、发生时间和可用的请求 ID;不要公开完整 Authorization Header。

广告|如果你已确认 Key、路径和权限,仍需要统一的 API 接入与错误排查入口,可了解犀速-AI 的开发者服务。

404:按最终 URL、模型和资源三层核对

404 不一定只是接口地址拼错。Agents API 官方文档将 not_found_error 和 model_not_found 分别归为资源或模型对当前请求不可用,但这类说明不能直接外推到所有 API 或兼容服务。遇到 404 时,应以实际响应体和对应 API Reference 为准。可参考OpenAI Agents API 官方错误恢复文档。

  1. 核对 Base URL:确认没有把控制台地址、文档地址或旧地址当成 API 地址。
  2. 核对接口路径:确认 SDK 方法对应的路径,避免把模型列表、Responses、聊天或嵌入接口混用。
  3. 核对版本段:确认 /v1 是由 Base URL 提供,还是由 SDK 自动拼接。不要重复添加。
  4. 核对模型 ID:使用当前账户或服务文档确认的模型标识,不要把展示名称、别名或部署名称直接当成模型 ID。
  5. 核对资源归属:文件、会话或其他资源可能已删除、属于其他项目,或当前 Key 无法访问。

Azure OpenAI 还要单独检查资源 endpoint、deployment name 和 API version。Azure 官方文档明确把这三项列为 404 常见原因,因此不能直接把原生 OpenAI 的请求地址复制到 Azure。

原生 OpenAI、兼容网关与 Azure OpenAI:哪些配置不能混用

场景认证与地址404 优先检查写法边界
原生 OpenAI API官方 API 地址,通常使用 Authorization: Bearer API_KEY/v1、接口路径、模型或资源 ID以 OpenAI API Reference 和错误文档为准。
OpenAI 兼容网关Base URL、认证 Header、模型映射和错误结构由具体服务决定服务文档规定的版本路径、模型名和路由配置未核实的域名、路径、模型、价格和权限规则不要写死。
Azure OpenAI使用 Azure 资源 endpoint;可使用 API Key 或 Microsoft Entra ID,配置方式不同于原生 APIendpoint、deployment name、API version以对应 Azure 资源和 API 版本文档为准。

Azure 的 401、403、404 处理可参考Microsoft Learn:Azure OpenAI 常见 HTTP 错误排查。对于具体兼容网关,如果公开资料无法确认完整配置,应以当前账户页面和官方文档为准。

Python 和 Node.js:用标准库复现最小请求

下面的示例只验证模型列表接口,不写死任何兼容网关地址或模型名。使用其他服务时,请先确认 OPENAI_BASE_URL 的来源、是否含 /v1,以及该服务是否真的提供兼容的模型列表接口。

Python 3:import os, urllib.request, urllib.error base = os.getenv('OPENAI_BASE_URL', 'https://api.openai.com/v1').rstrip('/') key = os.environ['OPENAI_API_KEY'] req = urllib.request.Request(base + '/models', headers={'Authorization': 'Bearer ' + key, 'Accept': 'application/json'}) try: with urllib.request.urlopen(req, timeout=30) as r: print(r.status, r.read().decode('utf-8')) except urllib.error.HTTPError as e: print('HTTP', e.code, e.read().decode('utf-8', errors='replace')) except urllib.error.URLError as e: print('NETWORK', e.reason)

Node.js 18+:const base = (process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1').replace(/\/$/, ''); const key = process.env.OPENAI_API_KEY; if (!key) throw new Error('OPENAI_API_KEY is missing'); const res = await fetch(base + '/models', {headers: {Authorization: `Bearer ${key}`, Accept: 'application/json'}}); const text = await res.text(); console.log(res.status, text);

如果最小示例返回 401、403 或 404,继续检查服务端配置;如果最小示例成功而 SDK 失败,再检查 SDK 的 base_url、自动拼接路径、变量加载时机和代理配置。

错误处理与安全记录清单

本文是第三方排障整理,不代表任何特定 API 网关的官方文档。具体域名、模型、权限、价格和可用功能如果无法从公开资料核实,应以当前账户页面和对应官方文档为准。

常见问题

OpenAI API 返回 401 Unauthorized,最先检查什么?

先确认实际发起请求的进程读取到了正确的 <code>OPENAI_API_KEY</code>,再检查请求头是否为 <code>Authorization: Bearer 你的密钥</code>。随后核对密钥是否写错、已删除、属于其他项目或组织;如果响应明确涉及 IP 未授权,再检查应用实际出口 IP。

OpenAI API 返回 403,是不是 API Key 一定错了?

不一定。403 只能说明请求被拒绝,具体原因要看 <code>error.message</code>、<code>error.code</code> 和服务文档。原生 API、Azure OpenAI 和兼容网关的 403 规则可能不同,不要只通过更换 Key 处理。

OpenAI API 返回 404,怎么区分 URL 错误和模型不存在?

先用最小模型列表请求检查 Base URL、认证和路径。如果模型列表成功而业务请求 404,重点核对业务接口路径、模型 ID、资源 ID和项目归属;Azure OpenAI 还要检查 endpoint、deployment name 和 API version。

兼容网关出现 401、403、404,可以直接套用原生 OpenAI 地址吗?

不能直接套用。兼容网关的 Base URL、是否包含 <code>/v1</code>、认证 Header、模型映射和错误格式都可能不同。只使用已公开确认的配置,无法核实时不要猜测域名、路径、模型名或价格。

排查 API 错误时应该记录哪些信息?

记录发生时间、时区、HTTP 状态码、<code>error.type</code>、<code>error.code</code>、<code>error.message</code>、最终请求路径、模型或资源 ID,以及响应中提供的请求 ID。API Key 只保留脱敏片段,不要公开完整 Authorization Header。

相关阅读

参考资料

  1. OpenAI API 官方错误代码文档
  2. OpenAI Agents API 官方错误恢复文档
  3. OpenAI Models API Reference:List models
  4. Microsoft Learn:Azure OpenAI 常见 HTTP 错误排查