Интерфейс
API
Один формат API, совместимый с OpenAI, обслуживаемый под /v1 плоскостью управления и опирающийся на Sovereign AI. Формат совместим, чтобы ваши клиентские библиотеки работали без изменений; модели, машины и оператор принадлежат Media Holding. Сервисы OpenAI не задействованы.
Эндпоинты
Шлюз инференса за этими эндпоинтами существует и измерен (см. Sovereign AI). Публичный слой с аутентификацией по ключу — это плоскость управления: создан и протестирован в изоляции, помечен как СОЗДАНО, ещё не опубликован.
POST /v1/chat/completions
ИзмереноChat completions в формате, совместимом с OpenAI; stream: true для Server-Sent Events, stream_options.include_usage для учёта в последнем фрагменте; tools и response_format передаются насквозь. На шлюзе инференса: измерено 12.10.2026.
POST /v1/completions
ПостроеноУстаревшая генерация текста для клиентов, которые всё ещё используют формат completions.
GET /v1/models
ПостроеноМодели, доступные вашему проекту, с псевдонимом по умолчанию.
GET /v1/models/{id}
ПостроеноОдна модель по идентификатору или псевдониму.
GET /v1/usage
ПостроеноВаше собственное использование за период — запросы и число токенов по моделям. Только метаданные; никогда — содержимое.
GET /health
ПостроеноЖивость плоскости управления и состояние бэкенда инференса; без аутентификации; никогда не раскрывает пути или внутренние версии.
Метки статуса — ИЗМЕРЕНО — существует и измерено в указанную дату указанным методом. ПОСТРОЕНО — существует и работает, под нагрузкой ещё не измерено. ЗАПЛАНИРОВАНО — спроектировано, ещё не построено. Строка без метки не является утверждением этой платформы.
Формат API, совместимый с OpenAI. Сервисы OpenAI не задействованы.
Контракт
Аутентификация
ПостроеноAuthorization: Bearer sk-sov-<prefix>-<secret>. Секрет показывается один раз и хранится только как ключевой односторонний хеш (HMAC-SHA-256); префикс идентифицирует ключ в кабинете и никогда — секрет.
Идентификаторы запросов
ПостроеноКаждый ответ несёт X-Request-Id; каждое тело ошибки несёт тот же идентификатор в error.request_id. Указывайте его в обращениях в поддержку. Шлюз инференса уже записывает идентификатор запроса в строку аудита.
Потоковая передача
ИзмереноServer-Sent Events; поток завершается data: [DONE]; при include_usage последний фрагмент несёт число токенов. Измерено на шлюзе инференса.
Учёт использования
Построеноprompt_tokens, completion_tokens и total_tokens подсчитываются бэкендом и записываются в реестр учёта до завершения ответа, поэтому счёт никогда не учитывает то, чего вы не получили.
Лимиты частоты и бюджеты
Построено429 с Retry-After, когда достигнут лимит частоты или бюджет проекта. Заголовки лимитов (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset) запланированы; их окончательные имена публикуются в сгенерированной спецификации.
Версионирование
ПостроеноБазовый путь /v1. Изменение, несовместимое с предыдущими версиями, объявляется не менее чем за 30 дней (Условия обслуживания, §5).
Что не предлагается
ПостроеноЭмбеддинги, изображения, аудио, дообучение, ассистенты, треды и пакетные эндпоинты не предлагаются; неизвестный маршрут отвечает 404 с машиночитаемым кодом.
Ошибки
Каждая ошибка — одна форма JSON с HTTP-статусом, называющим её класс. Сообщение никогда не содержит URL, токенов, путей или текста исключений upstream.
| HTTP | error.type | Когда | Retry-After |
|---|---|---|---|
400 | invalid_request_error | Тело запроса или параметры недопустимы. | нет |
401 | authentication_error | Отсутствующий, неверно сформированный, отозванный или неизвестный API-ключ. | нет |
403 | permission_error | Ключ действителен, но не может использовать эту модель, проект или маршрут. | нет |
404 | invalid_request_error | Неизвестная модель или маршрут; code называет их. | нет |
429 | rate_limit_error · budget_exceeded | Достигнут лимит частоты или бюджет проекта; подождите указанное число секунд. | да |
500 | server_error | Непредвиденный сбой с нашей стороны; укажите идентификатор запроса. | нет |
503 | backend_busy · upstream_unavailable | GPU занят другой задачей или поставщик инференса недоступен. Запасного варианта с внешним поставщиком не существует. | да |
{
"error": {
"type": "rate_limit_error",
"code": "requests_per_minute",
"message": "Too many requests for this project. Retry after the number of seconds in Retry-After.",
"request_id": "5b8e2b2e-4a2f-4b7c-9d2e-1f3a4b5c6d7e"
}
}