Chat Completions
POST /v1/chat/completions: текстовый запрос в формате OpenAI Chat.
/v1/chat/completionsОтправляет диалог текстовой модели и возвращает ответ. Формат совместим с OpenAI Chat Completions: работает client.chat.completions.create(...) из OpenAI SDK. Тело запроса уходит провайдеру как есть, поэтому поля OpenAI, которые поддерживает модель, действуют без изменений.
Заголовки
| Заголовок | Значение |
|---|---|
Authorization | Bearer <ключ>. Обязателен. Вместо него принимается x-api-key: <ключ> |
Content-Type | application/json |
X-PII-Masking | on или off: маскировать ли персональные данные в этом запросе. Маскирование ПДн |
X-Morphogen-Space | spc_…: пространство, на которое относится расход. Необязательный |
Тело запроса
modelstringобязательныйИмя модели из GET /v1/models. Подходят текстовые модели и модели картинок (с modalities). Модель эмбеддингов, речи или видео даёт 400 model_category_mismatch.
messagesarrayобязательныйСообщения диалога: объекты с role (system, user, assistant, tool) и content. Картинки на входе передаются блоками image_url.
max_tokensintegerМаксимальная длина ответа. Передавайте всегда: без него резервируется сумма по максимальной длине ответа модели.
streambooleantrue включает потоковый ответ в формате server-sent events.
temperaturenumberСлучайность ответа. Часть моделей параметр игнорирует без ошибки.
toolsarrayОписание функций для вызова инструментов. Работает у моделей с поддержкой tool use.
modalitiesarray["image"] или ["image", "text"] для моделей генерации картинок. Картинка приходит в choices[0].message.images. Подробнее: Картинки и видео.
Остальные поля OpenAI Chat (top_p, stop, response_format и другие) передаются модели как есть.
Пример запроса
curl https://api.morphogen.ru/v1/chat/completions \
-H "Authorization: Bearer $MORPHOGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 200,
"messages": [{"role": "user", "content": "Назови столицу Франции одним словом"}]
}'Пример ответа
{
"id": "gen-1760104212-Kd3vQ8mZ",
"object": "chat.completion",
"model": "anthropic/claude-sonnet-5",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "Париж" },
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 18, "completion_tokens": 3, "total_tokens": 21 }
}Ответ приходит в формате OpenAI. С stream: true сервер отдаёт события data: {...} и завершает поток строкой data: [DONE]. В ответе есть заголовки X-Request-Id и X-PII-Masking (applied или off).
Ошибки
invalid_jsonТело запроса не разобрано.model_category_mismatchМодель эмбеддингов, речи или видео. Для них есть свои эндпоинты.invalid_pii_masking_headerВ X-PII-Masking не on, off, true, false, 1 или 0.pii_masking_unsupported_endpointX-PII-Masking: on с моделью картинок.invalid_api_keyКлюч не передан, неверный, отозван или истёк.insufficient_fundsНа балансе не хватает денег на резерв запроса.key_limit_exceededИсчерпан дневной или месячный лимит ключа.model_not_allowedМодели нет в списке ключа.pii_masking_not_enabledX-PII-Masking: on, а опция маскирования не подключена.model_not_foundТакой модели нет в каталоге.request_too_largeТело запроса больше 32 МиБ.rate_limit_exceededПревышен лимит запросов или токенов в минуту. Повторите через время из Retry-After.Полный список кодов: Ошибки.