Переезд с прямого Anthropic API на шлюз почти не затрагивает код. Меняются адрес и ключ, а имена моделей нужно сверить. Основное время уйдёт на проверки: они показывают, что именно в вашем проекте поведёт себя иначе. Ниже пять шагов в том порядке, в каком их удобно делать.
Что меняется при переезде, а что нет
| Параметр | Прямой Anthropic | Шлюз codexkey |
|---|---|---|
| Адрес для Anthropic SDK | https://api.anthropic.com | https://api.codexkey.ru |
| Адрес для OpenAI SDK | не применимо | https://api.codexkey.ru/v1 |
| Ключ | sk-ant-... | sk_cdx_... |
| Имя модели | ID Anthropic | Стабильные ID шлюза, сверять по GET /v1/models |
| Оплата | Зарубежная карта | Карта РФ или СБП в рублях, есть и оплата криптой |
| Формат запросов | Messages API | Тот же Messages API, плюс Chat Completions на том же эндпоинте |
Цены на модели заданы в долларах за миллион токенов, актуальные значения лежат на странице моделей. Пополнение картой РФ или через СБП проходит в рублях.
Вызовы SDK, структура сообщений, system, tools и стриминг работают как раньше. Если проект написан под OpenAI SDK, клиент можно не менять, подробности в статье «Переезд на OpenAI-совместимый формат».
Шаг 1. Ключ и баланс
Зарегистрируйтесь в codexkey, создайте ключ sk_cdx_... в разделе «API-ключи» и положите на баланс небольшую сумму. При создании ключа выбираются канал (Premium или Cheap) и срок действия. Начните с Premium: в нём есть Haiku, а в Cheap его нет.
Храните ключ в менеджере секретов или в .env, который не попадает в git. Вписывать его в исходники не нужно.
Шаг 2. Замените адрес и ключ
Для Python и Anthropic SDK:
import os
import anthropic
client = anthropic.Anthropic(
base_url=os.environ["LLM_BASE_URL"],
api_key=os.environ["LLM_API_KEY"],
)
Для TypeScript:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: process.env.LLM_BASE_URL,
apiKey: process.env.LLM_API_KEY,
});
В окружении задайте LLM_BASE_URL=https://api.codexkey.ru, LLM_API_KEY=sk_cdx_... и LLM_MODEL с именем модели. Адрес пишите без /v1: Anthropic SDK сам дописывает путь /v1/messages.
Если в коде стоит OpenAI SDK, адрес берётся с /v1:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.codexkey.ru/v1",
api_key=os.environ["LLM_API_KEY"],
)
Для Claude Code хватит блока env в ~/.claude/settings.json, он разобран в гайде по настройке. Для Cursor, Cline и других редакторов инструкции собраны в руководствах.
Шаг 3. Сверьте названия моделей
Список моделей, которые доступны вашему ключу, возвращает запрос GET https://api.codexkey.ru/v1/models. Сравните его с тем, что прописано в коде и конфигах. Если модель вызывается по имени, которого в списке нет, шлюз вернёт ошибку. Ключ из канала Cheap, который просит Haiku, получит model_not_in_channel: в Cheap этой модели нет, она есть в Premium.
Загляните и в скрытые места. Имена моделей любят прятаться в конфигурации CI, в настройках фоновых задач и в параметрах, которые давно никто не открывал.
Шаг 4. Прогоните проверки
Начните с самого короткого запроса:
curl -sS -w '\n%{http_code}\n' https://api.codexkey.ru/v1/messages \
-H "x-api-key: $LLM_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":1,"messages":[{"role":"user","content":"."}]}'
Дальше идите по списку. Каждый пункт гоните отдельным запросом и не полагайтесь на описание возможностей на сайте: так вы увидите, как ведёт себя именно ваш код.
| Что проверить | Как |
|---|---|
| Обычный ответ | Запрос на один токен, затем запрос с вашим типичным промптом |
| Стриминг | Включите stream, сравните порядок событий и итоговый текст |
| Инструменты | Вызов с tools, проверка, что в ответе есть tool_use и ваш код его разбирает |
| Изображения и файлы | Если вы их отправляете, прогоните реальный пример |
Заголовки anthropic-beta | Если вы их используете, проверьте каждый заголовок отдельно |
| Самый тяжёлый промпт | Максимальный размер контекста, который вы реально отправляете |
| Ошибки | Неверный ключ и неверное имя модели, чтобы увидеть, как ваш код переживает отказ |
Стоимость сравнивайте по полю usage в ответе: входные и выходные токены умножьте на цену из каталога. Получится реальный расход, а не прикидка.
Шаг 5. Включайте трафик постепенно
Пока у вас работает прямой канал, переносить весь трафик разом не стоит. Заведите долю шлюза в переменной и поднимайте её ступенями:
import os
import random
def pick_base_url() -> str:
share = float(os.environ.get("GATEWAY_SHARE", "0"))
use_gateway = random.random() < share
return os.environ["GATEWAY_URL"] if use_gateway else os.environ["DIRECT_URL"]
Стартуйте с 5% и следите за долей ошибок и временем ответа. Через сутки поднимите до 25%, затем до 100%. Если прямого канала нет, этот шаг отпадает: проверки из шага 4 и есть ваш пилот.
Как откатиться за минуту
Откат нужен всегда, даже когда всё прошло гладко. Поэтому адрес, ключ и модель лежат в переменных окружения. Чтобы вернуться, поменяйте три значения (LLM_BASE_URL, LLM_API_KEY, LLM_MODEL) и перезапустите сервис. Код не трогается, деплой не нужен. Если после переключения что-то не отвечает, начните с диагностики. Заблокирован аккаунт Anthropic? План восстановления описан в статье «Заблокировали аккаунт Claude», а выгрузка данных чатов разобрана в статье «Экспорт данных Claude».
Что Anthropic говорит про шлюзы и что с вашими данными
Документация Claude Code сформулирована прямо: Anthropic не одобряет, не сопровождает и не проверяет сторонние шлюзы, а маршрутизацию Claude Code на модели не от Claude не поддерживает. Любой шлюз остаётся инфраструктурой своего оператора. Ваши промпты и ответы идут через неё, поэтому прочитайте политику конфиденциальности сервиса и решите, устраивает ли она ваши требования. Что нельзя отправлять в модель ни при каком провайдере, описано в статье «Что не стоит отправлять в LLM», а вопросы безопасности собраны в материале «Безопасность и комплаенс».
Регион и политика Anthropic после переезда на шлюз никуда не деваются. Страница политики регионов вступает в силу 12 ноября 2026, и что она значит для сторонних шлюзов, там не сказано. Юридических заключений мы не даём, а чек-лист на этот случай лежит в статье «Что делать до 12 ноября».
FAQ
Нужно ли переписывать код при переезде на шлюз?
Как правило, нет. Меняются адрес, ключ и иногда имя модели. Клиентская библиотека, структура сообщений, инструменты и стриминг остаются как были.
Какой адрес указывать в Anthropic SDK?
https://api.codexkey.ru без /v1. OpenAI-совместимым клиентам нужен адрес с /v1: https://api.codexkey.ru/v1.
Почему шлюз отвечает model_not_in_channel?
Запрошенной модели нет в канале вашего ключа. Haiku доступен в Premium и недоступен в Cheap. Канал ключа смотрите в кабинете, список моделей берите через GET /v1/models.
Как платить за API в рублях?
Баланс пополняется картой РФ или через СБП в рублях, есть и оплата криптой. Цены на модели указаны в долларах за миллион токенов на странице моделей.
Как откатиться, если что-то пошло не так?
Верните прежние значения адреса, ключа и модели в переменных окружения и перезапустите сервис. Поэтому эти три параметра не стоит вписывать в код.