Перейти к содержимому

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

RU LLM полностью совместим с форматом OpenAI API. Используйте любой SDK или HTTP-клиент — достаточно изменить base_url и API-ключ.

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

Запустите RU LLM менее чем за 2 минуты. Если вы уже используете OpenAI SDK — достаточно изменить два параметра.

Python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.rullm.com/api/v1",
    api_key="air_live_your_key_here"
)

response = client.chat.completions.create(
    model="openai/gpt-5.4",
    messages=[
        {"role": "user", "content": "Summarize the OpenAI Chat Completions schema in one sentence."}
    ]
)

print(response.choices[0].message.content)
JavaScript / TypeScript
import OpenAI from "openai";

const client = new OpenAI({
    baseURL: "https://api.rullm.com/api/v1",
    apiKey: "air_live_your_key_here"
});

const response = await client.chat.completions.create({
    model: "anthropic/claude-opus-4-7",
    messages: [
        { role: "user", content: "Summarize the OpenAI Chat Completions schema in one sentence." }
    ]
});

console.log(response.choices[0].message.content);
cURL
curl https://api.rullm.com/api/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer air_live_your_key_here" \
  -d '{
    "model": "google/gemini-3-pro",
    "messages": [
      {"role": "user", "content": "Summarize the OpenAI Chat Completions schema in one sentence."}
    ]
  }'

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

Все API-запросы требуют API-ключ в заголовке Authorization как Bearer-токен.

Формат API-ключа

API-ключи RU LLM имеют префикс air_live_ и 43 символа base64url. Пример:

air_live_abc123def456ghi789jkl012mno345pqr678stu

Формат заголовка

Authorization: Bearer air_live_your_key_here

Создавайте и управляйте ключами в панели или через эндпоинты управления ключами.

Базовый URL

https://api.rullm.com/api/v1

Все эндпоинты относительны этого базового URL. API полностью совместим с путями OpenRouter и OpenAI.

SDK и библиотеки

RU LLM работает с любым SDK, поддерживающим кастомный base URL. Специальный SDK не нужен — используйте имеющийся.

OpenAI Python SDK

pip install openai

Установите base_url в https://api.rullm.com/api/v1

OpenAI Node.js SDK

npm install openai

Установите baseURL в https://api.rullm.com/api/v1

LangChain

pip install langchain-openai

Используйте ChatOpenAI с параметром openai_api_base

LlamaIndex

pip install llama-index-llms-openai

Установите api_base в классе OpenAI LLM

Anthropic SDK (нативно)

Если ваш код уже написан на официальном Anthropic SDK, переписывать его под схему OpenAI не нужно. Направьте SDK на нативный Anthropic-эндпоинт RU LLM — и всё остальное останется как есть: messages, tools, системные промпты, extended thinking, кэширование промптов. Запрос уходит провайдеру без изменений, ответ приходит в собственном формате Anthropic.

Базовый URL

https://api.rullm.com/anthropic

Anthropic SDK сам добавляет /v1/messages к базовому URL, поэтому одно это значение — и есть вся миграция. Python- и TypeScript-SDK также читают переменную окружения ANTHROPIC_BASE_URL: задайте её — и код менять не придётся вовсе.

МетодПутьОписание
POST/anthropic/v1/messagesСоздать сообщение — со стримингом или без
POST/anthropic/v1/messages/count_tokensПосчитать токены промпта до отправки. Не тарифицируется.
Python — anthropic SDK
from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.rullm.com/anthropic",
    api_key="air_live_your_key_here"
)

message = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Explain quantum computing in simple terms."}
    ]
)

print(message.content[0].text)
TypeScript — @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
    baseURL: "https://api.rullm.com/anthropic",
    apiKey: "air_live_your_key_here"
});

const message = await client.messages.create({
    model: "claude-opus-4-7",
    max_tokens: 1024,
    messages: [
        { role: "user", content: "Explain quantum computing in simple terms." }
    ]
});

