Plans & Billing

Plans and prices, how monthly active users (MAU) are counted — devices, with no double counting, across all your apps — the monthly Stripe billing cycle, upgrades, downgrades and cancelling, failed payments, and what the API returns while sending is paused.

Native Notify has a Free plan and two paid plans, Premium and Pro. A paid plan is a monthly price that includes a number of monthly active users (MAU), plus a usage charge for MAU above that. Billing runs through Stripe. This page covers the plans, how MAU are counted, and what happens at renewal, on plan changes and when a payment fails — for account owners and for the AI agents that work on their accounts.

Plans

PlanPriceIncludesAbove that
Free$0Up to 5 MAUUpgrade to keep sending
Premium$39 / month1,000 MAU$5 for each additional 1,000 MAU, rounded up to the next 1,000
Pro$99 / month10,000 MAU$0.005 per additional MAU

New accounts start with a 7-day free trial. After the trial, a Free account with more than 5 MAU must upgrade to keep sending. The pricing page lists the features in each plan.

What a month costs, for example:

  • A bakery app on Premium with 800 MAU pays $39 — within the included 1,000.
  • A church newsletter app on Premium with 2,400 MAU pays $49: $39 + 2 × $5 (1,400 extra MAU, rounded up to 2,000).
  • A bookstore app on Pro with 12,500 MAU pays $111.50: $99 + 2,500 × $0.005.

Some older accounts are on a legacy Pro tier — $399/month including 50,000 MAU, then $0.00325 per additional MAU. It isn't offered to new accounts.

How monthly active users are counted

Your MAU is the number of devices — plus subscribers counted on their own — that used your apps in the last 30 days, with no double counting:

  • Rolling 30-day window. A device counts if it opened one of your apps in the last 30 days — your app registers with Native Notify when it opens (registerNNPushToken, registerIndieID, or a universal device registration).
  • Across all your apps. It is one number for the whole account, not one per app.
  • No double counting:
    • Every device counts as one: a device that registers with registerNNPushToken, or a universal device.
    • A subscriber id is never counted on top of its own devices. A Classic Expo app that calls both registerNNPushToken (which records the device) and registerIndieID (which records the subscriber id) on the same phone used to count that person twice; now the phone counts once.
    • A subscriber id counts as one only when none of its devices is counted — for example in an app that calls registerIndieID but not registerNNPushToken.
    • Sharing one subscriber id across many devices (the group pattern, where every member of a church or club registers under the same id) still counts each member's device.

For example:

  • A customer whose bakery app calls both registerNNPushToken and registerIndieID on the same phone counts once.
  • A church app that registers 40 members' phones under one shared subscriber id counts 40.
  • A reader with your bookstore app on a phone and a tablet counts twice — two devices.

Native Notify recomputes your account's MAU every night. The dashboard shows it on the Usage card under Settings → Plan & Usage, and get_account returns it as mau. This one number decides whether a Free account is within its 5 MAU and sets the usage part of a paid plan's price. The per-app numbers on the Analytics page follow the same rule, app by app.

Billing cycle

Paid plans renew monthly through Stripe. Shortly before each renewal, the usage part of your price is set from your MAU — the number above — and the renewal charges your plan's price plus that usage. Usage is never charged mid-month: if your MAU changes during the month, the new number applies at your next renewal. Invoices and receipts are in the Billing Portal.

Upgrades, downgrades and cancelling

ChangeTakes effectBilling
Upgrade (for example Premium → Pro)ImmediatelyProrated — you are charged the difference for the rest of the current billing period right away.
Downgrade between paid plans (Pro → Premium)Your plan changes right awayThe lower price starts with your next billing period.
Cancel (Downgrade to Free)At the end of the current billing periodYour plan and sending keep working until then; then the account moves to Free automatically.

Change plans with Upgrade or Downgrade Plan under Settings → Plan & Usage in the dashboard, and cancel with Downgrade to Free in Settings. There are no prorated refunds for the unused part of a billing period (see the Terms of Service).

Once the account is on Free, the Free plan applies: with more than 5 MAU, sending stops until you upgrade again. Your apps and data stay in your account.

Failed payments

1

A renewal payment fails

Stripe retries the charge automatically, and Stripe and the dashboard ask you to update your card. The dashboard shows a banner while the payment is past due. Sending keeps working.

2

7-day grace period

Sending keeps working for 7 days after the payment first fails.

3

Still unpaid: sending pauses

If the invoice is still unpaid after 7 days (or once Stripe stops retrying), sending pauses, and the dashboard banner says so. Device registrations and inbox reads keep working, so no devices, subscribers or inbox messages are lost.

4

The payment goes through: sending resumes

Update your card or pay the open invoice in the Billing Portal. Sending resumes automatically as soon as the payment succeeds — there is no need to contact support.

Nothing is deleted at any point: your Stripe customer record, your subscription, and your apps, devices, subscribers and inbox messages are all kept.

What the API returns while sending is paused

While sending is paused, send endpoints answer exactly as they do when a free trial has ended, so an integration that already handles an expired trial needs no changes.

Classic endpoints answer as their pages document for an expired trial. For example, POST /api/notification and POST /api/indie/notification respond 201 with this text instead of Success!:

You must login to NativeNotify.com to become a paying member for push notifications to work. Your free trial period has ended.

Universal endpoints (POST /api/universal/notifications/send and POST /api/universal/test-send) respond 403 with the error code trial_expired:

{
  "error": {
    "code": "trial_expired",
    "message": "You must login to NativeNotify.com to become a paying member for push notifications to work. Your free trial period has ended."
  }
}

Device registration and inbox reads (the inbox GET endpoints) are unaffected.

A refused send is not queued, so nothing is delivered later — send it again once sending resumes.

Billing state for agents

The refusal mentions a free trial even on a paid account. To tell the causes apart, an agent calls the MCP server's get_account tool (GET /api/mcp/account), which includes the account's billing state:

FieldMeaning
billing_statusThe Stripe subscription status — active, past_due, unpaid, canceled, …
billing_pausedtrue while sending is paused for an unpaid invoice.
past_due_sinceWhen the renewal payment first failed.
billing_grace_ends_atWhen the 7-day grace period ends.
billing_period_endWhen the current billing period ends — the next renewal.
cancel_at_period_endtrue after Downgrade to Free: the account moves to Free at billing_period_end.

The same response carries the plan as sub_name (0 Free, 1 Premium, 2 Pro, 3 legacy Pro), paid_sub and mau. How an agent reads it:

  • billing_paused is true — sending is paused for an unpaid invoice. The owner updates the card or pays the open invoice in the Billing Portal, and sending resumes on its own.
  • billing_status is past_due and billing_paused is false — a payment failed and the grace period is running: sending works until billing_grace_ends_at. Remind the owner to update the card.
  • Otherwise, on a Free account (sub_name 0) — a refusal means the 7-day trial is over and the account has more than 5 MAU, so it needs a paid plan.

Billing Portal

Update your card, pay an open invoice, and download invoices and receipts in Stripe's Billing Portal. Open it with Open Billing Portal under Settings → Plan & Usage in the dashboard.