Документация API

API совместим с OpenAI. Меняете base URL и ключ — SDK, параметры и стриминг работают как раньше.

Начало

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

Получите ключ в кабинете, подставьте base URL и отправьте первый запрос.

Описание API для генераторов клиентов и агентов — openapi.json (OpenAPI 3.1).

curl https://api.openaiapi.ru/v1/chat/completions \  -H "Authorization: Bearer $OPENAIAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "model": "openai/gpt-5.6-sol",    "messages": [{"role": "user", "content": "Привет"}]  }'
Начало

Аутентификация

Передавайте ключ в заголовке Authorization. Ключ показывается один раз при создании — храните его в переменной окружения, а не в коде.

Authorizationобязательно
Bearer sk-… — sk- и 64 шестнадцатеричных символа
Заголовок
Authorization: Bearer sk-…
Начало

Модели

GET/v1/models

Список моделей и цен всегда актуален. У модели несколько провайдеров и одна цена: списываем по ней, кто бы ни ответил. Имя модели передаётся в поле model в формате разработчик/модель или без разработчика: gpt-5.6-sol.

id
Имя для поля model, например openai/gpt-5.6-sol
kind
chat — для Chat Completions и Responses, embedding — для Embeddings
context_length
Контекст в токенах
pricing
Рубли за 1 млн токенов: input, cached, output

Тот же каталог без ключа: https://openaiapi.ru/api/catalog.

curl
curl https://api.openaiapi.ru/v1/models \  -H "Authorization: Bearer $OPENAIAPI_KEY"
API

Chat Completions

POST/v1/chat/completions

Основной метод. Формат запроса и ответа — как в OpenAI. Принимаем только поля из списка, другое поле — ошибка 400 с его именем в param. Поле со значением null пропускаем.

modelобязательно
Модель с kind chat, например openai/gpt-5.6-sol
messagesобязательно
Непустой массив сообщений. content — строка или части типа text
max_completion_tokensmax_tokens
Лимит ответа, от 1 до максимума модели. Только одно из двух. Без лимита модель отвечает полностью
streamstream_options
true — ответ приходит частями, см. «Стриминг»
toolstool_choice
Function calling, см. раздел ниже
response_format
text, json_object или json_schema
n
Только 1
service_tier
Только auto или default
temperatureи другие
Передаём модели как есть: temperature, top_p, stop, seed, frequency_penalty, presence_penalty, logit_bias, logprobs, top_logprobs, reasoning_effort, verbosity, prediction, parallel_tool_calls, functions, function_call, metadata, user, safety_identifier

Не поддерживаем, ответ 400: картинки, аудио и файлы в content, audio, modalities кроме ["text"], web_search_options. store игнорируем: ничего не храним. prompt_cache_key заменяем своим ключом разговора в пределах аккаунта, чтобы ходы одного диалога попадали в кеш.

curl https://api.openaiapi.ru/v1/chat/completions \  -H "Authorization: Bearer $OPENAIAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "model": "openai/gpt-5.6-sol",    "messages": [{"role": "user", "content": "Привет"}]  }'
API

Responses

POST/v1/responses

Responses API без состояния на сервере: историю присылайте целиком в каждом запросе. Так работает Codex.

modelобязательно
Модель с kind chat
inputобязательно
Строка или массив элементов: message, function_call, function_call_output, custom_tool_call, custom_tool_call_output, reasoning. Контент — только текст
instructions
Системная инструкция
max_output_tokens
Лимит ответа, от 1 до максимума модели. Без него модель отвечает полностью
stream
true — события SSE
toolstool_choice
Инструменты типа function и custom
include
["reasoning.encrypted_content"] — рассуждения между ходами без хранения на сервере
reasoningи другие
Передаём модели как есть: reasoning, text, temperature, top_p, top_logprobs, truncation, max_tool_calls, parallel_tool_calls, stream_options, service_tier (auto или default), metadata, user, safety_identifier

Не поддерживаем, ответ 400: previous_response_id, conversation, background: true, элементы item_reference, встроенные инструменты, картинки, файлы и аудио во входе. store всегда отправляем как false.

curl https://api.openaiapi.ru/v1/responses \  -H "Authorization: Bearer $OPENAIAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "model": "openai/gpt-5.6-sol",    "input": "Привет"  }'
API

Embeddings

POST/v1/embeddings

Векторы для поиска и RAG. Без стриминга, платите только за вход.

modelобязательно
Модель с kind embedding
inputобязательно
Строка, непустой массив строк или массивы токенов
encoding_format
float или base64
dimensions
Размерность вектора, если модель её меняет
user
Идентификатор пользователя
curl
curl https://api.openaiapi.ru/v1/embeddings \  -H "Authorization: Bearer $OPENAIAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "model": "openai/text-embedding-3-small",    "input": ["первый текст", "второй текст"]  }'
API

Стриминг

Добавьте stream: true — ответ придёт частями по мере генерации, в формате Server-Sent Events. Стоимость та же.

