Документация API
RU LLM полностью совместим с форматом OpenAI API. Используйте любой SDK или HTTP-клиент — достаточно изменить base_url и API-ключ.
Быстрый старт
Запустите RU LLM менее чем за 2 минуты. Если вы уже используете OpenAI SDK — достаточно изменить два параметра.
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)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 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 | Посчитать токены промпта до отправки. Не тарифицируется. |
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)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 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 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 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 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Доступные голоса
Формат ответа
Ответ — сырые аудио-байты (не JSON). По умолчанию content type — audio/mpeg. Можно запросить другие форматы через response_format: opus, aac или flac.
POST /api/v1/audio/transcriptions
Распознавание речи моделями GPT-4o Transcribe и другими. Принимает multipart/form-data запросы.
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!"
}Поддерживаемые аудио-форматы
Максимальный размер файла: 25 МБ
GET /api/v1/models
Список всех доступных моделей. Возвращает ID, цены, длины контекста и возможности. Аутентификация не требуется.
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 "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 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-ключа.
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
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.
| Статус | Значение |
|---|---|
| 400 | Bad request — невалидный JSON или отсутствуют обязательные поля |
| 401 | Unauthorized — невалидный или отсутствующий API-ключ |
| 402 | Payment required — недостаточно средств на балансе |
| 404 | Not found — неизвестная модель или эндпоинт |
| 429 | Rate limited — слишком много запросов в секунду |
| 500 | Internal error — непредвиденная серверная ошибка |
| 502 | Provider error — upstream-провайдер вернул ошибку |
| 503 | Provider 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-вызовы за минуты.