Account

Plans & billing

Plans, prices, monthly active users, and what happens on renewal, plan changes and failed payments.

Plans

PlanBase priceUsageTeam members
Free$0Up to 10 MAUUp to 10
Premium$19 / month$0.03 per MAUUp to 1
Pro$99 / month$0.01 per MAUUp to 3
Team$399 / month$0.01 per MAU10 included, then $15/month per additional member

A paid plan is its base price plus every monthly active user (MAU). No MAU is included, and a paying account always pays its base price, even at 0 MAU. Plans renew monthly through Stripe, and usage is never charged mid-month: a changed MAU applies at the next renewal. Agent Notify is in every plan. See the pricing page.

New accounts start with a 7-day free trial. After it, a Free account with more than 10 MAU must upgrade to keep sending.

Premium, 800 MAU:             $19 + 800 × $0.03 = $43
Premium, 2,400 MAU:           $19 + 2,400 × $0.03 = $91
Pro, 12,500 MAU:              $99 + 12,500 × $0.01 = $224
Team, 20,000 MAU, 12 members: $399 + 20,000 × $0.01 + 2 × $15 = $629

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

Team members

A Team member beyond the included 10 is charged the prorated amount for the rest of the billing period when they join, then $15/month from the next renewal. Removing a member credits the unused part on your next invoice, and a pending invite costs nothing until it's accepted. Roles, invites, limits and what happens after a downgrade: Team members.

What each plan includes

FeatureFreePremiumProTeam
Push to all devices, and to one subscriber (all its devices)YesYesYesYes
Notification inbox: Classic mass and individual, the push API inbox and the web bellYesNoYesYes
Group pushes, and push API sends to more than one subscriber or deviceYesNoYesYes

The legacy Pro tier includes everything, like Pro. On Premium, the features marked No answer with an explanation and nothing is sent or changed:

  • Push API. 403 with the error code plan_upgrade_required, from every inbox call and from a send to a group, or to more than one subscriber or device. Registration, groups and memberships work on every plan, so an upgrade can send to existing groups right away, and notifications sent on Premium are already in the inbox.
  • Expo Push (Classic). A group push answers 201 with a membership explanation instead of Success!, and so does every mass and individual inbox call (listing, unread counts, marking read, deleting), so the SDK shows an empty inbox. Topic and follow pushes deliver nothing. See Topic push.

An agent checks a plan before calling with plan_features from the MCP server's get_account tool (GET /api/mcp/account): { "inbox": false, "group_sends": false } on Premium, true for both on every other plan.

How monthly active users are counted

Your MAU is the number of distinct devices, plus subscriber ids with no devices, that used your apps in the last 30 days.

  • Registration counts. A device counts when your app registers on open: registerNNPushToken, registerIndieID or a device registration.
  • Whole account. One number across all your apps.
  • Each device once. A phone with a device token and a subscriber id is one device. A reader with a phone and a tablet is two.
  • Subscriber ids with no devices count one each.
  • Shared ids count per device. When many people register under one subscriber id, such as a church or club, each member's device counts: 40 phones under one id count 40.

Native Notify recomputes your MAU every night. It's the Usage card under Settings → Plan & Usage in Native Notify and mau in get_account. It decides whether a Free account is within 10 MAU and sets a paid plan's usage charge.

Upgrades, downgrades and cancelling

ChangeTakes effectBilling
Upgrade (Premium → Pro, Pro → Team)ImmediatelyProrated: you're charged the difference for the rest of the billing period right away.
Downgrade between paid plans (Pro → Premium)ImmediatelyThe lower price starts with your next billing period.
Cancel (Downgrade to Free)End of the current billing periodYour plan and sending work until then, then the account moves to Free. A plan with a failed payment is cancelled right away.

In Native Notify, open Settings (the gear icon, top right) → Plan & Usage and pick a plan. Cancel with Downgrade to Free under Settings → Danger Zone. There are no prorated refunds for the unused part of a billing period (see the Terms of Service). Your apps and data stay in your account.

Failed payments

  1. A renewal payment fails. Stripe retries, you're asked to update your card, and Native Notify shows a past-due banner. Sending keeps working for 7 days from the first failure.
  2. Still unpaid after 7 days, or once Stripe stops retrying: sending pauses at any MAU, since the Free plan's 10 MAU never apply to a paid plan. Registrations and inbox reads keep working.
  3. Update your card or pay the open invoice in the Billing portal. Sending resumes automatically when the payment succeeds.

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

What the API returns while sending is paused

Send endpoints answer as they do when a free trial has ended, so an integration that already handles an expired trial needs no changes. A refused send isn't queued: send it again once sending resumes. Device registration and the inbox GET endpoints are unaffected.

Classic endpoints answer as their pages document for an expired trial. POST /api/notification and POST /api/indie/notification, for example, 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.

Billing state for agents

The refusal mentions a free trial even on a paid account. To tell the causes apart, call the MCP server's get_account tool (GET /api/mcp/account). Its user object includes:

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.

It also carries the plan as sub_name (0 Free, 1 Premium, 2 Pro, 3 legacy Pro, 4 Team), paid_sub and mau. Read it like this:

  • billing_paused is true: sending is paused for an unpaid invoice, whatever the MAU. The owner updates the card or pays the invoice in the Billing portal, and sending resumes on its own.
  • billing_status is past_due and billing_paused is false: the grace period is running, and sending works until billing_grace_ends_at. Remind the owner to update the card.
  • Otherwise, on a Free account (sub_name 0): the 7-day trial is over and the account has more than 10 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 Native Notify.