Документация

Тот же API. Ваши инструменты.

Как подключить Codex, Claude Code, Cursor и OpenCode и как встроить API в свой сервис. Меняются адрес, ключ и имя модели — SDK, форматы и промпты остаются прежними.

  • Codex
  • Claude Code
  • Cursor
  • OpenCode
  • Ваш сервис
VibeCode PROключ · баланс · лимиты
  • OpenAI
  • Anthropic
OpenAI-совместимый · Responses, Chat Completionshttps://api.vibecodepro.ru/v1
Anthropic-совместимый · Messageshttps://api.vibecodepro.ru

AI-инструменты#

Готовые настройки: куда вставить ключ, какой адрес указать и как проверить подключение.

Первый запрос#

Задайте ключ в VIBECODE_API_KEY и выполните:

Терминал
curl https://api.vibecodepro.ru/v1/responses \
  -H "Authorization: Bearer $VIBECODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6.1-sol",
    "input": "Ответь одним словом: работает?",
    "max_output_tokens": 256
  }'

API для продукта#

Начало работы

Быстрый старт

Ключ, переменная окружения и первый запрос — около двух минут.

1. Создайте ключ#

В кабинете откройте API-ключи и нажмите «Создать ключ». Секрет показывается один раз — сохраните его в менеджере паролей или секретов.

В разделе Подключение API собраны адреса OpenAI и Claude API, заголовки авторизации и примеры на cURL, Python и Node.js. В терминальном блоке задайте VIBECODE_API_KEY, заменив YOUR_API_KEY своим секретом. Затем выберите модель и скопируйте пример для своего приложения.

2. Сохраните ключ в окружении#

macOS / Linux
export VIBECODE_API_KEY="sk-vc-ЗАМЕНИТЕ_НА_СВОЙ_КЛЮЧ"

Переменная действует в текущем терминале. На сервере храните ключ в секретах окружения.

3. Отправьте запрос#

Для Python установите pip install openai, для Node.js — npm install openai.

curl
curl https://api.vibecodepro.ru/v1/responses \
  -H "Authorization: Bearer $VIBECODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6.1-sol",
    "input": "Ответь одним словом: работает?",
    "max_output_tokens": 256
  }'

4. Найдите запрос в журнале#

В журнале запросов появятся модель, токены и стоимость. Если ответ — ошибка, найдите её код в разделе Ошибки.

Начало работы

Ключи и авторизация

Один ключ работает с обоими форматами API. Права и ограничения задаются для каждого ключа.

Заголовки#

OpenAI-формат
Authorization: Bearer sk-vc-…

Оба заголовка принимаются на всех маршрутах. anthropic-version необязателен: по умолчанию — 2023-06-01. Ключ начинается с sk-vc-; ключи OpenAI и Anthropic не подходят.

Права#

ПравоОткрывает
chat:writeResponses и Chat Completions
messages:writeMessages и подсчёт токенов
usage:readЖурнал и статистика расхода
billing:readБаланс

По умолчанию у ключа есть все права. Запрос без нужного права получает 403. Каталог моделей открыт без ключа.

Ограничения#

НастройкаЕсли нарушена
Срок действия401
Разрешённые IP и подсети403
Разрешённые модели403
RPM и TPM429, см. Лимиты
Расход за час, день, неделю, месяц429

Ротация#

  1. Создайте новый ключ
  2. Разверните его и проверьте запрос
  3. Отзовите старый ключ

    Отозванный ключ перестаёт работать сразу.

Начало работы

Модели

Официальные модели OpenAI и Anthropic под их собственными идентификаторами. Цена — на 80% ниже официальной.

Доступные модели#

В поле model указывайте идентификатор так же, как в документации OpenAI и Anthropic. Цена платформы — официальная цена × 0,2 (скидка 80%), в долларах за 1M токенов. Цены сверены с прайсами провайдеров 1 ноября 2026.

OpenAI#

ИдентификаторНазваниеВходКэшированный входВыходЛимит ответа по умолчанию
gpt-6-astraGPT-6 Astra$2$0.2$1016 384
gpt-6.1-solGPT-6.1 Sol$0.4$0.02$28 192
gpt-6.1-terraGPT-6.1 Terra$0.2$0.01$18 192
gpt-6-solGPT-6 Sol$0.4$0.04$28 192
gpt-6-lunaGPT-6 Luna$0.02$0.002$0.18 192
gpt-5.6-solGPT-5.6 Sol$0.8$0.08$416 384
gpt-5.6-terraGPT-5.6 Terra$0.4$0.04$2.48 192
gpt-5.6-lunaGPT-5.6 Luna$0.04$0.004$0.248 192
gpt-5.5GPT-5.5$1$0.1$616 384
gpt-5.4GPT-5.4$0.5$0.05$316 384
gpt-5.4-miniGPT-5.4 mini$0.15$0.015$0.98 192
gpt-5.4-nanoGPT-5.4 nano$0.04$0.004$0.258 192
o3o3$0.4$0.1$1.68 192
o4-minio4-mini$0.22$0.055$0.888 192

