Subscription Management
Consumables & One-Time Purchases
Sell credits, tokens, boosts, and lifetime unlocks on the same paywalls as your subscriptions, in the app stores and through Stripe web checkout. Entitlements decide whether a purchase unlocks access or gets used up.
Subscriptions are most of the revenue in most apps, but not all of it. Credit packs, tokens, boosts, and lifetime unlocks are one-time purchases, and until recently they meant a second purchase path outside the paywall tooling. Superwall sells them from the same paywalls as your plans, tracks them in the same purchase history, and applies one simple rule to tell them apart. A product with an entitlement grants ongoing access. A product without one is a consumable your app grants and uses up.
How the entitlement rule works
Superwall uses entitlements to decide whether a user is active. That fits
a lifetime unlock, which should turn an entitlement on forever. It does
not fit a pack of 100 credits, because buying credits should not make
someone a subscriber. So a consumable gets no entitlement. The purchase
still lands in customerInfo.nonSubscriptions with an
isConsumable flag, and your app grants the benefit on
transactionComplete.
-
Lifetime access. Set the product's period to None (Lifetime / Consumable) and attach the entitlement it unlocks. After purchase, the user holds that entitlement with no expiry.
-
Consumables. Same period setting, no entitlement. Listen for the purchase in your delegate, credit the user in your own system, and make the grant idempotent so a retried event never double-credits.
-
Purchase history that includes them. Apple leaves consumables out of App Store purchase history unless you opt in. Add
SKIncludeConsumableInAppPurchaseHistoryto Info.plist and the SDK reads them back on iOS 18 and later, with a StoreKit 1 fallback before that.
Step-by-step guides exist for
iOS
and Android, with Flutter and Expo versions alongside them. Expo apps
can also call consume() on an Android purchase token so a consumable
can be bought again.
One-time purchases on the web
Web checkout supports Stripe one-time prices with the same rule. Create a one-off price in Stripe, import it, and it appears in Superwall with the None period. Attach an entitlement for lifetime access, or leave it off for a credit pack. Checkout runs in payment mode, so the customer pays once, no Stripe subscription is created, trial fields are ignored, and revenue is tracked as a non-renewing purchase. Redeem and Redirect modes work unchanged, so a web-bought lifetime unlock can be redeemed inside the app.
Set up Stripe one-time pricesWhat you can do with it
- Put a lifetime plan on your annual paywall and test whether it lifts or cannibalizes.
- Sell AI credits inside the app and the same pack on the web at a lower price.
- Offer a one-time boost at the moment a user hits a limit, from a placement, with no release.
- Report on non-renewing revenue next to subscription revenue in one set of charts.
Get started
Create the product in App Store Connect, Google Play, or Stripe, add it in
Products with
the None period, and decide on the entitlement. Then add the product to a
paywall and handle transactionComplete if it is a consumable.
If your purchases go through your own billing system, see
Custom Products.