РУСЛОПолучить ключ в кабинете

Quickstart Anthropic: первый /v1/messages за 5 минут на вашем SDK

Зачем эта страница: отправить первый POST /v1/messages в нативном формате Anthropic и увидеть цену запроса в ₽ — без смены вашего SDK.

Параллельная ветка D1, та же структура и тайм-маркеры. Ключ тот же, что для OpenAI-формата: одно значение ruslo-sk-… на оба формата.

Шаг 1 · 0:00–1:00 — ключ и base

  1. Получить ключ в кабинете: «Создать ключ», скопировать одним кликом; показывается один раз.
  2. Base URL для anthropic-клиента: https://api.farvater.copul4.com — БЕЗ /v1: клиент сам добавляет путь /v1/messages. OpenAI-клиенту /v1 в base нужен: это единственное различие адресов.

Ожидаемый результат: ключ активен, грант 300 ₽ на балансе.

Если ошибка:

  • 401 authentication_error → ключ отозван или неверен → проверьте значение ключа и имя заголовка: x-api-key, а не Authorization

Шаг 2 · 1:00–2:00 — SDK

Установка SDK (выберите свой стек): pip install anthropic или npm i @anthropic-ai/sdk.

SDK вендорский, свой между вами и форматом мы не ставим.

Если ошибка:

  • anthropic старше 0.30 → пакет не принимает параметр base_url → обновите пакет: pip install -U anthropic

Шаг 3 · 2:00–3:00 — заголовки и первый запрос curl

Подставить мой ключ: значение ключа живёт в переменной окружения, не в репозитории.

Первый запрос формата Anthropic:

curl https://api.farvater.copul4.com/v1/messages \
  -H "x-api-key: $RUSLO_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "mid-class-chat",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Собери договор в 7 пунктов"}]
  }'

Ожидаемый вывод:

{
  "id": "msg_01…",
  "type": "message",
  "role": "assistant",
  "content": [{"type": "text", "text": "1. Стороны… 7. Реквизиты…"}],
  "usage": {"input_tokens": 1500, "output_tokens": 1000}
}

Системный промпт передаётся отдельным верхнеуровневым полем body system, не внутри messages.

Цена запроса в ₽ — в заголовке ответа Ruslo-Usage-Cost и в кабинете «Статистика» по каждому запросу; в OpenAI-формате дополнительно в usage.cost_rub тела ответа.

Если ошибка:

  • 400 invalid_request_error с упоминанием anthropic-version → нет заголовка версии или нарушена схема тела → добавьте заголовок anthropic-version: 2023-06-01; проверьте max_tokens и messages
  • 400 model_not_found → идентификатор вне каталога → возьмите идентификатор из каталога D2 как есть
  • 401 invalid_api_key / authentication_error → ключ отозван или неверен → проверьте значение ключа и имя заголовка: x-api-key, а не Authorization
  • 402 payment_required / insufficient_balance → баланс ниже цены запроса или грант исчерпан → пополните от 500 ₽; автосписаний нет
  • 429 rate_limit_exceeded / rate_limit_error → достигнут лимит ключа → значения и снятие — в K3; снизьте параллельность или поднимите лимит
  • 503 upstream_unavailable → вендор недоступен, резерв не подхватил → запрос не тарифицируется; повтор с backoff 1с → 2с → 4с не более трёх раз

Шаг 4 · 3:00–4:30 — то же на Python и стриминг

Тот же запрос на Python:

import os
from anthropic import Anthropic

client = Anthropic(
    base_url="https://api.farvater.copul4.com",  # без /v1
    api_key=os.environ["RUSLO_API_KEY"],  # уходит в x-api-key
)

msg = client.messages.create(
    model="mid-class-chat",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Собери договор в 7 пунктов"}],
)
print(msg.usage)  # input_tokens=1500 output_tokens=1000

Ожидаемый вывод:

{
  "input_tokens": 1500,
  "output_tokens": 1000
}

Стриминг: stream=True; SSE-события в порядке вендора: message_start → content_block_start → content_block_delta → content_block_stop → message_delta → message_stop; служебное ping; ошибки приходят событием error.

Если ошибка:

  • 401 invalid_api_key / authentication_error → ключ отозван или неверен → проверьте значение ключа и имя заголовка: x-api-key, а не Authorization
  • 402 payment_required / insufficient_balance → баланс ниже цены запроса или грант исчерпан → пополните от 500 ₽; автосписаний нет
  • 429 rate_limit_exceeded / rate_limit_error → достигнут лимит ключа → значения и снятие — в K3; снизьте параллельность или поднимите лимит
  • 503 upstream_unavailable → вендор недоступен, резерв не подхватил → запрос не тарифицируется; повтор с backoff 1с → 2с → 4с не более трёх раз
  • TimeoutError на длинной генерации → ответ не умещается в timeout клиента → поднимите timeout клиента или включите стриминг

Стрим оборвался → тарифицируются только сгенерированные токены; формулы списания — D4 — цены и биллинг.

Шаг 5 · 4:30–5:00 — что дальше

  • Batch в формате Anthropic: POST /v1/messages/batches, −50% к цене единиц — схема requests и статусы в D6.
  • Смена модели — одна строка в params; тот же промпт в OpenAI-формате — D1: цены и ответы сопоставимы в кабинете и виджете каталога.
  • Единицы и формулы по модальностям — D7.

Чек-лист завершения: ответ type=message получен; usage с токенами виден; цена в ₽ найдена в заголовке Ruslo-Usage-Cost и в кабинете.

Выполнить первый запрос в формате AnthropicЧитать docs: batch-гайд

Обновлено: 2026-10-26