Альтернатива 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:

bash
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:

bash
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 прочитает их сами:

bash
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-astra0.62 / 3.0510 / 5053
gpt-6.1-sol0.27 / 1.322 / 1052
gpt-6-sol0.13 / 0.632 / 10—
gpt-5.6-sol0.22 / 1.075 / 30—
gpt-5.6-terra0.13 / 0.632.5 / 1542
gpt-6-luna0.04 / 0.210.1 / 0.538
gpt-5.6-luna0.06 / 0.31 / 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 тоже переезжает сменой адреса:

bash
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. Правильный цикл:

bash
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 — модели нет в списке разрешённых для ключа, 404 model_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 в кабинете, подпишитесь и нажмите «Проверить».

Чек-лист миграции

  1. Создайте ключ в кабинете, задайте дневной лимит и разрешённые модели.
  2. Поменяйте base_url на https://api.zukko.pro/v1 (или задайте OPENAI_BASE_URL).
  3. Подставьте ключ fetch_... вместо старого.
  4. Сверьте имена моделей с GET /v1/models, вынесите их в конфиг.
  5. В стриминге добавьте проверку if chunk.choices:.
  6. В Responses API передавайте историю в input, не полагайтесь на previous_response_id.
  7. Прогоните тесты на всех эндпоинтах и параметрах, которые реально используете.
  8. Обработайте 402, 403 и 503 model_disabled.
  9. Первую неделю сверяйте расход в разделе «Использование» кабинета.

Начать можно с быстрого старта: создайте ключ, пополните баланс от $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.