> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ruapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenAI API 报错「unsupported_country_region_territory」（403）：什么意思、怎么解决

> OpenAI API 报 403「Country, region, or territory not supported」（错误码 unsupported_country_region_territory）：为什么 OpenAI 会按所在位置拒绝请求，为什么连云服务器上也会出现，以及怎么接入 GPT 模型不再报这个错——换密钥和地址就行。

**先说结论**：这个错误是 OpenAI 自己返回的：发往 API 的请求来自它国家名单以外的地方，就会报这个错。检查的是请求从哪个地址发出，而不是密钥：换新密钥、充值余额都没用。要让这个错误消失，请求就不能从你的地址发到 OpenAI。用 RuAPI 的密钥正是这样：你在代码里换掉密钥和地址，GPT 模型还是原来那些，不用 VPN。

## 报错长什么样

状态码为 **403** 的响应：

```json theme={null}
{
  "error": {
    "code": "unsupported_country_region_territory",
    "message": "Country, region, or territory not supported",
    "param": null,
    "type": "request_forbidden"
  }
}
```

在 Python SDK 里，它会以 `openai.PermissionDeniedError: Error code: 403` 的形式出现，响应体一样。

## 为什么会这样

* **OpenAI 会检查请求从哪里来**。如果地址属于 [Supported countries and territories](https://developers.openai.com/api/docs/supported-countries) 页面以外的国家，请求还没到模型就被拒绝了。
* **在支持的国家的服务器上也会出现**。在 OpenAI 开发者论坛上（[讨论示例](https://community.openai.com/t/cloud-run-in-asia-northeast3-suddenly-getting-unsupported-country-region-territory-error-from-openai-api/1279969)），有人在支持的国家的云服务器上遇到过这个错误。在那个讨论里，OpenAI 后来在自己那边修好了，另有一位用户换了云服务的地域也解决了。
* **用 VPN 绕过有风险**。OpenAI 在同一个页面上提醒，从名单以外的国家访问，可能导致账号被封或被暂停。账号没了，充进去的余额也跟着没了。

## 可以怎么办

| 情况 | 怎么办 |
| - | - |
| 服务器在支持的国家，但还是报错 | 查一下服务器地址被识别在哪里（`curl ipinfo.io`），换云服务的地域或出网线路 |
| 你本人所在的地区不在 OpenAI 的名单里 | 通过 RuAPI 接入 GPT 模型，步骤见下 |
| 代码已经按 OpenAI SDK 写好了 | 什么都不用重写：只要改 `api_key` 和 `base_url` |

## 通过 RuAPI 接入 GPT

**1. 注册**

在 [www.ruapi.ai](https://www.ruapi.ai/?lng=zh-CN\&utm_source=docs\&utm_campaign=zh-openai-unsupported-country-region-territory) 注册，邮箱、Google 或 Yandex 都行。

**2. 充值**

控制台 →「**钱包管理**」：USDT 或 USDC（TRC20 / BEP20 / Polygon；USDT 还可以走 TON），5 USDT 起。还没有 USDT 的话，[用 SBP 拿卢布买](https://docs.ruapi.ai/zh/buy-usdt.md)。外国银行的卡（Visa / Mastercard）也收。

**3. 密钥**

控制台 →「**令牌管理**」→「**添加令牌**」，拿到一串 `sk-...`。

**4. 改代码**

换掉密钥和地址，其他代码保持不变。

```python Python theme={null}
from openai import OpenAI

client = OpenAI(
    api_key="sk-你的RuAPI密钥",
    base_url="https://www.ruapi.ai/v1",
)

resp = client.chat.completions.create(
    model="gpt-6-luna",
    messages=[{"role": "user", "content": "你好！"}],
)
print(resp.choices[0].message.content)
```

```javascript Node.js theme={null}
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-你的RuAPI密钥",
  baseURL: "https://www.ruapi.ai/v1",
});

const resp = await client.chat.completions.create({
  model: "gpt-6-luna",
  messages: [{ role: "user", content: "你好！" }],
});
console.log(resp.choices[0].message.content);
```

```bash curl theme={null}
curl https://www.ruapi.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-你的RuAPI密钥" \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-6-luna", "messages": [{"role": "user", "content": "你好！"}]}'
```

也可以完全不动代码：很多程序会读取环境变量 `OPENAI_API_KEY` 和 `OPENAI_BASE_URL`，把它们设成 RuAPI 密钥和 `https://www.ruapi.ai/v1` 就行。有哪些 GPT 模型、各有什么区别，见 [GPT API 指南](https://docs.ruapi.ai/zh/gpt-api.md)。

## 常见问题

> [accordion] 换新密钥或给 OpenAI 充值有用吗？
>
> 没用。OpenAI 检查的不是密钥，也不是余额，而是请求从哪个地址发出。从同一个地址，新密钥也会报同样的错。

> [accordion] 浏览器里的 ChatGPT 能用，API 却不行，为什么？
>
> 这是两个不同的服务，检查也不一样；ChatGPT Plus 订阅和 API 无关，API 要单独付费。详见 [OpenAI API 密钥：去哪拿、怎么付款](https://docs.ruapi.ai/zh/openai-api-key-russia.md)。

> [accordion] 报错的不是我的代码，而是某个程序（Cursor、n8n、Cline…）
>
> 在程序设置里找到「OpenAI API key」和「Base URL」字段（有时叫「OpenAI-compatible」），填上 RuAPI 密钥和 `https://www.ruapi.ai/v1`。现成的教程在「工具对接」栏目里。

> [accordion] 是原版 OpenAI 模型吗？
>
> 是。都是原版模型，比如 gpt-6.1-sol、gpt-6-luna、gpt-5.4-mini，不掉包，不降质量。

## 接下来

> [card] [OpenAI API 密钥](https://docs.ruapi.ai/zh/openai-api-key-russia.md)
>
> 去哪拿密钥、怎么付款。

> [card] [RuAPI 错误码](https://docs.ruapi.ai/zh/errors.md)
>
> 400、401、403、429 是什么意思、怎么解决。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.