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

Квоты, тарифы и цены

Notifly работает по модели дневных квот. Главная единица учёта — событие: любое действие, которое генерирует уведомление или потребляет ресурсы платформы, списывает ровно одно событие. Когда дневной лимит исчерпан, новые события того же дня отклоняются — до сброса счётчика в 00:00 по московскому времени. Например, POST /message в этом случае отвечает 429 Too Many Requests.

Все функции доступны на всех тарифах — тарифы различаются только лимитами. Текущие цены и значения:

ЛимитFreeProBusiness
Цена в месяц0 ₽299 ₽999 ₽
События/день (dailyEvents)1 000100 000Безлимит
AI-запросы/день (aiRequestsPerDay)502 00050 000
Запросы к ассистенту/день (assistantRequestsPerDay)1005 000100 000
Сканы портов/день (portScansPerDay)1030010 000
Устройства (devices)315Безлимит
Статус-страницы (statusPages)15Безлимит
Хранилище скриншотов (storageMB)50 МБ1 ГБ10 ГБ
  • Устройства — это количество одновременно активных клиентов (приложений, получающих уведомления). При понижении тарифа лишние устройства автоматически переводятся в suspended (отключаются самые старые активные клиенты).
  • Безлимит — не «бесконечность», а недостижимый потолок: лимит от 1 000 000 000 считается неограниченным, и админка рисует «Безлимит» вместо прогресс-бара.
  • Статус-страницы — количество публичных страниц статуса на аккаунт. Скрытие бейджа «powered by Notifly» доступно с Pro.
  • Хранилище — это не дневная квота, а постоянный объём: см. Хранилище скриншотов ниже.

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

Что работаетСобытий в сутки
Монитор с проверкой раз в 5 минут288
Монитор с проверкой раз в минуту1 440
Монитор с проверкой раз в 30 секунд (минимум для HTTP и протоколов)2 880
Heartbeat от cron-задачи раз в час24
Скрипт, который шлёт 50 сообщений в день50

Пример для Free (1 000 событий в день): три монитора раз в 5 минут (3 × 288 = 864) и один ежечасный heartbeat (24) — это 888 событий, на сообщения остаётся около сотни. А один монитор с проверкой раз в минуту (1 440) в Free уже не помещается — для такого интервала нужен Pro, либо реже проверяйте.

Минимальные интервалы проверок: протокольные и HTTP-мониторы — 30 секунд, мониторы контента, портов и API-workflow — 60 секунд, браузерные сценарии — 5 минут. Фактический расход за день по каждому монитору и источнику видно в разбивке расхода.

Что происходит, когда квота кончилась:

  • отправка сообщений (POST /message) и пинги heartbeat отклоняются с 429 Too Many Requests;
  • мониторы не выключаются, а откладывают проверки до сброса счётчиков (00:00 МСК, с запасом в несколько минут) и потом продолжают сами;
  • один раз в сутки в служебный канал System приходит уведомление «Дневная квота исчерпана» с разбивкой, на что ушли события.

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

  • проверка монитора, приведшая к тревоге, списывает только само событие проверки (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

Скриншоты, которые снимают браузерные workflow и браузерные контент-мониторы, занимают место в объектном хранилище и учитываются отдельной, не дневной квотой storageMB.

  • В зачёт идут только те кадры, на которые ссылается сообщение-алерт; кадры упавших прогонов без алерта удаляются сразу и место не занимают.
  • Когда занятый объём превышает лимит плана, самые старые скриншоты вытесняются по принципу FIFO — новые кадры всегда сохраняются.
  • При понижении тарифа хранилище не режется мгновенно: к новым лимитам его приводит ночная уборка и вытеснение при следующей загрузке скриншота.

Текущее значение видно в ответе GET /user/quota-breakdown (поле storage: usedBytes и limitBytes).

Все дневные счётчики обнуляются по расписанию в 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-токен и считается отдельно от дневной квоты событий.

Free бесплатен, Pro стоит 299 ₽ в месяц, Business — 999 ₽ в месяц. Оплаты картой пока нет — Pro и Business оплачиваются банковским переводом по счёту. Порядок такой:

  1. Напишите на support@notifly.ru: какой тариф нужен (Pro — 299 ₽ в месяц или Business — 999 ₽ в месяц), на какой срок и e-mail аккаунта в Notifly, к которому его подключить.
  2. Получите счёт с реквизитами — его пришлют в ответ на письмо.
  3. Оплатите счёт переводом. В назначении платежа укажите номер счёта и e-mail аккаунта — так оплату быстрее сопоставят с вашим аккаунтом.
  4. Дождитесь ответа оператора. Когда оплата поступит, оператор переключит аккаунт на новый тариф и напишет вам. Новые лимиты действуют сразу; мониторы, которые стояли из-за исчерпанной квоты, возобновляют проверки немедленно, не дожидаясь сброса счётчиков.

Текущий тариф и расход за сегодня видны в админке в «Профиле», а цены всех тарифов — на странице «Тарифы» (пункт меню «Улучшить план»). Кнопка «Подключить» на карточках тарифов пока ничего не делает — пишите на почту.

Понижение тарифа доступно самостоятельно и применяется сразу. Лишние устройства при этом автоматически переводятся в suspended — отключаются самые старые активные клиенты до нового лимита; хранилище скриншотов доводится до нового лимита ночной уборкой.

  • Сам повысить тариф из админки или через API нельзя: POST /current/user/plan для обычного пользователя принимает только понижение (или текущий тариф), а запрос на повышение получает 402 Payment Required. Повышение выполняет оператор после оплаты.
  • Баланс виден в профиле. Кнопка «Пополнить» для обычного пользователя пока не зачисляет деньги: сервер отвечает 402 с предложением оплатить переводом ("paymentMethod": "bank_transfer"). Прямое пополнение (POST /current/user/topup) доступно только администраторам.

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 (сканы портов);
  • storage — снимок занятого хранилища на момент запроса: usedBytes против limitBytes (это не дневная квота, см. Хранилище скриншотов).

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

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