Квоты, тарифы и цены
Notifly работает по модели дневных квот. Главная единица учёта — событие:
любое действие, которое генерирует уведомление или потребляет ресурсы платформы,
списывает ровно одно событие. Когда дневной лимит исчерпан, новые события того
же дня отклоняются — до сброса счётчика в 00:00 по московскому времени.
Например, POST /message в этом случае отвечает 429 Too Many Requests.
Все функции доступны на всех тарифах — тарифы различаются только лимитами. Текущие цены и значения:
| Лимит | Free | Pro | Business |
|---|---|---|---|
| Цена в месяц | 0 ₽ | 299 ₽ | 999 ₽ |
События/день (dailyEvents) | 1 000 | 100 000 | Безлимит |
AI-запросы/день (aiRequestsPerDay) | 50 | 2 000 | 50 000 |
Запросы к ассистенту/день (assistantRequestsPerDay) | 100 | 5 000 | 100 000 |
Сканы портов/день (portScansPerDay) | 10 | 300 | 10 000 |
Устройства (devices) | 3 | 15 | Безлимит |
Статус-страницы (statusPages) | 1 | 5 | Безлимит |
Хранилище скриншотов (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 heartbeat | dailyEvents |
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 МСК. Историческая разбивка по дням при этом не удаляется — новый день просто начинает считать с нуля, а статистика прошлых дней остаётся доступной.
Rate limit ingest-эндпоинта скриптов
Заголовок раздела «Rate limit ingest-эндпоинта скриптов»Помимо дневной квоты, публичный 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 оплачиваются банковским переводом по счёту. Порядок такой:
- Напишите на support@notifly.ru: какой тариф нужен (Pro — 299 ₽ в месяц или Business — 999 ₽ в месяц), на какой срок и e-mail аккаунта в Notifly, к которому его подключить.
- Получите счёт с реквизитами — его пришлют в ответ на письмо.
- Оплатите счёт переводом. В назначении платежа укажите номер счёта и e-mail аккаунта — так оплату быстрее сопоставят с вашим аккаунтом.
- Дождитесь ответа оператора. Когда оплата поступит, оператор переключит аккаунт на новый тариф и напишет вам. Новые лимиты действуют сразу; мониторы, которые стояли из-за исчерпанной квоты, возобновляют проверки немедленно, не дожидаясь сброса счётчиков.
Текущий тариф и расход за сегодня видны в админке в «Профиле», а цены всех тарифов — на странице «Тарифы» (пункт меню «Улучшить план»). Кнопка «Подключить» на карточках тарифов пока ничего не делает — пишите на почту.
Понижение тарифа доступно самостоятельно и применяется сразу. Лишние устройства при этом автоматически переводятся в 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(это не дневная квота, см. Хранилище скриншотов).
REST API
Заголовок раздела «REST API»Базовый 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) |