Формат — Responses или Chat Completions.

Anthropic#

ИдентификаторНазваниеВходЧтение кэшаЗапись кэша, 5 минутВыходЛимит ответа по умолчанию
claude-fable-5-1Claude Fable 5.1$2$0.05$2.5$1016 384
claude-fable-5Claude Fable 5$2$0.2$2.5$1016 384
claude-opus-5-5Claude Opus 5.5$0.8$0.04$1$416 384
claude-opus-5Claude Opus 5$1$0.1$1.25$516 384
claude-opus-4-8Claude Opus 4.8$1$0.1$1.25$516 384
claude-opus-4-7Claude Opus 4.7$1$0.1$1.25$516 384
claude-opus-4-6Claude Opus 4.6$1$0.1$1.25$516 384
claude-opus-4-5Claude Opus 4.5$1$0.1$1.25$516 384
claude-sonnet-5-5Claude Sonnet 5.5$0.4$0.02$0.5$28 192
claude-sonnet-5Claude Sonnet 5$0.4$0.04$0.5$28 192
claude-sonnet-4-6Claude Sonnet 4.6$0.6$0.06$0.75$316 384
claude-haiku-5-5Claude Haiku 5.5$0.02$0.002$0.025$0.18 192
claude-haiku-4-5Claude Haiku 4.5$0.2$0.02$0.25$18 192

Формат — Messages.

Кэш промптов#

Кэшированный вход тарифицируется по официальной цене кэша конкретной модели, а не по единому проценту. У Anthropic чтение кэша и запись на 5 минут — отдельные цены (см. колонки выше). Кэшированный вход не расходует минутный TPM.

Список через API#

Терминал
curl https://api.vibecodepro.ru/v1/models

Каталог доступен без ключа. С ключом возвращаются модели OpenAI-формата, с заголовком anthropic-version — модели Anthropic в формате Anthropic.

ПолеЗначение
idОфициальный идентификатор модели
nameНазвание модели
pricingЦена платформы за 1M токенов: input, cached_input, cache_write_input (только Anthropic), output
availableМодель принимает запросы
supported_endpointsМаршруты, где модель доступна

Неизвестная модель#

Если идентификатора нет в каталоге, шлюз возвращает 404 с кодом model_not_found; в тексте ошибки перечислены доступные модели. Подмены на другую модель нет. Официальные датированные версии claude-haiku-4-5-20251001 и claude-opus-4-5-20251101 принимаются и записываются под основным идентификатором; запрошенное имя возвращается в заголовке vc-requested-model.

AI-инструменты

AI-инструменты

Подключите редактор или терминальный агент — запросы будут оплачиваться с баланса VibeCode PRO.

Что выбрать#

ИнструментМоделиЧерез VibeCode идут
CodexМодели OpenAI, по умолчанию gpt-6.1-solВсе запросы к модели
Claude CodeМодели Anthropic: claude-opus-5-5, claude-sonnet-5-5, claude-haiku-5-5Все запросы к модели
OpenCodeЛюбые модели каталогаВсе запросы к модели
CursorМодели OpenAI, например gpt-6.1-terraЧат с добавленной моделью; Tab и Auto — нет

Установщик#

Для macOS, Linux и WSL. Настраивает Codex и Claude Code: проверяет ключ, сохраняет резервную копию и записывает параметры VibeCode, не трогая остальные настройки.

Терминал
curl -fsSL 'https://api.vibecodepro.ru/setup/tools.sh?tools=codex%2Cclaude' | bash

Скрипт спросит ключ и подключит весь совместимый каталог. Для одного инструмента укажите в адресе ?tools=codex, ?tools=claude или ?tools=opencode. Выбирайте модель в самом клиенте: /model в Codex и Claude Code, /models в OpenCode. В Windows выполните ту же строку в Ubuntu через WSL.

ФлагЧто делает
--dry-runПоказывает изменения, ничего не записывая
--doctorПроверяет адрес, файлы настроек и ключ из VIBECODE_API_KEY
--rollbackВозвращает настройки, которые были до установки VibeCode
Пример: диагностика
curl -fsSL https://api.vibecodepro.ru/setup/tools.sh | bash -s -- --doctor

Что меняет скрипт#

ФайлЧто записывается
~/.codex/config.tomlПровайдер vibecode и модель по умолчанию
~/.codex/auth.jsonКлюч VibeCode вместо входа через ChatGPT
~/.claude/settings.jsonАдрес, ключ и модели в блоке env
~/.config/opencode/opencode.json(c)Провайдеры 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.

