Документация API go2llm

403 region not supported и unsupported_country_region_territory

Ошибка 403 region not supported возникает, когда Anthropic или OpenAI отклоняют запрос по географии IP-адреса, ещё до проверки модели и до инференса. OpenAI API возвращает код unsupported_country_region_territory, Claude Code — текст region not supported. Это отказ на уровне edge официального вендора, а не проблема ключа, баланса или модели. У go2llm статус 403 означает совсем другое — ограничения самого ключа.

Страница составлена 2026-09-11, обновлена 2026-09-11.

Как выглядит ошибка

OpenAI API отвечает статусом 403 и таким телом:

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

Claude Code при том же сценарии показывает в терминале короткую строку вида API Error: 403 region not supported и завершает сессию — JSON пользователь обычно не видит.

go2llm возвращает 403 в четырёх совершенно других случаях, и ни один из них не про географию:

{ "error": "model not allowed for this key", "type": "model" }

Коды go2llm под статусом 403: model (модель не в списке разрешённых для ключа), inactive (ключ отозван), expired (истёк срок действия ключа), ip (клиентский IP не проходит IP allow-list ключа). Сообщения соответственно: model not allowed for this key, key revoked, key expired, client ip not allowed for this key.

Причины 403

1. IP-адрес вне поддерживаемых регионов вендора

Anthropic и OpenAI проверяют страну по IP на входе. Запрос из неподдерживаемого региона отклоняется до аутентификации: ключ может быть валидным, баланс — положительным, но до модели запрос не доходит. Точный перечень поддерживаемых стран публикуют и меняют сами вендоры — актуальный список смотрите в их документации, копировать его сюда бессмысленно: он устаревает быстрее страницы.

2. VPN переключился или отдал IP из другого региона

Самая частая причина «работало вчера, не работает сегодня». Exit-нода VPN сменилась, и IP оказался в неподдерживаемой юрисдикции. Обратная сторона: смена IP-адресов между запросами регулярно приводит к блокировке аккаунта у вендора — это уже не 403, а потеря доступа целиком.

3. Биллинг-адрес или страна аккаунта не проходят проверку

Отдельно от IP вендоры проверяют страну эмитента карты при оплате. Отказ на платеже не даёт 403 на API, но приводит к тому же результату — работать не получается. Перевыпуск карты и смена банка ситуацию не меняют: проверяется страна выпуска.

4. У go2llm 403 — это IP allow-list ключа

Если ответ пришёл от go2llm с типом ip и сообщением client ip not allowed for this key, география ни при чём: у ключа настроен список разрешённых IP-адресов, и текущий адрес в него не входит. Частый сценарий — ключ создали с домашнего IP, а запрос идёт из CI-раннера или с прод-сервера.

5. У go2llm 403 — это список моделей ключа

Тип model и сообщение model not allowed for this key означают, что ключу разрешён ограниченный набор моделей, и запрошенная модель в него не входит. Это настройка ключа в кабинете, а не отсутствие модели в каталоге — отсутствие даёт 404 model_not_found.

6. У go2llm 403 — ключ отозван или истёк

Типы inactive и expired. У каждого ключа go2llm есть опциональный срок действия; после его наступления шлюз отвечает 403 key expired. Отозванный в кабинете ключ даёт 403 key revoked.

Как починить по шагам

Шаг 1. Определите, кто вернул 403. Тело с полем code: "unsupported_country_region_territory" — OpenAI. Строка region not supported из Claude Code — Anthropic. Тело с полем type из набора model / inactive / expired / ip — go2llm.

Шаг 2. Если это вендор — уберите зависимость от географии, а не боритесь с ней. Запрос на go2llm идёт на домен без региональных ограничений, зарубежная карта не требуется. Меняются ровно две вещи — base URL и ключ:

export ANTHROPIC_BASE_URL=https://go2llm.tech
export ANTHROPIC_AUTH_TOKEN=YOUR_API_KEY
export ANTHROPIC_MODEL=claude-sonnet-5
claude

Для OpenAI SDK base URL другой — с /v1:

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://go2llm.tech/v1",
)

response = client.chat.completions.create(
    model="gpt-5.6-sol",
    messages=[{"role": "user", "content": "Ответь: OK"}],
)
print(response.choices[0].message.content)

Шаг 3. Если это go2llm — откройте настройки ключа в кабинете и проверьте четыре поля: активен ли ключ, не истёк ли срок, входит ли нужная модель в список разрешённых, входит ли ваш текущий внешний IP в allow-list. Узнать свой внешний адрес: curl -s https://api.ipify.org.

Шаг 4. Проверьте починку одним запросом без SDK:

curl -i https://go2llm.tech/v1/messages \
  -H "x-api-key: $GO2LLM_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":32,"messages":[{"role":"user","content":"Ответь одним словом: работает"}]}'

Как избежать 403 в будущем

Не стройте продакшен на VPN: это компонент, который никто в команде не поддерживает, и каждая смена exit-ноды — новый источник отказов плюс риск блокировки аккаунта у вендора. Прямой адрес без региональной проверки убирает целый класс ошибок из системы.

Обрабатывайте 403 как фатальную ошибку: ретрай не помогает ни в одном из шести сценариев выше. Ветвитесь по error.type, а не по статусу:

FATAL_403 = {"model", "inactive", "expired", "ip",
             "unsupported_country_region_territory", "request_forbidden"}

if r.status_code == 403:
    err = r.json().get("error", {})
    kind = err.get("type") if isinstance(err, dict) else "unknown"
    raise SystemExit(f"403 {kind}: доступ закрыт, ретрай не поможет")

Для CI и прод-серверов заводите отдельные ключи go2llm с IP allow-list под их фактические адреса и отдельным списком разрешённых моделей — тогда ключ, утекший из пайплайна, бесполезен за пределами вашего диапазона. Срок действия ключа ставьте осознанно и записывайте дату: истёкший ключ даёт ровно такой же 403, что и отозванный, и на это обычно тратят полчаса.

Связанные ошибки

FAQ

Помогает ли VPN от ошибки region not supported? Формально да: смена IP на поддерживаемый регион снимает 403 у вендора. Практически VPN добавляет второй источник отказов — при смене exit-ноды запросы падают снова, а регулярная смена IP-адресов в рамках одного аккаунта приводит к его блокировке у вендора.

Почему go2llm возвращает 403, если региональных ограничений у него нет? Статус 403 у go2llm относится только к настройкам ключа: model, inactive, expired, ip. География в этот статус не входит. Смотрите поле error.type — оно однозначно указывает, какая из четырёх настроек не прошла.

Работает ли Claude Code через go2llm из России? Да, подключение Claude Code к go2llm проверено живым запросом: протокол Anthropic Messages, base URL https://go2llm.tech без /v1, переменная ANTHROPIC_AUTH_TOKEN. Codex CLI тоже проверен живым прогоном (2026-09-14, версия 0.151.0, wire_api = "responses") — настройка на странице Codex API; прежний разбор 404 остался здесь.

Нужна ли зарубежная карта для оплаты? Нет. go2llm принимает рубли через СБП (провайдер Platega) и криптовалюту, минимальное пополнение — $1. Баланс ведётся в USD, цены опубликованы на странице тарифов.


Получить ключ и сделать первый запрос за 3 минуты → go2llm.tech. Инструкции по подключению Claude Code и SDK — в документации.