Альтернатива OpenAI API из России: что поменять в коде при переезде
Код на OpenAI SDK переезжает на OpenAI-совместимый шлюз почти без правок. Разбираем, какие строки поменять, что проверить в стриминге и Responses API и как платить из России.
6 мин · · разработка · оплата
Если ваш проект уже работает с OpenAI SDK, а оплачивать доступ из России стало сложно, искать альтернативу OpenAI API с переписыванием кода не нужно. Zukko принимает запросы в том же формате, поэтому переезд сводится к адресу, ключу и именам моделей. Ниже — что именно поменять, какие места проверить и как пополнять баланс.
Что меняется, а что остаётся
Zukko — API-шлюз к моделям Claude, GPT, Gemini, DeepSeek, Qwen и GLM: один ключ вида fetch_..., единый баланс в долларах, оплата за токены без подписки. OpenAI-совместимый формат доступен по адресу https://api.zukko.pro/v1:
POST /v1/chat/completions— чат;POST /v1/responses— Responses API;GET /v1/models— список доступных моделей.
Официальные SDK openai для Python и Node.js остаются теми же — их достаточно направить на другой адрес. Бизнес-логика, промпты, разбор ответов не меняются.
Альтернатива OpenAI API из России: три правки в коде
1. Адрес API
Python:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.zukko.pro/v1",
api_key=os.environ["ZUKKO_API_KEY"],
)
response = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[{"role": "user", "content": "Сформулируй три идеи для названия кофейни"}],
)
print(response.choices[0].message.content)Node.js:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.zukko.pro/v1",
apiKey: process.env.ZUKKO_API_KEY,
});
const response = await client.chat.completions.create({
model: "gpt-6.1-sol",
messages: [{ role: "user", content: "Сформулируй три идеи для названия кофейни" }],
});
console.log(response.choices[0].message.content);Если не хотите трогать код вообще, задайте переменные окружения — SDK прочитает их сами:
export OPENAI_BASE_URL=https://api.zukko.pro/v1
export OPENAI_API_KEY=fetch_ваш_ключСуффикс /v1 обязателен: OpenAI SDK дописывает к базовому адресу только chat/completions или responses.
2. Ключ
Ключ создаётся в кабинете на странице API-ключи. Полный ключ показывается один раз — сохраните его в менеджер секретов или переменную окружения. У каждого ключа можно задать дневной и месячный лимит в долларах и список разрешённых моделей: удобно выдавать отдельный ключ на каждый сервис.
3. Имена моделей
Имена моделей берите из каталога Zukko, а не из старого кода. GPT-модели на 6 октября 2026 ($ за 1M токенов):
| Модель | Zukko вход / выход | Цена вендора вход / выход | Индекс силы |
|---|---|---|---|
gpt-6-astra | 0.62 / 3.05 | 10 / 50 | 53 |
gpt-6.1-sol | 0.27 / 1.32 | 2 / 10 | 52 |
gpt-6-sol | 0.13 / 0.63 | 2 / 10 | — |
gpt-5.6-sol | 0.22 / 1.07 | 5 / 30 | — |
gpt-5.6-terra | 0.13 / 0.63 | 2.5 / 15 | 42 |
gpt-6-luna | 0.04 / 0.21 | 0.1 / 0.5 | 38 |
gpt-5.6-luna | 0.06 / 0.3 | 1 / 6 | — |
Индекс силы — Intelligence Index от Artificial Analysis из каталога Zukko; прочерк означает, что значения в каталоге нет. Если модель из старого кода в списке не найдена, запрос вернёт 404 model_not_found — вынесите имя модели в конфиг и проверяйте список при деплое. Актуальный список и цены — GET https://api.zukko.pro/v1/models (ключ для этого запроса не нужен) или страница «Модели» в кабинете.
Через тот же клиент доступны и другие модели: claude-sonnet-5, deepseek-v4.1-flash, gemini-3.8-flash и остальные из каталога. Шлюз конвертирует формат сам.
Responses API
Эндпоинт /v1/responses есть, так что код на Responses API тоже переезжает сменой адреса:
response = client.responses.create(
model="gpt-6.1-sol",
instructions="Отвечай кратко, по-русски.",
input="Чем отличается список от кортежа в Python?",
)
print(response.output_text)Одна деталь, которую стоит проверить до переезда: по справочнику Zukko шлюз не хранит состояние, параметры previous_response_id и store игнорируются. Если ваш код продолжает диалог через previous_response_id, передавайте историю целиком в input массивом сообщений. Пример с агентами — в статье про OpenAI Agents SDK через /v1/responses.
Стриминг: одна проверка, без которой код упадёт
В потоковом режиме OpenAI-формата сервер присылает последним чанком статистику usage с пустым массивом choices. Код, который сразу берёт chunk.choices[0], на этом чанке получит IndexError. Правильный цикл:
stream = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[{"role": "user", "content": "Напиши короткое стихотворение про осень"}],
stream=True,
)
for chunk in stream:
if chunk.choices:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
elif chunk.usage:
print(f"\n[вход: {chunk.usage.prompt_tokens}, выход: {chunk.usage.completion_tokens}]")Бонус: токены приходят в каждом ответе, и расход можно логировать без дополнительных запросов. Подробнее — в справочнике chat/completions.
Что ещё проверить перед переключением
- Эндпоинты. Если вы используете эмбеддинги, аудио, файлы или fine-tuning, сверьтесь со справочником API Zukko до миграции: переносите только то, что там описано.
- Параметры.
tools,response_formatи подобные прогоните на своих тестах с выбранной моделью: поддержка зависит от модели. - Ошибки. 401 — неверный ключ, 402 — не хватает баланса, 403
model_not_allowed_for_key— модели нет в списке разрешённых для ключа, 404model_not_found— неизвестное имя модели, 413 — слишком большой запрос, 429 — исчерпан дневной или месячный лимит ключа (key_daily_limit_reached/key_monthly_limit_reached) или ограничение у провайдера модели (общего rate limit у Zukko нет), 503 — провайдер недоступен. Если пришёл 503 с кодомmodel_disabled, модель выключена — возьмите другую изGET /v1/models. - Кэш. У GPT-моделей число закэшированных токенов видно в
usage.prompt_tokens_details.cached_tokens; чтение кэша тарифицируется по своей цене из каталога, а запись отдельно не списывается — первый запрос идёт целиком по цене входа.
Сколько это стоит: пример расчёта
Допустим, сервис тратит в месяц 10 млн входных и 2 млн выходных токенов на gpt-6.1-sol.
- Zukko: 10 × $0.27 + 2 × $1.32 = $2.70 + $2.64 = $5.34.
- Официальная цена вендора: 10 × $2 + 2 × $10 = $20 + $20 = $40.
Расчёт без учёта кэша: если у вас длинный повторяющийся системный промпт, часть входа пойдёт по цене чтения кэша — у gpt-6.1-sol в Zukko это $0.013 за 1M токенов. Подставьте свои объёмы из статистики, а не наш пример.
Оплата из России
Баланс в долларах, пополнение от $1:
- СБП и карта РФ (Мир, Visa, Mastercard) — в рублях по рыночному курсу на момент оплаты;
- криптовалюта (USDT и другие);
- зарубежная карта Mastercard EU — с комиссией около 13%, суммы от $2 до $594.
Стартового бонуса нет, но за подписку на Telegram-канал @zukkopro начисляется $0.50 — один раз на Telegram-аккаунт: привяжите Telegram в кабинете, подпишитесь и нажмите «Проверить».
Чек-лист миграции
- Создайте ключ в кабинете, задайте дневной лимит и разрешённые модели.
- Поменяйте
base_urlнаhttps://api.zukko.pro/v1(или задайтеOPENAI_BASE_URL). - Подставьте ключ
fetch_...вместо старого. - Сверьте имена моделей с
GET /v1/models, вынесите их в конфиг. - В стриминге добавьте проверку
if chunk.choices:. - В Responses API передавайте историю в
input, не полагайтесь наprevious_response_id. - Прогоните тесты на всех эндпоинтах и параметрах, которые реально используете.
- Обработайте 402, 403 и 503
model_disabled. - Первую неделю сверяйте расход в разделе «Использование» кабинета.
Начать можно с быстрого старта: создайте ключ, пополните баланс от $1 и переключите один сервис.
Частые вопросы
Нужно ли менять SDK или библиотеку?
Нет. Официальные SDK openai для Python и Node.js работают как есть — меняются только адрес и ключ. Так же подключаются LangChain, Codex и другие инструменты с OpenAI-совместимым провайдером: базовый адрес с /v1, подробности — в разделе документации об интеграциях.
Можно ли через тот же клиент вызывать Claude?
Да, любой моделью из каталога можно пользоваться в OpenAI-формате. Но учтите: для Claude скидку за кэш промптов даёт только Anthropic-формат (/v1/messages); в OpenAI-формате весь вход Claude идёт по цене входа. Если у вас код на Anthropic SDK, смотрите статью о переезде с Anthropic API.
Работает ли previous_response_id?
Нет, по справочнику Zukko шлюз не хранит состояние ответов. Передавайте историю диалога в input сами.
Есть ли пробный баланс?
Стартового бонуса нет. Есть $0.50 за подписку на канал @zukkopro, а минимальное пополнение — $1.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Промпт-инъекция: что это и как защитить бота и агентаОбъясняем, как работает промпт-инъекция через пользовательский ввод и чужие документы, и какие меры снижают ущерб: изоляция данных, права инструментов, лимиты ключа.
- Свой прокси к нейросети на Node.js: не показывать API-ключ во фронтендеНебольшой сервер на Express между вашим фронтендом и API нейросети: ключ остаётся на сервере, а модели, длина запроса и частота ограничены.
- DeepSeek API на Python: запросы, стриминг, JSON и обработка ошибокГотовый код для DeepSeek V4.1 Flash и V4 Pro на OpenAI SDK: запрос, стриминг, разбор JSON и аккуратная обработка ошибок.
- Промпт-инжиниринг: примеры и 12 готовых шаблонов для работыДвенадцать шаблонов промптов для рабочих задач: что в них написано, почему именно так и сколько стоит один вызов по API.