AI-инструменты

Codex

CLI, расширение для IDE и приложение Codex читают один файл настроек — достаточно настроить его один раз.

  • ПротоколResponses
  • Моделиgpt-6.1-sol · gpt-6.1-terra · другие модели OpenAI
  • Где работаетCLI, IDE, приложение
  • НастройкаСкрипт или config.toml

Быстрая настройка#

macOS, Linux и WSL:

Терминал
curl -fsSL 'https://api.vibecodepro.ru/setup/tools.sh?tools=codex' | bash

Скрипт спросит ключ, добавит провайдера vibecode в ~/.codex/config.toml, сохранит ключ в ~/.codex/auth.json вместо входа через ChatGPT и сделает резервную копию. Затем перезапустите Codex и выберите любую модель OpenAI через /model. Установщик загружает весь каталог; модель по умолчанию не ограничивает выбор. Полный список изменений — в разделе Установщик.

Ручная настройка#

Для Windows или если хотите всё контролировать.

  1. Сохраните ключ

    Задайте VIBECODE_API_KEY, как в быстром старте.

  2. Скачайте каталог моделей

    Без него Codex не знает контекст и уровни рассуждения моделей.

    macOS / Linux
    mkdir -p ~/.codex
    curl -fsSL https://api.vibecodepro.ru/backend-api/codex/models -o ~/.codex/vibecode-models.json
  3. Добавьте провайдера в config.toml

    Файл ~/.codex/config.toml, в Windows — %USERPROFILE%\.codex\config.toml. Первые четыре строки — до любых таблиц […].

    ~/.codex/config.toml
    model = "gpt-6.1-sol"
    model_provider = "vibecode"
    model_catalog_json = "/Users/you/.codex/vibecode-models.json"
    web_search = "disabled"
    
    [model_providers.vibecode]
    name = "VibeCode PRO"
    base_url = "https://api.vibecodepro.ru/v1"
    wire_api = "responses"
    env_key = "VIBECODE_API_KEY"
    supports_websockets = false

    В model_catalog_json укажите полный путь к файлу из шага 2; в Windows — в одинарных кавычках: 'C:\Users\you\.codex\vibecode-models.json'. Встроенный веб-поиск отключён: через шлюз он недоступен.

Проверка#

Терминал
codex exec "Ответь одним словом: подключено"

В интерактивном режиме выполните /status: там будут провайдер VibeCode PRO и выбранная модель. Сменить модель — /model или codex --model gpt-6.1-terra.

Приложение и IDE#

Приложение Codex и расширение для VS Code и совместимых редакторов читают тот же config.toml — перезапустите их после настройки.

Облачные задачи Codex работают через аккаунт ChatGPT и шлюз не используют.

Если не работает#

СимптомЧто проверить
401Процесс Codex не получил VIBECODE_API_KEY
400 unsupported_paid_featureВ config.toml есть web_search = "disabled"
Предупреждение о неизвестной моделиПуть в model_catalog_json и сам файл каталога
Запросы идут не через VibeCodemodel_provider = "vibecode" стоит до первой таблицы

AI-инструменты

Claude Code

Терминал, расширение VS Code и вкладка Code в приложении Claude — с оплатой с баланса VibeCode PRO.

  • ПротоколMessages
  • Моделиclaude-opus-5-5 · claude-sonnet-5-5 · claude-haiku-5-5
  • Где работаетТерминал, VS Code, приложение
  • НастройкаСкрипт или settings.json

Быстрая настройка#

macOS, Linux и WSL:

Терминал
curl -fsSL 'https://api.vibecodepro.ru/setup/tools.sh?tools=claude' | bash

Скрипт пропишет адрес, ключ и модели в ~/.claude/settings.json, сохранив остальные настройки и резервную копию. Включается автоматическое получение каталога gateway; все модели Claude доступны через /model.

Ручная настройка#

Добавьте блок env в ~/.claude/settings.json, в Windows — %USERPROFILE%\.claude\settings.json. Настройки из файла действуют в любом терминале.

~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.vibecodepro.ru",
    "ANTHROPIC_AUTH_TOKEN": "sk-vc-ЗАМЕНИТЕ_НА_СВОЙ_КЛЮЧ",
    "ANTHROPIC_MODEL": "claude-sonnet-5-5",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5-5",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5-5",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-5-5",
    "ANTHROPIC_SMALL_FAST_MODEL": "claude-haiku-5-5"
  }
}

Адрес указывается без /v1. Фоновые задачи, которые Claude Code обычно отправляет в Haiku, выполняются на claude-haiku-5-5. ANTHROPIC_AUTH_TOKEN передаёт ключ без дополнительного подтверждения при запуске.

