What Is an Entitlement: Products, Subscriptions & Access
Learn what an entitlement is and how it differs from products and subscriptions. Check user access across web, iOS, and Android using the Cifrago API.
An entitlement is the permission granted to a user to access a specific feature in your app, such as "pro". The product is what you sell, and the subscription is how it is paid for; the entitlement is what your app checks to grant or revoke access. Separating these three layers makes it possible to sell the exact same feature across web, iOS, and Android.
Note: Cifrago is in its final development stage and is not yet onboarding new merchants. The API described here will be available soon.
Products, subscriptions, and entitlements
| Layer | What it is | Example |
|---|---|---|
| Product / price | What you sell | "Annual Pro" on the web, "Monthly Pro" on App Store |
| Subscription or purchase | How and when it is paid | Monthly renewal; active, past_due, or expired status |
| Entitlement | The permission checked by the app | pro |
Multiple products can grant the same entitlement. That way, a user who paid on the web and another who paid on iOS unlock the exact same feature.
How to check access with the Cifrago API
| Endpoint | What it does | Key |
|---|---|---|
GET /api/v1/subscribers/{appUserId} | Returns active entitlements (activeEntitlementKeys), their counts, subscriptions, and store purchases. If the user does not exist, it creates one | Public or secret |
POST /api/v1/receipts | Validates an App Store or Google Play receipt to ensure access is synced across all platforms | Public or secret |
POST /api/v1/subscribers/{appUserId}/grants | Grants a promotional entitlement, with an optional expiration date | Secret only |
GET /api/v1/catalog and GET /api/v1/offerings | App products, prices, and offerings | — |
On iOS and Android, in-app purchases must go through App Store or Google Play. Cifrago logs the receipt and maintains identical permissions everywhere. The permission lives on the server, not on the device. The public key can only fetch subscriber details and register purchases; calling any other endpoint returns a 401.
How it is modeled internally
entitlements: permissions for each app (for example,pro).price_entitlements: maps which price grants which permission.store_product_entitlements: maps which App Store or Google Play product grants which permission.- Consumables (credits, packs) are logged, but do not grant entitlements.
Frequently asked questions
What is an entitlement?
It is the permission granted to a user to access a specific feature or content in your app, such as "pro". Your code does not ask "did they pay for this product?", but rather "is this permission active?". This simplifies your codebase and makes selling across multiple platforms seamless.
How does an entitlement differ from a subscription?
A subscription represents the billing agreement: price, billing frequency, and status. An entitlement is the resulting access: as long as the subscription is active or in a grace period, the user retains the entitlement. Different subscriptions or one-time purchases can grant the exact same entitlement.
How does my app check if a user has access?
By calling GET /api/v1/subscribers/{appUserId} and checking if the entitlement is listed in activeEntitlementKeys. The response also includes subscriptions and app store purchases if you want to display billing details to the user.
Does it work with App Store and Google Play purchases?
Yes. The app sends the receipt to POST /api/v1/receipts, and Cifrago grants the same entitlement as it would for a web purchase. This allows a user who pays on an iPhone to access their features on Android or the web as well.
Building subscriptions?
Check the pricing and try the dashboard with sample data before integrating anything.