Чат и стриминг
POST /v1/chat/completions — основной эндпоинт. Формат запроса и ответа повторяет OpenAI, поэтому работает любой совместимый SDK.
Параметры
Заголовок раздела «Параметры»| Поле | Тип | Описание |
|---|---|---|
model |
string, обязательное | Идентификатор из GET /models или псевдоним (gpt-4o, claude-opus) |
messages |
array, обязательное | История диалога; последнее сообщение пользователя — это промпт |
stream |
boolean | true — ответ приходит по SSE |
stream_options |
object | {"include_usage": true} добавит финальный чанк с расходом токенов |
temperature |
number | Как у OpenAI |
max_tokens |
integer | Потолок длины ответа |
max_completion_tokens |
integer | Синоним max_tokens для новых SDK |
reasoning_effort |
string | Глубина рассуждения у моделей, которые это умеют |
Стриминг
Заголовок раздела «Стриминг»stream = client.chat.completions.create( model="gpt-5.6-luna", messages=[{"role": "user", "content": "Напиши хайку про дедлайн"}], stream=True, stream_options={"include_usage": True},)for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True)Поток идёт как text/event-stream и завершается строкой data: [DONE]. С include_usage перед ней придёт чанк с usage — по нему удобно логировать расход.
Изображения на вход
Заголовок раздела «Изображения на вход»Модели с capabilities.vision: true принимают картинку в составе сообщения:
resp = client.chat.completions.create( model="gpt-5.6-terra", messages=[{ "role": "user", "content": [ {"type": "text", "text": "Что не так на этом графике?"}, {"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0KG..."}}, ], }],)Принимаются data:-URL и обычные HTTPS-ссылки на изображение.
Файлы на вход
Заголовок раздела «Файлы на вход»Модели с capabilities.file: true читают PDF целиком — включая сканы и таблицы, без внешнего OCR:
{ "role": "user", "content": [ {"type": "text", "text": "Сделай выжимку по разделу «Риски»"}, {"type": "file", "file": {"filename": "report.pdf", "file_data": "data:application/pdf;base64,JVBERi0..."}} ]}Если модель не умеет читать файлы, запрос вернёт 400 — проверяйте флаг в каталоге заранее.
Режимы рассуждения
Заголовок раздела «Режимы рассуждения»У части моделей есть управляемая глубина рассуждения. Допустимые значения приходят в capabilities.reasoning_efforts — обычно это low, medium, high, xhigh, max.
{"model": "claude-opus-4.8", "reasoning_effort": "high", "messages": [...]}Два подводных камня:
- Рассуждение съедает бюджет
max_tokens. Если ждёте длинный JSON от модели с включённым рассуждением, ставьте потолок с запасом — иначе ответ обрежется на середине. - Отключить рассуждение можно не везде: смотрите
capabilities.can_disable_reasoning. Если тамfalse, модель думает всегда, и это отражено в цене.
Веб-поиск
Заголовок раздела «Веб-поиск»Модели с type: search (семейство Perplexity Sonar) ходят в интернет сами — отдельного эндпоинта или инструмента не нужно, просто укажите такую модель:
curl https://api.mixen.ai/v1/chat/completions \ -H "Authorization: Bearer $MIXEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"sonar-pro","messages":[{"role":"user","content":"Что нового вышло у Anthropic за неделю?"}]}'Для ключа с ограниченными областями доступа такие модели требуют область search, а не chat.