API Reference
MegaAPI.ru предоставляет полностью OpenAI-совместимый REST API.
Base URL: https://megaapi.ru/v1
Authorization: Bearer sk-nexus-....
Ключ выдаётся в Telegram-боте командой /start.
POST /v1/chat/completions
Главный эндпоинт — создаёт ответ модели на основе списка сообщений. Поддерживает обычный режим и потоковую выдачу (SSE).
Запрос
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
model |
string | да | Идентификатор модели. Полный список — в каталоге моделей. Пример: gpt-4o, claude-sonnet-4-6, gemini-2.5-pro. |
messages |
array | да | Массив объектов {role, content}. Роли: system, user, assistant, tool. |
stream |
boolean | нет | При true — Server-Sent Events (потоковая выдача). По умолчанию false. |
temperature |
number | нет | Случайность выдачи. Диапазон 0.0–2.0. По умолчанию 1.0. |
top_p |
number | нет | Nucleus sampling. Альтернатива temperature. Диапазон 0.0–1.0. |
max_tokens |
integer | нет | Максимальное число токенов в ответе. Если не указано — зависит от модели. |
max_completion_tokens |
integer | нет | Аналог max_tokens для новых моделей OpenAI o-серии. |
stop |
string / array | нет | Одна или несколько строк-стопов. Генерация прекращается при встрече с любой из них. |
presence_penalty |
number | нет | Штраф за повторение тем. Диапазон -2.0–2.0. |
frequency_penalty |
number | нет | Штраф за частые токены. Диапазон -2.0–2.0. |
n |
integer | нет | Количество вариантов ответа. По умолчанию 1. |
user |
string | нет | Идентификатор конечного пользователя для журналирования. |
tools |
array | нет | Список инструментов (function calling). Объекты {type, function}. |
tool_choice |
string / object | нет | Управление выбором инструмента: "auto", "none", "required" или объект с именем функции. |
response_format |
object | нет | Формат ответа. {"type": "json_object"} или {"type": "json_schema", ...} для structured output. |
reasoning_effort |
string | нет | Для моделей-«рассуждалок» (o3, o4-mini, DeepSeek R1): "low" / "medium" / "high". |
stream_options |
object | нет | {"include_usage": true} — добавляет usage в последний SSE-chunk при стриминге. |
Пример — Python (без стриминга)
from openai import OpenAI
client = OpenAI(
base_url="https://megaapi.ru/v1",
api_key="sk-nexus-xxxxxxxxxxxxxxxx",
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "Ты полезный ассистент."},
{"role": "user", "content": "Привет! Расскажи о себе."},
],
max_tokens=512,
)
print(response.choices[0].message.content)
Пример — curl
curl https://megaapi.ru/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-nexus-xxxxxxxxxxxxxxxx" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "system", "content": "Ты полезный ассистент."},
{"role": "user", "content": "Привет!"}
]
}'
Ответ
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1720000000,
"model": "gpt-4o",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Привет! Я языковая модель GPT-4o..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 28,
"completion_tokens": 54,
"total_tokens": 82
}
}
Потоковая выдача (SSE)
При "stream": true ответ приходит в виде Server-Sent Events.
Каждый chunk содержит дельту — фрагмент текста по мере генерации.
from openai import OpenAI
client = OpenAI(
base_url="https://megaapi.ru/v1",
api_key="sk-nexus-xxxxxxxxxxxxxxxx",
)
with client.chat.completions.stream(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "Напиши хайку"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
Формат SSE-сообщений:
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"delta":{"content":"Привет"},"index":0}]}
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"delta":{"content":"!"},"index":0}]}
data: {"id":"chatcmpl-abc","usage":{"prompt_tokens":10,"completion_tokens":5,"total_tokens":15},"choices":[{"delta":{},"finish_reason":"stop","index":0}]}
data: [DONE]
Function Calling / Tool Use
Передайте список инструментов и модель сама выберет, когда их вызвать.
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Возвращает погоду в указанном городе",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "Название города"}
},
"required": ["city"]
}
}
}
]
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Какая погода в Москве?"}],
tools=tools,
tool_choice="auto",
)
Vision — изображения на вход
Передайте image_url в контенте сообщения. Поддерживают GPT-4o, Claude, Gemini, Grok.
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Что изображено на этом фото?"},
{
"type": "image_url",
"image_url": {"url": "https://example.com/photo.jpg"},
},
],
}
],
)
Также поддерживаются base64-изображения через "url": "data:image/jpeg;base64,...".
JSON Mode и Structured Output
Два способа получить строго структурированный JSON.
JSON Object mode — модель всегда возвращает валидный JSON:
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Верни список из 3 столиц в JSON"}],
response_format={"type": "json_object"},
)
Structured Output — ответ строго соответствует вашей JSON Schema:
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Извлеки данные о человеке"}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "person",
"strict": True,
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"}
},
"required": ["name", "age"],
"additionalProperties": False
}
}
},
)
GET /v1/models
Возвращает список доступных моделей в формате OpenAI.
curl https://megaapi.ru/v1/models \
-H "Authorization: Bearer sk-nexus-xxxxxxxxxxxxxxxx"
{
"object": "list",
"data": [
{"id": "gpt-4o", "object": "model", "owned_by": "openai"},
{"id": "claude-sonnet-4-6", "object": "model", "owned_by": "anthropic"},
{"id": "gemini-2.5-pro", "object": "model", "owned_by": "google"},
...
]
}
POST /v1/embeddings
Создаёт векторное представление текста.
response = client.embeddings.create(
model="text-embedding-3-large",
input="Hello, world!",
)
print(response.data[0].embedding[:5]) # [0.021, -0.003, ...]
| Параметр | Тип | Описание |
|---|---|---|
model | string | Модель эмбеддингов: text-embedding-3-large, text-embedding-3-small, text-embedding-ada-002 |
input | string / array | Текст или массив текстов для векторизации |
encoding_format | string | "float" (по умолчанию) или "base64" |
dimensions | integer | Размерность вектора (только для text-embedding-3-*) |
POST /v1/audio/transcriptions
Транскрипция аудио через Whisper (распознавание речи).
with open("audio.mp3", "rb") as f:
transcript = client.audio.transcriptions.create(
model="whisper-large-v3",
file=f,
language="ru",
)
print(transcript.text)
POST /v1/images/generations
Генерация изображений по текстовому описанию (text-to-image). Эндпоинт совместим с OpenAI SDK.
response = client.images.generate(
model="nano-banana-pro",
prompt="Котёнок в стиле японской акварели",
size="1024x1024",
quality="high", # для моделей, поддерживающих quality
n=1,
)
print(response.data[0].url)
| Модель | Производитель | Размер | quality |
|---|---|---|---|
nano-banana-pro / -2 / nano-banana | до 4K (pro/2), 1K (gen-1) | через разрешение | |
gpt-image-2 | OpenAI | свободный, до 4K | ✅ low/medium/high |
gpt-image-2-vip | OpenAI | 30 фикс. размеров (1K/2K/4K) | через разрешение |
gpt-image-2-all | OpenAI | описанием в prompt | — |
gpt-image-1.5 / gpt-image-1 / dall-e-3 | OpenAI | OpenAI-парити | ✅ |
seedream-5-0-260128 / 4-5-251128 / 4-0-250828 | ByteDance | 1280×720…4096×4096 | через разрешение |
flux-2-pro / flux-kontext-pro / flux-dev … | Black Forest Labs | size или width/height, кратно 16, ≤4MP | через разрешение |
gemini-3-pro-image-preview / gemini-3.1-flash-image-preview | до 4K | через разрешение | |
grok-2-image | xAI | фиксированный (size не принимается) | — |
POST /v1/images/edits — редактирование по референсу (image-to-image)
Передайте одно или несколько изображений-референсов и опишите, что с ними сделать
(в промпте можно ссылаться на «image 1», «image 2»). Поддерживают
gpt-image-2/-vip/-all,
nano-banana/-2/-pro,
flux-kontext-*/flux-2-*,
seedream-4-5-251128/seedream-5-0-260128.
# multipart/form-data — gpt-image-* и nano-banana-*
curl https://megaapi.ru/v1/images/edits \
-H "Authorization: Bearer sk-nexus-xxxx" \
-F model=gpt-image-2-all \
-F 'prompt=Сделай из этого фото карточку товара на белом фоне' \
-F image=@photo.png
Подробные контракты по каждому семейству (размеры, qualiy, watermark, мультиреференс) — в полном руководстве по изображениям.
Коды ошибок
| HTTP | error.type | Причина |
|---|---|---|
400 |
invalid_request_error |
Невалидный JSON, неизвестная модель, отсутствует обязательный параметр |
401 |
authentication_error |
Отсутствует или неверный API-ключ в заголовке Authorization |
402 |
insufficient_balance |
Недостаточно средств на балансе. Пополните через Telegram-бот |
429 |
rate_limit_error |
Превышен лимит запросов |
500 |
upstream_error |
Ошибка провайдера. Повторите запрос через несколько секунд |
503 |
service_unavailable |
Провайдер временно недоступен |
Все ошибки возвращаются в формате OpenAI:
{
"error": {
"message": "Insufficient balance. Top up via Telegram bot.",
"type": "insufficient_balance",
"code": "balance_too_low"
}
}
tenacity (Python) или p-retry (Node.js) упрощают это.
Быстрый старт с OpenAI SDK
Любая версия OpenAI SDK работает без изменений кода — только base_url и api_key:
# Python
pip install openai
from openai import OpenAI
client = OpenAI(
base_url="https://megaapi.ru/v1",
api_key="sk-nexus-xxxxxxxxxxxxxxxx",
)
// JavaScript / TypeScript
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://megaapi.ru/v1",
apiKey: "sk-nexus-xxxxxxxxxxxxxxxx",
});
Больше примеров — в разделе интеграций.