Claude Code с несколькими аккаунтами и ключами одновременно

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

4 мин · · Обновлено · Claude Code

Если Claude Code используется на нескольких проектах одновременно — фриланс на разных клиентов, личный проект рядом с рабочим, или просто желание не мешать в одну кучу расходы по разным задачам — вопрос не в том, как «переключить аккаунт», а в том, как развести доступ по разным ключам fetch_..., у каждого из которых свои лимиты и свой список разрешённых моделей (баланс и история расходов при этом общие на аккаунт).

Ключ — это не логин, а конфигурация доступа

У этого гейтвея нет понятия «сменить пользователя» в привычном смысле подписки на официальный сервис. Каждый ключ создаётся отдельно в кабинете на странице https://zukko.pro/app/api-keys, показывается один раз в момент создания, и дальше это просто строка fetch_..., которую вы вставляете туда, где Claude Code её ожидает. Ключей можно выпустить сколько нужно — по одному на клиента, на проект, на member команды.

У каждого ключа на его странице в кабинете можно отдельно настроить:

  • дневной или месячный лимит расхода в долларах;
  • список моделей, разрешённых именно для этого ключа.

Если ключ, выданный, скажем, для тестового прогона у младшего разработчика, ограничен дешёвыми моделями и лимитом $5 в день, а код попытается вызвать claude-opus-5-5 сверх этого списка — придёт 403 model_not_allowed_for_key. Превышение самого лимита расхода даёт 429 с кодом key_daily_limit_reached или key_monthly_limit_reached в зависимости от того, какой именно лимит исчерпан. Это разные ошибки, и в логах агента их стоит различать: первая — политика по модели, вторая — исчерпан бюджет.

Как Claude Code вообще узнаёт, какой ключ использовать

Claude Code — Anthropic-совместимый клиент, поэтому база для него — https://api.zukko.pro, без /v1: путь клиент добавляет сам. Ключ передаётся так же, как ожидает Anthropic-совместимый клиент — через переменную окружения ANTHROPIC_AUTH_TOKEN (не ANTHROPIC_API_KEY — с ней Claude Code решит, что вы работаете через официальный аккаунт Anthropic, и предложит логиниться). Заголовок на уровне HTTP — Authorization: Bearer fetch_..., но иногда встречается и x-api-key, который гейтвей тоже принимает.

Чтобы держать несколько ключей одновременно и не путать их между сессиями, есть два практичных подхода.

Через настройки проекта. Для проекта, привязанного к конкретному клиенту, можно задать переменные окружения прямо в .claude/settings.json этого проекта — тогда Claude Code, запущенный из папки проекта, автоматически подхватит нужный ключ и нужный base URL, не завися от того, что экспортировано в текущей оболочке:

bash
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.zukko.pro",
    "ANTHROPIC_AUTH_TOKEN": "fetch_ключ_проекта_а"
  }
}

Через переменные окружения оболочки. Для быстрого переключения между проектами без выделенного .claude/settings.json на каждый — держите ключи в разных профилях/файлах окружения и явно экспортируйте нужный перед запуском:

bash
export ANTHROPIC_BASE_URL="https://api.zukko.pro"
export ANTHROPIC_AUTH_TOKEN="fetch_ключ_проекта_b"
claude

Смешивать эти два способа в одной сессии не стоит — если .claude/settings.json проекта уже прописывает ANTHROPIC_AUTH_TOKEN, экспортированная в оболочке переменная может не иметь эффекта или наоборот перебить настройки проекта в зависимости от того, что применяется раньше. Надёжнее выбрать один способ на весь рабочий процесс и не полагаться на память о том, что было экспортировано в этом терминале час назад.

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

Перед тем как доверить Claude Code реальную задачу на чужом бюджете, стоит проверить, к какому аккаунту относится активный ключ: /v1/balance возвращает баланс аккаунта (у всех ключей одного аккаунта он одинаковый), — это исключает ситуацию, когда работа неожиданно идёт со счёта другого аккаунта:

bash
curl https://api.zukko.pro/v1/balance \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN"

Если ответ показывает баланс не того аккаунта, который ожидался, — значит, в переменной окружения или в .claude/settings.json остался старый ключ. Учтите ограничение: GET /v1/usage отдаёт историю с курсорной пагинацией по всему аккаунту — все ключи вместе, фильтра по ключу нет, а Claude Code работает в потоковом режиме, так что заголовков стоимости у его запросов нет. Ключи внутри одного аккаунта разделяют лимиты и модели, но не историю расходов; если расход клиентов нужно строго разделить, заведите под клиента отдельный аккаунт.

Разделение по лимитам как страховка, а не только учёт

Отдельно стоит настраивать лимиты на ключах не только ради удобства учёта расходов по проектам, но и как защиту от опечаток и убегающих циклов. Ключ, который Claude Code использует в автоматическом режиме (например, в CI-пайплайне или в фоновой агентной задаче), стоит ограничить и по деньгам, и по списку моделей — так случайный бесконечный цикл вызовов упрётся в 429 key_daily_limit_reached, а не выест бюджет всего аккаунта за ночь.

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

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

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.