POST /v1/messages использует один endpoint, одни заголовки и настройку SDK. Режимов ключа нет. Возможности ниже зависят от семейства, модели и фактического применения серверного промпта Claude.
| Возможность | Claude без серверного промпта | Claude с применённым промптом | OpenAI endpoints |
|---|---|---|---|
| Стриминг | Нативный Anthropic SSE, включая thinking и citations deltas | Текст и клиентские функции; без thinking/signature/citations deltas | Chat Completions и Responses поддерживают свои streaming-события с серверным промптом и без него |
| Клиентские функции | Нативный tool_use → tool_result | Тот же клиентский цикл, включая rich tool_result; функцию выполняет клиент | Chat и Responses поддерживают client function calls; server tools не запускаются |
| Thinking / effort | Нативные thinking-блоки и подписи; output_config.effort | thinking и output_config.effort принимаются и управляют глубиной; явный thinking имеет приоритет; отдельные signed thinking-блоки и подписи клиенту не возвращаются | Нативные thinking-блоки не входят в контракт Chat/Responses |
cache_control | Явные breakpoints, 5m/1h и cache tiers | Явные breakpoints, 5m/1h и публичные cache tiers; hit не гарантирован | В Chat/Responses явный cache_control не поддерживается; автоматический кэш остаётся |
| Sampling | top_k, top_p, temperature на Opus 4.6, Sonnet 4.6 и Haiku 4.5. Opus 5, Opus 4.8, Opus 4.7, Sonnet 5, Fable 5 и Fable 5.1 эти поля не принимают вовсе, поэтому Guard убирает их из запроса | Зависят от модели и совместимости thinking; отключение thinking само по себе не гарантирует применение sampling | top_p и temperature зависят от модели и thinking; top_k не поддерживается |
| PDF / documents | Нативные PDF и text/content documents | Base64 PDF и text/content documents в user message и tool_result | Chat/Responses не принимают PDF; используйте Messages |
| Citations | Нативные document citations и citations_delta | Не поддерживаются | Не поддерживаются |
| Vision | Base64 и прямой публичный URL | Base64 в Messages; URL не обещается | Chat принимает base64; Responses input_image не поддерживается |
| Structured outputs | Messages: output_config.format | Messages: output_config.format; при явном thinking сохраняется format, а конфликтующий effort не применяется | Responses structured text.format не поддерживается |
| Web search / Web fetch | Нативные server tools Anthropic | Те же нативные server tools в Anthropic Messages | Не входят в контракт Chat/Responses |
| Модели | Включая Fable 5/5.1, Opus 4.5 и Sonnet 4.5 | Fable 5/5.1, Opus 4.5 и Sonnet 4.5 с применяемым промптом отклоняются до списания | Fable 5/5.1 доступны без фактического применения серверного промпта |
import anthropic
client = anthropic.Anthropic(
api_key=KEY,
base_url="https://api.guardrelay.ai",
)
msg = client.messages.create(
model="claude-opus-5",
max_tokens=512,
system="Ты лаконичный ассистент.",
messages=[{"role": "user", "content": "Объясни рекурсию в двух предложениях."}],
)
print(msg.content[0].text)Kimi здесь работает и отвечает в обычном формате Anthropic. Адрес и ключ те же, что у остальных семейств: https://api.guardrelay.ai и заголовок Authorization: Bearer gd-…. Семейство шлюз определяет по точному id в поле model: k3, k3-256k, kimi-for-coding или kimi-for-coding-highspeed. Отдельный ключ и отдельный адрес для Kimi заводить не нужно.
| Поле | Что с ним происходит |
|---|---|
model | точный id одной из четырёх моделей Kimi |
messages | диалог в форме Anthropic, роли user и assistant |
max_tokens | обязателен, целое положительное; он же задаёт выходную часть предварительной блокировки денег |
system | строка либо массив блоков содержимого |
stream | true включает потоковую передачу |
stop_sequences, temperature, top_p, top_k | принимаются и уходят наверх как присланы |
tools, tool_choice | клиентские функции: модель возвращает вызов, исполняет его ваш код |
thinking | включение размышления в форме Anthropic: ровно {"type": "enabled"}, при желании с budget_tokens; работает на всех четырёх моделях |
output_config | внутри допустимы effort и format |
context_management | принимается и уходит наверх |
Ответ приходит обычным объектом Anthropic: id, массив content, stop_reason и usage. У k3 в content кроме текста приходит блок размышления с подписью. Предварительный подсчёт токенов у Kimi тоже работает: у этой поверхности есть отдельный путь count_tokens, он отвечает числом входных токенов и берёт те же поля, кроме max_tokens, stream и параметров выборки stop_sequences, temperature, top_p, top_k.
Claude Code разговаривает ровно по этому протоколу, поэтому работает и на Kimi. Ставится обычным npm i -g @anthropic-ai/claude-code, адрес и ключ кладутся в переменные окружения, модель задаётся точным id при запуске. Mac / Linux:
export ANTHROPIC_BASE_URL="https://api.guardrelay.ai"
export ANTHROPIC_AUTH_TOKEN="gd-ваш-ключ-из-бота"
claude --model k3$env:ANTHROPIC_BASE_URL = "https://api.guardrelay.ai"
$env:ANTHROPIC_AUTH_TOKEN = "gd-ваш-ключ-из-бота"
claude --model k3Windows PowerShell:
$env:ANTHROPIC_BASE_URL = "https://api.guardrelay.ai"
$env:ANTHROPIC_AUTH_TOKEN = "gd-ваш-ключ-из-бота"
claude --model k3Kimi эту поверхность обслуживает: приходит обычный ответ Anthropic, у k3 вместе с блоком размышления и подписью. Composer и Grok её тоже принимают, но контракт у них короче Anthropic-овского.
| Возможность | Composer | Grok |
|---|---|---|
| Поля запроса | model, messages, system, max_tokens, stream, tools; tool_choice только auto, output_config только с effort (игнорируется) | то же |
Роли в messages | только user и assistant | то же |
| Системный текст | только верхнеуровневый system; роль system внутри messages отклоняется | то же |
| Блок содержимого | type и text; дополнительный cache_control принимается и игнорируется | то же |
| Изображения | нет, 400 cursor_image_input_unavailable | да, инлайн base64 |
| Клиентские функции | да | да |
thinking, temperature, top_k, top_p, metadata, cache_control | Принимаются и игнорируются; cache_control — внутри блока | то же |
| PDF, documents, citations | нет | нет |
| Типизированный инструмент Anthropic — computer use, текстовый редактор, web search | 400 cursor_parameter_unavailable до списания | то же |
| Окно контекста | 200K, оценка | 500K, измерено |
max_tokens | до 32 000; без поля резервируются все 32 000 | то же |
Ответ приходит в обычной форме Anthropic: текстовый блок в content и stop_reason: "end_turn". Если модель вызвала ваш инструмент, в content добавляются блоки tool_use, а stop_reason равен tool_use — это ход, на который нужно ответить блоком tool_result. В usage заполнены input_tokens, output_tokens и cache_read_input_tokens, а cache_creation_input_tokens всегда 0: платы за запись в кэш у этих моделей нет.
curl https://api.guardrelay.ai/v1/messages \
-H "x-api-key: $GUARD_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "cursor-grok-4.6-high",
"max_tokens": 256,
"system": "Отвечай кратко.",
"messages": [{"role": "user", "content": "Проверка связи"}]
}'Инструменты описываются как у Anthropic: имя, описание и input_schema. Модель возвращает блок tool_use и stop_reason: "tool_use", функцию выполняет ваш клиент, результат уходит обратно блоком tool_result в новом сообщении с ролью user.
{
"model": "cursor-grok-4.6-high",
"max_tokens": 1024,
"messages": [{"role": "user", "content": [{"type": "text", "text": "Какая погода в Москве?"}]}],
"tools": [{
"name": "get_weather",
"description": "Текущая погода в городе",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}]
}{
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": "toolu_01...",
"content": "+7, ясно"
}]
}