Anthropic API из России: перенос кода и Claude Code на Zukko
Код на Anthropic SDK и Claude Code переезжают на шлюз сменой адреса и ключа. Разбираем, где не ошибиться с /v1, какие модели Claude доступны и как работает кэш.
6 мин · · разработка · IDE
Пользоваться Anthropic API из России мешает не код, а оплата: карту для консоли Anthropic здесь не привязать. Zukko принимает запросы в родном формате Anthropic, поэтому Anthropic SDK и Claude Code переезжают сменой адреса и ключа, а кэш промптов продолжает экономить деньги. Ниже — правки для Python, TypeScript и Claude Code, таблица моделей Claude и расчёт стоимости с кэшем.
Что остаётся прежним
Zukko — API-шлюз к моделям Claude, GPT, Gemini, DeepSeek, Qwen и GLM с одним ключом fetch_... и балансом в долларах. Для Anthropic-формата доступны:
POST https://api.zukko.pro/v1/messages— основной эндпоинт;POST https://api.zukko.pro/v1/messages/count_tokens— подсчёт токенов до запроса.
Официальный Anthropic SDK остаётся тем же. Авторизация работает и через заголовок x-api-key (так его шлёт SDK), и через Authorization: Bearer. Заголовок anthropic-version: 2023-06-01 SDK ставит сам.
Anthropic API из России: правки в коде
Python
import os
import anthropic
client = anthropic.Anthropic(
base_url="https://api.zukko.pro",
api_key=os.environ["ZUKKO_API_KEY"], # ключ вида fetch_...
)
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Объясни, что такое идемпотентность, на примере"}],
)
for block in message.content:
if block.type == "text":
print(block.text)Главная ловушка — адрес. base_url указывается без /v1: SDK сам добавляет путь /v1/messages. Если приписать /v1, запрос уйдёт на /v1/v1/messages и вернёт 404.
Ответ лучше разбирать по типам блоков, а не брать content[0].text: если у модели включены рассуждения, первым может прийти блок типа thinking.
TypeScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://api.zukko.pro",
apiKey: process.env.ZUKKO_API_KEY,
});
const message = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Объясни, что такое идемпотентность" }],
});
for (const block of message.content) {
if (block.type === "text") console.log(block.text);
}Через переменные окружения
SDK читают адрес из ANTHROPIC_BASE_URL, а токен — из ANTHROPIC_AUTH_TOKEN (он уходит заголовком Authorization: Bearer). Тогда клиент создаётся без аргументов:
export ANTHROPIC_BASE_URL=https://api.zukko.pro
export ANTHROPIC_AUTH_TOKEN=fetch_ваш_ключclient = anthropic.Anthropic()Если в окружении остался старый ключ Anthropic вида sk-ant-..., удалите его, чтобы SDK не отправил в шлюз старый ключ вместе с новым токеном или вместо него.
Модели Claude: имена и цены
Идентификаторы моделей в Zukko совпадают с привычными именами Claude. Цены на 6 октября 2026, $ за 1M токенов:
| Модель | Вход / выход | Кэш: чтение / запись | Цена вендора вход / выход | Индекс силы |
|---|---|---|---|---|
claude-opus-5-5 | 0.4 / 2 | 0.038 / 0.425 | 4 / 20 | 58 |
claude-fable-5-1 | 3.48 / 17.4 | 0.3 / 3.663 | 10 / 50 | 53 |
claude-opus-5 | 0.425 / 2.113 | 0.05 / 0.538 | 5 / 25 | — |
claude-sonnet-5 | 0.2 / 1.013 | 0.025 / 0.25 | 2 / 10 | — |
claude-sonnet-4-6 | 0.263 / 1.275 | 0.038 / 0.325 | 3 / 15 | — |
У всех пяти контекст 1M токенов и приём картинок. Индекс силы — Intelligence Index от Artificial Analysis из каталога Zukko; для моделей без значения стоит прочерк. Если в вашем коде указана модель, которой нет в каталоге, запрос вернёт 404 model_not_found — замените её на одну из доступных. Актуальный список и цены — GET https://api.zukko.pro/v1/models или страница «Модели» в кабинете.
Через /v1/messages можно вызывать и модели других вендоров, например gpt-6.1-sol или deepseek-v4.1-flash: шлюз конвертирует формат. Код на Anthropic SDK при этом не меняется — только имя модели.
Кэш промптов работает в Anthropic-формате
Для Claude скидку за кэш даёт именно Anthropic-формат: шлюз видит, сколько входа пришло из кэша, и считает эти токены по цене чтения кэша. В OpenAI-формате (/v1/chat/completions) весь вход Claude идёт по цене входа. Поэтому если вы уже используете cache_control, оставайтесь на Anthropic SDK. Разница двух форматов на цифрах — в статье о кэше Claude в Messages и Chat Completions.
LONG_INSTRUCTIONS = open("instructions.md", encoding="utf-8").read()
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
system=[{
"type": "text",
"text": LONG_INSTRUCTIONS,
"cache_control": {"type": "ephemeral"},
}],
messages=[{"role": "user", "content": "Проверь этот договор на риски: ..."}],
)
u = response.usage
print("свежий вход:", u.input_tokens)
print("чтение кэша:", u.cache_read_input_tokens)
print("запись в кэш:", u.cache_creation_input_tokens)
print("выход:", u.output_tokens)Слишком короткий префикс не кэшируется — минимальную длину задаёт Anthropic, она зависит от модели. Если cache_read_input_tokens на повторных запросах остаётся нулём, проверьте, не меняется ли начало промпта (дата, случайный идентификатор).
Расчёт: сколько даёт кэш на агентной сессии
Формула: стоимость = свежий вход × цена входа + чтение кэша × цена чтения + запись кэша × цена записи + выход × цена выхода.
Пример для claude-sonnet-5: за сессию агент отправил 1 000 000 входных токенов, из них 900 000 прочитаны из кэша, 50 000 записаны в кэш, 50 000 — свежий вход; выход — 100 000 токенов.
- Свежий вход: 50 000 × $0.2 / 1M = $0.01
- Чтение кэша: 900 000 × $0.025 / 1M = $0.0225
- Запись кэша: 50 000 × $0.25 / 1M = $0.0125
- Выход: 100 000 × $1.013 / 1M = $0.1013
- Итого в Anthropic-формате: $0.1463
Та же сессия в OpenAI-формате, где весь вход Claude идёт по цене входа: 1 000 000 × $0.2 / 1M + $0.1013 = $0.2 + $0.1013 = $0.3013. Доля кэша в реальных сессиях бывает разной — смотрите свои цифры в usage.
Claude Code через Zukko
Claude Code сам добавляет /v1, поэтому адрес — без суффикса. Ключ передаётся через ANTHROPIC_AUTH_TOKEN:
export ANTHROPIC_BASE_URL=https://api.zukko.pro
export ANTHROPIC_AUTH_TOKEN=fetch_ваш_ключ
export ANTHROPIC_MODEL=claude-sonnet-5
claudeЧтобы не экспортировать переменные в каждой сессии, их можно положить в блок env файла ~/.claude/settings.json — так описано в документации Claude Code:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.zukko.pro",
"ANTHROPIC_AUTH_TOKEN": "fetch_ваш_ключ",
"ANTHROPIC_MODEL": "claude-sonnet-5"
}
}Claude Code работает в Anthropic-формате, так что кэш промптов в длинных сессиях учитывается по цене чтения кэша. Если при запуске Claude Code всё равно просит войти в аккаунт Anthropic, разберитесь по статье о запросе входа в Claude Code. Полная инструкция — в документации по Claude Code.
Подсчёт токенов до запроса
count_tokens работает так же, как у Anthropic, и помогает оценить цену длинного документа заранее:
count = client.messages.count_tokens(
model="claude-sonnet-5",
messages=[{"role": "user", "content": LONG_INSTRUCTIONS}],
)
print(count.input_tokens, "токенов, вход ≈ $", count.input_tokens * 0.2 / 1_000_000)Подробнее — в справочнике count_tokens.
Чек-лист переезда
- Создайте ключ на странице API-ключи, задайте дневной лимит и разрешённые модели.
- В SDK укажите
base_url="https://api.zukko.pro"— без/v1. - Подставьте ключ
fetch_..., удалите из окружения старый ключsk-ant-.... - Сверьте имена моделей с
GET /v1/models. - Разбирайте
contentпо типам блоков. - Для Claude Code задайте
ANTHROPIC_BASE_URL,ANTHROPIC_AUTH_TOKENиANTHROPIC_MODEL. - Проверьте в
usage, чтоcache_read_input_tokensрастёт на повторных запросах.
Баланс пополняется от $1: СБП и карта РФ в рублях по рыночному курсу, криптовалюта или зарубежная карта Mastercard EU с комиссией около 13%.
Частые вопросы
Почему для Anthropic SDK адрес без /v1, а для OpenAI SDK — с /v1?
Anthropic SDK и Claude Code сами добавляют /v1/messages к базовому адресу. OpenAI SDK добавляет только chat/completions, поэтому ему нужен адрес https://api.zukko.pro/v1.
Нужно ли менять ANTHROPIC_MODEL в Claude Code?
Желательно задать его явно, например claude-sonnet-5 для повседневной работы или claude-opus-5-5 для сложных задач. Какая модель лучше справляется с вашим проектом, проверьте на нескольких реальных задачах.
Работает ли кэш промптов так же, как у Anthropic?
Да, в Anthropic-формате: разметка cache_control та же, а в usage видно чтение и запись кэша. Чтение и запись тарифицируются по своим ценам из таблицы.
Что делать при ошибке 402?
Это нехватка баланса. Пополните его в кабинете — от $1, в том числе через СБП.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Нейросеть для Lua и Roblox: как писать скрипты на Luau с ИИМодель без подсказки может спутать Lua с Luau и предложить устаревший API Roblox. Показываем, как формулировать задачу, проверять код и подключить агента к проекту.
- Как подключить Qwen к VS Code: Companion, Cline и ContinueДва способа получить Qwen в редакторе: официальный Companion для Qwen Code и расширения Cline, Kilo Code, Continue с OpenAI-совместимым ключом.
- Claude Code в JetBrains: IntelliJ IDEA и PyCharm на своём ключеПлагин не содержит собственной копии Claude Code, а запускает консольный агент в терминале IDE. Разбираем установку, ключ шлюза, диффы и типичные сбои.
- Cursor для 1С: как писать код на BSL с ИИ-агентомКак открыть выгрузку конфигурации 1С в Cursor, написать правила для BSL, давать агенту метаданные и не принимать выдуманный код. С расчётом стоимости сессии.