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

OpenAI-совместимый REST API · Base URL: https://api-ru.agi-iri.ru/v1/

Live. API работает. Ключ и баланс — в личном кабинете. Всё в рублях, без VPN и чужих карт.

Введение

IRI Gateway — единый шлюз с пятью продуктовыми уровнями и точным выбором доступной модели. API полностью совместим с OpenAI: меняете base_url и api_key в любом OpenAI-клиенте — и всё работает. Шлюз сам маршрутизирует запрос, делает failover при сбое и считает стоимость.

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

  1. Зарегистрируйтесь и пополните баланс в кабинете.
  2. Создайте API-ключ (формат vsk_live_…).
  3. Укажите base_url=https://api-ru.agi-iri.ru/v1/ и ключ в клиенте — как для OpenAI.
  4. Отправьте первый запрос (пример ниже) или вставьте ключ в Verstak.

Аутентификация

Все запросы — с заголовком Authorization: Bearer <ключ>. Ключ создаётся в кабинете и показывается один раз. Храните его как пароль: не коммитьте в репозиторий, не передавайте в prompt.

HEADERAuthorization: Bearer vsk_live_xxxxxxxxxxxx

Базовый URL

https://api-ru.agi-iri.ru/v1/

Совместим с OpenAI SDK (Python, JS), curl и любым OpenAI-compatible клиентом.

Уровни Gateway

Для большинства задач не нужно выбирать конкретную модель. Укажите уровень в поле model, и Gateway подберёт рабочий маршрут с резервом:

idРежимДля чего
iri-zeroIRI ZeroIRI Zero — бесплатный режим на доступной бесплатной вычислительной ёмкости. Если бесплатная ёмкость временно исчерпана, запрос не переключается на платную модель автоматически.
iri-liveIRI Liveбыстрые повседневные задачи с резервным маршрутом
iri-galileoIRI Galileoежедневная работа и разработка
iri-atlasIRI Atlasсложные задачи и усиленная разработка
iri-prometheusIRI Prometheusмаксимальное качество для самых трудных задач

Прежние имена уровней (verstak/free, verstak/start, verstak/pro, verstak/premium, verstak/ultra) по-прежнему принимаются и работают как iri-zero, iri-live, iri-galileo, iri-atlas, iri-prometheus.

Для полного контроля укажите точный id модели из актуального ответа GET /v1/models. Рыночный каталог — отдельный справочник: не каждая его позиция доступна через API.

Тиры и цены

Модели разделены на тиры. Цены — за 1M токенов в рублях, видны в каталоге.

ТирЧто внутри
IRI ZeroIRI Zero — бесплатный режим на доступной бесплатной вычислительной ёмкости. Если бесплатная ёмкость временно исчерпана, запрос не переключается на платную модель автоматически.
CheapDeepSeek, Qwen, Gemini Flash, Haiku и др. — копейки
BalancedSonnet, GPT-5.5, Gemini Pro, Grok
FlagshipOpus, GPT-5.5 Codex, Llama 405B

Chat Completions

POST/v1/chat/completions
# pip install openai
from openai import OpenAI

client = OpenAI(
    api_key="vsk_live_ВАШ_КЛЮЧ",
    base_url="https://api-ru.agi-iri.ru/v1/",
)

resp = client.chat.completions.create(
    model="iri-live",
    messages=[{"role": "user", "content": "Привет!"}],
)
print(resp.choices[0].message.content)
curl https://api-ru.agi-iri.ru/v1/chat/completions \
  -H "Authorization: Bearer vsk_live_ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "iri-live",
    "messages": [{"role": "user", "content": "Привет!"}]
  }'
// npm install openai
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "vsk_live_ВАШ_КЛЮЧ",
  baseURL: "https://api-ru.agi-iri.ru/v1/",
});

const resp = await client.chat.completions.create({
  model: "iri-live",
  messages: [{ role: "user", content: "Привет!" }],
});
console.log(resp.choices[0].message.content);

Параметры

ПолеОписание
modelуровень (iri-live, iri-galileo…) или id модели из каталога
messagesмассив сообщений (role: system/user/assistant)
streamtrue — потоковая отдача (SSE)
max_tokens, temperatureкак в OpenAI
routeрежим маршрутизации (см. Route modes); по умолчанию auto

Route modes

Поле route в теле запроса задаёт, что для вас важнее: стабильность, отказоустойчивость, цена, скорость или качество ответа. Шлюз подберёт путь под выбранный приоритет. Актуальный список — в GET /v1/routes.

idРежимОписание
autoОбычныйШлюз сам выбирает доступный путь. Значение по умолчанию.
balancedСбалансированныйТо же, что обычный, но выбран явно.
direct-firstСтабильныйПредсказуемый ответ и ровное поведение под нагрузкой.
resilientОтказоустойчивыйЕсли основной путь недоступен, запрос всё равно выполнится.
cheapЭкономныйПриоритет цены: фоновые и объёмные задачи.

Значения fast и quality устарели: они по-прежнему принимаются и не сломают интеграцию, но работают как обычный режим. Вернём их, когда сможем опереться на настоящие замеры скорости и качества, а не обещать по догадке.

Пример с явным режимом. Поле route — необязательное: без него шлюз выбирает путь сам, и это подходит большинству.

{
  "model": "iri-live",
  "route": "balanced",
  "messages": [
    {"role": "user", "content": "Привет"}
  ]
}

Список моделей

GET/v1/models

Возвращает единственный источник текущей доступности: пять уровней Gateway и точные модели, которые можно указать в запросе прямо сейчас. Каталог рынка служит для сравнения и может содержать недоступные позиции.