Расширение VS Code#

Откройте Preferences: Open User Settings (JSON) и добавьте переменные в пользовательские настройки — расширение проверяет вход по ним, а не по ~/.claude/settings.json.

VS Code · settings.json
{
  "claudeCode.environmentVariables": [
    { "name": "ANTHROPIC_BASE_URL", "value": "https://api.vibecodepro.ru" },
    { "name": "ANTHROPIC_AUTH_TOKEN", "value": "sk-vc-ЗАМЕНИТЕ_НА_СВОЙ_КЛЮЧ" },
    { "name": "ANTHROPIC_MODEL", "value": "claude-sonnet-5-5" }
  ],
  "claudeCode.disableLoginPrompt": true
}

disableLoginPrompt убирает окно входа в аккаунт Anthropic — он не нужен.

Приложение Claude#

Настольное приложение не читает settings.json и переменные терминала — шлюз задаётся в его собственных настройках.

  1. Включите режим разработчика

    Help → Troubleshooting → Enable Developer Mode. Приложение перезапустится, появится меню Developer.

  2. Откройте настройки шлюза

    Developer → Configure Third-Party Inference, в разделе Connection выберите Inference provider: Gateway.

  3. Заполните поля
    ПолеЗначение
    Gateway base URLhttps://api.vibecodepro.ru
    Gateway API keyВаш ключ sk-vc-…
    Gateway auth schemex-api-key
  4. Примените настройки

    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Ключ отозван или истёк — создайте новый в кабинете

AI-инструменты

Cursor

Подключите ключ VibeCode PRO как OpenAI-ключ и добавьте свою модель в чат.

  • ПротоколChat Completions
  • Моделиgpt-6.1-terra · gpt-6.1-sol · другие модели OpenAI
  • Где работаетЧат с добавленной моделью
  • НастройкаSettings → Models

Настройка#

  1. Откройте настройки ключей

    Cursor Settings → Models → API Keys.

  2. Вставьте ключ

    Включите OpenAI API Key и вставьте ключ sk-vc-….

  3. Укажите адрес

    Включите Override OpenAI Base URL и вставьте адрес — без /chat/completions в конце.

    Override OpenAI Base URL
    https://api.vibecodepro.ru/v1
  4. Добавьте модель

    В списке моделей нажмите Add Custom Model, введите gpt-6.1-terra или gpt-6.1-sol и выберите её в чате.

Что пойдёт через VibeCode#

ФункцияЧерез VibeCode
Чат с добавленной модельюДа
Tab, Auto, встроенные модели CursorНет — инфраструктура Cursor
Модели ClaudeНет — адрес в Cursor меняется только для OpenAI

Собственные ключи доступны не на всех тарифах Cursor. Для агентной работы целиком на балансе VibeCode используйте Codex, Claude Code или OpenCode.

Проверка#

Отправьте сообщение с моделью gpt-6.1-terra и найдите запрос в журнале.

СимптомЧто сделать
401Проверьте ключ. Переключатель OpenAI API Key иногда выключается сам — включите его снова
404Имя модели — точный идентификатор из каталога, например gpt-6.1-terra
400 messages must be a non-empty arrayИзвестная ошибка режима Agent в Cursor: он отправляет запрос в формате Responses. Используйте режим Ask

AI-инструменты

OpenCode

Одна команда подключает весь каталог OpenAI и Anthropic. Модель выбирается в OpenCode через /models.

  • ПротоколChat Completions · Messages
  • МоделиOpenAI · Anthropic
  • Где работаетТерминал, приложение, IDE
  • Настройкаopencode.json

Быстрая настройка#

macOS, Linux и Ubuntu в WSL. Установите OpenCode и Python 3, затем выполните:

Терминал
curl -fsSL 'https://api.vibecodepro.ru/setup/tools.sh?tools=opencode' | bash

Введите API-ключ по запросу и перезапустите OpenCode. Скрипт добавит весь каталог в общий opencode.json или существующий opencode.jsonc, сохранит остальные настройки и резервную копию. Ключ хранится отдельно в защищённом файле; повторный запуск обновляет каталог. В /models доступны провайдеры VibeCode PRO · OpenAI и VibeCode PRO · Claude.

Откат
curl -fsSL https://api.vibecodepro.ru/setup/tools.sh | bash -s -- --rollback

Ручная настройка#

