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 не подтверждает, что операция не выполнилась. Повтор может создать отдельный расход. См. правила повторов.
Обновлено