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

Anthropic Messages API

Эндпоинт /v1/messages реализует формат Anthropic Messages API. Позволяет отправлять запросы к Claude и другим моделям, поддерживающим этот формат, используя те же структуры данных, что и в оригинальном Anthropic API.

Базовый URL: https://api.ru-openrouter.ru/v1/messages


Аутентификация

Authorization: Bearer sk_ваш_api_ключ

Все запросы требуют API-ключ. Получить ключ можно в личном кабинете.


Создание сообщения

POST /v1/messages

Создаёт сообщение в формате Anthropic Messages API. Поддерживает текст, изображения, PDF, инструменты (tools) и extended thinking.

Тело запроса

Поле Тип Обязательное Описание
modelstringДаID модели (например, anthropic/claude-sonnet-4)
messagesarrayДаМассив сообщений в Anthropic-формате
max_tokensintegerДаМаксимальное количество токенов в ответе
streambooleanНетПо умолчанию false. Включить streaming (SSE)
systemstring или arrayНетСистемный промпт (строка или массив content-блоков с text)
temperaturefloatНет0.0–1.0, по умолчанию 1.0
top_pfloatНет0.0–1.0, по умолчанию 1.0
top_kintegerНетTop-K sampling
stop_sequencesarrayНетМассив стоп-последовательностей
toolsarrayНетОписание инструментов (function calling)
tool_choiceobjectНетВыбор инструмента: auto, any, tool
thinkingobjectНетExtended thinking (бюджет токенов для размышлений)
metadataobjectНетМетаданные, включая user_id для идентификации пользователя
userstringНетИдентификатор пользователя (до 256 символов)
session_idstringНетУникальный идентификатор для группировки запросов. Используется для sticky routing — все запросы с одинаковым session_id направляются одному провайдеру для максимизации попадания в промпт-кэш. Максимум 256 символов
cache_controlobjectНетАвтоматическое управление промпт-кэшированием
providerobjectНетНастройки маршрутизации провайдера
fallbacksarrayНетМодели для fallback (максимум 3)
modelsarrayНетАльтернативные модели
pluginsarrayНетПлагины маршрутизации
context_managementobjectНетУправление контекстом
output_configobjectНетКонфигурация выходных данных
speedstringНетСкорость генерации: standard (по умолчанию) или fast
service_tierstringНетУровень обслуживания

Параметр messages

Каждое сообщение должно содержать role и content:

  • role: user или assistant
  • content: строка или массив content-блоков

Типы content-блоков:

Тип блока Описание
textТекстовое содержимое
imageИзображение (base64 или URL)
documentPDF-документ (base64 или URL)
tool_useВызов инструмента (от assistant)
tool_resultРезультат выполнения инструмента (от user)
thinkingБлок размышлений (extended thinking)

Параметр thinking

{
  "type": "enabled",
  "budget_tokens": 16000
}
  • budget_tokens — бюджет токенов для этапа размышлений
  • display — отображение мыслей: summarized, omitted (опционально)

Параметр provider

Настройки маршрутизации запроса к конкретным провайдерам.

Поле Тип Описание
sortstringСтратегия сортировки: price, throughput, latency, exacto
orderarrayУпорядоченный список провайдеров (по приоритету)
ignorearrayСписок провайдеров для исключения
onlyarrayСписок разрешённых провайдеров
allow_fallbacksbooleanРазрешить fallback-провайдеров (по умолчанию true)
data_collectionstringallow (по умолчанию) или deny
zdrbooleanТолько Zero Data Retention провайдеры
require_parametersbooleanТолько провайдеры, поддерживающие все переданные параметры
max_priceobjectМаксимальная цена за миллион токенов
preferred_max_latencynumberПредпочтительная максимальная задержка (сек)
preferred_min_throughputnumberПредпочтительная минимальная пропускная способность (токен/сек)
quantizationsarrayФильтр по квантованию: int4, fp8, fp16, bf16 и др.

Суффиксы модели

