Доступ к OpenAI API для разработчиков в России
OpenAI API нужен, чтобы обращаться к моделям GPT из кода: скриптов на Python, расширений IDE, собственных сервисов. Проблема не в самом API, а в том, что запросы к api.openai.com из России упираются в блокировку по региону. Ответ приходит с ошибкой доступа либо соединение просто висит до таймаута.
Эта страница про то, как устроен доступ к OpenAI API, какие ключи и модели вам понадобятся, и как развести трафик так, чтобы через прокси уходили только нужные приложения, а не вся машина целиком. Последнее мы решаем своим продуктом Proxy Control, о нём в конце.
Что такое OpenAI API и зачем он нужен
ChatGPT, это веб-интерфейс. OpenAI API, это программный доступ к тем же моделям по HTTP. Вы отправляете POST-запрос с телом в JSON, получаете ответ модели. Разница принципиальная: API встраивается в код, работает без браузера, оплачивается по токенам, а не по подписке на чат.
Базовый эндпоинт: https://api.openai.com/v1/. Внутри несколько семейств методов. Старый /v1/chat/completions (Chat Completions) до сих пор поддерживается и совместим с массой библиотек. Новый /v1/responses (Responses API) OpenAI предлагает как основной интерфейс для новых проектов. Если вы видите в туториале другой код с completions вместо responses, туториал просто старее, оба варианта живые.
Зачем API бизнесу и разработчику, если есть чат в браузере. Через API нейросеть встраивается в продукт: чат-бот поддержки клиентов отвечает на сайте без участия человека, скрипт разбирает почту и складывает ответы в базу, IDE подсказывает код прямо в редакторе. Всё это работает по расписанию и на потоке, чего с ручным чатом не сделать. Плюс вы платите за фактический объём токенов, а не за место в подписке, которое может простаивать.
Конкретный формат запросов, параметров и ответов смотрите в официальной документации OpenAI, она меняется и мы не будем её переписывать.
Ключ OpenAI API
Чтобы обращаться к API, нужен ключ. Он создаётся в личном кабинете на platform.openai.com в разделе API keys и выглядит как строка, которую вы передаёте в заголовке Authorization: Bearer <ключ>. Один аккаунт может держать несколько ключей, это удобно, чтобы разделить проекты и при утечке отозвать один, не трогая остальные.
Про создание и хранение ключа мы написали отдельно: openai api key. Коротко о безопасности: ключ не коммитят в репозиторий и не зашивают в клиентский код. Держите его в переменной окружения или в секрет-хранилище, а в приложение подтягивайте оттуда.
export OPENAI_API_KEY="sk-..."
from openai import OpenAI
client = OpenAI() # ключ подхватится из OPENAI_API_KEY
Если ключ всё-таки попал в публичный репозиторий или лог, считайте его скомпрометированным. Немедленно отзовите его в разделе API keys кнопкой revoke и создайте новый. OpenAI сканирует публичные репозитории и иногда сам отзывает засветившиеся ключи, но полагаться на это не стоит: между утечкой и отзывом кто-то успеет потратить ваши деньги. Именно поэтому ключ на прокси-канале не должен уходить через домашний IP, где он засветится в логах провайдера, об этом дальше в разделе про маршрутизацию.
Про «бесплатные ключи OpenAI»
Запросов вида «openai api бесплатно» и «бесплатные api ключи openai» много, поэтому скажем прямо. Официального бесплатного ключа с полным доступом к GPT-5 и другим моделям OpenAI не выдаёт. Новым аккаунтам иногда доступен пробный кредит, но это временно и зависит от условий платформы. Чужие «бесплатные ключи», которые раздают на сайтах, это либо чей-то платный ключ, который скоро отзовут, либо приманка. Не используйте их: платить по чужому счёту или получить бан аккаунта, оба варианта плохие.
Модели и совместимость
Через API доступны модели семейства GPT для текста и кода, а также отдельные модели под эмбеддинги, изображения и аудио. Список моделей и цены OpenAI держит на своей странице pricing, там же указано, что за модель сколько стоит за миллион токенов. Мы не приводим цифры здесь, потому что они регулярно меняются, и держать их в актуальном виде на стороннем сайте невозможно.
Получить актуальный перечень моделей можно и программно, через GET /v1/models. Ответ приходит в JSON со списком идентификаторов вроде gpt-4.1 или gpt-5, которые вы потом подставляете в поле model запроса. Для кода обычно берут модели посвежее, они лучше держат контекст и точнее в языках программирования. Качество ответа зависит не только от модели, но и от того, как собран запрос: системный промпт, температура, ограничение на длину вывода.
Отдельно про формулировку «openai совместимый api». Так называют сторонние сервисы и локальные раннеры, которые повторяют формат запросов OpenAI. Клиентская библиотека OpenAI умеет ходить на другой base_url, и код при этом почти не меняется. Это удобно для миграции, но помните: совместимость на уровне формата не значит совместимость по набору моделей и поведению. Проверяйте на своих задачах.
Первый запрос на Python
Ставим официальную библиотеку:
pip install openai
Минимальный запрос через Responses API:
from openai import OpenAI
client = OpenAI()
resp = client.responses.create(
model="gpt-4.1",
input="Напиши функцию на Python, которая парсит ISO-дату"
)
print(resp.output_text)
Если предпочитаете старый интерфейс или библиотека проекта завязана на него:
resp = client.chat.completions.create(
model="gpt-4.1",
messages=[{"role": "user", "content": "Привет"}]
)
print(resp.choices[0].message.content)
Перед запуском убедитесь, что переменная OPENAI_API_KEY доступна процессу. В Windows проверить можно командой echo %OPENAI_API_KEY% в cmd или $env:OPENAI_API_KEY в PowerShell. Если строка пустая, библиотека упадёт с ошибкой аутентификации ещё до сети, тогда дело в окружении, а не в доступе.
Если вместо ответа приходит ошибка соединения или запрос виснет, это чаще всего не код, а сеть: api.openai.com недоступен с вашего IP. Разбор сетевой части ниже.
Стриминг ответа
Для длинных ответов включают потоковый режим (stream), чтобы токены приходили по мере генерации, а не одним куском в конце. Это заметно улучшает отклик в интерактивных инструментах вроде чата в IDE. По HTTP это server-sent events, соединение держится открытым, пока модель отвечает. Тем важнее стабильный канал: обрыв на середине стрима вы увидите сразу.
Ошибки, rate limits и ретраи
К каждому ответу API приходит HTTP-код. Их стоит различать в клиенте, а не ловить всё одним except.
401, ключ неверный или отозван. Проверьте заголовок и сам ключ.429, превышен лимит запросов (rate limit) или закончились средства. Нужен ретрай с экспоненциальной задержкой либо снижение частоты.400, ошибка в теле запроса: неверная модель, кривой JSON, слишком длинный вход.5xx, проблема на стороне OpenAI. Повторяйте с бэкоффом.
Rate limits привязаны к аккаунту и уровню использования, точные числа смотрите в личном кабинете, они у всех разные. Практический совет: считайте токены заранее и разбивайте большие объёмы на батчи, так вы не упрётесь в лимит на середине задачи и не сожжёте бюджет на повторах.
Экспоненциальная задержка на практике выглядит так: первый повтор через одну секунду, второй через две, третий через четыре и так далее, с ограничением сверху. К каждой паузе полезно добавлять случайный сдвиг, чтобы параллельные запросы не бились в лимит одновременно. Ответ 429 часто несёт заголовок Retry-After, если он есть, ждите ровно указанное время, а не своё. Больше трёх-пяти повторов подряд смысла не имеет: если сервис лежит, лучше вернуть ошибку выше и не копить очередь.
Отдельная категория, которую в России путают с ошибками API: сетевые таймауты и коды доступа по региону. Это не про ваш код и не про лимиты, это про то, что запрос не доходит до серверов OpenAI. Дальше про то, как это чинится.
Доступ из России: маршрутизация трафика
Чтобы обращаться к OpenAI API из России, трафик к api.openai.com нужно провести через прокси или VPN. Тут появляется неудобная деталь Windows: система не умеет разводить трафик по приложениям. Включив системный прокси или VPN, вы заворачиваете туда всё сразу, включая то, что должно ходить напрямую: RDP до рабочей машины, локальные сервисы, банк-клиент.
Мы сделали Proxy Control под эту задачу. Программа поднимает виртуальный сетевой адаптер (TUN) на sing-box, забирает в него весь трафик машины и раздаёт по правилам, привязанным к имени процесса. Каналов четыре:
- Дом, обычный интернет провайдера, напрямую;
- VPN, ваш собственный узел;
- Прокси, через HTTP CONNECT;
- Блок, соединение отклоняется.
Вы говорите: python.exe и ваша IDE идут через прокси, всё остальное домой. Скрипт, который дёргает OpenAI API, ходит через прокси и получает ответ. Соседние приложения работают по своему маршруту и о прокси не знают.
Неизвестное блокируется
Логика по умолчанию: приложение, которому канал не назначен, в интернет не выйдет. Новые программы появляются в списке со статусом «ожидает», вы распределяете их вручную. Это сделано намеренно: лучше явный отказ, чем незаметная утечка, когда вы думаете, что запрос ушёл через прокси, а он ушёл домой и вернулся ошибкой региона.
Если приложение вдруг перестало выходить в сеть, скорее всего у него канал «ожидает». Назначьте канал и нажмите «Применить маршруты».
Fail-closed вместо тихой утечки
Если прокси недоступен, прокси-приложения уходят в блок, а не домой. Если узел VPN мёртв, то же самое для VPN-приложений. Продукт скорее откажет в соединении, чем незаметно выпустит ваш ключ и запросы через домашний IP. Для работы с API это важно: запрос к OpenAI не должен случайно уйти напрямую, где он всё равно не пройдёт, а заголовок с ключом при этом засветится в логах провайдера.
Для приложений на прокси мы дополнительно блокируем UDP и IPv6, иначе QUIC ушёл бы мимо HTTP-прокси. DNS работает по DoH, чтобы имена доменов не утекали открытым текстом.
Проверка, что канал действительно тот
Маршрут можно назначить в конфиге и ошибиться, поэтому мы не верим конфигу на слово. Три собственные пробы (копии curl, прибитые к каналам) запрашивают внешний IP и показывают три разных адреса. Если IP канала совпал с домашним, программа пишет про утечку, а не красит индикатор в зелёный.
Живая сверка идёт через локальный API sing-box: видно, каким каналом идёт каждый процесс на самом деле.
chrome.exe → прокси
python.exe → прокси
rustdesk.exe → direct
После каждого применения маршрутов мы сверяем живые каналы с конфигом и пишем расхождения в лог. Это единственная проверка, которая способна поймать несоответствие: снимок из конфига с конфигом разойтись не может по определению.
Установка и запуск
Установка простая: распаковать архив и запустить Install.bat. Python и sing-box лежат внутри, интернет при установке не нужен, ставить заранее ничего не требуется.
Доступ активируется ключом вида CPC-XXXXXX-XXXXXX, один ключ на один компьютер. По нему программа получает срок действия и персональные реквизиты прокси.
Туннель поднимается сам при запуске программы, старт проходит 15 шагов с проверками. Потребуется подтверждение UAC, окно бывает спрятано за другими, проверьте панель задач.
После смены канала у приложения нажмите «Применить маршруты». Показывается подтверждение с отсчётом 10 секунд: сколько будет без сети и что часть соединений оборвётся и восстановится сама. Пока туннель пересобирается, мы ставим блокирующее правило брандмауэра, чтобы трафик не ушёл мимо маршрутов. Он встаёт на несколько секунд, потом продолжает по новому каналу.
Удаление через Uninstall.bat: снимает туннель, правило брандмауэра, задания планировщика, ярлык и папку продукта. Лицензия при этом остаётся привязанной к компьютеру.
Сколько стоит доступ
Подписка на Proxy Control: 495 ₽/мес помесячно, от 395 ₽/мес при оплате за год. Есть тарифы на 2, 3, 6 и 12 месяцев. Это плата за прокси-доступ и саму программу, оплату токенов OpenAI она не заменяет: за API вы платите OpenAI отдельно по их тарифам.
Если вопрос про доступ уже решён и вам нужен только формат запросов, посмотрите разбор эндпоинта api openai com v1. Общее описание продукта и остальные сценарии, на странице Proxy Control.
Частые вопросы
Запрос к API виснет до таймаута. Проверьте, каким каналом идёт процесс на самом деле, через живую сверку. Если он ушёл домой, IP заблокирован по региону, отсюда таймаут. Переназначьте на прокси и примените маршруты.
После смены канала ничего не изменилось. Нужно нажать «Применить маршруты», программа об этом сама напомнит и предложит применить сразу.
Reconnecting в IDE. Если инструмент на канале прокси, каждый обрыв до сервера он показывает явно. Смотрите таймауты в логе, чаще это проблема сети до сервера, а не программы.
Всё сломалось после правки настроек. Нажмите «Закрыть программу», туннель снимется, сеть вернётся в обычный режим. Затем поправьте настройки.
Приходит 401, хотя ключ свежий. Проверьте, что в заголовок попал именно ключ, а не имя переменной, и что перед ним стоит Bearer. Ещё частая причина: скрипт запущен в окружении, где OPENAI_API_KEY не задан или задан старый, перезапустите терминал после смены переменной.
Поддержка в Telegram, регистрация через почту или бота.
Proxy Control для Windows
Программа разводит трафик по приложениям: ИИ-инструменты идут через прокси, остальное напрямую. Подписка от 395 ₽ в месяц при оплате за год.
Скачать и попробовать