API Reference

MegaAPI.ru предоставляет полностью OpenAI-совместимый REST API. Base URL: https://megaapi.ru/v1

Авторизация. Передайте API-ключ в заголовке: 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, ...]
ПараметрТипОписание
modelstringМодель эмбеддингов: text-embedding-3-large, text-embedding-3-small, text-embedding-ada-002
inputstring / arrayТекст или массив текстов для векторизации
encoding_formatstring"float" (по умолчанию) или "base64"
dimensionsintegerРазмерность вектора (только для 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-bananaGoogleдо 4K (pro/2), 1K (gen-1)через разрешение
gpt-image-2OpenAIсвободный, до 4K✅ low/medium/high
gpt-image-2-vipOpenAI30 фикс. размеров (1K/2K/4K)через разрешение
gpt-image-2-allOpenAIописанием в prompt
gpt-image-1.5 / gpt-image-1 / dall-e-3OpenAIOpenAI-парити
seedream-5-0-260128 / 4-5-251128 / 4-0-250828ByteDance1280×720…4096×4096через разрешение
flux-2-pro / flux-kontext-pro / flux-devBlack Forest Labssize или width/height, кратно 16, ≤4MPчерез разрешение
gemini-3-pro-image-preview / gemini-3.1-flash-image-previewGoogleдо 4Kчерез разрешение
grok-2-imagexAIфиксированный (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, мультиреференс) — в полном руководстве по изображениям.

Коды ошибок

HTTPerror.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"
  }
}
Совет по retry. Рекомендуем реализовать exponential backoff для ошибок 429 и 5xx. Библиотека 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",
});

Больше примеров — в разделе интеграций.