Добавьте два провайдера — для моделей OpenAI и Anthropic — в opencode.json в корне проекта или в общий ~/.config/opencode/opencode.json, сохранив остальные настройки.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "vibecode": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "VibeCode PRO",
      "options": {
        "baseURL": "https://api.vibecodepro.ru/v1",
        "apiKey": "{env:VIBECODE_API_KEY}"
      },
      "models": {
        "gpt-6.1-sol": { "name": "GPT-6.1 Sol", "limit": { "context": 272000, "output": 64000 } },
        "gpt-6.1-terra": { "name": "GPT-6.1 Terra", "limit": { "context": 272000, "output": 64000 } }
      }
    },
    "vibecode-claude": {
      "npm": "@ai-sdk/anthropic",
      "name": "VibeCode PRO · Claude",
      "options": {
        "baseURL": "https://api.vibecodepro.ru/v1",
        "apiKey": "{env:VIBECODE_API_KEY}"
      },
      "models": {
        "claude-opus-5-5": { "name": "Claude Opus 5.5", "limit": { "context": 200000, "output": 64000 } },
        "claude-sonnet-5-5": { "name": "Claude Sonnet 5.5", "limit": { "context": 200000, "output": 64000 } }
      }
    }
  },
  "model": "vibecode/gpt-6.1-sol"
}

Ключа в файле нет: OpenCode подставит значение переменной VIBECODE_API_KEY. limit сообщает OpenCode размер контекста — без него он не знает, когда сжимать историю. Нужны только модели OpenAI — удалите блок vibecode-claude. Другие модели каталога добавляются по тому же образцу — см. Модели.

Запуск#

  1. Задайте ключ

    Как в быстром старте, в том же терминале.

  2. Запустите OpenCode

    Команда opencode в папке проекта.

  3. Выберите модель

    Команда /models, провайдеры VibeCode PRO и VibeCode PRO · Claude.

Проверка#

Терминал
opencode run -m vibecode/gpt-6.1-sol "Ответь одним словом: подключено"
СимптомЧто проверить
Провайдера нет в /modelsJSON без ошибок; перезапустите OpenCode
401Переменная задана: пустая {env:…} превращается в пустой ключ
404 у моделей ClaudeВ baseURL провайдера vibecode-claude есть /v1

API

Responses API

Основной OpenAI-формат: текст, функции и агентные сценарии.

POST/v1/responseschat:write

Запрос#

curl
curl https://api.vibecodepro.ru/v1/responses \
  -H "Authorization: Bearer $VIBECODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6.1-sol",
    "input": "Ответь одним словом: работает?",
    "max_output_tokens": 256
  }'

Параметры#

ПолеОписание
modelИдентификатор модели OpenAI, например gpt-6.1-sol
inputСтрока или массив сообщений и элементов
instructionsСистемная инструкция
max_output_tokensЛимит ответа, до 64 000. Без него — 16 384 или 8 192 в зависимости от модели, см. Лимит ответа
streamtrue — ответ потоком SSE
tools, tool_choiceВаши функции, см. Вызов функций
previous_response_idПродолжение предыдущего ответа

Ответ#

Ответ · сокращённо
{
  "id": "resp_…",
  "status": "completed",
  "model": "gpt-6.1-sol",
  "output": [{
    "type": "message",
    "role": "assistant",
    "content": [{ "type": "output_text", "text": "Работает." }]
  }],
  "usage": { "input_tokens": 16, "output_tokens": 4, "total_tokens": 20 }
}

SDK собирает текст в output_text. В output бывают и элементы reasoning и function_call — не берите текст из первого элемента. status: "incomplete" означает, что ответ упёрся в лимит; он тарифицируется по usage.

История диалога#

Надёжнее передавать историю в input самостоятельно. previous_response_id работает, пока ответ хранится у провайдера. Режим background, получение, отмена и удаление ответов не поддерживаются.

API

Chat Completions

Классический формат messages — для готовых OpenAI-совместимых приложений.

POST/v1/chat/completionschat:write

Запрос#

curl
curl https://api.vibecodepro.ru/v1/chat/completions \
  -H "Authorization: Bearer $VIBECODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6.1-sol",
    "messages": [
      { "role": "system", "content": "Отвечай кратко." },
      { "role": "user", "content": "Что такое API-шлюз?" }
    ],
    "max_completion_tokens": 512
  }'

Параметры#

ПолеОписание
modelИдентификатор модели OpenAI, например gpt-6.1-sol
messagesНепустой массив сообщений
max_completion_tokensЛимит ответа, до 64 000. max_tokens тоже принимается
streamОтвет потоком; stream_options.include_usage добавит usage в конце
tools, tool_choiceВаши функции

Ответ#

Текст — в choices[].message.content, вызовы функций — в choices[].message.tool_calls. finish_reason: "length" — ответ обрезан лимитом. В потоке читайте choices[].delta: ответ готов, когда пришёл finish_reason. Строка data: [DONE] закрывает поток и после ошибки.

API

Messages API

Нативный формат Anthropic для моделей Claude.

POST/v1/messagesmessages:write

Запрос#