К имени модели можно добавить суффикс для быстрой настройки маршрутизации:

Суффикс Описание
:nitroПриоритет скорости (throughput)
:floorПриоритет цены (price)

Пример: anthropic/claude-sonnet-4:nitro

Параметр cache_control

Автоматическое промпт-кэширование. Устанавливается на уровне запроса:

{
  "cache_control": {
    "type": "ephemeral"
  }
}

Также поддерживается на уровне отдельных content-блоков:

{
  "type": "text",
  "text": "Большой блок текста...",
  "cache_control": {
    "type": "ephemeral"
  }
}

TTL для кэша: 5m (5 минут) или 1h (1 час).

Параметр context_management

Управление контекстом (сжатие при превышении лимита токенов):

{
  "edits": [
    {
      "type": "clear_tool_uses_20250919",
      "trigger": { "type": "input_tokens", "value": 100000 },
      "keep": { "type": "tool_uses", "value": 5 },
      "clear_at_least": { "type": "input_tokens", "value": 50000 },
      "clear_tool_inputs": false,
      "exclude_tools": ["web_search"]
    }
  ]
}

Параметр output_config

Управление выходными данными:

{
  "effort": "medium",
  "format": { /* schema structured output */ },
  "task_budget": { "type": "tokens", "total": 400000 }
}
  • effort: low, medium, high, xhigh, max
  • format: схема структурированного вывода
  • task_budget: бюджет для агентного шага (рекомендательный, не жёсткое ограничение)

Параметр fallbacks

Модели для fallback, если основная модель недоступна или отказывает:

{
  "fallbacks": [
    { "model": "claude-opus-4.8" }
  ]
}

Максимум 3 модели. Не сочетается с models.

Заголовки атрибуции

Опциональные заголовки для идентификации вашего приложения в статистике:

Заголовок Описание
HTTP-RefererURL вашего сайта/приложения
X-TitleНазвание вашего приложения
X-OpenRouter-TitleАльтернативное название
X-OpenRouter-MetadataВключить метаданные маршрутизации в ответ (enabled)
X-OpenRouter-Experimental-MetadataLegacy-версия X-OpenRouter-Metadata

Параметр stop_server_tools_when

Условия остановки цикла server-tool агента (логика ИЛИ):

{
  "stop_server_tools_when": [
    { "type": "step_count_is", "step_count": 5 },
    { "type": "max_cost", "max_cost_in_dollars": 0.5 }
  ]
}

Примеры запросов

Простой запрос:

curl https://api.ru-openrouter.ru/v1/messages \
  -H "Authorization: Bearer sk_ваш_api_ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-4",
    "max_tokens": 1024,
    "messages": [
      {
        "role": "user",
        "content": "Привет! Как дела?"
      }
    ]
  }'

С изображением:

curl https://api.ru-openrouter.ru/v1/messages \
  -H "Authorization: Bearer sk_ваш_api_ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-4",
    "max_tokens": 1024,
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "Что изображено на этом фото?"
          },
          {
            "type": "image",
            "source": {
              "type": "base64",
              "media_type": "image/jpeg",
              "data": "/9j/4AAQSkZJRg..."
            }
          }
        ]
      }
    ]
  }'

С инструментами (tools):

curl https://api.ru-openrouter.ru/v1/messages \
  -H "Authorization: Bearer sk_ваш_api_ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-4",
    "max_tokens": 1024,
    "messages": [
      {
        "role": "user",
        "content": "Какая погода в Москве?"
      }
    ],
    "tools": [
      {
        "name": "get_weather",
        "description": "Получить погоду в городе",
        "input_schema": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "Город"
            }
          },
          "required": ["location"]
        }
      }
    ]
  }'

С extended thinking:

curl https://api.ru-openrouter.ru/v1/messages \
  -H "Authorization: Bearer sk_ваш_api_ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-4",
    "max_tokens": 32000,
    "thinking": {
      "type": "enabled",
      "budget_tokens": 16000
    },
    "messages": [
      {
        "role": "user",
        "content": "Реши сложную задачу..."
      }
    ]
  }'

