Документация API go2llm

Claude Code упирается в оплату и регион — переключение за 3 минуты

Это технический разбор формата «до/после» от команды go2llm, а не отзыв клиента. Все шаги воспроизводимы: повторите их у себя и получите тот же результат. Все суммы ниже — расчёт по официальному прайсу Anthropic (сверен 2026-09-09), а не замер чужого счёта. Наши ставки — на странице цен.

Задача

Claude Code установлен, npm/bun отработали, бинарь на месте. Дальше упирается в две вещи, которые к коду отношения не имеют:

  1. Оплата. Официальная подписка или Console-биллинг не проходит российской картой.
  2. Регион. Даже с прошедшей оплатой запрос упирается в проверку региона на

стороне вендора и отклоняется до инференса.

Нужно, чтобы claude в терминале работал, при этом: код проекта не меняется, конфиг агента не меняется, меняются только переменные окружения.

Как было

Типичный старт без настроенного провайдера:

$ claude
# ... и дальше один из двух сценариев

Сценарий A — нет оплаченного доступа, агент отказывается работать на первом же запросе. Сценарий B — доступ формально есть, но запрос отклоняется по региону.

Проверяется это не глазами по UI, а голым запросом к Anthropic Messages API — тем самым протоколом, на котором работает Claude Code:

curl -sS https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":16,
       "messages":[{"role":"user","content":"ping"}]}'

Если этот curl не отдаёт текст, то Claude Code тоже не отдаст: он ходит по тому же пути. Диагностику дальше имеет смысл вести именно на уровне curl, а не на уровне TUI агента.

Что делаем

1. Получаем ключ

Регистрация на go2llm.tech. Ключ имеет префикс gk_sk_…. При регистрации на баланс начисляется $1 — этого хватает на первый запрос без пополнения. Пополнять на старте не обязательно.

2. Проверяем каталог до настройки агента

Каталог отдаётся без ключа, поэтому это самая быстрая проверка связности:

curl -sS https://go2llm.tech/v1/models | jq -r '.data[].id' | grep '^claude'

Отсюда берётся точный public ID модели. Не «claude-sonnet», не «sonnet-latest», а ровно та строка, которую вернул каталог. Расхождение даёт 404 model_not_found.

3. Три export'а

export ANTHROPIC_BASE_URL=https://go2llm.tech
export ANTHROPIC_AUTH_TOKEN=gk_sk_ВАШ_КЛЮЧ
export ANTHROPIC_MODEL=claude-sonnet-5
claude

Обратите внимание на две детали, которые ломают большинство первых попыток:

  • Base URL для Anthropic-протокола — без /v1. Суффикс /v1 добавляет сам

SDK. Если написать https://go2llm.tech/v1, запрос уйдёт на /v1/v1/messages. Для OpenAI SDK, наоборот, base URL — https://go2llm.tech/v1.

  • Переменная — ANTHROPIC_AUTH_TOKEN, а не ANTHROPIC_API_KEY. Об этом ниже

отдельно, это главная ловушка.

4. Проверяем первым запросом, а не первой задачей

Не давайте агенту сразу рефакторинг на 40 файлов. Сначала один запрос, который либо возвращает строку, либо возвращает код ошибки:

curl -sS https://go2llm.tech/v1/messages \
  -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":120,
       "messages":[{"role":"user","content":"Ответь одним словом: работает"}]}' \
  | jq '{text: .content[0].text, usage: .usage}'

5. Смотрим, сколько стоил запрос

Шлюз возвращает фактическую стоимость каждого запроса в usage.cost_usd — в том числе в финальном usage-блоке SSE-стрима:

curl -sS https://go2llm.tech/v1/messages \
  -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":200,
       "messages":[{"role":"user","content":"Объясни, что делает git rebase --onto"}]}' \
  | jq '.usage.cost_usd'

