Командный доступ к LLM через go2llm: проектные ключи, квоты, allowed models и IP allow-list
go2llm даёт команде один баланс в USD и отдельный ключ gk_sk_… на каждый проект. У каждого ключа своя квота в долларах, свой список разрешённых моделей, свой IP allow-list, свой срок действия и лимит 20 RPM по умолчанию. Это заменяет четыре провайдера с четырьмя биллингами одним контуром расхода.
Дата публикации: 11 сентября 2026, каталог цен v38. Часть обзора сценариев go2llm.
Задача
Команда из 2–15 человек: разработчики с кодинг-агентами, продовая фича с LLM внутри, ночная батч-обработка, генерация картинок для маркетинга. Типичное состояние до наведения порядка — четыре провайдера, четыре биллинга, и никто не может сказать, что именно съело деньги в этом месяце.
Боли, которые решаются настройками ключа, а не процессом:
| Боль | Механизм go2llm |
|---|---|
| «Никто не знает, кто сколько потратил» | ключ на проект + квота в долларах на ключ |
| «Разработчик поставил Opus на автофиксы» | список разрешённых моделей на ключ |
| «Ключ утёк в публичный репозиторий» | IP allow-list + срок действия + квота |
| «Забытый cron жрёт баланс третий месяц» | срок действия ключа |
| «Прод и эксперименты в одном котле» | разные ключи, один баланс |
Какие модели подходят и почему
В команде профиль нагрузки у каждого ключа свой, и это главная причина не смешивать их. go2llm считает смешанную цену по формуле mixed = in × доля_входа + out × доля_выхода + cache × доля_чтения_кэша, и веса берутся из сценария конкретного ключа.
| Ключ | Профиль (in/out/cache) | Модель | mixed, $/1M | Почему |
|---|---|---|---|---|
dev-<имя> | 10 / 5 / 85 (кодинг) | claude-sonnet-5 | 0,142848 | 85% объёма идёт по ставке cache $0,03288 |
dev-senior | 10 / 5 / 85 | claude-opus-5 | 0,218512 | сложный рефакторинг |
prod-chat | 70 / 25 / 5 (чат-бот) | gpt-5.6-luna | 0,0882 | вход доминирует, нужен дешёвый in |
batch-etl | 85 / 10 / 5 (извлечение) | glm-5.3-flash | 0,02148 | самый дешёвый вход в каталоге |
content | 20 / 75 / 5 (генерация) | claude-sonnet-5 | 1,297444 | выход весит 75% |
Обратите внимание: claude-sonnet-5 в строке dev стоит $0,142848, а в строке content — $1,297444 за 1M смешанных токенов. Модель одна, ставки одни (0,329 / 1,64 / 0,03288) — разный профиль. Если в команде считают бюджет одной цифрой «средней цены модели», расчёт будет неверным для четырёх ключей из пяти.
Все 38 опубликованных моделей go2llm доступны с любого ключа gk_sk_…, пока список не сужен явно. Перечень — GET /v1/models, цены — GET /api/pricing, оба без авторизации.
Как подключить
Ключи go2llm создаются в кабинете: там задаются квота, allowed models, IP allow-list и срок. Публичного management API для программного создания и отзыва ключей среди опубликованных endpoint'ов нет — по ключу gk_sk_… доступны только /v1/messages, /v1/chat/completions и /v1/images/generations. Максимальное число ключей на аккаунт мы пока не документировали: если упираетесь в это на практике, напишите в @go2llm_support, ответим и дополним страницу.
Дальше ключ раздаётся по проектам обычным .env:
# .env разработчика — ключ dev-ivan, квота $8, allowed: claude-sonnet-5, claude-haiku-4-5
export ANTHROPIC_BASE_URL=https://go2llm.tech
export ANTHROPIC_AUTH_TOKEN=gk_sk_YOUR_DEV_KEY
export ANTHROPIC_MODEL=claude-sonnet-5
claude
Для Claude Code важно именно ANTHROPIC_AUTH_TOKEN, а не ANTHROPIC_API_KEY: если у разработчика на машине уже есть вход под личным аккаунтом, ANTHROPIC_API_KEY может уступить сохранённому логину, и запрос уйдёт мимо go2llm с 401.
Проверка, что ограничения на ключе действительно стоят — две команды при выдаче:
# 1. Разрешённая модель — ожидаем 200
curl -s -o /dev/null -w "%{http_code}\n" https://go2llm.tech/v1/messages \
-H "x-api-key: gk_sk_YOUR_DEV_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ok"}]}'
# 2. Запрещённая модель — ожидаем 403 с error.code = model
curl -s https://go2llm.tech/v1/messages \
-H "x-api-key: gk_sk_YOUR_DEV_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-fable-5","max_tokens":16,"messages":[{"role":"user","content":"ok"}]}'
Если вторая команда вернула 200 — allowed models на ключе не настроен, и claude-fable-5 с его ставкой выхода $5,03 за 1M доступен любому, кто взял этот ключ.
Продовому ключу дополнительно ставится IP allow-list адресов ваших серверов. Тогда утечка ключа в репозиторий не превращается в счёт: с чужого адреса go2llm вернёт 403 ip.
Сколько это стоит
Команда: 3 разработчика с кодинг-агентами, продовый чат-бот, ночной ETL. Один баланс, пять ключей.
Ключ dev-*, 40M смешанных токенов в месяц на claude-sonnet-5, профиль 10/5/85 → 4M входа, 2M выхода, 34M чтения кэша:
- 4 × $0,329 = $1,316
- 2 × $1,64 = $3,28
- 34 × $0,03288 = $1,1179
- $5,7139 на разработчика, $17,1418 на троих
Ключ prod-chat, 50M токенов на gpt-5.6-luna, профиль 70/25/5 → 35M входа, 12,5M выхода, 2,5M чтения кэша:
- 35 × $0,04 = $1,40
- 12,5 × $0,24 = $3,00
- 2,5 × $0,004 = $0,01
- $4,41
Ключ batch-etl, 100M токенов на glm-5.3-flash, профиль 85/10/5 → 85M входа, 10M выхода, 5M чтения кэша:
- 85 × $0,018 = $1,53
- 10 × $0,06 = $0,60
- 5 × $0,0036 = $0,018
- $2,148
Итого по команде: $17,1418 + $4,41 + $2,148 = $23,6998 ≈ 2 047 ₽ по курсу ЦБ 86,3793 ₽/$ на 01.09.2026.
Для сравнения, только часть разработчиков по официальному тарифу Anthropic: 40M на Sonnet 5 по профилю 10/5/85 — это 4 × 2,00 = $8,00; 2 × 10,00 = $20,00; 34 × 0,20 = $6,80, итого $34,80 на человека и $104,40 на троих. У go2llm та же работа стоит $17,14 — в 6,1 раза меньше.
Модель оплаты у go2llm — только pay-as-you-go: подписок, пакетов и обязательной ежемесячной платы нет. Минимальное пополнение — $1, максимум — $10 000, пресеты $5 / $10 / $25 / $50 / $100. Оплата рублями через СБП (провайдер Platega) или криптовалютой. При регистрации на баланс начисляется $1 — команде хватит, чтобы проверить все пять ключей до первого пополнения.
Как контролировать расход
Пять настроек на каждый ключ и один общий баланс — это весь механизм. Раскладка по ключам из расчёта выше:
| Ключ | Квота | Allowed models | IP allow-list | Срок |
|---|---|---|---|---|
dev-ivan | $8 | claude-sonnet-5, claude-haiku-4-5 | — | — |
dev-senior | $13 | + claude-opus-5 | — | — |
prod-chat | $7 | gpt-5.6-luna, claude-sonnet-5 | IP серверов | — |
batch-etl | $3 | glm-5.3-flash | IP воркера | конец квартала |
content | $6 | claude-sonnet-5, gpt-5.6-luna | — | — |
Важные детали, о которые спотыкаются при первой настройке:
- ключ с квотой
0не имеет отдельного денежного лимита и ограничен только общим балансом аккаунта — это не «ноль долларов», а «без лимита на ключе»; - ключ, созданный с пустым полем квоты, идёт без отдельного лимита — выставьте её вручную, прежде чем раздавать;
- лимит 20 RPM на ключ по умолчанию — считается именно на ключ и суммарно по всем моделям и endpoints, а не на аккаунт и не на модель, так что разные ключи не делят один счётчик; для продового трафика и для батча это реальное ограничение, закладывайте очередь и обработку
Retry-After. Механизма самостоятельного повышения в кабинете нет — по этому вопросу пишите в @go2llm_support; - отдельно от RPM действует лимит параллельных запросов на аккаунт — по умолчанию 2; его делят уже все ключи вместе, и на батче это упирается раньше, чем 20 RPM;
- при превышении квоты go2llm отдаёт
429 quota, при исчерпании баланса —402 insufficient_balance; баланс не уходит ниже нуля.
Точный учёт по каждому запросу go2llm возвращает в usage.cost_usd — в том числе в финальном usage-блоке SSE-стрима. Минимальный сборщик на стороне команды:
import os, collections
from openai import OpenAI
KEYS = { # проект -> ключ
"prod-chat": os.environ["GO2LLM_KEY_PROD"],
"batch-etl": os.environ["GO2LLM_KEY_BATCH"],
}
spent = collections.defaultdict(float)
def call(project: str, model: str, prompt: str) -> str:
client = OpenAI(api_key=KEYS[project], base_url="https://go2llm.tech/v1")
r = client.chat.completions.create(
model=model, max_tokens=500,
messages=[{"role": "user", "content": prompt}],
)
spent[project] += getattr(r.usage, "cost_usd", 0.0)
return r.choices[0].message.content
# в конце смены: print(dict(spent)) -> {'prod-chat': 0.1412, 'batch-etl': 0.0891}
Собирать расход на своей стороне приходится не от хорошей жизни: публичного endpoint'а для программного чтения баланса и расхода по ключу нет — эти данные видны только в кабинете по сессии. Что именно кабинет показывает в разрезе каждого ключа и есть ли выгрузка истории, а также поддерживаются ли отдельные учётные записи участников команды с ролями, мы пока не документировали — напишите в @go2llm_support, ответим и дополним страницу.
Про приватность, раз речь о командных и продовых данных: go2llm не сохраняет промпты и ответы в продуктовых логах — технический лог содержит метаданные, usage, стоимость, маршрут, статус и очищенную ошибку. Подробные request logs хранятся до 90 дней.
Грабли
403 с error.code = model / inactive / expired / ip. Четыре разные причины под одним HTTP-кодом: модель не в списке разрешённых, ключ выключен, истёк срок, запрос с адреса вне allow-list. Смотрите error.code, а не только статус.
429 quota посреди рабочего дня. Квота ключа выбрана. Это и есть задуманное поведение — увеличьте квоту или разберитесь, почему объём выше расчёта.
IP allow-list и динамические адреса. Разработчику с домашним провайдером allow-list ломает работу каждые несколько дней. Ставьте его на серверные ключи, а не на dev-*.
Общий ключ «на всю команду». Ни квоты по человеку, ни разбора «кто потратил», ни отзыва одного доступа. Пять ключей настраиваются за десять минут.
Заблокированный на квоте прод. Продовому ключу квоту ставьте с запасом 30%. Полный справочник — коды ошибок go2llm.
FAQ
Можно ли выдать подрядчику доступ на месяц и не думать о нём? Да: ключ go2llm с квотой в долларах, списком разрешённых моделей и сроком действия. Истёк срок — запросы получают 403 expired, без вашего участия.
Что будет, если один проект выберет весь баланс? Если у ключей стоят квоты — ничего: проект упрётся в 429 quota, остальные продолжат работать. Если квоты не выставлены (или стоят 0), ключ ограничен только общим балансом, и тогда да — заберёт всё до 402 insufficient_balance.
Как закрываются документы для бухгалтерии? Порядок закрывающих документов для юрлиц и ИП и возможность оплаты по счёту мы пока не документировали — напишите в @go2llm_support, ответим и дополним страницу. Известно про возвраты: обращение принимается в течение 48 часов, рассмотрение занимает до 24 часов, возврат инициируется в течение 72 часов. Отдельно: go2llm публично заявляет, что не настраивает интеграции за клиента — подключение делает ваша команда по документации.
Дальше
Кодинг-агент · Чат-бот и поддержка · Извлечение данных · Генерация контента · Цены