Chat Completions

Отправляйте JSON запросом POST https://api.apikley.ru/v1/chat/completions. Нужен API-ключ.

ПолеКак использовать
modelОбязательная непустая строка: externalId из каталога. Поиск точный после удаления пробелов по краям.
messagesВ текстовом примере: массив объектов с role и content. Шлюз не проверяет его по полной схеме OpenAI.
streamДля потокового режима передавайте JSON boolean true, не строку. Возможность зависит от маршрута модели.
max_tokensПараметр ограничения ответа, если его поддерживает выбранная модель. Универсального значения по умолчанию на чат-маршруте нет.
Другие параметрыСверяйте со страницей модели. Параметры могут нормализоваться, отбрасываться или отклоняться.

Текстовый запрос

curl https://api.apikley.ru/v1/chat/completions \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "deepseek/deepseek-v4-flash",
    "messages": [{"role": "user", "content": "Объясните, что такое API, в двух предложениях."}],
    "stream": false
  }'

Для примера выбран DeepSeek: DeepSeek V4 Flash. Найти другие идентификаторы можно через каталог API. UUID из поля id не заменяет externalId.

Сообщения и параметры

Для диалога передайте нужные сообщения в messages. Наличие поля в принятом JSON не доказывает, что модель поддерживает его содержимое. Проверяйте параметры на странице выбранной модели.

При неизвестном ID возможен 404 provider_not_resolved. Скрытая модель возвращает 404 model_not_published, а опубликованная, но устаревшая: 400 model_deprecated.

Ответ

Шлюз передаёт статус, тело и тип содержимого ответа inference. Единого контракта ответа для всех моделей нет. Если ответ соответствует Chat Completions, текст можно читать из choices[0].message.content; для другого ответа нужна отдельная обработка.

Не считайте отсутствие choices пустой успешной генерацией. Сохраните статус и тело для разбора, исключив секреты из журналов. Примеры клиентов: OpenAI SDK.

Streaming

Для части моделей чат-запрос с streaming отклоняется: 400 provider_streaming_not_supported. Наличие stream в JSON не означает поддержку режима каждой моделью.

Частые вопросы

Достаточно ли передать только model?

Непустой model обязателен на уровне шлюза. Для содержательного запроса передайте сообщения и остальные поля, нужные модели. Успешная проверка шлюза не гарантирует принятия запроса провайдером.

Параметры передаются без изменений?

Не всегда. Маршрутизация может менять тело, добавлять значения и проверять фиксированные параметры.

Можно ли повторить запрос после 504?

504 не подтверждает, что операция не выполнилась. Повтор может создать отдельный расход. См. правила повторов.

Обновлено