Это не оценка и не прогноз — это то, что списано. Механика списания: шлюз резервирует оценочную стоимость до вызова, затем списывает фактическую и освобождает остаток резерва. Баланс не уходит ниже нуля.

6. Ставим лимит на ключ

Кодинг-агент — единственный класс нагрузки, где можно случайно потратить дневной бюджет за один длинный сеанс. На каждый ключ настраиваются:

  • квота в долларах,
  • список разрешённых моделей,
  • IP allow-list,
  • срок действия,
  • лимит 20 RPM по умолчанию.

Важная деталь: ключ, созданный с пустым полем квоты, идёт без отдельного лимита. Потолок выставляется при создании ключа. Ключ с квотой 0 означает «без отдельного лимита», расход ограничен только балансом — это не то же самое, что «запретить тратить».

Практический паттерн: отдельный ключ под каждый проект, квота на уровне недельного бюджета, список моделей ограничен тем, что реально нужно агенту. Тогда 403 model вместо неожиданного счёта.

Как стало

Рабочий конфиг, который не нужно вводить руками каждый раз. Кладём в ~/.config/go2llm.env и подключаем через shell-функцию:

# ~/.config/go2llm.env
export ANTHROPIC_BASE_URL=https://go2llm.tech
export ANTHROPIC_AUTH_TOKEN=gk_sk_ВАШ_КЛЮЧ
export ANTHROPIC_MODEL=claude-sonnet-5
# ~/.zshrc
cc() {
  # важно: unset, чтобы сохранённый логин Claude Code не перехватил авторизацию
  unset ANTHROPIC_API_KEY
  set -a; source ~/.config/go2llm.env; set +a
  claude "$@"
}

Проверка маршрута в одну строку перед сеансом:

test "$(curl -sS -o /dev/null -w '%{http_code}' https://go2llm.tech/status)" = 200 \
  && echo "gateway up" || echo "check https://go2llm.tech/status"

Дальше cc запускает агента, который ходит на шлюз, отдаёт cost_usd по каждому запросу и упирается в квоту ключа, а не в баланс карты.

Сколько это стоит

Актуальные ставки по каждой модели — в /pricing и GET /api/pricing. Здесь они намеренно не продублированы: прайс мы пересматриваем, а цифра в статье живёт дольше, чем остаётся верной.

Сравнивать кодинг-агента только по цене input неправильно. У него профиль нагрузки другой: вход 10%, выход 5%, чтение кэша 85%. Основная статья расхода — cache read, потому что агент на каждом шаге перечитывает тот же контекст проекта.

Смешанная цена считается так: in × 0.10 + out × 0.05 + cache_read × 0.85.

