先说结论
Country, region, or territory not supported 是 OpenAI 按请求来自哪里拒绝了你,跟 Key 和账号没有关系。OpenAI 会看请求所在 IP 的地区,不在官方支持的国家和地区列表里,就直接返回 HTTP 403,连 API Key 都不看。所以换 Key、充值、重装 SDK 都没用。解决办法只有两类:让请求从支持的地区发出,或者把请求发给一个你这边能直接访问的 API 网关,由网关转给模型。
报错长什么样
api.openai.com 的原始返回:
{
"error": {
"code": "unsupported_country_region_territory",
"message": "Country, region, or territory not supported",
"param": null,
"type": "request_forbidden"
}
}
HTTP 状态码是 403 Forbidden。官方 Python / Node SDK 里表现为 PermissionDeniedError(403),里面是同样的 JSON;Codex CLI 显示为 403 Forbidden 加同样的提示;在同样的地区打开 chatgpt.com 也是 403。
我们 2026 年 10 月 19 日在香港的服务器上复现过:完全不带 API Key 的请求,返回的也是这一段。这是「问题不在 Key」最直接的证据。
为什么会出现
OpenAI 公布了 API 提供服务的国家和地区列表,列表外的请求一律拒绝;同一页面还写明,在列表外访问可能导致账号被封禁或停用。10 月 19 日核对,中国大陆、香港、澳门、俄罗斯都不在列表里。
判断依据是发出请求的 IP 在哪,这不一定是你人在哪:
| 情况 | 为什么会报错 |
|---|---|
| 你本人在不支持的地区 | 请求直接从你的网络发出 |
| 服务器或 CI 机器在不支持的地区(比如云厂商的香港区) | 请求从服务器 IP 发出,跟你人在哪无关 |
| VPN、代理或公司网关的出口在不支持的地区 | OpenAI 看到的是出口 IP |
| 代理只对浏览器生效,终端没走代理 | SDK 或 Codex 从你的真实网络直连 |
怎么解决
1. 先确认请求从哪发出
在发起 API 调用的同一台机器、同一个终端或容器里执行:
curl https://ipinfo.io/country
返回的是两位国家/地区代码(比如 HK)。不在 OpenAI 列表里,原因就找到了。服务器上再看一眼云区域;本机再看运行代码的终端里有没有设置 HTTPS_PROXY / HTTP_PROXY。
2. 人在支持的地区:改线路
把服务挪到支持地区的云区域,或者把代理出口换到支持的地区。不要试图伪装从不支持地区的访问:OpenAI 的条款允许直接封号,账号余额也一起没了。
3. 人在不支持的地区:改用网关
API 网关在自己的域名上接收请求,再转给模型。代码里只改 base URL 和 Key,请求格式仍然兼容 OpenAI。TeamoRouter 就是这样的网关:https://api.teamorouter.com 上可以调用 GPT-6 等 OpenAI 模型,以及 Claude、Gemini,共用一个余额,不需要 OpenAI 账号。
OpenAI Python SDK
from openai import OpenAI
client = OpenAI(
api_key="sk-teamo-...", # 在 TeamoRouter 控制台创建的 Key
base_url="https://api.teamorouter.com/v1",
)
resp = client.responses.create(model="gpt-6-sol", input="你好")
print(resp.output_text)
curl
curl https://api.teamorouter.com/v1/responses \
-H "Authorization: Bearer $TEAMOROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-6-sol", "input": "你好"}'
Codex CLI:写入 ~/.codex/config.toml,Key 放在环境变量 OPENAI_API_KEY:
model_provider = "teamorouter"
model = "gpt-6-sol"
[model_providers.teamorouter]
name = "TeamoRouter"
base_url = "https://api.teamorouter.com/v1"
env_key = "OPENAI_API_KEY"
wire_api = "responses"
其他工具同理,见 API 接入文档和 Codex 接入教程。
不用 OpenAI 账号怎么付费
在 TeamoRouter 控制台充值余额,按实际用掉的 token 扣费,没有订阅,最低 $5 起充,支持支付宝。手上有 USDT 的话,也可以在充值弹窗里点「USDT支付」,用 USDT、USDC 或 ETH 从交易所 App 转账,步骤见用 USDT 充值 Claude / GPT API。
常见问题
报这个错是不是账号被封了? 不是。这个错误在鉴权之前就返回了,跟账号状态无关;账号本身的问题会是别的报错,而且要请求被放行之后才会出现。
开 VPN 能解决吗? 出口在支持的国家时,请求通常能通过。但 OpenAI 的条款写明从不支持地区访问可能被停用账号,这是拿账号和余额冒险,不算解决。
为什么浏览器能用、代码里报错? 浏览器的代理插件和系统代理设置,很多时候管不到终端里跑的程序。在运行代码的终端里执行上面的 ipinfo.io 检查。
unsupported_country_region_territory 和 429 是一回事吗? 不是。429 是请求被接受了,但触发了速率限制或额度用完;403 是因为请求来源被拒绝。
Codex 里出现这个错,该改哪里? 改 base URL:按上面的写法在 config.toml 里配置 model_provider。在不支持的地区用 ChatGPT 账号登录 Codex 也一样走不通。
相关阅读
- Gemini API 国内怎么用:Google API 的同类地区限制
- Codex 接入教程
- 用 USDT 充值 Claude / GPT API