GenerateSaaS
Billing

Store events and rules

What each store event does to a plan, the store review rules the app satisfies, and sandbox testing.

RevenueCat delivers every store event to your server, which owns the plan. The app renders what the server answers and never grants anything itself.

What an event does

Store eventEffect
Initial purchase, renewalGrants or extends the plan
Product changeMoves the plan; a downgrade lands at period end
CancellationFunded to the end of the period, then expires
Refund, chargebackRevokes what that transaction granted
Credit packGrants its credits once per transaction
The nightly expiry sweepSpares a lapsed store row 48 hours where it carries store ledger history, so the reconcile can adopt it

Effects are idempotent: the same event delivered twice grants once.

Store rules

RuleWhy
Digital goods are bought in-appA website checkout link is rejected
Every signed-in user reaches the paywallA paywall behind a web purchase fails review
Restore purchases is always offeredBoth stores require a restore path
Manage and cancel are shownThe store's surface, or the Customer Center when config.payment.mobile.customerCenter is on
The external purchase link ships offOn "us-only" it shows for a self-funded holder of a plan the store did not sell, on a US storefront, and its tap opens the disclosure a store requires, not the browser

Sandbox testing

config.payment.mobile.allowSandboxEvents decides whether a sandbox purchase takes effect on a deployment running as production, such as staging.

Never set it on the deployment your customers use. It is a checked-in constant with no environment override, and a sandbox event accepted there grants a real plan nobody paid for.

On this page