Посчитаем по официальному прайсу Anthropic (https://platform.claude.com/docs/en/about-claude/pricing, сверен 2026-09-09, Sonnet — 2026-09-26; цены за 1M токенов, in / out / cache read) — это та база, с которой имеет смысл сравнивать что угодно:

МодельОфициально in / out / cache readСмешанная цена
Claude Opus 4.55.00 / 25.00 / 0.50$2.175 за 1M
Claude Sonnet 4.52.00 / 10.00 / 0.20$0.87 за 1M
Claude Haiku 4.51.00 / 5.00 / 0.10$0.435 за 1M

Раскладка для Sonnet 4.5, чтобы было видно, что цифра не с потолка: 2.00×0.10 + 10.00×0.05 + 0.20×0.85 = 0.20 + 0.50 + 0.17 = 0.87.

Теперь подставьте в ту же формулу три ставки со страницы цен и поделите одно на другое — получите свою экономию на своём профиле. Там же она посчитана заранее, колонкой рядом с официальным тарифом.

Главное, что стоит проверить при таком сравнении: снижена ли ставка cache read в той же пропорции, что in и out. Если шлюз сбрасывает цену входа, но держит дорогое чтение кэша, экономия на кодинг-агенте «съедается» — потому что именно на чтение кэша приходится 85% объёма.

Грабли

1. ANTHROPIC_API_KEY вместо ANTHROPIC_AUTH_TOKEN → 401. Главная ловушка, и она почти нигде не описана. Если на машине уже есть вход в Claude Code под личным аккаунтом (claude.ai или Anthropic Console), значение ANTHROPIC_API_KEY может уступить сохранённому логину, и запрос уйдёт мимо шлюза с 401 no-key. ANTHROPIC_AUTH_TOKEN всегда обращается к тому ANTHROPIC_BASE_URL, который вы указали. Если сомневаетесь — unset ANTHROPIC_API_KEY перед запуском.

2. /v1 в base URL для Anthropic-протокола. ANTHROPIC_BASE_URL=https://go2llm.tech — без суффикса. Для OpenAI SDK (/v1/chat/completions) base URL другой: https://go2llm.tech/v1. Путаница между ними даёт 404, который выглядит как проблема с ключом, но ей не является.

3. 404 model_not_found из-за приблизительного ID. Модель задаётся точной строкой из GET /v1/models. Копируйте, а не набирайте.

4. 402 insufficient_balance в середине длинного сеанса. Пополнить баланс либо уменьшить max_tokens. Минимальное пополнение — $1, оплата рублями через СБП или криптовалютой. Баланс ведётся в USD.

5. 429 rate_limit при параллельных подагентах. По умолчанию на ключ действует лимит 20 RPM. Агент, который запускает несколько параллельных веток, упирается в него быстрее ожидаемого. Учитывайте заголовок Retry-After. Если код — 429 quota, значит упёрлись не в частоту, а в квоту ключа: это правильное срабатывание защиты, а не сбой.

6. 503 product_paused / no_eligible_route. Проверить https://go2llm.tech/status и повторить позже. Полный список кодов — /docs/errors. Формат ошибки всегда содержит error.type, error.code, error.message, error.request_id — в обращение в поддержку имеет смысл нести именно request_id.

Отдельно про стриминг: до начала ответа шлюз может использовать совместимый fallback-маршрут на разрешённых классах ошибок, но после первого байта или валидного SSE-события переключение не выполняется. Поток, который начал отдаваться и оборвался, автоматически не повторяется — это осознанное поведение, а не баг.

Баланс нельзя прочитать программно. Публичного endpoint'а для этого нет: по ключу gk_sk_… доступны только /v1/messages, /v1/chat/completions и /v1/images/generations. Баланс и расход видны в кабинете по сессии. Что именно кабинет показывает в разрезе отдельного ключа и за период, мы на этой странице пока не документировали — напишите в @go2llm_support, ответим и дополним. Для пооперационного учёта в своём коде используйте usage.cost_usd из каждого ответа: это списанная сумма, а не оценка по токенам.

Поведение ANTHROPIC_SMALL_FAST_MODEL и отдельной модели для служебных вызовов Claude Code мы тоже пока не проверяли живым запросом. Если это важно для вашего сценария — напишите в @go2llm_support, ответим и дополним страницу.

Итог

Переключение Claude Code — это три переменные окружения и один проверочный curl. Код проекта, конфиг агента и привычный рабочий цикл не меняются. Что меняется: оплата идёт рублями через СБП или криптовалютой, зарубежная карта не требуется, стоимость каждого запроса видна в usage.cost_usd, а верхняя граница расхода задаётся квотой ключа, а не силой воли.

Уточнение от 2026-09-14: Codex CLI к шлюзу теперь подключается. Актуальные версии для кастомных провайдеров поддерживают только wire_api = "responses", и endpoint /v1/responses с этого дня опубликован и проверен живым прогоном codex exec 0.151.0 на модели qwen3-8-flash. Claude Code и OpenCode тоже проверены живым запросом.

Документация — /docs, цены — /pricing, коды ошибок — /docs/errors.

Получить ключ и сделать первый запрос за 3 минуты