Для SDK: pip install anthropic или npm install @anthropic-ai/sdk. Адрес в SDK указывается без /v1.

curl
curl https://api.vibecodepro.ru/v1/messages \
  -H "x-api-key: $VIBECODE_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5-5",
    "max_tokens": 512,
    "system": "Отвечай кратко.",
    "messages": [{ "role": "user", "content": "Что такое API-шлюз?" }]
  }'

Параметры#

ПолеОписание
modelИдентификатор модели Anthropic, например claude-sonnet-5-5
max_tokensЛимит ответа, до 64 000
messagesСообщения user и assistant
systemСистемная инструкция — отдельным полем, не внутри messages
streamОтвет потоком событий Anthropic
toolsФункции: name, description, input_schema
thinkingРасширенное рассуждение; budget_tokens меньше max_tokens

Ответ#

content — массив блоков: text, thinking, tool_use. Обрабатывайте каждый тип отдельно. stop_reason: end_turn — ответ готов, tool_use — нужно выполнить функцию, max_tokens — ответ обрезан.

Подсчёт токенов#

Терминал
curl https://api.vibecodepro.ru/v1/messages/count_tokens \
  -H "x-api-key: $VIBECODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-sonnet-5-5", "messages": [{"role": "user", "content": "Привет"}]}'

Возвращает input_tokens и ничего не списывает.

API

Стриминг

Текст по мере генерации — и надёжное отличие готового ответа от обрыва.

Включение#

Добавьте "stream": true. Ответ придёт как text/event-stream.

curl
curl -N https://api.vibecodepro.ru/v1/responses \
  -H "Authorization: Bearer $VIBECODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-6.1-sol", "input": "Объясни SSE в трёх предложениях", "stream": true}'

События#

APIТекстГотовоОшибка
Responsesresponse.output_text.deltaresponse.completedresponse.failed
Chat Completionschoices[].delta.contentfinish_reasondata: {"error": …}
Messagescontent_block_deltamessage_stopevent: error

Keepalive и таймауты#

ПараметрЗначение
KeepaliveКомментарий : vibecode keepalive, если поток молчит 15 с
Тишина в потокеДо 240 с
Весь потокДо 600 с
Параллельные потоки32 на ключ, 64 на аккаунт

Строки, начинающиеся с двоеточия, — комментарии: пропускайте их. В своём reverse proxy отключите буферизацию SSE.

Продолжение после обрыва#

Если поток запущен с заголовком Idempotency-Key, каждое событие получает id. После обрыва повторите тот же запрос с тем же ключом и добавьте Last-Event-ID — придут только недополученные события, без повторного списания.

Заголовки повторного запроса
Idempotency-Key: order-7781-summary
Last-Event-ID: 42
ОтветЧто делать
vc-stream-resumed: trueПродолжайте читать поток
409 stream_resume_unavailableПовторите без Last-Event-ID с тем же ключом
409 stream_resume_invalid_cursorLast-Event-ID больше последнего события — передайте последний полученный id
410 stream_resume_gapЧасть событий утеряна — запросите ответ заново

Журнал потока хранится ограниченное время, а после ухода клиента генерация ждёт переподключения 30 секунд.

API

Вызов функций

Модель выбирает функцию и аргументы, ваш код проверяет их и выполняет.

Цикл#

  1. Опишите функции

    Передайте в tools имя, описание и JSON Schema аргументов.

  2. Проверьте вызов

    Сверьте имя, аргументы и права пользователя. Не выполняйте произвольные команды из ответа модели.

  3. Верните результат

    Responses — элемент function_call_output, Chat Completions — сообщение role: "tool", Messages — блок tool_result. Повторяйте, пока модель не ответит текстом.

Пример#

Python · Responses API
import json, os
from openai import OpenAI

client = OpenAI(api_key=os.environ["VIBECODE_API_KEY"],
                base_url="https://api.vibecodepro.ru/v1")

tools = [{
    "type": "function",
    "name": "get_stock",
    "description": "Остаток товара по артикулу",
    "parameters": {
        "type": "object",
        "properties": {"sku": {"type": "string"}},
        "required": ["sku"],
        "additionalProperties": False,
    },
    "strict": True,
}]
stock = {"DEMO-1": 12}
history = [{"role": "user", "content": "Сколько осталось DEMO-1?"}]

for _ in range(4):
    response = client.responses.create(model="gpt-6.1-sol", input=history, tools=tools)
    history += response.output
    calls = [item for item in response.output if item.type == "function_call"]
    if not calls:
        print(response.output_text)
        break
    for call in calls:
        sku = json.loads(call.arguments).get("sku")
        result = {"quantity": stock[sku]} if sku in stock else {"error": "unknown sku"}
        history.append({"type": "function_call_output", "call_id": call.call_id,
                        "output": json.dumps(result)})