console.log(message.content[0].text);
cURL
curl https://api.rullm.com/anthropic/v1/messages \
  -H "content-type: application/json" \
  -H "x-api-key: air_live_your_key_here" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-opus-4-7",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "Explain quantum computing in simple terms."}
    ]
  }'
cURL — подсчёт токенов
curl https://api.rullm.com/anthropic/v1/messages/count_tokens \
  -H "content-type: application/json" \
  -H "x-api-key: air_live_your_key_here" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-opus-4-7",
    "messages": [
      {"role": "user", "content": "Explain quantum computing in simple terms."}
    ]
  }'

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

Передавайте ключ RU LLM в заголовке x-api-key — туда его кладёт Anthropic SDK — либо как Authorization: Bearer air_live_.... Собственный ключ Anthropic не нужен: RU LLM авторизуется у провайдера своим ключом, а ваш заголовок наверх не уходит.

Имена моделей

Используйте собственные имена моделей Anthropic — те же, что и с api.anthropic.com, например claude-opus-4-7. Форма provider/model-name относится к OpenAI-совместимым эндпоинтам.

Заголовки

anthropic-version и anthropic-beta проходят насквозь без изменений, поэтому бета-функция работает здесь в тот же день, когда её выпускает Anthropic. Если anthropic-version не задан, используется 2023-06-01. Ответные заголовки Anthropic — request-id и семейство anthropic-ratelimit-* — возвращаются как есть; мы добавляем X-Request-Id, X-AI-Provider и X-AI-Model.

Стриминг

Укажите "stream": true — и SSE-поток ретранслируется ровно так, как его отдаёт Anthropic, событие за событием по мере поступления: message_start, content_block_delta, message_delta, message_stop. Ничего не буферизуется и не пересобирается, поэтому stream-хелперы SDK работают без изменений.

Ошибки

Ошибки сохраняют формат Anthropic, поэтому ваша обработка ошибок продолжает работать без правок. Наши собственные ошибки используют тот же конверт: например, исчерпанный баланс возвращает 402 с типом invalid_request_error.

Формат ошибки
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "insufficient credits"
  }
}

Эндпоинты

RU LLM реализует те же пути эндпоинтов, что и OpenRouter и OpenAI. Схемы запросов и ответов идентичны.

МетодПутьОписание
POST/api/v1/chat/completionsСоздать чат-комплишен
POST/api/v1/images/generationsСгенерировать изображения
POST/api/v1/audio/speechСинтез речи
POST/api/v1/audio/transcriptionsРаспознавание речи
GET/api/v1/modelsСписок доступных моделей
GET/api/v1/generation?id=Детали генерации
GET/api/v1/creditsПроверить баланс
GET/api/v1/keysСписок API-ключей
POST/api/v1/keysСоздать новый API-ключ
PATCH/api/v1/keys/:idОбновить API-ключ
DELETE/api/v1/keys/:idУдалить API-ключ

POST /api/v1/chat/completions

Создайте чат-комплишен. Основной эндпоинт для взаимодействия с любой AI-моделью через RU LLM. Формат запроса и ответа идентичен OpenAI Chat Completions API.

Тело запроса
{
  "model": "openai/gpt-5.4",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant."
    },
    {
      "role": "user",
      "content": "Explain quantum computing in simple terms."
    }
  ],
  "temperature": 0.7,
  "max_tokens": 1000,
  "stream": false
}
Ответ
{
  "id": "gen-abc123",
  "object": "chat.completion",
  "created": 1713200000,
  "model": "openai/gpt-5.4",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Quantum computing uses quantum mechanics..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 150,
    "total_tokens": 175
  }
}

Формат ID модели

ID моделей имеют формат provider/model-name. Примеры:

  • openai/gpt-5.4
  • anthropic/claude-opus-4-7
  • google/gemini-3-pro
  • deepseek/deepseek-v3.2
  • mistral/mistral-large-3
  • xai/grok-4

