Оплата и тарифы
Otapush тарифицируется по MAU — monthly active users (unique devices): количеству уникальных устройств, обратившихся к вашему серверу обновлений в течение календарного месяца. Всё остальное — опубликованные обновления, каналы, хранилище, трафик — не тарифицируется ни на одном тарифе. Цены указаны в рублях, платежи проводятся через Т-Банк.
Черновые цены — финальные будут объявлены до запуска.
Откуда берётся device id и как сервер привязывает запросы к устройствам, описано в Протоколе; регистрация идентификатора в приложении — часть Быстрого старта и Настройки Expo.
Что считается за MAU, а что нет
«Устройство» — это строка идентификатора, которую клиент отправляет с каждым запросом к протокольным эндпоинтам: в query-параметре, в заголовке x-device-id или в extra-параметре deviceid. Сервер хранит ровно одну запись на пару (приложение, устройство, календарный месяц): первая проверка манифеста или скачивание ассета в месяце создаёт её, и всё, что устройство делает до конца месяца, счётчик больше не меняет.
Последствия стоит проговорить явно:
- Устройство считается один раз. Проверяющее обновления каждый час весь месяц устройство — это один MAU.
- Проверки без результата тоже считаются. Запись об устройстве создаётся до того, как сервер решит, есть ли обновление, поэтому «холостые» опросы тихого канала тарифицируются наравне с остальными.
- Запросы, отклонённые рано, не считаются. Запрос, отклонённый из-за отсутствия device id, неизвестного slug приложения или неизвестного канала, получает ответ до создания какой-либо записи об устройстве.
- Неучитываемый трафик существует. При
REQUIRE_DEVICE_ID=falseна сервере запросы без идентификатора обслуживаются как обычно, но остаются неатрибутированными — в счёт они не идут. - Тестовые устройства считаются.
curlс?deviceId=curl-test— это MAU, как и эмулятор. Держите нагрузочные тесты и CI-проверки на сервере, за который не платите.
Месяц — UTC: счётчик обнуляется в 00:00 UTC первого числа, а не по вашему местному времени. Устройство, не обращавшееся к серверу в течение месяца, в этом месяце просто отсутствует — постоянного реестра устройств, помнящего прошлые месяцы, нет.
Текущее значение видно на вкладке Обзор приложения и на странице Оплата портала.
Один лимит на все приложения аккаунта
Лимит MAU действует на сумму по всем вашим приложениям, а не на каждое в отдельности: страница «Оплата» складывает устройства текущего месяца по всем приложениям. Вкладка «Обзор» отдельного приложения показывает его собственное число устройств относительно того же лимита аккаунта.
Число приложений — отдельный лимит, и работает он иначе. На Free (1 приложение), Start (3) и Pro (10) сервер откажет в создании нового приложения с ошибкой 403 plan_limit, когда лимит достигнут; у Business и Enterprise лимита нет. То есть превышение по приложениям блокируется на создании, а превышение по MAU — никогда, о чём следующий раздел.
Что происходит при превышении лимита
Обновления никогда не блокируются. Эндпоинты, раздающие манифесты и ассеты, вообще не смотрят на лимит тарифа — в коде нет ни одного пути, при котором раздача остановится после превышения MAU, ни на одном тарифе. Вместо этого:
- API статистики возвращает
overLimit: trueрядом со счётчиком и лимитом; - страницы «Обзор» и «Оплата» показывают полосу использования в предупреждающем состоянии: «Лимит превышен — обновления продолжают работать, но, пожалуйста, перейдите на тариф выше».
Email-уведомлений нет — в коде нет ни почтового клиента, ни какой-либо системы уведомлений. Предупреждающее состояние в портале — весь сигнал целиком.
Переход на тариф выше вступает в силу в момент подтверждения оплаты, и новый лимит применяется к текущему месяцу сразу.
Тарифы
| Тариф | MAU | Приложения | В месяц | В год |
|---|---|---|---|---|
| Free | 10 | 1 | 0 ₽ | 0 ₽ |
| Start | 1 000 | 3 | 490 ₽ | 4 900 ₽ |
| Pro | 10 000 | 10 | 2 490 ₽ | 24 900 ₽ |
| Business | 100 000 | Безлимит | 9 990 ₽ | 99 900 ₽ |
| Enterprise | Индивидуально | Безлимит | Свяжитесь с нами | Свяжитесь с нами |
Год стоит десять месяцев: годовая цена равна десяти месячным платежам — 4 900 ₽ вместо 5 880 ₽ на Start, 24 900 ₽ вместо 29 880 ₽ на Pro. Free и Start ориентированы на индивидуальных разработчиков; Pro и Business могут оплачивать и юридические лица (счётом — ниже). Enterprise недоступен через самообслуживание: портал вместо оплаты показывает ссылку на менеджера, а checkout API отклоняет попытку оформить этот тариф напрямую.
Месячный и годовой периоды
Платёж покупает один период: один календарный месяц или один календарный год, прибавляемые к моменту активации. Периоды различаются ценой и арифметикой — лимиты, каналы и подпись работают одинаково в обоих случаях.
Если оплатить снова, пока подписка ещё активна, новый период прибавляется к текущей дате окончания, а не к дате платежа: купленный в марте год Pro при периоде, заканчивающемся в апреле, продлит подписку до апреля следующего года. Вебхук активации идемпотентен — повторное уведомление не продлит период дважды.
Смена тарифа
Отдельной операции «сменить тариф» нет: вы оплачиваете новый тариф, и при подтверждённом платеже аккаунт переключается на него немедленно. Оплаченный период продлевается от более поздней из дат — «сейчас» или конец текущего периода, — поэтому уже оплаченное время не теряется. Два следствия, о которых стоит знать до нажатия кнопки:
- Пересчёта нет. Переход с Pro на Business посреди месяца стоит полную цену Business; сервер не считает частичные суммы ни в одну сторону.
- Понижение тарифа — та же операция. Меньший лимит действует сразу, а новый период всё равно начнётся после окончания текущего.
Оплата картой (Т-Банк)
Карточные платежи идут через интернет-эквайринг Т-Банка; в портале способ называется «Банковская карта / СБП (Т-Банк)» — платёжная страница Т-Банка принимает банковские карты и СБП. По каждому платежу оформляется фискальный чек (54-ФЗ), который уходит на email аккаунта.
- Откройте Оплату в портале, выберите тариф, период и способ «карта».
- Вас перенаправит на платёжную страницу Т-Банка (это
paymentUrl, который возвращает checkout API). - После оплаты Т-Банк подтвердит её подписанным вебхуком; сервер проверит токен и активирует тариф. Повторные уведомления по тому же платежу ничего не меняют.
- Обновите страницу Оплаты — текущий тариф и дату окончания периода портал берёт из
GET /api/billing/subscription.
Оплата по счёту (юридические лица)
На тарифах Pro и Business юридическое лицо может оплатить безналичным переводом:
- На странице Оплата выберите тариф, укажите плательщика Юридическое лицо и способ Счёт.
- Сервер запишет платёж и покажет номер счёта и реквизиты получателя. PDF-документ не генерируется — реквизиты берутся из конфигурации биллинга на сервере, и по умолчанию там стоят заглушки.
- Оплатите счёт с расчётного счёта компании.
Об одном стоит сказать прямо: в коде нет автоматической активации для оплат по счёту. Единственное, что включает тариф, — вебхук подтверждения от Т-Банка, тот же, что и у карт; пока подтверждение по счёту не придёт, запись о платеже остаётся в статусе pending. (Тесты API фиксируют это поведение дословно: «Invoice payments never activate a subscription on their own».)
Тариф Free не требует оплаты — checkout его отвергает. Enterprise checkout тоже отвергает; пользуйтесь ссылкой на менеджера.
Конец периода, отмена, возвраты
Говорим прямо, потому что это деньги:
- Автопродления нет. Каждый платёж разовый. Карта не сохраняется, списаний по подписке нет, и фонового задания, которое выставит счёт снова, тоже нет.
- Кнопки отмены нет. Раз ничего не продлевается, отменять нечего: тариф просто работает до конца оплаченного периода, и после ничего не списывается.
- Код никогда не «выключает» тариф. Задания, которое вернуло бы аккаунт на Free по окончании периода, нет; лимит в каждый момент читается из текущего тарифа аккаунта.
- Возвраты не автоматизированы. Эндпоинта возврата в API нет; платёжный вебхук умеет лишь записывать статусы возвратов, присланные Т-Банком, но сам возврат Otapush не выполняет.
Вопросы и ответы
Проверка, вернувшая «обновлений нет», всё равно считается за MAU?
Да. Запись об устройстве создаётся на каждом запросе манифеста, прошедшем поиск приложения и канала, до того как сервер решит, чем ответить, — noUpdateAvailable, манифест и директива отката идут после записи.
У нас три приложения на одном аккаунте. Каждому положено свои 10 000 MAU на Pro?
Нет. Лимит действует на аккаунт: устройства всех трёх приложений складываются и сравниваются с одним лимитом 10 000. Страница «Оплата» всегда показывает суммарное число.
Что будет, если всплеск трафика за ночь удвоит MAU?
Ничего не остановится. Манифесты и ассеты продолжат раздаваться — ни на одном тарифе нет отсечки раздачи. Портал покажет предупреждающее состояние, а API статистики — флаг overLimit; что делать дальше (переходить на тариф выше или нет), решаете вы.
Может ли юридическое лицо заплатить картой?
Да. Тип плательщика и способ оплаты независимы: юридическое лицо может заплатить картой через Т-Банк либо счётом на тех тарифах, где оплата по счёту вообще есть (Pro и Business).
Когда именно обнуляется счётчик?
В 00:00 UTC первого числа месяца. Все ключи месяцев вычисляются в UTC независимо от того, где находитесь вы и ваши пользователи.
Спишут ли деньги автоматически, когда период закончится?
Нет. Рекуррентных списаний в коде нет: каждый платёж — разовый и инициирован вами, карта нигде не хранится, по окончании периода ничего не списывается.
Можно ли вернуть деньги за неиспользованное время?
Автоматически — нет. Эндпоинта возврата и сценария возврата в портале нет; платёжный вебхук лишь записывает уведомления о возвратах, присланные Т-Банком.
Считаются ли эмуляторы, CI-запуски и curl устройствами?
Да — всё, что отправляет device id с запросом к протокольным эндпоинтам, становится MAU на этот месяц. В том числе curl с query-параметром deviceId и каждый запуск release-сборки в эмуляторе.
Где посмотреть, сколько лимита уже использовано?
В двух местах: вкладка Обзор приложения (число устройств этого приложения за текущий месяц относительно лимита аккаунта) и страница Оплата портала (сумма по всем приложениям, а также тариф и дата окончания периода).