Документация API
OpenAI-совместимый API для текста, изображений и аудио
Быстрый старт
Три шага для начала работы с ModelGate API:
Зарегистрируйтесь и пополните баланс
Создайте ключ в разделе API ключи
Используйте OpenAI SDK или любой HTTP-клиент
from openai import OpenAI
client = OpenAI(
api_key="rp_ваш_api_ключ",
base_url="https://api.modelgate.ru/v1"
)
response = client.chat.completions.create(
model="deepseek-v3.2",
messages=[{"role": "user", "content": "Привет!"}]
)
print(response.choices[0].message.content)
Аутентификация
Все запросы к API требуют ключа в заголовке Authorization:
https://api.modelgate.ru/v1Заголовок:
Authorization: Bearer rp_ваш_api_ключ
API ключи имеют формат rp_<uuid>. Ключ показывается один раз при создании — сохраните его в безопасном месте.
Для каждого ключа можно задать лимит расходов.
Чат
/v1/chat/completions
Генерация текстового ответа на основе диалога. Полностью совместимо с OpenAI Chat Completions API.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
model * | string | ID модели, например deepseek-v3.2 |
messages * | array | Массив сообщений с ролями system, user, assistant |
temperature | float | Температура генерации (0–2, по умолчанию 1) |
max_tokens | int | Максимальное количество токенов в ответе |
stream | bool | Потоковый режим (см. Стриминг) |
top_p | float | Nucleus sampling (0–1) |
frequency_penalty | float | Штраф за повторение (-2–2) |
from openai import OpenAI
client = OpenAI(
api_key="rp_ваш_api_ключ",
base_url="https://api.modelgate.ru/v1"
)
response = client.chat.completions.create(
model="deepseek-v3.2",
messages=[
{"role": "system", "content": "Ты полезный ассистент."},
{"role": "user", "content": "Объясни квантовую физику простыми словами."}
],
temperature=0.7,
max_tokens=1000
)
print(response.choices[0].message.content)
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'rp_ваш_api_ключ',
baseURL: 'https://api.modelgate.ru/v1',
});
const response = await client.chat.completions.create({
model: 'deepseek-v3.2',
messages: [
{ role: 'system', content: 'Ты полезный ассистент.' },
{ role: 'user', content: 'Объясни квантовую физику простыми словами.' }
],
temperature: 0.7,
max_tokens: 1000,
});
console.log(response.choices[0].message.content);
curl -X POST https://api.modelgate.ru/v1/chat/completions \
-H "Authorization: Bearer rp_ваш_api_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v3.2",
"messages": [
{"role": "system", "content": "Ты полезный ассистент."},
{"role": "user", "content": "Объясни квантовую физику простыми словами."}
],
"temperature": 0.7,
"max_tokens": 1000
}'
Пример ответа
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"model": "deepseek-v3.2",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "Квантовая физика изучает поведение частиц..."
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 150,
"total_tokens": 175
}
}
Рассуждения (Reasoning)
Некоторые модели (o3, Gemini 2.5, DeepSeek R1 и другие) поддерживают вывод цепочки рассуждений. Контент рассуждений автоматически включается в ответ, когда модель его предоставляет — дополнительных параметров не требуется.
Формат ответа
Рассуждения возвращаются в поле reasoning_content (стандарт OpenAI API):
{
"choices": [{
"message": {
"role": "assistant",
"content": "Площадь круга равна π × 5² = 78.54 кв.см.",
"reasoning_content": "Пользователь спрашивает про площадь круга с радиусом 5. Формула: S = πr²..."
}
}],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 180,
"total_tokens": 205,
"completion_tokens_details": {
"reasoning_tokens": 130
}
}
}
Стриминг
При стриминге рассуждения приходят в delta.reasoning_content перед основным контентом:
data: {"choices":[{"delta":{"reasoning_content":"Пользователь спрашивает..."}}]}
data: {"choices":[{"delta":{"reasoning_content":"Формула: S = πr²..."}}]}
data: {"choices":[{"delta":{"content":"Площадь круга равна..."}}]}
data: [DONE]
reasoning_content присутствует только у моделей с поддержкой рассуждений. Токены рассуждений учитываются в completion_tokens и отдельно в completion_tokens_details.reasoning_tokens.
Стриминг
/v1/chat/completions
stream: true
Получайте ответ по мере генерации через Server-Sent Events. Полезно для отображения ответа в реальном времени.
from openai import OpenAI
client = OpenAI(
api_key="rp_ваш_api_ключ",
base_url="https://api.modelgate.ru/v1"
)
stream = client.chat.completions.create(
model="deepseek-v3.2",
messages=[{"role": "user", "content": "Напиши короткий рассказ"}],
stream=True
)
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="", flush=True)
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'rp_ваш_api_ключ',
baseURL: 'https://api.modelgate.ru/v1',
});
const stream = await client.chat.completions.create({
model: 'deepseek-v3.2',
messages: [{ role: 'user', content: 'Напиши короткий рассказ' }],
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) process.stdout.write(content);
}
curl -X POST https://api.modelgate.ru/v1/chat/completions \
-H "Authorization: Bearer rp_ваш_api_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v3.2",
"messages": [{"role": "user", "content": "Напиши короткий рассказ"}],
"stream": true
}'
Формат SSE
data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"Жил"}}]}
data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":"-был"}}]}
data: {"id":"chatcmpl-abc","choices":[{"delta":{"content":" кот"}}]}
data: [DONE]
Эмбеддинги
/v1/embeddings
Создание векторных представлений текста для семантического поиска, кластеризации и классификации.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
model * | string | ID модели, например text-embedding-3-small |
input * | string | array | Текст или массив текстов для векторизации |
from openai import OpenAI
client = OpenAI(
api_key="rp_ваш_api_ключ",
base_url="https://api.modelgate.ru/v1"
)
# Один текст
result = client.embeddings.create(
model="text-embedding-3-small",
input="Привет, мир!"
)
print(f"Размерность: {len(result.data[0].embedding)}") # 1536
# Несколько текстов за один запрос
result = client.embeddings.create(
model="text-embedding-3-small",
input=["Первый текст", "Второй текст", "Третий текст"]
)
for item in result.data:
print(f"[{item.index}] {len(item.embedding)} dimensions")
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'rp_ваш_api_ключ',
baseURL: 'https://api.modelgate.ru/v1',
});
const result = await client.embeddings.create({
model: 'text-embedding-3-small',
input: 'Привет, мир!',
});
console.log(`Размерность: ${result.data[0].embedding.length}`);
curl -X POST https://api.modelgate.ru/v1/embeddings \
-H "Authorization: Bearer rp_ваш_api_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "text-embedding-3-small",
"input": "Привет, мир!"
}'
Пример ответа
{
"object": "list",
"data": [{
"object": "embedding",
"index": 0,
"embedding": [0.0023, -0.0093, 0.0152, ...]
}],
"model": "text-embedding-3-small",
"usage": { "prompt_tokens": 4, "total_tokens": 4 }
}
text-embedding-3-small (1536d), text-embedding-3-large (3072d), qwen3-embedding-8b (4096d), qwen3-embedding-4b (2560d)
Генерация изображений
/v1/images/generations
Создание изображений по текстовому описанию. Совместимо с OpenAI Images API.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
model * | string | ID модели, например flux-1.1-pro |
prompt * | string | Текстовое описание изображения |
size | string | Размер: 1024x1024, 1792x1024, 1024x1792 |
n | int | Количество изображений (по умолчанию 1) |
import base64
from openai import OpenAI
client = OpenAI(
api_key="rp_ваш_api_ключ",
base_url="https://api.modelgate.ru/v1"
)
image = client.images.generate(
model="flux-1.1-pro",
prompt="Кот-космонавт на Луне, цифровое искусство",
size="1024x1024",
n=1
)
# Ответ содержит base64-изображение
img_data = base64.b64decode(image.data[0].b64_json)
with open("image.png", "wb") as f:
f.write(img_data)
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'rp_ваш_api_ключ',
baseURL: 'https://api.modelgate.ru/v1',
});
const image = await client.images.generate({
model: 'flux-1.1-pro',
prompt: 'Кот-космонавт на Луне, цифровое искусство',
size: '1024x1024',
n: 1,
});
// Ответ содержит base64-изображение
const imgBase64 = image.data[0].b64_json;
fs.writeFileSync('image.png', Buffer.from(imgBase64, 'base64'));
curl -X POST https://api.modelgate.ru/v1/images/generations \
-H "Authorization: Bearer rp_ваш_api_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-1.1-pro",
"prompt": "Кот-космонавт на Луне, цифровое искусство",
"size": "1024x1024",
"n": 1
}'
Пример ответа
{
"created": 1705312200,
"data": [{
"b64_json": "/9j/4AAQ...",
"url": null,
"revised_prompt": null
}]
}
flux-1.1-pro, flux-1-dev, flux-1-schnell, seedream-4.5
Текст в речь (TTS)
/v1/audio/speech
Преобразование текста в естественную речь. Ответ возвращается как аудиофайл.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
model * | string | ID модели, например kokoro-82m |
input * | string | Текст для озвучивания |
voice * | string | ID голоса, например af_heart |
response_format | string | Формат: mp3, wav, opus |
speed | float | Скорость речи (0.25–4.0) |
from openai import OpenAI
client = OpenAI(
api_key="rp_ваш_api_ключ",
base_url="https://api.modelgate.ru/v1"
)
# Сохранение в файл
with client.audio.speech.with_streaming_response.create(
model="kokoro-82m",
input="Привет! Это тест синтеза речи.",
voice="af_heart",
) as response:
response.stream_to_file("speech.mp3")
import OpenAI from 'openai';
import fs from 'fs';
const client = new OpenAI({
apiKey: 'rp_ваш_api_ключ',
baseURL: 'https://api.modelgate.ru/v1',
});
const response = await client.audio.speech.create({
model: 'kokoro-82m',
input: 'Привет! Это тест синтеза речи.',
voice: 'af_heart',
});
const buffer = Buffer.from(await response.arrayBuffer());
fs.writeFileSync('speech.mp3', buffer);
curl -X POST https://api.modelgate.ru/v1/audio/speech \
-H "Authorization: Bearer rp_ваш_api_ключ" \
-H "Content-Type: application/json" \
-d '{
"model": "kokoro-82m",
"input": "Привет! Это тест синтеза речи.",
"voice": "af_heart"
}' \
--output speech.mp3
Content-Type: audio/mpeg. Сохраните тело ответа напрямую в файл.
Речь в текст (STT)
/v1/audio/transcriptions
Транскрибация аудиофайлов в текст. Поддерживаются форматы MP3, WAV, FLAC и другие.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
file * | file | Аудиофайл (макс. 25 МБ) |
model * | string | ID модели, например whisper-large-v3-turbo |
language | string | Код языка: ru, en, de и др. |
from openai import OpenAI
client = OpenAI(
api_key="rp_ваш_api_ключ",
base_url="https://api.modelgate.ru/v1"
)
transcript = client.audio.transcriptions.create(
model="whisper-large-v3-turbo",
file=open("audio.mp3", "rb"),
language="ru"
)
print(transcript.text)
import OpenAI from 'openai';
import fs from 'fs';
const client = new OpenAI({
apiKey: 'rp_ваш_api_ключ',
baseURL: 'https://api.modelgate.ru/v1',
});
const transcript = await client.audio.transcriptions.create({
model: 'whisper-large-v3-turbo',
file: fs.createReadStream('audio.mp3'),
language: 'ru',
});
console.log(transcript.text);
curl -X POST https://api.modelgate.ru/v1/audio/transcriptions \
-H "Authorization: Bearer rp_ваш_api_ключ" \
-F "file=@audio.mp3" \
-F "model=whisper-large-v3-turbo" \
-F "language=ru"
Пример ответа
{
"text": "Привет, это тестовая запись для проверки транскрибации."
}
Доступные модели
Полный каталог моделей с ценами, характеристиками и возможностями доступен на странице Модели.
DeepSeek V3, GPT-OSS, Gemini, Llama, GLM и другие
FLUX 1.1 Pro, FLUX Schnell, Seedream 4.5
text-embedding-3, Qwen3 Embedding
Kokoro TTS, Whisper STT
Обработка ошибок
Все ошибки возвращаются в едином формате:
{
"error": {
"message": "Описание ошибки",
"type": "тип_ошибки"
}
}
| Код | Тип | Описание |
|---|---|---|
400 | invalid_request_error | Некорректные параметры запроса |
401 | authentication_error | Неверный или отсутствующий API ключ |
402 | billing_error | Недостаточно средств или превышен лимит ключа |
429 | rate_limit_error | Превышен лимит запросов |
502 | upstream_error | Ошибка провайдера |
503 | service_unavailable | Все провайдеры недоступны |
Лимиты
| Лимит | Значение |
|---|---|
| Запросов в минуту (на ключ) | 100 RPM |
| Размер аудиофайла | 25 МБ |
Заголовки ответа содержат информацию о лимитах:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 45
Чат
Тестируйте модели прямо в браузере без API ключа. Чат поддерживает диалоги, генерацию изображений и стриминг.