Перейти к содержимому

Квоты и тарифы

Notifly работает по модели дневных квот. Главная единица учёта — событие: любое действие, которое генерирует уведомление или потребляет ресурсы платформы, списывает ровно одно событие. Когда дневной лимит исчерпан, новые события того же дня отклоняются — до сброса счётчика в 00:00 по московскому времени.

Лимиты зависят от тарифа. Текущие значения:

ЛимитFreeProBusiness
События/день (dailyEvents)1 000100 0001 000 000
AI-запросы/день (aiRequestsPerDay)205005 000
Запросы к ассистенту/день (assistantRequestsPerDay)1002 00020 000
Сканы портов/день (portScansPerDay)101001 000
Устройства (devices)3520
  • Устройства — это количество одновременно активных клиентов (приложений, получающих уведомления). При понижении тарифа лишние устройства автоматически переводятся в suspended (отключаются самые старые активные клиенты).

Списание происходит в момент самого действия — проверки, пинга, отправки точки, прихода письма, — а не за результирующее уведомление. Из этого следует:

  • проверка монитора, приведшая к тревоге, списывает только само событие проверки (monitor / http_monitor / content_monitor / port_monitor / workflow_monitor) — отдельного события за alert или recovery нет;
  • recovery-уведомление heartbeat не списывает ничего сверх уже учтённого heartbeat;
  • исключение — heartbeat_alert: у тревоги «пропущен ping» нет своего пинга (ping не пришёл), поэтому она учитывается отдельным событием;
  • метрик-алерты считаются через точку metric, отдельного события за алерт нет;
  • email и webhook-роутер считаются по приходу: одно входящее письмо = одно событие email, один входящий payload роутера = одно событие router, независимо от того, в сколько каналов они разойдутся (пересылка в каналы отдельно не списывается);
  • одно действие никогда не списывается дважды под разными категориями.

При превышении лимита пользователю один раз в сутки приходит системное уведомление о том, что квота исчерпана.

Каждое списание относится к одному из типов события. Эти же ключи показываются в разбивке расхода и в админке.

КлючКогда списываетсяЛимит
messageКаждое входящее сообщение в каналdailyEvents
heartbeatКаждый ping heartbeatdailyEvents
heartbeat_alertСрабатывание тревоги «пропущен ping»dailyEvents
monitorКаждая проверка протокольного монитора (TCP/DNS/TLS и т.п.)dailyEvents
http_monitorКаждая проверка HTTP-монитораdailyEvents
content_monitorКаждая проверка монитора контентаdailyEvents
port_monitorКаждая проверка монитора портовdailyEvents
workflow_monitorКаждая проверка multi-step API workflow-монитораdailyEvents
port_scanКаждый discovery-скан портов хостаportScansPerDay
web_scriptКаждое срабатывание скрипта для сайтаdailyEvents
metricКаждая отправленная точка метрикиdailyEvents
askКаждый заданный вопрос ask-монитораdailyEvents
emailПриход письма в inbox (один раз на письмо)dailyEvents
routerПриход payload в webhook-роутер (один раз на запрос)dailyEvents
ai_requestОбращение к AI/LLM (подбор правила, селектора, шага workflow)aiRequestsPerDay
assistant_requestХод диалога с чат-ассистентомassistantRequestsPerDay

Все дневные счётчики обнуляются по расписанию в 00:00 МСК. Историческая разбивка по дням при этом не удаляется — новый день просто начинает считать с нуля, а статистика прошлых дней остаётся доступной.

Помимо дневной квоты, публичный ingest-эндпоинт скрипта для сайта (POST /script/:token) защищён отдельным rate limit: не более 120 запросов в минуту на один токен (фиксированное окно). При превышении сервер отвечает HTTP 429 Too Many Requests с заголовком Retry-After (секунды до конца текущего окна) и телом:

{ "ok": false, "error": "rate limited" }

Клиентский SDK сам батчит события и держит жёсткий предел в 100 POST на сессию, поэтому 120/мин с запасом покрывает легитимный трафик. Лимит применяется per-токен и считается отдельно от дневной квоты событий.

Баланс и тариф управляются в админке — app.notifly.ru, раздел профиля пользователя. Там же видно текущий расход по каждой квоте.

  • Смена тарифа (free / pro / business) применяется сразу. При понижении тарифа лишние устройства автоматически переводятся в suspended — отключаются самые старые активные клиенты до нового лимита.
  • Пополнение баланса доступно администраторам напрямую; обычным пользователям возвращаются реквизиты для оплаты переводом.

GET /user/quota-breakdown отдаёт детальную статистику расхода текущего пользователя за день (по умолчанию — сегодняшний по МСК; другой день — через ?day=YYYY-MM-DD):

Окно терминала
curl -H "X-Notifly-Key: C_xxx" \
"$NOTIFLY_URL/user/quota-breakdown?day=2026-06-23"

Ответ содержит:

  • day — дата (YYYY-MM-DD по МСК);
  • rows — построчная разбивка «тип события × ресурс» с человекочитаемым именем ресурса;
  • hourly — почасовой расход событий за день;
  • series — поминутный расход, разделённый на три ряда: events (общая квота), ai (AI-запросы) и portscan (сканы портов).

Базовый URL — https://notifly.ru (или $NOTIFLY_URL). Заголовок авторизации — X-Notifly-Key (client-token, prefix C) либо Basic Auth.

МетодПутьНазначение
GET/user/quota-breakdownДетальная разбивка расхода за день (?day=YYYY-MM-DD опционально)
POST/current/user/topupПополнить баланс. Body: {"amountRubles": N} (целое ≥ 1). Прямое пополнение — только для администраторов; обычным пользователям возвращается 402 с реквизитами
POST/current/user/planСменить тариф. Body: {"plan": "free"|"pro"|"business"}. При понижении суспендит лишние устройства (в ответе — suspendedDevices)