OpenAI API Key 怎么获取?国内调用 ChatGPT API 教程(2026)
先给直接答案: 官方 OpenAI API Key 的获取路径是:在 platform.openai.com 注册账号 → 首次建 Key 前完成手机号验证 → 在 API keys 页面创建密钥 → 在 Billing 里绑卡并预充值,之后才能正常付费调用。步骤本身不难,国内开发者通常卡在三个硬门槛:OpenAI 公布的支持地区名单里没有中国大陆、香港和澳门;首个 Key 需要短信或 WhatsApp 验证;预充值只接受支持地区银行发行的标准信用卡或借记卡。这些条件满足不了的话,常见替代做法是用 OpenAI 兼容的第三方中转服务:同一套 openai SDK,只换 base_url 和 Key,就能调用 GPT 系列模型。本文把两条路都讲清楚,并给出 Python、Node.js、curl 三份可直接复制的代码,Chat Completions 和 Responses 两种写法都有。
Key Takeaways(30 秒速读)
- ChatGPT Plus 和 API 是两回事:Plus 是聊天产品的月度订阅,API 是按 token 计费的开发者服务,两边账单分开,Plus 不包含 API 额度。
- 官方 Key 在
platform.openai.com/api-keys创建,完整密钥只在创建时显示一次;首次建 Key 需要手机号验证。- 官方 API 是预付费:首次最低充值 $5,只接受支持地区发行的标准信用卡/借记卡,不支持预付卡。
- 中转的原理是替你转发请求:
base_url改成https://v2.cloudmist.cloud/v1,Key 换成中转站签发的令牌即可;代价是链路里多了一个第三方。- 两种接口:OpenAI 建议新项目用 Responses API,Chat Completions 仍然可用;某个模型支持哪种接口,以模型定价页的标注为准。
目录
- 一、ChatGPT API 和 ChatGPT Plus 是两回事
- 二、OpenAI API Key 怎么获取:官方 5 步流程
- 三、国内开发者最常见的 3 个卡点
- 四、OpenAI 兼容中转:原理、适用场景与局限
- 五、准备工作:注册、创建 Key、选对 GPT 模型名
- 六、Python 调用 OpenAI API(openai SDK)
- 七、Node.js 与 curl 调用示例
- 八、GPT API 常见报错排查
- 九、API Key 安全:7 条必做事项
- FAQ 常见问题
- 结论
一、ChatGPT API 和 ChatGPT Plus 是两回事
很多人搜「chatgpt api」时,心里想的是「我已经买了 ChatGPT Plus,能不能拿它接到自己的程序里」。答案是不能。大家口中的 ChatGPT API、GPT API,指的其实是 OpenAI API 平台上的 GPT 系列模型接口,它和 ChatGPT 网页版、App 是两个独立的产品。
OpenAI 帮助中心的说明很明确:ChatGPT 和 API 平台使用两套独立的计费系统,API 用量与 ChatGPT 订阅分开计费;要开始付费使用 API,需要在 API 账户的账单设置里单独添加支付方式(见 Managing billing for ChatGPT and the API platform)。
| 对比项 | ChatGPT(Free / Go / Plus / Pro) | OpenAI API |
|---|---|---|
| 入口 | chatgpt.com 网页、桌面端、手机 App | platform.openai.com 开发者平台 |
| 使用方式 | 在聊天界面里对话 | 用代码或工具发 HTTP 请求 |
| 计费 | 订阅制(Free 除外) | 按模型、按 token 用量计费,另有工具、存储等费用 |
| 凭证 | 登录 ChatGPT 账号 | API Key(密钥) |
| 适合谁 | 个人日常对话、写作 | 开发应用、自动化脚本、接入编辑器插件 |
所以有两个常见误会可以直接排除:买了 Plus 不会送 API 额度;在 API 平台充了钱,ChatGPT 也不会因此变成 Plus。想在自己的程序里调用 GPT 模型,要走的是 API 这条线。
二、OpenAI API Key 怎么获取:官方 5 步流程
以下流程依据 OpenAI 官方文档和帮助中心整理,界面文字以 OpenAI 平台当前版本为准。
- 注册或登录开发者平台:打开 platform.openai.com,用 OpenAI 账号登录。
- 完成手机号验证:根据帮助中心说明,平台要求在生成第一个 API Key 时完成手机号验证,之后再建新 Key 不用重复验证;验证码只能通过短信或(部分国家可用的)WhatsApp 接收,不能用邮件或语音电话代替。
- 创建 API Key:进入 API keys 页面 新建密钥。出于安全考虑,完整密钥只在创建的那一刻显示,没保存好就只能新建一个再替换到程序里。项目级 Key 还可以设置过期时间,官方建议这样做并定期轮换。
- 绑卡并预充值:新的 API 账户默认使用预付费(prepaid billing)。在组织的 Billing 页面添加支付信息,首次购买额度最低 $5、默认 $10;自动充值在设置时默认开启,不需要可以关掉。购买的额度 1 年后过期,除法律或合同要求等例外情况外不予退款。
- 配置环境变量并发第一条请求:官方 Quickstart 的做法是把 Key 写进环境变量
OPENAI_API_KEY,各语言的官方 SDK 会自动读取它。
补充两个容易忽略的点。第一,余额用完后请求会返回计费类错误,而且余额并不是「瞬间断电」的开关,处理延迟期间的用量可能让余额短暂变成负数,下次充值时抵扣。第二,官方 API 有使用等级(usage tier),累计付费 $5 进入 Tier 1,之后随累计消费自动升级,每一级对应不同的速率上限(RPM、TPM 等)。
三、国内开发者最常见的 3 个卡点
流程本身不复杂,国内开发者卡住的地方通常是下面三个,都来自 OpenAI 公开的政策说明。
卡点 1:地区不在支持名单内。 OpenAI 在 Supported countries and territories 页面列出了 API 支持的国家和地区,名单中没有中国大陆、香港和澳门。页面还说明,在名单以外的地区访问或提供访问,可能导致账号被封禁或暂停。直连官方接口时,还可能直接收到 403「Country, region, or territory not supported」错误。
卡点 2:手机号验证。 首个 Key 必须完成短信或 WhatsApp 验证,号码需要属于官方支持的号码类型。号码不支持或验证失败时,官方给出的办法是查看支持的号码类型说明,或带着具体报错联系客服。
卡点 3:支付方式。 帮助中心写明:购买 API 额度只支持标准信用卡或借记卡,预付卡不能用;购买只在支持的国家和地区开放,卡片必须由位于支持地区的银行发行;部分付款还需要完成 3D Secure 之类的银行验证。
先说清楚:本文不提供任何绕过地区限制、手机验证或支付风控的方法。如果你所在的地区和支付条件都符合官方要求,直接使用 OpenAI 官方 API 是最省心、也最有保障的选择;如果不符合,下一节的中转方案是另一种思路,但它有自己的代价,请看完局限再决定。
四、OpenAI 兼容中转:原理、适用场景与局限
原理其实很简单。 所谓「OpenAI 兼容」,是指中转服务按 OpenAI 的接口规范实现了同样的路径(如 /v1/chat/completions、/v1/responses)和同样的请求、响应格式。调用链路变成:
你的代码 → 中转站(校验你的令牌、记录用量、扣费)→ 上游模型服务 → 结果原路返回
因为格式一致,OpenAI 官方 SDK 感知不到区别。官方 Python 和 Node.js SDK 都支持自定义接口地址:Python 用 base_url 参数,Node.js 用 baseURL 参数,两者也都会读取环境变量 OPENAI_BASE_URL。把这个地址换成中转站的地址、Key 换成中转站签发的令牌,其余业务代码基本不用动。base_url 的更多细节可以看站内的 《base_url 怎么填?要不要加 /v1》。
适合的场景:
- 没有支持地区发行的银行卡,但需要在项目里调用 GPT 模型;
- 希望人民币充值、用量按项目拆分对账;
- 想用一个 Key 同时调 GPT、Claude、Gemini、DeepSeek 等 200+ 模型,切换只改
model字段。
必须知道的局限与风险:
- 多了一个第三方环节。 你的请求内容会经过中转服务。涉及用户隐私、商业机密、密钥等敏感数据时,请先评估是否适合发送,必要时先脱敏。
- 它不是 OpenAI 的直接服务。 服务可用性、数据处理方式、账单问题由中转方负责,而不是 OpenAI。上游政策变化(包括上文提到的地区政策)也会影响中转服务的稳定性,这是这类服务固有的不确定性。
- 接口覆盖不一定完整。 Chat Completions、Responses 之外的能力,比如 Batch、微调、Realtime 等,不要默认都能用,接入前先在控制台和文档里确认。
- 同名模型可能有多条上游线路。 在中转站里,一个模型常挂在多个分组下,不同分组的价格倍率、速率和稳定性可能不同。
- 新模型、新参数可能有时间差。 官方刚发布的模型或参数,中转侧的上架和适配时间不一定同步。
怎么判断一家中转靠不靠谱,可以参考站内的 《API 中转站怎么辨别真假》,核心是用自己的请求小额测试,别只看宣传。
五、准备工作:注册、创建 Key、选对 GPT 模型名
下面以本站云雾API 为例,其他 OpenAI 兼容平台的步骤大同小异。
- 注册:打开 注册页,按页面提示用邮箱注册(需要填写邮箱验证码)。注册后控制台显示为「云岚API」,是本站的新系统,本文所有地址都以它为准。
- 充值:支持人民币充值,价格以充值页实时显示为准。第一次建议小额充值,跑通之后再按需加。
- 创建令牌:在控制台的令牌页面新建一个 Key(
sk-开头),可以给它设额度上限。建议一个项目一个 Key,方便对账和止损。 - 确认模型名和接口类型:模型名必须与定价页里的写法完全一致,同时留意该模型标注支持的是哪种接口。
零基础可以先看 《3 分钟新手教程》,里面有控制台操作的完整流程。
云雾API 上可用的部分 GPT 模型(节选,以定价页实时列表为准):
| 模型名(调用时照抄) | 定价页标注的接口 | 说明 |
|---|---|---|
gpt-6-astra |
Chat Completions / Responses | OpenAI 模型页推荐的默认起点,官方描述为其能力最强的模型 |
gpt-6-sol |
Chat Completions / Responses | 官方定位:复杂编程与智能体工作流 |
gpt-6-luna |
Chat Completions / Responses | 官方定位:聚焦型、大批量任务的高效模型 |
gpt-5.5 |
Chat Completions / Responses | openai-python 官方 README 示例使用的模型 |
gpt-5.4-mini、gpt-5.4-nano |
Chat Completions / Responses | 同系列小尺寸版本,适合先跑通链路、处理简单任务 |
gpt-5.4、gpt-5-mini、gpt-5.5-pro、o3-pro |
仅 Responses | 请用 Responses 写法调用 |
gpt-4o、gpt-4o-mini、gpt-4.1、gpt-4.1-mini |
仅 Chat Completions | 老项目常用,按 Chat Completions 写法调用 |
o3、o4-mini |
Chat Completions / Responses | 推理类模型,输出通常较慢,建议开流式 |
text-embedding-3-small、text-embedding-3-large |
Embeddings | 文本向量,用于检索、RAG |
gpt-image-2 |
图像生成 / 编辑 | 走图像接口,不走对话接口 |
完整模型和价格见 模型价格总表。模型清单会随上游调整,写进生产代码前以定价页当前列表为准。
六、Python 调用 OpenAI API(openai SDK)
第 1 步:安装 SDK。 旧版本 SDK 可能没有 responses 方法,建议直接装最新版:
pip install -U openai
第 2 步:把 Key 和地址放进环境变量。 不要把 Key 写死在代码里。macOS / Linux:
export OPENAI_API_KEY="sk-你的令牌"
export OPENAI_BASE_URL="https://v2.cloudmist.cloud/v1"
Windows 可以用 setx,设置后要重新打开一个命令行窗口才会生效:
setx OPENAI_API_KEY "sk-你的令牌"
setx OPENAI_BASE_URL "https://v2.cloudmist.cloud/v1"
设置了这两个环境变量后,代码里写 client = OpenAI() 就会自动读取。下面的示例为了直观,把 base_url 显式写出来。
写法一:Chat Completions(兼容面最广,老项目直接迁)
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"], # 云雾API 控制台创建的 sk- 令牌
base_url="https://v2.cloudmist.cloud/v1", # 要带 /v1
)
completion = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[
{"role": "user", "content": "用一句话解释什么是 API Key"},
],
)
print(completion.choices[0].message.content)
写法二:Responses(OpenAI 推荐新项目使用)
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
base_url="https://v2.cloudmist.cloud/v1",
)
response = client.responses.create(
model="gpt-5.4-mini",
instructions="你是一个简洁的技术助手,回答控制在三句话以内。",
input="Responses API 和 Chat Completions 有什么区别?",
)
print(response.output_text)
流式输出(Responses): 长回复、推理模型建议开流式,边生成边显示,也能减少超时。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
base_url="https://v2.cloudmist.cloud/v1",
)
stream = client.responses.create(
model="gpt-5.4-mini",
input="写一段 50 字以内的产品介绍",
stream=True,
)
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
print()
两种写法的区别,记这三条就够:
- 输入:Chat Completions 用
messages数组;Responses 用input,系统级指令可以放在instructions参数里。 - 输出:Chat Completions 从
choices[0].message.content取文本;Responses 的 SDK 提供output_text便捷属性,原始 JSON 里对应的是output数组。 - 选择:OpenAI 官方的迁移指南写明 Chat Completions 仍受支持,但推荐新项目用 Responses。在中转站上,先看模型标注支持哪种接口,比如表里的
gpt-5.4只标了 Responses,就别用 Chat Completions 去调。
七、Node.js 与 curl 调用示例
Node.js(openai 官方 SDK)
先安装:
npm install openai
把下面代码保存为 demo.mjs,用 node demo.mjs 运行(顶层 await 需要 ES Module,所以用 .mjs 后缀):
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY, // sk- 令牌
baseURL: "https://v2.cloudmist.cloud/v1", // 注意参数名是 baseURL
});
// 写法一:Chat Completions
const completion = await client.chat.completions.create({
model: "gpt-5.4-mini",
messages: [{ role: "user", content: "你好,用一句话介绍你自己" }],
});
console.log(completion.choices[0].message.content);
// 写法二:Responses
const response = await client.responses.create({
model: "gpt-5.4-mini",
instructions: "回答尽量简短",
input: "给我三个 Node.js 项目的命名建议",
});
console.log(response.output_text);
一个常见坑:Python 的参数叫 base_url,Node.js 的叫 baseURL。在 Node.js 里误写成 baseUrl 或 base_url,这个参数会被忽略:SDK 改读环境变量 OPENAI_BASE_URL,没设这个变量就发往 OpenAI 默认地址 https://api.openai.com/v1,通常表现为 401、403 或连接失败,排查时先看这里。
curl(不装任何库,先验证链路)
先确认环境变量 OPENAI_API_KEY 已经设置,然后在终端运行。
Chat Completions:
curl https://v2.cloudmist.cloud/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-5.4-mini",
"messages": [{"role": "user", "content": "ping"}]
}'
Responses:
curl https://v2.cloudmist.cloud/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-5.4-mini",
"input": "ping"
}'
Chat Completions 返回的 JSON 里有 choices 字段,Responses 返回的是 output 数组,能看到这两个字段就说明链路通了。以上 curl 写法适用于 macOS、Linux 和 Git Bash;Windows 自带的 cmd 不认单引号,建议在 Git Bash 或 WSL 里运行。
八、GPT API 常见报错排查
报错时先别急着改代码,按「状态码 → 错误原文 → 最小复现」的顺序排查。下表把官方直连和走中转两种情况放在一起:
| 状态码 / 现象 | 常见原因 | 怎么处理 |
|---|---|---|
| 401 认证失败 | Key 复制不完整或多了空格;Key 和地址不是同一家(官方 Key 发到中转地址,或反过来);Node.js 里 baseURL 拼错,请求被发往了 OpenAI 默认地址 |
核对 Key 与 base_url 是否配套;到令牌页确认 Key 仍然有效;用上面的 curl 单独测试 |
| 403 Country, region, or territory not supported | 直连官方 API 时,请求来自不支持的地区 | 这是官方的地区政策,见第三节 |
返回一段网页 HTML;Python 里常见报错 'str' object has no attribute 'choices'(或 'output_text') |
base_url 漏了 /v1,请求落到了网站页面而不是接口,SDK 拿到的是 HTML 文本 |
base_url 写成 https://v2.cloudmist.cloud/v1 |
| 404 Invalid URL,或提示模型不存在 | 把 /chat/completions 也写进了 base_url,路径被拼了两遍;模型名拼写不对 |
base_url 只写到 /v1,路径由 SDK 自动拼接;模型名从定价页复制 |
| 调用失败,提示无可用渠道 | 令牌所选分组不包含这个模型;另外,用了该模型没标注的接口(例如对只标 Responses 的模型发 Chat Completions 请求)也可能调用失败 | 检查令牌分组;按定价页标注换成对应的接口写法 |
| 429 | 官方:短时间内请求或 token 过多,或组织、项目达到消费上限;中转:请求频率过高 | 降低并发、按 Retry-After 退避重试;检查消费上限设置 |
| 余额或额度不足 | 官方:预付余额用完(429,错误码 credit_balance_exhausted);中转:账户余额或令牌额度用完 |
充值,或到令牌页调高额度上限 |
| 500 / 503 | 上游服务出错或模型临时过载 | 稍等后重试,持续出现时换同档模型对照 |
| 等很久没有返回 | 长输出或推理模型本身慢 | 开启 stream;按需调整 timeout |
几个补充说明:
- 官方 Python 和 Node.js SDK 默认会对部分错误自动重试 2 次,默认超时是 10 分钟,都可以通过
max_retries(Node.js 为maxRetries)和timeout参数调整。自己再套一层重试时,注意别叠加成重试风暴。 - 在云雾API 上,如果短时间内多次用错误的 Key 发请求,可能会被临时限制访问,错误信息会提示需要等待的秒数。改对 Key 后等一会儿再试即可。
- 控制台的日志页能看到每次调用的模型、消耗和状态,是判断「请求有没有到达、扣没扣费」最直接的依据。
更完整的排查清单见站内 《调用报错怎么排查》。
九、API Key 安全:7 条必做事项
Key 泄露的后果是别人用你的余额,而且很难追回。下面几条参考了 OpenAI 帮助中心的 Best Practices for API Key Safety,对官方 Key 和中转令牌同样适用。
- 一人一 Key、一项目一 Key。 官方明确表示共享 API Key 违反使用条款,团队成员应各自受邀加入组织、使用自己的 Key。中转令牌同理,按项目分开建,出问题时只需停掉一把。
- 永远不要把 Key 放进前端或 App。 浏览器、移动端里的 Key 可以被任何人抓出来。请求应该经过你自己的后端转发。openai 的 Node.js SDK 默认拒绝在浏览器环境运行,必须显式打开
dangerouslyAllowBrowser才行,这个参数名本身就是警告。 - 不要把 Key 提交到代码仓库。 用环境变量
OPENAI_API_KEY存放,本地开发可以用.env文件(openai-python 的 README 推荐 python-dotenv),并把.env加进.gitignore。私有仓库也不代表安全。 - 设置过期时间,定期轮换。 官方项目 Key 支持设置过期时间;轮换时先建新 Key、替换上线、确认可用后再作废旧 Key。
- 设消费上限。 官方可以给组织或项目设月度消费上限并开启强制执行;中转令牌可以直接设额度上限,额度用完这把 Key 就停止调用,泄露时损失也限定在这个额度内。
- 定期看用量。 官方看 Usage 页,中转看控制台日志页。用量曲线突然变陡,先怀疑泄露。
- 怀疑泄露,立刻作废重建。 官方在 API keys 页面删除或轮换;中转在令牌页禁用或删除,再换上新 Key。另外,不要在群聊、截图、工单里贴出完整 Key。
FAQ 常见问题
Q1:OpenAI API Key 怎么获取?
在 platform.openai.com 注册登录,首次建 Key 前完成手机号验证(短信或 WhatsApp),然后在 API keys 页面创建。完整密钥只显示一次,要立即保存。要付费调用,还需在 Billing 里绑定支持地区发行的信用卡或借记卡并预充值,首次最低 $5。
Q2:买了 ChatGPT Plus,可以直接调用 API 吗?
不可以。ChatGPT 订阅和 API 平台是两套独立的计费系统,Plus 不包含 API 额度。调用 API 需要单独在 API 平台添加支付方式并充值,按 token 用量计费。
Q3:国内能直接调用 OpenAI 官方 API 吗?
OpenAI 公布的支持地区名单中没有中国大陆、香港和澳门,官方说明在名单外访问可能导致账号被封禁或暂停。满足官方条件的开发者建议直接用官方 API;不满足的,可以考虑 OpenAI 兼容的中转服务,同时要清楚它的局限。
Q4:从官方 API 换到中转,代码要改哪些地方?
通常只改两处:base_url 改成 https://v2.cloudmist.cloud/v1,api_key 换成中转站签发的令牌。模型名按中转站定价页的写法填,其余调用逻辑、流式、工具调用等参数一般不用动。
Q5:Chat Completions 和 Responses 该用哪个?
OpenAI 推荐新项目用 Responses,Chat Completions 仍然受支持,老项目不必急着迁移。走中转时以模型标注的接口为准:gpt-4o、gpt-4.1 这类只标了 Chat Completions,gpt-5.4、gpt-5-mini 只标了 Responses,gpt-5.5、gpt-5.4-mini 两种都支持。
Q6:中转站的 Key 能在 OpenAI 官方接口用吗?
不能,反过来也一样。Key 只在签发它的平台有效,官方 Key 发到中转地址、中转令牌发到官方地址,通常都会返回 401 认证错误。
Q7:云雾API 怎么付费?
按实际用量从余额扣费。支持人民币充值,价格以充值页实时显示为准,不同模型、不同分组的价格不同,调用前可以在定价页查看。计费原理可参考 《API 按量计费怎么算》。
结论
OpenAI API Key 的官方获取流程并不复杂:注册、手机验证、创建密钥、绑卡预充值。国内开发者真正要面对的是地区、手机号、支付这三道政策门槛,而 ChatGPT Plus 订阅也帮不上忙,因为它和 API 是两套账单。
条件符合,就直接用官方 API;条件不符合,OpenAI 兼容中转是代码改动很少的一种替代方案,把 base_url 换成 https://v2.cloudmist.cloud/v1、换上中转令牌,Chat Completions 和 Responses 两种写法都能沿用官方 SDK。代价是多了一个第三方环节,敏感数据要自己把关,Key 安全的几条规矩也一条都不能省。
想试试这条路,可以先在 注册页 开通账号,小额充值后用本文的 curl 命令验证链路,再接入自己的项目。价格以充值页实时显示为准。
