MorphogenДокументация
API

Chat Completions

POST /v1/chat/completions: текстовый запрос в формате OpenAI Chat.

POST/v1/chat/completions

Отправляет диалог текстовой модели и возвращает ответ. Формат совместим с OpenAI Chat Completions: работает client.chat.completions.create(...) из OpenAI SDK. Тело запроса уходит провайдеру как есть, поэтому поля OpenAI, которые поддерживает модель, действуют без изменений.

Заголовки

ЗаголовокЗначение
AuthorizationBearer <ключ>. Обязателен. Вместо него принимается x-api-key: <ключ>
Content-Typeapplication/json
X-PII-Maskingon или off: маскировать ли персональные данные в этом запросе. Маскирование ПДн
X-Morphogen-Spacespc_…: пространство, на которое относится расход. Необязательный

Тело запроса

modelstringобязательный

Имя модели из GET /v1/models. Подходят текстовые модели и модели картинок (с modalities). Модель эмбеддингов, речи или видео даёт 400 model_category_mismatch.

messagesarrayобязательный

Сообщения диалога: объекты с role (system, user, assistant, tool) и content. Картинки на входе передаются блоками image_url.

max_tokensinteger

Максимальная длина ответа. Передавайте всегда: без него резервируется сумма по максимальной длине ответа модели.

streamboolean

true включает потоковый ответ в формате 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).

Ошибки

400invalid_jsonТело запроса не разобрано.
400model_category_mismatchМодель эмбеддингов, речи или видео. Для них есть свои эндпоинты.
400invalid_pii_masking_headerВ X-PII-Masking не on, off, true, false, 1 или 0.
400pii_masking_unsupported_endpointX-PII-Masking: on с моделью картинок.
401invalid_api_keyКлюч не передан, неверный, отозван или истёк.
402insufficient_fundsНа балансе не хватает денег на резерв запроса.
402key_limit_exceededИсчерпан дневной или месячный лимит ключа.
403model_not_allowedМодели нет в списке ключа.
403pii_masking_not_enabledX-PII-Masking: on, а опция маскирования не подключена.
404model_not_foundТакой модели нет в каталоге.
413request_too_largeТело запроса больше 32 МиБ.
429rate_limit_exceededПревышен лимит запросов или токенов в минуту. Повторите через время из Retry-After.
503service_unavailableСлужба временно недоступна. Повторите запрос.

Полный список кодов: Ошибки.

На этой странице