Использование

GET/v1/usage

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

IRI Щит на компьютере

Щит — локальный фильтр персональных данных: он встаёт между вашим инструментом (Claude Code, Codex, Cursor, любой OpenAI-совместимый клиент) и сервером модели, маскирует структурные ПДн на выходе и возвращает их на входе. Модель и подписка остаются ваши — Щит ничего не подменяет, кроме значений в запросе.

Ключ тот же. Отдельной сущности нет: любой ваш ключ vsk_live_… подходит для Щита. Цена — 1 копейка за защищённый запрос, списывается с этого же баланса раз в сутки одним отчётом.

pip install -e shield
iri-shield key set vsk_live_…
iri-shield install claude-code
iri-shield doctor

Без ключа Щит работает и защищает — просто не ведёт учёт. При нулевом балансе он тоже продолжает маскировать и только напоминает о пополнении: фильтр не выключается из-за денег.

POST/v1/shield/usage

Отчёт Щита за сутки. Идемпотентен по (ключ, день, установка): повтор с тем же числом не списывает ничего, с большим — досписывает разницу. Отвечает 200 всегда, поле status — ok / low_balance / no_balance.

{ "day": "2026-09-07", "protected_requests": 50,
  "client": "iri-shield/0.2.0", "install_id": "…" }

Метадата ответа

Стандартный usage (токены) + блок verstak со стоимостью в рублях:

{
  "usage": { "prompt_tokens": 123, "completion_tokens": 456, "total_tokens": 579 },
  "verstak": {
    "cost_rub": 0.84,
    "balance_rub": 923.10,
    "route": { "preset": "iri-live", "provider": "deepseek" }
  }
}

Потоковый ответ

С "stream": true ответ приходит частями в формате Server-Sent Events, как у OpenAI: строки data: {...} с фрагментами текста и завершающая data: [DONE]. В OpenAI SDK достаточно передать stream=True и читать фрагменты в цикле.

stream = client.chat.completions.create(
    model="iri-live",
    messages=[{"role": "user", "content": "Напиши план статьи"}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")

Если ошибка случилась уже после начала потока, она приходит отдельным событием data: {"error": {...}} в том же формате, что и обычная ошибка (см. ниже). Обрабатывайте его так же, как ответ с кодом ошибки.

Изображения в запросе

Картинку передают в сообщении пользователя как часть content в формате OpenAI — блок image_url со встроенными данными (data URL):

{
  "model": "iri-live",
  "messages": [{
    "role": "user",
    "content": [
      { "type": "text", "text": "Что на скриншоте?" },
      { "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0..." } }
    ]
  }]
}

Формат Anthropic: /v1/messages

Для программ, которые работают с API Anthropic (например, Claude Code), Gateway принимает тот же формат: POST /v1/messages с полями model, system, messages, max_tokens, инструментами и потоковой отдачей. Ключ и баланс — те же. Подключение Claude Code пошагово — в инструкции.

Ошибки

Ошибка приходит с HTTP-кодом и телом в формате OpenAI:

{
  "error": {
    "message": "Модель gpt-4-old снята, используйте …",
    "type": "model_retired"
  }
}

Ориентируйтесь на type (и code, если он есть), а не только на HTTP-код: под одним кодом бывают разные причины.

Кодtype / codeЧто значит и что делать
400invalid_request_errorневерный запрос: неизвестная модель, лишний параметр, ошибка в формате. Если code = gray_model_not_offered — модель недоступна этому ключу, в сообщении перечислены доступные
401invalid_api_keyключ неверный или удалён — проверьте ключ в кабинете
402insufficient_balanceна балансе нет средств — пополните баланс или используйте бесплатный уровень iri-zero
403email_not_verified и др.доступ запрещён: не подтверждён email, ключ отключён или модель не входит в ваш доступ — причина в message
409duplicate_request_idповтор запроса с тем же идентификатором — отправьте новый
410model_retiredмодель снята; в message — на какую заменить
422privacy_blockedзапрос остановлен политикой защиты данных; причина — в поле reason_code. Уберите или обезличьте персональные данные в запросе
422image_input_unsupported_modelмодель не принимает изображения — выберите модель с поддержкой картинок
429rate_limit_exceededпревышен лимит ключа (в минуту или за месяц) — повторите позже или поднимите лимит в кабинете
503provider_unavailableмодель временно недоступна, резервный маршрут не помог — повторите запрос позже
503free_capacity_exhaustedбесплатная ёмкость iri-zero сейчас исчерпана; поле retry_after — через сколько секунд повторить. Или выберите платный уровень

Повторять имеет смысл запросы с кодами 429 и 503 — с паузой. Остальные ошибки повтор не исправит: нужно изменить запрос, ключ или баланс.

Лимиты

На каждый ключ можно задать лимиты в кабинете: запросов в минуту, дневной и месячный потолок расхода, список разрешённых моделей. Бесплатный режим IRI Zero работает на доступной бесплатной вычислительной ёмкости; актуальные условия — в кабинете.

Личный кабинет

В кабинете: баланс и пополнение по счёту на р/с, API-ключи, логи запросов, расходы. Для бизнеса — договор, закрывающие, ЭДО, 152-ФЗ.

Verstak — интеграция

Verstak — десктоп-машина задачи поверх шлюза. Настройки → Провайдеры → Verstak Gateway → вставьте ключ → выберите пресет. Запросы пойдут через ваш рублёвый баланс.

Помощь

Потоковый ответ, изображения на входе и формат Anthropic — в разделах выше. Эмбеддингов в Gateway пока нет. Вопросы: форма связи