chat/completions
События data: с объектами chat.completion.chunk. Поток кончается строкой data: [DONE]
include_usage
stream_options.include_usage: true — перед [DONE] придёт чанк с usage и пустым choices. Без него такого чанка нет
responses
События от response.created до response.completed, usage — в response.completed
stream_interrupted
Модель оборвала поток: придёт ошибка с этим code, поток закроется. Статус уже 200, поэтому ошибка внутри потока. Списываем только то, что дошло
curl https://api.openaiapi.ru/v1/chat/completions \  -H "Authorization: Bearer $OPENAIAPI_KEY" \  -H "Content-Type: application/json" \  -d '{    "model": "openai/gpt-5.6-sol",    "stream": true,    "messages": [{"role": "user", "content": "Привет"}]  }'
API

Function calling

Как в OpenAI: опишите функции в tools, модель вернёт tool_calls. Выполните функцию у себя и отправьте результат сообщением с role tool. Инструменты работают на вашей стороне и стоят только токенов.

tools
Типы function и custom (свободный текст, как apply_patch в Codex)
tool_choice
none, auto, required, конкретная функция или allowed_tools из таких функций
functions
Старый формат Chat Completions тоже работает

Встроенные инструменты — web_search, file_search, code_interpreter, MCP — не поддерживаем: ответ 400 с param tools.

JSON
{  "model": "openai/gpt-5.6-sol",  "messages": [{"role": "user", "content": "Погода в Москве?"}],  "tools": [{    "type": "function",    "function": {      "name": "get_weather",      "parameters": {        "type": "object",        "properties": {"city": {"type": "string"}},        "required": ["city"]      }    }  }]}
API

Ошибки

Ошибки приходят в формате OpenAI: HTTP-код и объект error с полями message, type, code и param. В ответах генерации есть заголовок x-request-id — назовите его поддержке. Ошибка до начала ответа не списывается.

400invalid_request
Не JSON, лишнее поле или неподдерживаемое значение — param назовёт поле. Исправьте запрос
400context_length_exceeded
Вход не влезает в контекст модели. Сократите вход или лимит ответа
400content_policy_violation
Провайдер отказал по контент-политике
401invalid_api_key
Ключа нет, он неверный или отозван
404model_not_found
Такой модели нет или она другого kind. Сверьте имя со списком моделей
404not_found
Неизвестный путь или не тот HTTP-метод
413request_too_large
Тело запроса больше 8 МиБ
429rate_limit_exceeded
Больше 600 запросов в минуту или 64 одновременных на ключ, либо провайдер ограничивает частоту. Повторите позже
429insufficient_quota
Баланс исчерпан или ключ достиг лимита расхода. Пополните баланс или поднимите лимит в кабинете, повтор не поможет
502upstream_unavailable
Провайдеры модели не ответили. Повторите запрос
502upstream_error
Сбой у провайдера. Повторите запрос
503service_unavailable
Перегрузка, пауза или модель сейчас недоступна. Повторите позже
504upstream_timeout
Модель не начала отвечать за 300 секунд. Повторите запрос

Ошибки провайдера context_length_exceeded, content_policy_violation и invalid_request сохраняют его код: 400, 404, 409, 413 или 422. Если есть заголовок Retry-After, ждите столько секунд.

JSON
{  "error": {    "code": "insufficient_quota",    "type": "insufficient_quota",    "message": "Insufficient balance for this request. Top up in the cabinet or lower the output limit.",    "param": null  }}
API

Лимиты

Лимиты по умолчанию, на каждый ключ. Каждый сервер шлюза считает их сам: это защита от зациклившегося скрипта, а не тариф. Реальный потолок может быть выше.

600запросов в минуту
Сверх лимита — 429 rate_limit_exceeded
64одновременных запроса
Поток держит слот до конца
Лимит расхода
Задаётся для ключа в кабинете. Исчерпан — 429 insufficient_quota
Резерв
Перед запросом резервируем стоимость входа и лимита ответа. Не хватает баланса — уменьшите лимит ответа
8 МиБ
Размер тела запроса
300 с
До первого байта ответа и между частями потока
30 мин
Весь запрос вместе с потоком

Если провайдер не ответил до первого байта, запрос уходит к следующему провайдеру модели. Цена та же.

Инструменты

Cursor

Settings → Models → OpenAI API Key. Включите Override OpenAI Base URL и вставьте адрес. Затем добавьте модель по имени.

Cursor
OpenAI API Key          sk-…Override Base URL      https://api.openaiapi.ru/v1 Add model               openai/gpt-5.6-sol
Инструменты

Codex

Добавьте провайдера в конфиг и ключ в переменную окружения OPENAIAPI_KEY.

config.toml
# ~/.codex/config.tomlmodel = "gpt-5.6-sol"model_provider = "openaiapi" [model_providers.openaiapi]name = "openaiapi"base_url = "https://api.openaiapi.ru/v1"env_key = "OPENAIAPI_KEY"