深色模式
ChatGPT API Key 报错 401、403、429 怎么办?余额、权限与限流排查清单(2026)
如果 ChatGPT API 请求失败,先看 HTTP 状态码和响应里的错误类型,不要把所有问题都归结为“Key 失效”。401 通常与鉴权有关,403 更常见于项目、组织或权限条件,429 则可能是速率、余额或并发限制。本文按“最小请求 → 凭据 → 项目 → 模型 → 限流”的顺序排查。
OpenAI 的接口、模型、价格和限额会调整。正式接入前,请打开 OpenAI API 错误说明、Models 和 Pricing 核对当前页面。
需要兼容多模型的第三方入口?
可以自行查看 ZeoAPI 注册入口。ZeoAPI 是独立第三方服务,不是 OpenAI 官方 API;Base URL、模型路由、价格、额度、日志和数据规则以登录后的控制台与服务条款为准。不要把第三方 Key 发到 OpenAI 官方 endpoint。
先看状态码:401、403、429 分别意味着什么
| 状态码 | 常见信号 | 先检查什么 | 不要做什么 |
|---|---|---|---|
| 401 Unauthorized | invalid_api_key、Incorrect API key | 环境变量、Key 是否被撤销、请求域名 | 反复重试同一个错误 Key |
| 403 Forbidden | 权限、组织、地区或项目不允许 | 项目归属、账单状态、模型权限和组织策略 | 把 403 当成网络超时 |
| 429 Too Many Requests | rate limit、quota、billing | RPM/TPM、并发、余额、预算和响应头 | 无上限地快速重试 |
同一个 429 也可能有不同原因。响应正文、请求 ID、Usage 页面和 Billing 页面要一起看;不要只看浏览器里显示的“请求太多”。
第一步:用最小请求验证 Key
先关闭代理、工具调用、长上下文和文件输入,只发送一句短文本。PowerShell 示例:
powershell
$env:OPENAI_API_KEY = "你的项目密钥"
$env:OPENAI_MODEL = "在官方 Models 页面确认的模型 ID"
curl https://api.openai.com/v1/responses `
-H "Authorization: Bearer $env:OPENAI_API_KEY" `
-H "Content-Type: application/json" `
-d "{`"model`":`"$env:OPENAI_MODEL`",`"input`":`"只回复 ok`"}"如果最小请求也返回 401,检查变量是否为空、是否多了引号或空格,以及程序是否读取了另一套环境变量。Key 只应放在服务端 Secret 中;不要把它写进浏览器代码、截图、公开仓库或前端构建产物。
401:重新生成 Key 之前先排查这 5 项
- 打印变量是否存在,但只输出长度和前后几位,绝不要打印完整 Key。
- 确认程序读取的是当前项目的 Key,而不是旧电脑、旧
.env或 CI 中的变量。 - 检查 Key 是否被撤销、过期或复制不完整;必要时在官方 API Keys 页面创建替代 Key。
- 确认请求发往官方 endpoint,第三方兼容网关的 Key 和 Base URL 不能混用。
- 更新 Secret 后重启本地进程、容器或部署实例,旧进程可能仍保留旧值。
若 Key 已经出现在日志或仓库中,应先撤销,再检查 Usage 和账单,最后创建新 Key。不要只删除代码里的那一行,因为 Git 历史和构建缓存仍可能保留密钥。
403:项目、组织和模型权限怎么查
403 通常不是“再试一次”能解决的问题。依次打开控制台确认:
- API Key 所属项目和代码中使用的项目是否一致;
- 项目是否完成账单或付款方式设置;
- 目标模型是否对这个项目开放,模型 ID 是否来自当前 Models 页面;
- 组织或团队策略是否禁止某类模型、地区或数据处理方式;
- 账户是否处于验证、风控或使用限制状态。
如果只有某一个模型返回 403,先换成项目明确可用的模型做小请求。不要把第三方平台显示的模型别名直接复制到官方 API;名称相似不代表模型 ID、权限和计费相同。
429:限速、余额和并发要分开处理
把请求分成三类更容易定位:
| 现象 | 更可能的原因 | 处理方式 |
|---|---|---|
| 突然大量并发后出现 429 | RPM、TPM 或并发超限 | 限制并发,加入有上限的指数退避 |
| 一直提示 quota 或 billing | 余额、预算或账单条件 | 查看 Usage、Billing、项目预算和付款状态 |
| 短文本也很快触发限制 | 账号层级、模型层级或共享配额 | 看官方 Rate Limits 和控制台当前值 |
重试只适合暂时性 429。示例代码要设置最大次数和最大等待时间:
python
import random
import time
def retry_delay(attempt: int) -> float:
# 1、2、4 秒,加一点抖动;生产项目还应读取响应头并设置总超时
return min(20.0, 2 ** attempt + random.random())
for attempt in range(4):
try:
response = client.responses.create(model=model, input="只回复 ok")
break
except Exception as error:
if attempt == 3:
raise
time.sleep(retry_delay(attempt))真实业务还应记录状态码、请求 ID、模型、输入输出用量和重试次数,但不要记录 API Key 或未脱敏的用户资料。对批量任务可以查看本站的 OpenAI Batch API 教程,不要用同步请求硬撑大批量并发。
400、404 和 5xx 也有明确的排查顺序
- 400:检查 JSON、字段类型、输入结构、工具定义和模型支持的参数。
- 404 或 model not found:从官方 Models 页面复制精确模型 ID,并确认项目已开放。
- 408、5xx 或 timeout:设置客户端超时,减少输入,有限重试,并查看服务状态。
如果从旧 Chat Completions 迁移到 Responses API,输入结构、输出读取、工具调用和错误处理都可能变化。可以先阅读 Responses API 迁移说明,用固定测试集逐项核对。
最后的安全检查
部署前确认:
- Key 只在后端和部署 Secret 中出现;
- 每个环境、项目和应用使用独立 Key;
- 对外接口有登录、频率、输入长度和预算限制;
- 429 重试有上限,401/403/400 不做无意义重试;
- 用户文件、代码和个人信息在发送前完成脱敏;
- 发现泄露时先撤销旧 Key,再检查账单和访问日志。
常见问题
ChatGPT Plus 能解决 API 的 401 或 429 吗?
不能直接解决。ChatGPT 订阅和 OpenAI API 项目是独立的产品与计费路径,API 错误要在 API 项目、Usage、Billing 和 Models 页面排查。
可以把 API Key 放进网页 JavaScript 吗?
不可以。浏览器访问者可以看到代码或网络请求。正确方式是前端请求自己的后端,再由后端读取 Secret 调用 API。
第三方 API Key 返回 401,应该改成官方地址吗?
先按第三方平台文档确认 Base URL、模型路由和鉴权方式。第三方 Key 通常不能直接调用 OpenAI 官方 endpoint,也不能把第三方服务宣传成官方 API。