Ограничения#

Поддерживаются ваши функции и клиентские инструменты Anthropic (bash, text_editor, memory, computer). Встроенные инструменты провайдеров — web_search, file_search, исполнение кода — отклоняются с 400 unsupported_paid_feature: реализуйте поиск своей функцией. Каждый шаг цикла — отдельный оплачиваемый запрос.

API

Совместимость и миграция

Что поддерживается и как перейти с прямого API OpenAI или Anthropic.

Маршруты#

МетодПутьПраво
POST/v1/responseschat:write
POST/v1/chat/completionschat:write
POST/v1/messagesmessages:write
POST/v1/messages/count_tokensmessages:write
GET/v1/modelsБез ключа
GET/v1/balancebilling:read
GET/v1/usageusage:read

Для клиентов с фиксированными путями: /openai/v1/ — responses, chat/completions и models; /anthropic/v1/ — messages, messages/count_tokens и models.

Что не поддерживается#

ВозможностьОтвет
Встроенные инструменты: веб-поиск, файлы, исполнение кода, MCP-серверы провайдера400
Beta-функции Anthropic: контекст 1M, файлы, кэш на 1 час400
Files и Batches API404
Приоритетный service_tier400
background: true, получение и отмена ответов Responses400 / 404
Embeddings, изображения, аудио, Realtime404

Переход с прямого API#

  1. Замените адрес и ключ

    OpenAI SDK — https://api.vibecodepro.ru/v1, Anthropic SDK — https://api.vibecodepro.ru. Ключ — sk-vc-….

  2. Проверьте идентификатор модели

    Используйте официальные идентификаторы из раздела Модели — например gpt-6.1-sol или claude-sonnet-5-5. Формат запросов прежний.

  3. Уберите неподдерживаемое

    Встроенные инструменты, background-режим и приоритетный тариф.

  4. Проверьте на части трафика

    Сравните ответы, стриминг, функции и расход в журнале, затем переключайте всё.

Продакшен

Повторы и идемпотентность

Повтор с тем же Idempotency-Key возвращает сохранённый ответ — без второй генерации и второго списания.

Правило#

Сгенерируйте ключ до первой попытки, сохраните его вместе с операцией и передавайте в каждом повторе в заголовке Idempotency-Key (до 256 символов) — с тем же телом запроса. Новая операция — новый ключ. Ключ действует в пределах одного API-ключа и одного маршрута.

Пример#

Python
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 и те же параметры.

Когда повторять#

ОтветДействие
Таймаут или обрыв сетиПовторить с тем же ключом
429, 502, 503, 504, 529Подождать Retry-After, повторить с backoff
425 idempotency_in_progressЗапрос ещё выполняется — подождать и повторить
409 idempotency_key_reusedТело изменилось — ошибка в логике ключей
409 idempotency_response_unavailableСохранённый ответ истёк — проверьте журнал
400, 401, 402, 403, 404, 413Не повторять, исправить причину

Срок хранения#

Ответ для повтора хранится до 5 минут и возвращается с заголовком idempotency-replayed: true. После истечения, а также после оборванного потока тот же ключ даёт 409 и новую генерацию не запускает. Оборванный поток продолжайте через Last-Event-ID.

У SDK есть свои автоматические ретраи. Если включаете их, передавайте один Idempotency-Key на всю операцию.

Продакшен

Лимиты и таймауты

Нагрузка ограничивается по ключу и проекту, расход — отдельными лимитами.

По умолчанию#

ЛимитЗначениеПревышение
Запросы в минуту (RPM)600 на ключ и 600 на проект429
Токены в минуту (TPM)2 000 000 на ключ и на проект429
Один запрос больше TPM ключа—413
Тело запроса5 МиБ413
Ответ моделиДо 64 000 токеновЛимит уменьшается
Параллельные потоки32 на ключ, 64 на аккаунт429

TPM считает некэшированный вход и выход. Ключи одного проекта делят его общий лимит: новый ключ его не увеличивает.

Лимиты расхода#

В настройках ключа задайте предел расхода за час, день, неделю или месяц. При превышении — 429; повтор не поможет до начала нового периода. Нехватка баланса — отдельная ошибка 402.

Ответ 429#

Учитывайте заголовок Retry-After — через сколько секунд повторять. Для лимитов ключа и проекта приходят x-ratelimit-*, для защитных лимитов — vc-ratelimit-scope.

Защитный лимитЗначение
С одного IP1 800 запросов в минуту
С одного IP к одной модели1 200 запросов в минуту
На аккаунт36 000 запросов в час

Лимит ответа и таймауты#

Если лимит ответа не указан, шлюз ставит 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 с
Стриминг240 с тишины, 600 с всего

