Справочник API

Основы интеграции

#Базовый URL

Все эндпоинты находятся под /v1 на собственном домене этого развёртывания. Выбирать регион не нужно — маршрутизация к вышестоящим провайдерам происходит за шлюзом.

#Заголовок аутентификации

Для аутентификации достаточно одного заголовка Authorization: Bearer. Ни подписи, ни метки времени, ни пользовательских заголовков — всего, что сверх bearer-токена требуют другие шлюзы, здесь нет.

#Формат ошибки

Отказы на стороне шлюза используют формат OpenAI с type "xiaoxiang_error". Ошибки провайдеров передаются без изменений, эндпоинты асинхронных задач отвечают плоским телом, а в двух случаях тела нет вовсе — прочитайте страницу об ошибках, прежде чем писать парсер.

error.json
HTTP/1.1 402 Payment Required
X-Oneapi-Request-Id: 2026091023...

{
  "error": {
    "message": "insufficient account balance, please top up to continue (request id: 2026091023...)",
    "type": "xiaoxiang_error",
    "code": "insufficient_user_quota"
  }
}

Все пять форматов ошибок и таблица кодов →

#Политика повторов

Повторяйте запросы при 429 и 5xx с экспоненциальной задержкой, учитывая Retry-After, если он есть. Не повторяйте при ошибках валидации 4xx — то же тело снова не пройдёт. Для платных запросов передавайте Idempotency-Key, чтобы повтор после тайм-аута вернул первый результат, а не запустил вторую задачу.

backoff.py
import time, requests

def call_with_backoff(url, headers, body, tries=5):
    for i in range(tries):
        r = requests.post(url, headers=headers, json=body)
        if r.status_code not in (429, 500, 502, 503, 504):
            return r
        # 429 and 413 have no JSON body — never parse before checking status.
        wait = int(r.headers.get("Retry-After", 2 ** i))
        time.sleep(wait)
    r.raise_for_status()

Как работают ключи идемпотентности →

#Машиночитаемая спецификация

Тот же контракт в двух генерируемых форматах: OpenAPI — для генерации клиентов, Postman и других API-инструментов, и один markdown-файл, который можно вставить в агента для программирования. Оба собираются из этих страниц, поэтому не расходятся с тем, что вы читаете.

URL сервера заменён на этот домен, поэтому сгенерированным клиентам не нужна дополнительная настройка.
generate-a-client.sh
# Any OpenAPI generator works; this is the common one.
npx @openapitools/openapi-generator-cli generate \
  -i https://www.aisplice.store/openapi.json \
  -g python \
  -o ./gateway-client

#Обзор эндпоинтов

Каждый путь принимает тело запроса в формате OpenAI — специфичные для провайдеров параметры (anthropic tool_use, gemini thinking_config) передаются без изменений. Нативные маршруты провайдеров и замороженные устаревшие маршруты перечислены отдельно на странице совместимости.

Текст
POST/v1/chat/completionsМногоходовой чат, вызов инструментов, потоковая передача, JSON-режим.
POST/v1/responsesОднократная генерация текста со структурированным выводом и рассуждениями.
POST/v1/messagesНативный формат Anthropic — та же авторизация, адаптер не нужен.
POST/v1/responses/compactСжать длинный диалог на моделях, которые поддерживают сжатие, — без потокового режима.
Векторы
POST/v1/moderationsМодерация контента в том же формате.
Музыка
POST/v1/music/generationsАсинхронная генерация музыки — возвращает task_id; можно подключить вебхук.
GET/v1/music/tasks/:task_idОпрос статуса и прогресса асинхронной задачи генерации музыки.
GET/v1/music/tasks/:task_id/contentПолучить готовое аудио через шлюз.
Изображения
POST/v1/images/tasksАсинхронная генерация изображений — маршрут, которым пользуются модели изображений; возвращает task_id, можно подключить вебхук.
GET/v1/images/tasks/:task_idОпрос статуса и прогресса асинхронной задачи генерации изображения.
GET/v1/images/tasks/:task_id/contentПолучить итоговые URL изображений — постоянные ссылки, их можно сохранять.
Видео
POST/v1/videosГенерация видео в формате OpenAI (Sora, Doubao) — можно подключить вебхук.
GET/v1/videos/:task_idОпрос статуса асинхронной задачи; результат доступен по /content.
GET/v1/videos/:task_id/contentСкачать готовое видео через шлюз.
DELETE/v1/videos/:task_idОтменить задачу, которая ещё не перешла в конечное состояние.
POST/v1/videos/:video_id/remixПерегенерировать существующее видео с новым промптом (на моделях с такой поддержкой).
3D
POST/v1/model3d/tasksАсинхронная генерация и постобработка 3D-моделей — возвращает task_id.
GET/v1/model3d/tasks/:task_idОпрос 3D-задачи; URL результата приходит в теле задачи, маршрута /content нет.
Медиа
POST/v1/media/upload-policyСоздать краткосрочную политику загрузки файла — изображения, видео, аудио или любого другого — в пределах заданного лимита.
Подписки в приложениях
POST/v1/google-play/verifyПроверить токен покупки Google Play для вашего приложения с помощью сервисного аккаунта, привязанного к этому ключу, — бесплатно, без вызова модели.
POST/v1/xsolla/verifyПроверяет, есть ли у пользователя Xsolla активная подписка, с API-ключом Xsolla, заданным на этом ключе, — бесплатно, без вызова модели.
Аккаунт
GET/v1/balanceБаланс аккаунта и сумма, которую этот ключ ещё может потратить, — бесплатно, без вызова модели.
Метаданные
GET/v1/modelsСписок всех моделей, доступных этому ключу.
GET/v1/models/:modelПолучить данные одной модели — в формате, который клиенты Anthropic и OpenAI запрашивают при запуске.

Проблема не решена?

Пришлите нам ID запроса или текст ошибки, и мы разберёмся.