Справочник API/Эндпоинты и примеры/Messages

Messages

Эндпоинт, совместимый с Anthropic Messages; его используют Claude Code и Anthropic SDK. Запрос обязан содержать max_tokens, system — поле верхнего уровня, поддерживаются thinking и кэширование промптов через cache_control.

POSThttps://api.wokey.ai/v1/messages· Совместим с Anthropic Messages
На этой страницеexpand_more

Примерlink

Для Anthropic SDK и Claude Code укажите base URL https://api.wokey.ai без /v1: клиент сам добавляет /v1/messages.

curl https://api.wokey.ai/v1/messages \
  -H "x-api-key: YOUR_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5-5",
    "max_tokens": 1024,
    "system": "You are a helpful assistant.",
    "messages": [
      { "role": "user", "content": "Hello" }
    ]
  }'

Заголовкиlink

ЗаголовокЗначениеОписание
x-api-keyОбязательноYOUR_API_KEYВаш API-ключ Wokey. Подходит и Authorization: Bearer YOUR_API_KEY — так по умолчанию делают новые Anthropic SDK.
anthropic-version2023-06-01Необязательно. Шлюз всегда обращается к апстриму с версией 2023-06-01.
anthropic-betastringНеобязательно. Объединяется и пересылается в Claude. Моделям с контекстом 1M beta context-1m не нужна.
Content-TypeОбязательноapplication/jsonТело запроса — JSON.
X-End-User-IdstringНеобязательно. ID вашего конечного пользователя, 1–128 видимых символов ASCII. С ним ограничения за повторные нарушения действуют только на этого пользователя.

Параметры запросаlink

Ниже — параметры, которые шлюз читает или которые меняют его поведение. Остальные параметры Anthropic пересылаются в Claude как есть.

ПараметрТипОписание
modelОбязательноstringID модели, в точности совпадающий с ID из списка моделей.
max_tokensОбязательноintegerЛимит выходных токенов, положительное целое. Без него шлюз возвращает 400 и ничего не отправляет апстриму.
messagesОбязательноarrayСообщения диалога. Каждому tool_use нужен соответствующий tool_result в следующем сообщении, иначе шлюз вернёт 400.
systemstring | arrayСистемный промпт — на верхнем уровне, а не внутри messages.
thinkingobjectРасширенные рассуждения. Некоторые новые модели принимают только режим adaptive, и шлюз корректирует несовместимые значения по правилам модели. Уровень рассуждений задаётся в output_config.effort.
cache_controlobjectТочки кэширования промптов на блоках контента, пересылаются в Claude как есть. Ставьте одну в конце system и одну на последнем сообщении.
streambooleanПри true ответ приходит потоком событий SSE.
toolsarrayОписания инструментов; поддерживается и tool_choice.
temperaturenumberПринимают только Claude Opus 4.6, Sonnet 4.6, Sonnet 4.5 и Haiku 4.5, значение ограничивается диапазоном 0–1; новым моделям не пересылается. top_p и top_k в Claude не пересылаются.
metadataobjectНе пересылается апстриму.
providerobjectРасширение Wokey для выбора или исключения поставщиков. Используется только для маршрутизации и не пересылается апстриму.

Как Wokey обрабатывает запросlink

Что шлюз делает до и после пересылки и чем это отличается от прямого вызова официального API.

  • Модели Claude пересылаются в формате Messages без преобразования. Шлюз корректирует несколько параметров по правилам модели (см. таблицу) и при необходимости добавляет точки кэширования промптов.
  • Модели с собственным API Messages — DeepSeek, Kimi, Grok и другие — тоже пересылаются как есть. GPT и другим моделям нужно преобразование; тогда thinking и output_config не действуют, а блоки thinking в истории пропускаются.
  • Блоки document (PDF) работают только у моделей Claude.
  • Тело запроса к Claude ограничено 32 МиБ; при превышении возвращается 413 request_body_too_large.
  • POST /v1/messages/count_tokens считает входные токены.

Если у модели несколько поставщиков, добавьте в тело запроса объект provider, чтобы выбрать или исключить поставщиков. Выбор поставщиков и их порядка →

Ответlink

JSON
{
  "id": "msg_...",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-5-5",
  "content": [{ "type": "text", "text": "Hello! How can I help you today?" }],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 21,
    "cache_creation_input_tokens": 0,
    "cache_read_input_tokens": 0,
    "output_tokens": 10
  }
}
  • Заголовок ответа x-wokey-request-id — ID запроса в Wokey, request-id — ID от Anthropic. Сообщая о проблеме, указывайте x-wokey-request-id.
  • Claude: input_tokens не включает кэш; запись и чтение кэша — в cache_creation_input_tokens и cache_read_input_tokens.
  • GPT и другие преобразуемые модели: input_tokens включает кэшированные токены, а cache_read_input_tokens повторяет их число — это отличается от правил Anthropic.

Потоковая передачаlink

Порядок событий такой же, как у Anthropic: message_start, content_block_*, message_delta, message_stop.

SSE
event: message_start
data: {"type":"message_start","message":{"id":"msg_...","type":"message","role":"assistant","content":[],"usage":{"input_tokens":21,"output_tokens":1}}}

event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello!"}}

event: content_block_stop
data: {"type":"content_block_stop","index":0}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":10}}

event: message_stop
data: {"type":"message_stop"}
  • Для Claude поток событий апстрима передаётся без изменений.
  • Для других моделей шлюз формирует события в том же порядке: usage в message_start равен 0, ориентируйтесь на output_tokens в message_delta; блоки вызовов инструментов идут последними.
  • Ошибка во время потока приходит событием event: error.
  • Пока апстрим не прислал первый байт, шлюз периодически отправляет строки-комментарии SSE, которые клиенты игнорируют.

Формат ошибокlink

JSON
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "max_tokens is required for Anthropic Messages requests. Add max_tokens or use /chat/completions for OpenAI-compatible requests."
  }
}

Ошибки в формате Anthropic; error.type зависит от статуса, например 400 invalid_request_error, 401 authentication_error, 402 billing_error, 429 rate_limit_error, 529 overloaded_error. Что означает каждый статус и что делать, см. Коды ошибок и устранение неполадок →