Quickstart Anthropic: первый /v1/messages за 5 минут на вашем SDK
Зачем эта страница: отправить первый POST /v1/messages в нативном формате Anthropic и увидеть цену запроса в ₽ — без смены вашего SDK.
Параллельная ветка D1, та же структура и тайм-маркеры. Ключ тот же, что для OpenAI-формата: одно значение ruslo-sk-… на оба формата.
Шаг 1 · 0:00–1:00 — ключ и base
- Получить ключ в кабинете: «Создать ключ», скопировать одним кликом; показывается один раз.
- 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