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

Три шага для начала работы с ModelGate API:

1
Создайте аккаунт

Зарегистрируйтесь и пополните баланс

2
Получите API ключ

Создайте ключ в разделе API ключи

3
Сделайте первый запрос

Используйте 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:

Base URL: https://api.modelgate.ru/v1
Заголовок: Authorization: Bearer rp_ваш_api_ключ

API ключи имеют формат rp_<uuid>. Ключ показывается один раз при создании — сохраните его в безопасном месте. Для каждого ключа можно задать лимит расходов.

Чат

POST /v1/chat/completions

Генерация текстового ответа на основе диалога. Полностью совместимо с OpenAI Chat Completions API.

Параметры

ПараметрТипОписание
model *stringID модели, например deepseek-v3.2
messages *arrayМассив сообщений с ролями system, user, assistant
temperaturefloatТемпература генерации (0–2, по умолчанию 1)
max_tokensintМаксимальное количество токенов в ответе
streamboolПотоковый режим (см. Стриминг)
top_pfloatNucleus sampling (0–1)
frequency_penaltyfloatШтраф за повторение (-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.

Стриминг

POST /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]

Эмбеддинги

POST /v1/embeddings

Создание векторных представлений текста для семантического поиска, кластеризации и классификации.

Параметры

ПараметрТипОписание
model *stringID модели, например 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)

Генерация изображений

POST /v1/images/generations

Создание изображений по текстовому описанию. Совместимо с OpenAI Images API.

Параметры

ПараметрТипОписание
model *stringID модели, например flux-1.1-pro
prompt *stringТекстовое описание изображения
sizestringРазмер: 1024x1024, 1792x1024, 1024x1792
nintКоличество изображений (по умолчанию 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)

POST /v1/audio/speech

Преобразование текста в естественную речь. Ответ возвращается как аудиофайл.

Параметры

ПараметрТипОписание
model *stringID модели, например kokoro-82m
input *stringТекст для озвучивания
voice *stringID голоса, например af_heart
response_formatstringФормат: mp3, wav, opus
speedfloatСкорость речи (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)

POST /v1/audio/transcriptions

Транскрибация аудиофайлов в текст. Поддерживаются форматы MP3, WAV, FLAC и другие.

Параметры

ПараметрТипОписание
file *fileАудиофайл (макс. 25 МБ)
model *stringID модели, например whisper-large-v3-turbo
languagestringКод языка: 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": "тип_ошибки"
  }
}
КодТипОписание
400invalid_request_errorНекорректные параметры запроса
401authentication_errorНеверный или отсутствующий API ключ
402billing_errorНедостаточно средств или превышен лимит ключа
429rate_limit_errorПревышен лимит запросов
502upstream_errorОшибка провайдера
503service_unavailableВсе провайдеры недоступны

Лимиты

ЛимитЗначение
Запросов в минуту (на ключ)100 RPM
Размер аудиофайла25 МБ

Заголовки ответа содержат информацию о лимитах:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 45

Чат

Тестируйте модели прямо в браузере без API ключа. Чат поддерживает диалоги, генерацию изображений и стриминг.