Стриминг

Установите "stream": true для получения Server-Sent Events (SSE). Формат ответа соответствует OpenAI streaming-спецификации, с data: [DONE] в конце.

POST /api/v1/images/generations

Генерация изображений моделями GPT-Image-1, Imagen 4, FLUX 1.1 Pro и другими frontier-моделями. Формат запроса соответствует OpenAI Images API.

cURL
curl https://api.rullm.com/api/v1/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer air_live_your_key_here" \
  -d '{
    "model": "openai/gpt-image-1",
    "prompt": "a white siamese cat",
    "n": 1,
    "size": "1024x1024"
  }'
Ответ
{
  "created": 1713200000,
  "data": [
    {
      "url": "https://...",
      "revised_prompt": "A white Siamese cat with blue eyes..."
    }
  ]
}

Поддерживаемые размеры

  • 1024x1024
  • 1792x1024
  • 1024x1792

POST /api/v1/audio/speech

Конвертация текста в естественную речь. Возвращает сырые аудио-байты с Content-Type: audio/mpeg по умолчанию.

cURL
curl https://api.rullm.com/api/v1/audio/speech \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer air_live_your_key_here" \
  -d '{
    "model": "openai/gpt-4o-mini-tts",
    "input": "Hello, welcome to AI Router!",
    "voice": "alloy"
  }' \
  --output speech.mp3

Доступные голоса

alloyechofableonyxnovashimmer

Формат ответа

Ответ — сырые аудио-байты (не JSON). По умолчанию content type — audio/mpeg. Можно запросить другие форматы через response_format: opus, aac или flac.

POST /api/v1/audio/transcriptions

Распознавание речи моделями GPT-4o Transcribe и другими. Принимает multipart/form-data запросы.

cURL
curl https://api.rullm.com/api/v1/audio/transcriptions \
  -H "Authorization: Bearer air_live_your_key_here" \
  -F file="@audio.mp3" \
  -F model="openai/gpt-4o-transcribe"
Ответ
{
  "text": "Hello, welcome to AI Router!"
}

Поддерживаемые аудио-форматы

.mp3.mp4.mpeg.mpga.m4a.wav.webm

Максимальный размер файла: 25 МБ

GET /api/v1/models

Список всех доступных моделей. Возвращает ID, цены, длины контекста и возможности. Аутентификация не требуется.

cURL
curl https://api.rullm.com/api/v1/models
Ответ (сокращён)
{
  "data": [
    {
      "id": "anthropic/claude-opus-4-7",
      "name": "Claude Opus 4.7",
      "model_type": "chat",
      "context_length": 1048576,
      "pricing": {
        "prompt": "0.000003",
        "completion": "0.000015",
        "image": "0",
        "request": "0"
      },
      "top_provider": {
        "max_completion_tokens": 131072,
        "is_moderated": false
      },
      "architecture": {
        "modality": "text+image->text",
        "input_modalities": ["text", "image"],
        "output_modalities": ["text"],
        "tokenizer": "Claude"
      }
    }
  ]
}

Цены и как отражается потребление

  • Цены публикуются по каждой модели в каталоге моделей, в долларах США за 1M токенов.
  • Ставка, по которой тарифицируются ваши запросы, определяется договором вашей организации.
  • Потребление отражается ровно так, как тарифицируется: цифры в GET /api/v1/generation и в панели — это то, что списано с вашего баланса.
  • Для совместимости с OpenRouter pricing.prompt и pricing.completion указаны в долларах за один токен — модель за $3 за 1M входных токенов отдаёт "0.000003".

GET /api/v1/generation?id=

Получить детали конкретной генерации: счётчики токенов, стоимость, задержку и провайдера, который обработал запрос.

cURL
curl "https://api.rullm.com/api/v1/generation?id=gen-abc123" \
  -H "Authorization: Bearer air_live_your_key_here"
