Claude (Anthropic)
Два способа работы с Claude — OpenAI-совместимый endpoint и нативный POST /v1/messages
Claude (Anthropic)
Модели Anthropic доступны двумя способами: через общий OpenAI-совместимый
endpoint и через нативный Anthropic Messages API. Оба тарифицируются одинаково
— по фактическому usage, включая кэш-токены.
Способ 1: OpenAI-совместимый
Используйте /v1/chat/completions со slug'ом anthropic/... — шлюз сам
конвертирует запрос в Messages API и обратно (включая tool calls и стриминг):
curl https://nikagateway.ru/v1/chat/completions \
-H "Authorization: Bearer sk-tunnel-..." \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-4.5",
"messages": [{"role": "user", "content": "Привет!"}]
}'Подходит, если у вас уже есть код на OpenAI SDK и вы хотите просто сменить модель.
Способ 2: нативный Messages API
POST /v1/messages проксирует тело к Anthropic без конвертации — подменяются
только slug модели и ключ провайдера. Ответ (включая SSE-стрим) отдаётся как
есть. Это способ для клиентов, говорящих на родном протоколе Anthropic, —
например, Claude Code.
curl https://nikagateway.ru/v1/messages \
-H "Authorization: Bearer sk-tunnel-..." \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "anthropic/claude-sonnet-4.5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Привет!"}]
}'Стоимость запроса в стриме
В нестриминговом ответе стоимость и остаток баланса приходят в usage
(cost_rub, balance). В стриме их там нет и быть не может: списание
выполняется после message_stop, когда расход наконец известен целиком, —
на проходе message_delta фактической суммы ещё не существует.
Поэтому стоимость отдаётся по подписке. Передайте заголовок:
x-nika-usage: streamи после message_stop придёт дополнительное событие:
event: nika_usage
data: {"type":"nika_usage","usage":{"input_tokens":1234,"output_tokens":567,
"cache_creation_input_tokens":0,"cache_read_input_tokens":0},
"cost_rub":"0.9455","balance":"1234.56"}cost_rub — фактическое списание за этот запрос, balance — остаток после
него; оба поля строками, чтобы значение не теряло точность при разборе.
usage — то, что отчитал провайдер, без изменений.
Без заголовка поток остаётся байт-в-байт потоком Anthropic: ни одного
лишнего события. Токены при этом доходят в любом случае — в штатных
событиях протокола: входные в message_start (message.usage), выходные
накопительно в message_delta (usage.output_tokens).
Остаток баланса можно получить и отдельно: GET /v1/balance.
Claude Code
Укажите шлюз как base URL и ваш ключ Nika Gateway как токен:
export ANTHROPIC_BASE_URL="https://nikagateway.ru"
export ANTHROPIC_AUTH_TOKEN="sk-tunnel-..."Все запросы Claude Code пойдут через Nika Gateway и будут тарифицироваться с вашего баланса.
Кэш-токены
Anthropic поддерживает prompt caching: повторное использование контекста стоит дешевле. Шлюз учитывает это транзитом:
cache_creation_input_tokens(запись в кэш) — по ставке cache_write;cache_read_input_tokens(чтение из кэша) — по ставке cache_read (значительно дешевле обычного входа).
Скидка автоматически отражается в usage.cost_rub ответа. Для длинных
системных промптов и агентных сценариев (тот же Claude Code) это даёт
существенную экономию.