Как подключить Codex, Claude Code, Cursor и OpenCode и как встроить API в свой сервис. Меняются адрес, ключ и имя модели — SDK, форматы и промпты остаются прежними.
В кабинете откройте API-ключи и нажмите «Создать ключ». Секрет показывается один раз — сохраните его в менеджере паролей или секретов.
В разделе Подключение API собраны адреса OpenAI и Claude API, заголовки авторизации и примеры на cURL, Python и Node.js. В терминальном блоке задайте VIBECODE_API_KEY, заменив YOUR_API_KEY своим секретом. Затем выберите модель и скопируйте пример для своего приложения.
Оба заголовка принимаются на всех маршрутах. anthropic-version необязателен: по умолчанию — 2023-06-01. Ключ начинается с sk-vc-; ключи OpenAI и Anthropic не подходят.
В поле model указывайте идентификатор так же, как в документации OpenAI и Anthropic. Цена платформы — официальная цена × 0,2 (скидка 80%), в долларах за 1M токенов. Цены сверены с прайсами провайдеров 1 ноября 2026.
Кэшированный вход тарифицируется по официальной цене кэша конкретной модели, а не по единому проценту. У Anthropic чтение кэша и запись на 5 минут — отдельные цены (см. колонки выше). Кэшированный вход не расходует минутный TPM.
Если идентификатора нет в каталоге, шлюз возвращает 404 с кодом model_not_found; в тексте ошибки перечислены доступные модели. Подмены на другую модель нет. Официальные датированные версии claude-haiku-4-5-20251001 и claude-opus-4-5-20251101 принимаются и записываются под основным идентификатором; запрошенное имя возвращается в заголовке vc-requested-model.
Для macOS, Linux и WSL. Настраивает Codex и Claude Code: проверяет ключ, сохраняет резервную копию и записывает параметры VibeCode, не трогая остальные настройки.
Скрипт спросит ключ и подключит весь совместимый каталог. Для одного инструмента укажите в адресе ?tools=codex, ?tools=claude или ?tools=opencode. Выбирайте модель в самом клиенте: /model в Codex и Claude Code, /models в OpenCode. В Windows выполните ту же строку в Ubuntu через WSL.
Флаг
Что делает
--dry-run
Показывает изменения, ничего не записывая
--doctor
Проверяет адрес, файлы настроек и ключ из VIBECODE_API_KEY
--rollback
Возвращает настройки, которые были до установки VibeCode
Провайдеры VibeCode с полным каталогом OpenAI и Claude; ключ хранится отдельно в ~/.vibecode/opencode-api-key
~/.vibecode/env
Переменные OPENAI_* и ANTHROPIC_*, подключаются из .zshrc или .bashrc
Чтобы прочитать скрипт до запуска, скачайте его: curl -fsSL https://api.vibecodepro.ru/setup/tools.sh -o vibecode-setup.sh, затем bash vibecode-setup.sh.
Скрипт спросит ключ, добавит провайдера vibecode в ~/.codex/config.toml, сохранит ключ в ~/.codex/auth.json вместо входа через ChatGPT и сделает резервную копию. Затем перезапустите Codex и выберите любую модель OpenAI через /model. Установщик загружает весь каталог; модель по умолчанию не ограничивает выбор. Полный список изменений — в разделе Установщик.
В model_catalog_json укажите полный путь к файлу из шага 2; в Windows — в одинарных кавычках: 'C:\Users\you\.codex\vibecode-models.json'. Встроенный веб-поиск отключён: через шлюз он недоступен.
В интерактивном режиме выполните /status: там будут провайдер VibeCode PRO и выбранная модель. Сменить модель — /model или codex --model gpt-6.1-terra.
Скрипт пропишет адрес, ключ и модели в ~/.claude/settings.json, сохранив остальные настройки и резервную копию. Включается автоматическое получение каталога gateway; все модели Claude доступны через /model.
Адрес указывается без /v1. Фоновые задачи, которые Claude Code обычно отправляет в Haiku, выполняются на claude-haiku-5-5. ANTHROPIC_AUTH_TOKEN передаёт ключ без дополнительного подтверждения при запуске.
Откройте Preferences: Open User Settings (JSON) и добавьте переменные в пользовательские настройки — расширение проверяет вход по ним, а не по ~/.claude/settings.json.
Apply Changes — приложение перезапустится. Выберите модель claude-sonnet-5-5 или claude-opus-5-5.
Шлюз включается для всего приложения — чата, Cowork и Code. История и вход становятся локальными. Если меню Developer пропало после перезапуска, включите режим разработчика снова.
Запустите claude и выполните /status. Должна появиться строка Anthropic base URL с адресом VibeCode. Если вместо неё указан вход через claude.ai, ключ не применился.
Симптом
Что сделать
Предупреждение о нераспознанной модели
Claude Code может не знать окно контекста модели и считать его равным 200 000 токенов — история сжимается на этой границе
Окно входа в аккаунт Anthropic
Ключ не применился: проверьте блок env в глобальном ~/.claude/settings.json
400 о неизвестных полях запроса
Добавьте в env строку "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1"
401
Ключ отозван или истёк — создайте новый в кабинете
Введите API-ключ по запросу и перезапустите OpenCode. Скрипт добавит весь каталог в общий opencode.json или существующий opencode.jsonc, сохранит остальные настройки и резервную копию. Ключ хранится отдельно в защищённом файле; повторный запуск обновляет каталог. В /models доступны провайдеры VibeCode PRO · OpenAI и VibeCode PRO · Claude.
Добавьте два провайдера — для моделей OpenAI и Anthropic — в opencode.json в корне проекта или в общий ~/.config/opencode/opencode.json, сохранив остальные настройки.
Ключа в файле нет: OpenCode подставит значение переменной VIBECODE_API_KEY. limit сообщает OpenCode размер контекста — без него он не знает, когда сжимать историю. Нужны только модели OpenAI — удалите блок vibecode-claude. Другие модели каталога добавляются по тому же образцу — см. Модели.
SDK собирает текст в output_text. В output бывают и элементы reasoning и function_call — не берите текст из первого элемента. status: "incomplete" означает, что ответ упёрся в лимит; он тарифицируется по usage.
Надёжнее передавать историю в input самостоятельно. previous_response_id работает, пока ответ хранится у провайдера. Режим background, получение, отмена и удаление ответов не поддерживаются.
Текст — в choices[].message.content, вызовы функций — в choices[].message.tool_calls. finish_reason: "length" — ответ обрезан лимитом. В потоке читайте choices[].delta: ответ готов, когда пришёл finish_reason. Строка data: [DONE] закрывает поток и после ошибки.
content — массив блоков: text, thinking, tool_use. Обрабатывайте каждый тип отдельно. stop_reason: end_turn — ответ готов, tool_use — нужно выполнить функцию, max_tokens — ответ обрезан.
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["VIBECODE_API_KEY"],
base_url="https://api.vibecodepro.ru/v1")
done = False
with client.responses.create(model="gpt-6.1-sol", stream=True,
input="Объясни SSE в трёх предложениях") as stream:
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
elif event.type == "response.completed":
done = True
elif event.type in ("response.failed", "error"):
raise RuntimeError("Генерация завершилась ошибкой")
if not done:
raise RuntimeError("Поток оборвался до конца ответа")
Node.js
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.VIBECODE_API_KEY,
baseURL: "https://api.vibecodepro.ru/v1",
});
const stream = await client.responses.create({
model: "gpt-6.1-sol",
input: "Объясни SSE в трёх предложениях",
stream: true,
});
let done = false;
for await (const event of stream) {
if (event.type === "response.output_text.delta") process.stdout.write(event.delta);
else if (event.type === "response.completed") done = true;
else if (event.type === "response.failed" || event.type === "error") {
throw new Error("Генерация завершилась ошибкой");
}
}
if (!done) throw new Error("Поток оборвался до конца ответа");
Если поток запущен с заголовком Idempotency-Key, каждое событие получает id. После обрыва повторите тот же запрос с тем же ключом и добавьте Last-Event-ID — придут только недополученные события, без повторного списания.
Передайте в tools имя, описание и JSON Schema аргументов.
Проверьте вызов
Сверьте имя, аргументы и права пользователя. Не выполняйте произвольные команды из ответа модели.
Верните результат
Responses — элемент function_call_output, Chat Completions — сообщение role: "tool", Messages — блок tool_result. Повторяйте, пока модель не ответит текстом.
Поддерживаются ваши функции и клиентские инструменты Anthropic (bash, text_editor, memory, computer). Встроенные инструменты провайдеров — web_search, file_search, исполнение кода — отклоняются с 400 unsupported_paid_feature: реализуйте поиск своей функцией. Каждый шаг цикла — отдельный оплачиваемый запрос.
Сгенерируйте ключ до первой попытки, сохраните его вместе с операцией и передавайте в каждом повторе в заголовке Idempotency-Key (до 256 символов) — с тем же телом запроса. Новая операция — новый ключ. Ключ действует в пределах одного API-ключа и одного маршрута.
import os, uuid
from openai import OpenAI
client = OpenAI(api_key=os.environ["VIBECODE_API_KEY"],
base_url="https://api.vibecodepro.ru/v1")
# Создайте ключ один раз и сохраните вместе с задачей.
operation_key = str(uuid.uuid4())
response = client.responses.create(
model="gpt-6.1-sol",
input="Составь план релиза",
extra_headers={"Idempotency-Key": operation_key},
)
# При повторе — тот же operation_key и те же параметры.
Ответ для повтора хранится до 5 минут и возвращается с заголовком idempotency-replayed: true. После истечения, а также после оборванного потока тот же ключ даёт 409 и новую генерацию не запускает. Оборванный поток продолжайте через Last-Event-ID.
У SDK есть свои автоматические ретраи. Если включаете их, передавайте один Idempotency-Key на всю операцию.
В настройках ключа задайте предел расхода за час, день, неделю или месяц. При превышении — 429; повтор не поможет до начала нового периода. Нехватка баланса — отдельная ошибка 402.
Учитывайте заголовок Retry-After — через сколько секунд повторять. Для лимитов ключа и проекта приходят x-ratelimit-*, для защитных лимитов — vc-ratelimit-scope.
Если лимит ответа не указан, шлюз ставит 16 384 токена для моделей с официальной ценой выхода дороже $12 за 1M (например gpt-6-astra, claude-opus-5-5) и 8 192 — для остальных (например gpt-6.1-sol, claude-sonnet-5-5); значение каждой модели — в таблицах раздела Модели. Если баланса не хватает на запрошенный вами лимит, шлюз уменьшает его — не меньше чем до 1 024 токенов — и возвращает новое значение в заголовке vc-max-output-clamped. Иначе — 402.
Запрос
Таймаут
Без стриминга
60 с + время на запрошенный объём ответа, до 600 с
Ответы и ошибки маршрутов модели содержат заголовок x-request-id. По нему запрос находится в журнале. В обращении в поддержку укажите request ID, время и код ответа — без ключа и текста запроса.
Перед запросом шлюз резервирует сумму на вход и лимит ответа. Если её не хватает, лимит ответа уменьшается, а при совсем малом балансе — 402.
Списание
После ответа списывается фактический расход: вход, кэш и выход по тарифу модели (кэшированный вход — по цене кэша этой модели). Рассуждения входят в выход.
Возврат
Неиспользованный остаток резерва сразу возвращается на баланс.
Ситуация
Списание
Ошибка до ответа модели
Нет
Ответ упёрся в лимит
По фактическому usage
Сбой провайдера посреди потока
Только доставленный выход
Повтор с тем же Idempotency-Key
Нет
Клиент отключился от потока модели Anthropic
Доставленный выход. С Idempotency-Key генерация продолжается до 30 с, чтобы вы могли переподключиться, — списывается всё сгенерированное
Клиент отключился от потока модели OpenAI
Фактический расход, если провайдер успел его сообщить; иначе — весь лимит ответа
Нужно право usage:read. Фильтры: model, status, key_id, период from–to. data — запросы за период, next_cursor — передайте его в cursor за следующей страницей; limit — до 500. summary — итог по всему аккаунту без учёта фильтров.
Следите за долей 429 и 5xx, обрывами потоков и скоростью расхода. Настройте оповещение о низком балансе и росте 402. Логируйте request ID, модель, статус и задержку — без ключей и текста запросов.