Справочник по API
Быстрая справка
| Эндпоинт | Метод | Описание |
|---|---|---|
/v1/health | GET | Проверка статуса API |
/v1/models | GET | Список моделей (с фильтром по типу) |
/v1/embeddings/models | GET | Список embedding моделей |
/v1/images/models | GET | Список image-моделей |
/v1/audio/models | GET | Список multimodal audio-моделей |
/v1/tts/models | GET | Список TTS-моделей |
/v1/transcriptions/models | GET | Список transcription-моделей |
/v1/rerank/models | GET | Список rerank-моделей |
/v1/videos/models | GET | Список видео-моделей |
/v1/chat/completions | POST | Чат-запросы (OpenAI-совместимый) |
/v1/responses | POST | OpenAI Responses API |
/v1/completions | POST | Legacy Completions |
/v1/embeddings | POST | Генерация эмбеддингов |
/v1/images/generations | POST | Генерация изображений (OpenAI-совместимый) |
/v1/images | POST | Генерация изображений (OpenRouter native API) |
/v1/audio/speech | POST | Синтез речи (TTS) |
/v1/audio/transcriptions | POST | Транскрипция аудио |
/v1/audio/translations | POST | Перевод аудио |
/v1/rerank | POST | Ранжирование документов (Rerank) |
/v1/videos | POST | Генерация видео (асинхронная) |
/v1/videos/history | GET | История генераций видео |
/v1/videos/content | GET | Скачивание видео |
/v1/user/balance | GET | Баланс пользователя |
/v1/generation | GET | История использования |
Requests
Completions Request Format
Запросы к /v1/chat/completions совместимы с форматом OpenAI Chat API (см. quickstart).
Тело запроса (TypeScript):
type Request = {
// Обязательно: messages или prompt
messages?: Message[];
prompt?: string;
// Если model не указан, используется дефолтный пользователя
model?: string;
// Формат ответа (JSON / JSON Schema)
response_format?: ResponseFormat;
stop?: string | string[];
stream?: boolean;
// Параметры генерации
max_tokens?: number; // [1, context_length)
temperature?: number; // [0, 2]
top_p?: number; // (0, 1]
top_k?: number; // [1, Infinity)
frequency_penalty?: number; // [-2, 2]
presence_penalty?: number; // [-2, 2]
repetition_penalty?: number; // (0, 2]
min_p?: number; // [0, 1]
top_a?: number; // [0, 1]
seed?: number;
logit_bias?: { [key: number]: number };
// Tool calling
tools?: Tool[];
tool_choice?: ToolChoice;
// Суффиксы маршрутизации (добавляются к имени модели)
// :nitro → provider.sort = "throughput"
// :floor → provider.sort = "price"
// OpenRouter-специфичные параметры
provider?: ProviderPreferences;
user?: string;
};
type Message = {
role: 'system' | 'user' | 'assistant' | 'tool';
content: string | ContentPart[];
name?: string;
tool_call_id?: string; // для role: 'tool'
};
type ContentPart =
| { type: 'text'; text: string }
| { type: 'image_url'; image_url: { url: string; detail?: string } };
type Tool = {
type: 'function';
function: {
description?: string;
name: string;
parameters: object;
};
};
type ToolChoice = 'none' | 'auto' | { type: 'function'; function: { name: string } };
type ResponseFormat =
| { type: 'json_object' }
| { type: 'json_schema'; json_schema: { name: string; strict?: boolean; schema: object } };
type ProviderPreferences = {
order?: string[]; // Приоритет провайдеров
ignore?: string[]; // Игнорируемые провайдеры
sort?: 'throughput' | 'price'; // Стратегия сортировки
};
Headers
| Header | Описание |
|---|---|
Authorization: Bearer sk_... | API-ключ (обязателен) |
HTTP-Referer | URL приложения для статистики OpenRouter |
X-Title / X-OpenRouter-Title | Название приложения для статистики |
X-Request-Id | ID запроса (для отслеживания прерванных запросов) |
Structured Outputs
Через response_format:
{ type: 'json_object' }— базовый JSON-режим{ type: 'json_schema', json_schema: { name, strict, schema } }— строгая схема
Assistant Prefill
Поддерживается нативно через последнее сообщение с role: "assistant":
{
"messages": [
{ "role": "user", "content": "Что такое ИИ?" },
{ "role": "assistant", "content": "ИИ — это" }
]
}
Поддержка Responses API (OpenAI)
Эндпоинт /v1/responses принимает поле input вместо messages:
{
"model": "openai/gpt-4o",
"input": "Расскажи о себе"
}
input может быть строкой или массивом structured input. Конвертируется в messages автоматически.
Responses
Формат ответа
OpenRouter возвращает ответы в формате, совместимом с OpenAI Chat API:
type Response = {
id: string;
choices: (NonStreamingChoice | StreamingChoice)[];
created: number;
model: string;
object: 'chat.completion' | 'chat.completion.chunk';
usage?: ResponseUsage;
};
type NonStreamingChoice = {
finish_reason: string | null;
native_finish_reason: string | null;
message: {
content: string | null;
role: string;
tool_calls?: ToolCall[];
};
};
type StreamingChoice = {
finish_reason: string | null;
native_finish_reason: string | null;
delta: {
content?: string | null;
role?: string;
tool_calls?: ToolCall[];
};
};
type ResponseUsage = {
prompt_tokens: number;
completion_tokens: number;
total_tokens: number;
prompt_tokens_details?: {
cached_tokens: number;
cache_write_tokens?: number;
};
completion_tokens_details?: {
reasoning_tokens?: number;
};
cost?: number;
currency?: string;
};
Finish Reason
Нормализованные значения: tool_calls, stop, length, content_filter, error.
Оригинальное значение провайдера доступно в native_finish_reason.
Пример ответа
{
"id": "gen-xxxxxxxxxxxxxx",
"choices": [
{
"finish_reason": "stop",
"native_finish_reason": "stop",
"message": {
"role": "assistant",
"content": "Привет!"
}
}
],
"usage": {
"prompt_tokens": 10,
"completion_tokens": 4,
"total_tokens": 14,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0
},
"total_cost": 0.00014,
"currency": "RUB"
}
}
Эндпоинты
GET /v1/health
Проверка работоспособности. Не требует аутентификации.
{
"status": "ok",
"version": "1.0",
"endpoints": [
"models", "embeddings/models", "rerank/models",
"images/models", "audio/models", "tts/models",
"transcriptions/models", "chat/completions",
"completions", "embeddings", "responses",
"rerank", "images/generations", "images",
"audio/speech", "audio/transcriptions", "audio/translations",
"user/balance", "generation"
]
}
POST /v1/embeddings
Генерация векторных представлений текста (эмбеддингов).
Параметры:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
model | string | ID модели | |
input | string | array | Текст для векторизации |
Пример:
curl https://api.ru-openrouter.ru/v1/embeddings \
-H "Authorization: Bearer sk_ваш_api_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/text-embedding-3-small",
"input": "Текст для векторизации"
}'
POST /v1/images/generations
Генерация изображений. Поддерживает image-to-image (через image или input_references).
Параметры:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
model | string | ID модели | |
prompt | string | Описание изображения | |
n | integer | Количество изображений (1-10, по умолчанию 1) | |
size | string | Legacy: 1024x1024, 1024x768, 768x1024, 1280x720, 720x1280, 1536x1024, 1024x1536 | |
image | string | Data URL или URL изображения (image-to-image) | |
response_format | string | url (по умолчанию) или b64_json | |
image_config | object | { aspect_ratio, image_size } | |
image_config.aspect_ratio | string | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 | |
image_config.image_size | string | 1K, 2K, 4K |
Пример:
curl https://api.ru-openrouter.ru/v1/images/generations \
-H "Authorization: Bearer sk_ваш_api_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/dall-e-3",
"prompt": "Кот в космосе, цифровой арт",
"n": 1,
"image_config": {
"aspect_ratio": "16:9",
"image_size": "2K"
}
}'
POST /v1/images
Алиас для /v1/images/generations.
POST /v1/audio/speech
Синтез речи из текста. Возвращает аудиофайл.
Параметры:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
model | string | ID модели | |
input | string | Текст (макс. 5000 символов) | |
voice | string | alloy, echo, fable, onyx, nova, shimmer | |
response_format | string | mp3, opus, aac, flac, wav, pcm | |
speed | float | 0.25–4.0 |
Пример:
curl https://api.ru-openrouter.ru/v1/audio/speech \
-H "Authorization: Bearer sk_ваш_api_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/tts-1",
"input": "Привет! Это пример синтеза речи.",
"voice": "alloy",
"response_format": "mp3"
}' \
--output speech.mp3
POST /v1/audio/transcriptions
Распознавание речи из аудиофайла. Поддерживает два формата:
- multipart/form-data:
model+file(OpenAI-стиль) - application/json:
model+input_audio.data(base64) +input_audio.format(OpenRouter-стиль)
Параметры:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
model | string | ID модели | |
file | file | (multipart) | Аудиофайл |
input_audio.data | string | (JSON) | Base64 аудиоданных |
input_audio.format | string | (JSON) | Формат аудио (mp3, wav, etc.) |
language | string | Язык (например, ru) | |
response_format | string | json, text, srt, verbose_json, vtt | |
temperature | float | 0.0–1.0 | |
prompt | string | Подсказка для модели | |
timestamp_granularities | string | Детализация временных меток |
POST /v1/audio/translations
Перевод аудио на английский. Аналогичен транскрипции по формату.
POST /v1/rerank
Реранкинг документов по релевантности запросу.
Параметры:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
model | string | ID модели | |
query | string | Поисковый запрос | |
documents | array | Массив документов | |
top_n | integer | Количество результатов |
Пример:
curl https://api.ru-openrouter.ru/v1/rerank \
-H "Authorization: Bearer sk_ваш_api_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "cohere/rerank",
"query": "Что такое искусственный интеллект?",
"documents": [
"ИИ — это область компьютерных наук...",
"Машинное обучение — подраздел ИИ..."
],
"top_n": 2
}'
POST /v1/videos
Асинхронная генерация видео. Создаёт задачу, возвращает job_id.
Параметры:
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
model | string | ID модели | |
prompt | string | Описание видео | |
size | string | Разрешение | |
duration | integer | Длительность в секундах | |
stream | boolean | Streaming (не поддерживается, ошибка) |
Пример:
curl -X POST https://api.ru-openrouter.ru/v1/videos \
-H "Authorization: Bearer sk_ваш_api_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/sora",
"prompt": "A serene lake at sunset with mountains"
}'
GET /v1/videos?id={job_id}
Получение статуса и результата видео-задачи.
GET /v1/videos/history
Список завершённых видео пользователя.
GET /v1/videos/content?id={job_id}
Скачивание готового видеофайла.
GET /v1/user/balance
Текущий баланс пользователя.
{
"user": "user@example.com",
"balance": 150.50,
"currency": "RUB"
}
GET /v1/generation
Логи использования API.
Параметры:
| Параметр | Тип | Описание |
|---|---|---|
generation_id | string | Поиск по ID генерации |
limit | integer | Количество записей (макс. 300, по умолчанию 10) |
offset | integer | Смещение |
Ответ:
{
"logs": [
{
"id": 12345,
"model_name": "openai/gpt-4o-mini",
"input_tokens": 100,
"output_tokens": 50,
"total_cost": 0.15,
"timestamp": "2025-03-11T12:00:00Z"
}
],
"total": 1
}
Коды ошибок
| HTTP | Код | Описание |
|---|---|---|
| 400 | missing_model | Не указана модель |
| 400 | missing_messages | Не указаны сообщения |
| 400 | missing_prompt | Не указан prompt |
| 400 | missing_input | Не указан input |
| 400 | missing_query | Не указан query (rerank) |
| 400 | missing_documents | Не указаны documents (rerank) |
| 400 | missing_job_id | Не указан job_id (videos) |
| 400 | invalid_json | Невалидный JSON |
| 400 | invalid_filter | Неверный ?filter= |
| 400 | invalid_message_format | Неверный формат сообщения |
| 400 | invalid_message_role | Недопустимая роль |
| 400 | invalid_response_format | Неверный response_format |
| 400 | invalid_input | Некорректный input |
| 400 | invalid_base64 | Неверный base64 |
| 400 | model_not_found | Модель не найдена или неактивна |
| 400 | model_not_supported | Модель не поддерживает эндпоинт |
| 400 | input_tokens_exceeded | Превышен контекст модели |
| 400 | token_limit_exceeded | Превышен лимит токенов |
| 400 | input_too_long | Текст превышает макс. длину |
| 400 | prompt_too_long | Prompt превышает макс. длину |
| 400 | streaming_not_supported | Стриминг не поддерживается |
| 400 | file_upload_error | Ошибка загрузки файла |
| 401 | invalid_api_key | Неверный API-ключ |
| 401 | missing_api_key | Отсутствует Authorization |
| 401 | key_expired | Срок ключа истёк |
| 402 | insufficient_balance | Недостаточно средств |
| 403 | account_deactivated | Аккаунт деактивирован |
| 403 | key_deactivated | Ключ деактивирован |
| 403 | api_locked | API заблокирован |
| 403 | access_denied | Нет доступа |
| 404 | endpoint_not_found | Эндпоинт не найден |
| 404 | stream_not_found | Стрим не найден |
| 404 | job_not_found | Задача не найдена |
| 405 | method_not_allowed | Метод не поддерживается |
| 413 | request_too_large | Тело > 10 MB |
| 415 | unsupported_media_type | Неподдерживаемый Content-Type |
| 429 | rate_limit_exceeded | Превышен лимит запросов |
| 429 | limit_exceeded | Превышен лимит API-ключа |
| 502 | empty_response | Пустой ответ от провайдера |
| 503 | maintenance_mode | Техническое обслуживание |