Отличите 403 от 401
Код 401 значит «не узнал ключ», 403 значит «узнал и запретил». При 401 проверяйте ключ, при 403 ключ трогать не нужно, пока не поняли причину.
Сервер узнал ваш ключ и всё равно отказал. Разбираем четыре причины 403, из которых только одна чинится на вашей стороне.
Ошибка API с кодом 403 (forbidden) значит, что сервер вас узнал, но выполнять запрос запретил. В этом главное отличие от 401: там ключ не принят, здесь ключ верный, а прав на действие нет. Поэтому перевыпуск ключа при 403 почти никогда не помогает, а проверить надо страну запроса, права ключа, доступ к модели и правила самого сервиса.
У OpenAI самый частый 403 из России приходит с code unsupported_country_region_territory: запрос пришёл с IP, для которого сервис закрыт. У Anthropic это permission_error, и под него попадает как регион, так и ключ без доступа к модели. У OpenRouter 403 значит, что ввод не прошёл модерацию или модель запрещена для вашего региона. У GitHub Copilot 403 с текстом Invalid copilot token означает блокировку аккаунта или сети, и никаким ключом это не чинится.
Порядок разбора простой: сначала прочитать message и code в теле ответа, потом понять, про регион это, про права или про содержимое. Регион ключом не лечится, права лечатся в консоли поставщика, содержимое правкой запроса.
| Текст в ответе | Причина | Что делать |
|---|---|---|
| unsupported_country_region_territory (OpenAI) | IP запроса из региона без поддержки | Ключ не поможет: нужен адрес, доступный из России |
| permission_error (Anthropic) | Регион или ключ без доступа к модели | Проверьте, откуда идёт запрос и что разрешено ключу |
| 403 у OpenRouter | Модерация ввода или модель закрыта для региона | Поменяйте модель или уберите спорное содержимое |
| Invalid copilot token (Copilot) | Блокировка аккаунта или сети GitHub | Ключом не чинится, рассмотрите другой инструмент |
| You have insufficient permissions | Ключ с ограниченными правами | Выпустите ключ с нужными правами в консоли поставщика |
Тексты приведены по ответам сервисов на момент написания; формулировки меняются от версии к версии.
Код 401 значит «не узнал ключ», 403 значит «узнал и запретил». При 401 проверяйте ключ, при 403 ключ трогать не нужно, пока не поняли причину.
Слова country, region, location говорят про регион. Слова permission, scope, access говорят про права ключа. Слова moderation, flagged говорят про содержимое.
Один curl без прокси покажет, региональная ли это ошибка. Если ответ меняется в зависимости от сети, дело в IP, а не в ключе.
curl https://api.kosareva.cloud/v1/models \ -H "Authorization: Bearer $KEY" # 200 со списком моделей: ключ и адрес рабочие
В консоли поставщика у ключа есть проект и набор разрешений. Если модель или endpoint вне них, выпустите ключ заново с нужными правами.
Условия большинства сервисов это запрещают, а общий IP VPN часто уже в чёрном списке и даёт тот же 403 или 429. Надёжнее адрес, который принимает запросы из России.
При 401 сервер не принял ключ: его нет, он неверный или отозван. При 403 ключ принят, но действие запрещено: регион, права, модель или содержимое.
Только если причина в правах старого ключа. Регион и блокировка аккаунта от ключа не зависят.
Да, у OpenRouter модерация ввода отвечает именно 403. Уберите спорный фрагмент или выберите другую модель.
Наш шлюз принимает запросы с российских IP, поэтому региональный 403 от OpenAI и Anthropic через него не возникает: адрес https://api.kosareva.cloud/v1 для OpenAI-формата и https://api.kosareva.cloud для Claude Code. Если 403 всё же пришёл, тело ответа проброшено без изменений, чтобы вы видели причину. Что мы не чиним: Copilot, вход в Cursor и в ChatGPT, там блокировка на уровне аккаунта.
OpenAI-совместимый адрес, оплата в рублях, ключ сразу после регистрации. Пополнение картой от 50 ₽.