How subscription access works in your app
Every subscription app needs to answer one simple question: should this user have access right now?
Billing providers like Stripe, Apple App Store, and Google Play handle payments. But they do not decide access inside your app. That logic lives in your backend, and it is often more complex than teams expect.
Billing is not the same as access
It is common to think a successful payment means a user should have access. In reality, subscription access depends on many factors beyond a charge.
- Has the subscription expired or renewed?
- Is the user in a trial period?
- Was the subscription canceled but still active?
- Is the subscription paused, refunded, or in a grace period?
- Does the subscription apply to this specific user or account?
Billing providers track financial state. Your app must translate that information into a clear access decision.
Subscription state changes over time
Subscriptions move through different states such as trialing, active, canceled, expired, or past due. These changes often happen through webhooks or server notifications that arrive outside your app's normal request flow.
This is especially important for mobile apps. Apple App Store and Google Play send updates independently of your app, so your backend cannot rely on client-side checks alone.
Why checking subscriptions at runtime is hard
Some teams try to query Stripe, Apple, or Google every time they need to check access. This approach creates several problems:
- Different APIs across providers
- Slow or latency-sensitive access checks
- Complex edge cases and retry logic
- Difficult testing of state changes
- Duplicated logic across services
Over time, this leads to fragile authorization logic and subtle bugs where users lose access incorrectly or keep access longer than they should.
A single source of truth for subscription access
A more reliable approach is to treat subscription access as derived state. Instead of asking billing providers at runtime, your app relies on one source of truth that reflects the current access status of each user.
This source of truth stays up to date by processing renewals, cancellations, expirations, and other subscription events, then turning them into clear access decisions your backend can trust.
Where SubTru fits
SubTru acts as the subscription access layer between your app and billing providers like Stripe, Apple App Store, and Google Play. It focuses on answering one question in a simple and reliable way:
Does this user currently have access to subscription features?
By centralizing subscription state and access logic, SubTru lets your backend make fast and reliable access checks without duplicating complex subscription handling across platforms.
Future guides will show how this model applies to real SaaS backends, mobile apps, and web applications.