С потоковым режимом (streaming):

curl https://api.ru-openrouter.ru/v1/messages \
  -H "Authorization: Bearer sk_ваш_api_ключ" \
  -H "Content-Type: application/json" \
  -N \
  -d '{
    "model": "anthropic/claude-sonnet-4",
    "stream": true,
    "max_tokens": 1024,
    "messages": [
      {
        "role": "user",
        "content": "Напиши короткое стихотворение"
      }
    ]
  }'

Ответ

200 OK

{
  "id": "msg_abc123",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "Всё отлично! Чем могу помочь?",
      "citations": null
    }
  ],
  "model": "anthropic/claude-sonnet-4",
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "stop_details": null,
  "usage": {
    "input_tokens": 12,
    "output_tokens": 18,
    "cache_creation_input_tokens": null,
    "cache_read_input_tokens": null,
    "total_cost": 0.1234,
    "service_tier": "standard",
    "inference_geo": null
  }
}

Поля ответа

Поле Тип Описание
idstringУникальный идентификатор сообщения
typestringВсегда message
rolestringВсегда assistant
contentarrayМассив content-блоков с ответом модели
modelstringID модели, которая сгенерировала ответ
stop_reasonstringПричина остановки: end_turn, max_tokens, stop_sequence, tool_use, refusal и др.
stop_sequencestringСтоп-последовательность, если остановка по ней
stop_detailsobjectДетали остановки (при отказе — refusal с категорией и объяснением)
usageobjectИнформация об использовании токенов

Поля usage

Поле Тип Описание
input_tokensintegerКоличество входных токенов
output_tokensintegerКоличество выходных токенов
total_costfloatСтоимость запроса в рублях (с учётом наценки)
cache_creation_input_tokensintegerТокены, записанные в кэш
cache_read_input_tokensintegerТокены, прочитанные из кэша
service_tierstringУровень обслуживания: standard
inference_geostringГео-регион инференса

Типы content-блоков в ответе

Тип блока Описание
textТекстовый ответ (содержит text и опционально citations)
tool_useВызов инструмента (содержит name, id, input)
thinkingБлок размышлений (extended thinking, содержит thinking)

Content-блок text с цитированием

{
  "type": "text",
  "text": "Согласно документации, процессор работает на частоте 3.2 ГГц.",
  "citations": [
    {
      "type": "char_location",
      "cited_text": "процессор работает на частоте 3.2 ГГц",
      "document_index": 0,
      "document_title": null,
      "file_id": null,
      "start_char_index": 0,
      "end_char_index": 10
    }
  ]
}

Ошибки

402 Insufficient Balance:

{
  "error": {
    "message": "Недостаточно средств на балансе. Требуется: 5.00 ₽, Доступно: 1.00 ₽",
    "code": "insufficient_balance"
  }
}

400 Invalid Request:

{
  "error": {
    "message": "Missing required parameter: max_tokens",
    "code": "missing_max_tokens"
  }
}

429 Rate Limit:

{
  "error": {
    "message": "Too many requests. Please try again in 30 seconds.",
    "code": "rate_limit_exceeded",
    "retry_after": 30
  }
}

Коды ошибок

HTTP-статус Код ошибки Описание
400missing_modelНе указана модель
400missing_messagesНе указаны сообщения
400missing_max_tokensНе указан max_tokens
400model_not_foundМодель не найдена или неактивна
400invalid_message_roleНедопустимая роль сообщения (допустимы: user, assistant)
400invalid_message_formatНекорректный формат сообщения
400missing_message_contentОтсутствует content в сообщении
400invalid_session_idsession_id превышает 256 символов
400input_tokens_exceededВходные токены превышают контекст модели
402insufficient_balanceНедостаточно средств
415unsupported_media_typeНеподдерживаемый Content-Type (только JSON)
429rate_limit_exceededПревышен лимит запросов
502empty_responseПустой ответ от провайдера