Ответ
{
  "id": "gen-abc123",
  "model": "openai/gpt-5.4",
  "created_at": "2026-04-15T10:30:00Z",
  "tokens_prompt": 25,
  "tokens_completion": 150,
  "total_cost": 0.003062,
  "latency_ms": 1250,
  "provider": "openai",
  "status": "completed"
}

GET /api/v1/credits

Проверить текущий баланс. Возвращает значение в USD как число с плавающей точкой для совместимости с OpenRouter.

cURL
curl https://api.rullm.com/api/v1/credits \
  -H "Authorization: Bearer air_live_your_key_here"
Ответ
{
  "data": {
    "total_credits": 100.00,
    "total_usage": 23.45,
    "remaining": 76.55
  }
}

Управление API-ключами

Создание, листинг, обновление и удаление API-ключей программно. Требует session-аутентификации (вход в панель) или management API-ключа.

Создать новый API-ключ
curl -X POST https://api.rullm.com/api/v1/keys \
  -H "Authorization: Bearer air_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "production-backend",
    "rate_limit": 100
  }'
Получить список ключей
curl https://api.rullm.com/api/v1/keys \
  -H "Authorization: Bearer air_live_your_key_here"
Удалить ключ
curl -X DELETE https://api.rullm.com/api/v1/keys/key_id_here \
  -H "Authorization: Bearer air_live_your_key_here"

Self-hosted модели

RU LLM запускает 20 популярных open-weight моделей на собственной GPU-инфраструктуре с оптимизированным inference-стеком. Эти модели используют тот же API — без особой конфигурации.

Формат ID модели

ID self-hosted моделей имеют префикс airouter-cloud/. Примеры:

  • airouter-cloud/llama-4-maverick
  • airouter-cloud/qwen-3-235b
  • airouter-cloud/deepseek-v3.2
  • airouter-cloud/gemma-3-27b
  • airouter-cloud/mistral-large-3
Python — использование self-hosted модели
from openai import OpenAI

client = OpenAI(
    base_url="https://api.rullm.com/api/v1",
    api_key="air_live_your_key_here"
)

response = client.chat.completions.create(
    model="airouter-cloud/llama-4-maverick",
    messages=[
        {"role": "user", "content": "Write a quicksort in Python"}
    ]
)

print(response.choices[0].message.content)

Данные остаются локально

Ваши данные не покидают наши серверы. Без сторонних маршрутов для self-hosted моделей.

Выделенные GPU

Модели работают на выделенных NVIDIA GPU с гарантированной мощностью.

Кастомный деплой

Нужна конкретная модель? Развернём любую HuggingFace-модель за 24 часа.

Все доступные self-hosted модели — на странице Self-Hosted.

Обработка ошибок

RU LLM возвращает стандартные HTTP-коды и JSON-ошибки, совместимые с форматом ошибок OpenAI.

СтатусЗначение
400Bad request — невалидный JSON или отсутствуют обязательные поля
401Unauthorized — невалидный или отсутствующий API-ключ
402Payment required — недостаточно средств на балансе
404Not found — неизвестная модель или эндпоинт
429Rate limited — слишком много запросов в секунду
500Internal error — непредвиденная серверная ошибка
502Provider error — upstream-провайдер вернул ошибку
503Provider unavailable — upstream-провайдер недоступен
Формат ответа при ошибке
{
  "error": {
    "message": "Insufficient credits. Please add funds to your account.",
    "type": "insufficient_credits",
    "code": 402
  }
}

Rate limits

Rate limits применяются к каждому API-ключу. Лимиты по умолчанию можно настроить через панель или API.

Лимиты по умолчанию

  • 60 запросов/мин на ключ (настраивается)
  • Rate limit заголовки в каждом ответе: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
  • Статус 429 при превышении, с заголовком Retry-After

Нужны более высокие лимиты? Откройте форму обратной связи для индивидуальных настроек.

Готовы интегрировать?

Создайте аккаунт и начните делать API-вызовы за минуты.