Ключи живут в переписке и не отзываются
Ключ выдали партнёру два года назад, сотрудник уволился, ключ утёк в публичный репозиторий. Отозвать его нельзя, потому что неизвестно, какие интеграции от него зависят.
Выберите тему — соберём контекст
Настраиваем коммерческий слой над API: выпуск и отзыв ключей, скоупы и среды, квоты тарифа и лимиты частоты, учёт каждого вызова с весом, оверэйдж, автоматические счета и портал разработчика с песочницей.
Или сразу: +7 (962) 368-39-51 Telegram
Технически рабочий API и коммерчески рабочий API — два разных продукта. Обычно не хватает второго.
Ключ выдали партнёру два года назад, сотрудник уволился, ключ утёк в публичный репозиторий. Отозвать его нельзя, потому что неизвестно, какие интеграции от него зависят.
Rate limit настроен одной константой для всех: клиент на дорогом тарифе получает те же 429, что и пробный, а превышение квоты вообще не отслеживается.
Логи ротируются и теряются, за одним IP может стоять несколько клиентов, а запросы из очереди вообще не попадают в лог — суммы в счетах невозможно защитить.
В счёте одна строка «доступ к API за месяц». Спорную сумму разбирают вручную, выгружая логи за тридцатидневный период.
Клиент узнаёт о превышении из счёта втрое больше обычного. Предупреждений по ходу периода не было, и следующий шаг — требование пересчитать.
OpenAPI-схему обновляют вручную перед публикацией, поэтому партнёры интегрируются по устаревшим примерам и приходят с вопросами, на которые нет ответа в документации.
Четыре слоя, которые имеет смысл делать по порядку: доступы, учёт, тарифы, отчётность для клиента.
Единая точка входа, через которую проходят все вызовы и где решается, кому и что разрешено.
Основа всех расчётов: если событие потерялось, вы либо недополучите выручку, либо не сможете доказать счёт.
Правила, по которым использование превращается в сумму, а превышение — в понятное клиенту событие.
Клиент сам отвечает на вопросы «сколько я потратил» и «почему так дорого» — без письма в поддержку.
Работаем поверх существующего API: переписывать интеграции партнёров не нужно, логика меняется на стороне шлюза.
Разбираем эндпоинты, считаем себестоимость вызова по нагрузке на базу и внешние сервисы. Решаем, что становится платной единицей: запрос, токен, гигабайт или результат операции.
Выстраиваем единую точку входа, выпуск и проверку ключей, скоупы и лимиты частоты. Переводим существующую авторизацию без разрыва работающих интеграций.
Подключаем поток событий, агрегацию по периодам, расчёт стоимости и выпуск счетов. Проверяем расчёт на исторических данных и сверяем с фактической нагрузкой.
Готовим кабинет разработчика, документацию из схемы, песочницу и регламент разбора спорных начислений. Запускаем на ограниченной группе партнёров и расширяем.
Самый простой вариант — вызов API. Он понятен клиенту, но несправедлив: синхронный запрос справочника и построение отчёта по миллиону строк стоят вам совершенно по-разному, а в счёте выглядят одинаково. Поэтому в проектах, где разброс стоимости вызовов велик, мы вводим вес: у каждого метода задан коэффициент, и биллинговой единицей становится взвешенный вызов.
Токены и объём данных подходят для генеративных и аналитических API, где основная себестоимость — вычисления и внешние модели. Гигабайты и записи логичны для хранилищ и ETL-сервисов. Отдельно стоит рассмотреть тарификацию по результату: за успешно обработанный документ, за принятую заявку, за сделку. Такая модель лучше продаётся, но требует, чтобы продукт умел однозначно определять результат, а биллинг — отсекать дубли и отмены.
Лимит частоты защищает инфраструктуру от перегрузки, квота тарифа ограничивает коммерческое использование. Смешивать их в одну настройку — типичная ошибка: клиент на дорогом тарифе получает отказы из-за кратковременного всплеска, хотя его месячная квота использована на треть.
Правильнее держать три независимых параметра: устойчивая скорость (запросов в секунду), допустимый всплеск (burst) и месячная квота. При приближении к квоте клиент получает уведомления на 80 и 100 процентов, при превышении — либо оверэйдж по заранее согласованной цене, либо ответ с кодом 429 и понятным телом ошибки, где указано, когда лимит будет сброшен и как повысить тариф. Дорогие и долгие операции стоит ограничивать отдельно — например, разрешать не более нескольких одновременных задач на клиента.
Спор о сумме почти всегда означает, что в счёте не хватает детализации. Мы выводим в кабинет и в счёт разбивку по методам и дням: сколько вызовов, сколько из них с ошибкой на стороне клиента, какой вес, какая цена за единицу, сколько попало в пакет и сколько ушло в оверэйдж. Отдельной строкой показываем возвраты и корректировки прошлых периодов.
Полезно давать клиенту возможность выгрузить журнал событий за период: спор «мы столько не делали» заканчивается за минуту, если есть выгрузка с идентификаторами запросов. И обязательно фиксируйте момент закрытия периода: если события приходят с опозданием, в регламенте должно быть указано окно их приёма, иначе пересчёт будет тянуться месяцами.
Отталкивайтесь от себестоимости: посчитайте, что стоит вам один вызов разных типов по нагрузке на базу, кэш и внешние сервисы. Если разброс в пределах двух-трёх раз, можно тарифицировать по вызовам. Если десятки раз — вводите вес метода или тарифицируйте по объёму данных. Для генеративных и аналитических сервисов удобнее токены или обработанные записи, для интеграционных — успешные операции.
Зависит от настроек тарифа. Мягкий вариант — оверэйдж: использование продолжается, превышение тарифицируется по заранее согласованной цене за единицу, а клиент получает предупреждение на 80 и 100 процентов квоты. Жёсткий вариант — отказ с кодом 429 после исчерпания квоты. Мы рекомендуем мягкий режим для юридических лиц и жёсткий для пробных тарифов, где важно ограничить злоупотребление.
Клиентские ретраи по таймауту учитываются как отдельные вызовы, если запрос действительно дошёл до обработки, поэтому мы поддерживаем заголовок идемпотентности: повтор с тем же ключом не тарифицируется дважды и возвращает результат первой операции. Служебные повторы внутри нашей инфраструктуры не тарифицируются вовсе — они фиксируются в журнале с пометкой и исключаются из агрегации.
Да, и это частая схема. Партнёр получает ключ на своё юридическое лицо, квоту и цену за единицу, а его подклиенты обслуживаются в рамках партнёрского лимита. В кабинете партнёр видит своё потребление и может выставлять счета своим клиентам самостоятельно. Если нужен распределённый учёт, мы добавляем необязательный идентификатор подклиента в запрос и строим детализацию по нему.
Смежные задачи, которые обычно решаются в одном проекте с этой.
Покажите текущие эндпоинты и клиентов — оценим, что и как выгодно монетизировать и сколько это займёт.
Cookie и аналитика
Мы используем необходимые cookie для работы сайта и форм. Аналитические cookie (Яндекс.Метрика, включая запись сессий) подключаем только с вашего согласия — от него можно отказаться. Подробнее: Политика использования cookie и обработка персональных данных.