Для длинных ответов используйте стриминг.

Продакшен

Ошибки

Код ответа, причина и что делать. Для поддержки сохраняйте request ID.

Коды ответов#

КодПричинаЧто делать
400Неверные параметры, модель не того формата или неподдерживаемая функцияСмотрите error.message и param
401Ключа нет, он истёк или отозванПроверьте переменную и ключ
402Не хватает балансаПополните баланс или уменьшите лимит ответа
403Нет права, IP или модель не разрешеныПроверьте настройки ключа
404Неизвестная модель (model_not_found) или путьСверьте идентификатор модели с разделом Модели и адрес
409, 425Конфликт Idempotency-KeyСм. Повторы
413Запрос больше 5 МиБ или TPM ключаУменьшите запрос
429Лимит запросов, токенов или расходаПодождите Retry-After
5xx, 529Сбой или перегрузка провайдераПовторите с тем же Idempotency-Key

Формат#

OpenAI-формат
{
  "error": {
    "message": "Insufficient balance",
    "type": "insufficient_quota",
    "code": "insufficient_balance",
    "param": null
  }
}

Ветвите логику по HTTP-коду и code / type, а не по тексту message. Ответ 402 дополнительно содержит required_credits и available_credits.

Request ID#

Ответы и ошибки маршрутов модели содержат заголовок x-request-id. По нему запрос находится в журнале. В обращении в поддержку укажите request ID, время и код ответа — без ключа и текста запроса.

Быстрая проверка#

  1. Адрес

    OpenAI SDK — с /v1, Anthropic SDK — без.

  2. Модель и формат

    Модели OpenAI — Responses и Chat Completions, модели Anthropic — Messages.

  3. Баланс и лимиты

    402 — баланс, 429 — лимиты. Это разные проблемы.

  4. Статус сервиса

Продакшен

Баланс и расход

Как резервируется и списывается баланс — и как получить расход через API.

Как списывается#

  1. Резерв

    Перед запросом шлюз резервирует сумму на вход и лимит ответа. Если её не хватает, лимит ответа уменьшается, а при совсем малом балансе — 402.

  2. Списание

    После ответа списывается фактический расход: вход, кэш и выход по тарифу модели (кэшированный вход — по цене кэша этой модели). Рассуждения входят в выход.

  3. Возврат

    Неиспользованный остаток резерва сразу возвращается на баланс.

СитуацияСписание
Ошибка до ответа моделиНет
Ответ упёрся в лимитПо фактическому usage
Сбой провайдера посреди потокаТолько доставленный выход
Повтор с тем же Idempotency-KeyНет
Клиент отключился от потока модели AnthropicДоставленный выход. С Idempotency-Key генерация продолжается до 30 с, чтобы вы могли переподключиться, — списывается всё сгенерированное
Клиент отключился от потока модели OpenAIФактический расход, если провайдер успел его сообщить; иначе — весь лимит ответа

Баланс#

Терминал
curl https://api.vibecodepro.ru/v1/balance \
  -H "Authorization: Bearer $VIBECODE_API_KEY"

Нужно право billing:read. balance_credits — доступно сейчас, уже за вычетом резерва; reserved_credits — в резерве у выполняющихся запросов.

Расход#

Терминал
curl -G https://api.vibecodepro.ru/v1/usage \
  -H "Authorization: Bearer $VIBECODE_API_KEY" \
  --data-urlencode "from=2026-10-01T00:00:00Z" \
  --data-urlencode "to=2026-11-01T00:00:00Z" \
  --data-urlencode "limit=100"

Нужно право usage:read. Фильтры: model, status, key_id, период from–to. data — запросы за период, next_cursor — передайте его в cursor за следующей страницей; limit — до 500. summary — итог по всему аккаунту без учёта фильтров.

Продакшен

Чек-лист запуска

Проверьте интеграцию до переключения пользовательского трафика.

Перед запуском#

ПроверкаОжидаемый результат
КлючиСвой ключ на окружение, только нужные права, лимит расхода
Короткий запрос каждой моделиОтвет разобран, запрос виден в журнале
ФункцииАргументы проверяются, неизвестные вызовы не выполняются
СтримингОбрыв без финального события считается ошибкой
Повтор после таймаутаТот же Idempotency-Key, без второго списания
Ошибки 401, 402, 429Понятное поведение для пользователя
Перезапуск приложенияКлючи идемпотентности не теряются

Мониторинг#

Следите за долей 429 и 5xx, обрывами потоков и скоростью расхода. Настройте оповещение о низком балансе и росте 402. Логируйте request ID, модель, статус и задержку — без ключей и текста запросов.

При сбое#

Проверьте статус сервиса, соберите request ID и время ошибок и напишите на @vibecodepro_support.

Поиск по документации

Esc