Messages
POST /v1/messages: текстовый запрос в формате Anthropic Messages.
/v1/messagesОтправляет диалог текстовой модели в формате Anthropic Messages. Работает client.messages.create(...) из Anthropic SDK и Claude Code. Любая текстовая модель каталога принимает этот формат, не только модели Anthropic.
Заголовки
| Заголовок | Значение |
|---|---|
x-api-key | Ключ Morphogen. Обязателен. Вместо него принимается Authorization: Bearer <ключ> |
anthropic-version | 2023-06-01. Anthropic SDK добавляет его сам |
Content-Type | application/json |
X-PII-Masking | on или off. Маскирование ПДн |
X-Morphogen-Space | spc_…: пространство расхода. Необязательный |
Тело запроса
modelstringобязательныйИмя модели из GET /v1/models.
max_tokensintegerобязательныйМаксимальная длина ответа. В этом формате поле обязательное.
messagesarrayобязательныйСообщения диалога: объекты с role (user или assistant) и content строкой или блоками (text, image, tool_use, tool_result).
systemstring | arrayСистемная инструкция.
streambooleantrue включает потоковый ответ в формате событий Anthropic.
toolsarrayОписание инструментов. Работает у моделей с поддержкой tool use.
Блок cache_control проходит как есть: у Claude он включает явный кеш промпта. Остальные поля формата передаются модели без изменений.
Пример запроса
curl https://api.morphogen.ru/v1/messages \
-H "x-api-key: $MORPHOGEN_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 200,
"messages": [{"role": "user", "content": "Назови столицу Франции одним словом"}]
}'Адрес base_url указывается без /v1: SDK добавляет путь сам.
Пример ответа
{
"id": "msg_01Qx7LrT",
"type": "message",
"role": "assistant",
"model": "anthropic/claude-sonnet-5",
"content": [{ "type": "text", "text": "Париж" }],
"stop_reason": "end_turn",
"usage": { "input_tokens": 18, "output_tokens": 3 }
}В input_tokens входит весь вход, в том числе токены кеша. Если модель потратила весь max_tokens на размышления, ответ приходит без текста со stop_reason: "max_tokens".
Ошибки
Ошибки приходят в формате Anthropic: {"type": "error", "error": {"type": "...", "message": "..."}}. Поля error.code нет, кроме key_revoked: определяйте ошибку по HTTP-статусу, error.type и тексту error.message. Коды в таблице ниже названы по странице ошибок.
invalid_jsonТело запроса не разобрано.model_category_mismatchМодель не текстовая.invalid_api_keyКлюч не передан, неверный, отозван или истёк.insufficient_fundsНа балансе не хватает денег на резерв запроса.key_limit_exceededИсчерпан дневной или месячный лимит ключа.model_not_allowedМодели нет в списке ключа.model_not_foundТакой модели нет в каталоге.request_too_largeТело запроса больше 32 МиБ.rate_limit_exceededПревышен лимит запросов или токенов в минуту. Повторите через время из Retry-After.Остальные коды: Ошибки.