Entitlements & products

Model your catalog: create the entitlements your app checks, the store products you sell, and the mappings between them. Do this in the dashboard, or over the API.

1. Create entitlements

In Dashboard → Entitlements → New entitlement, give each a key (the stable, code-facing identifier) and a display name. Keys are lowercase, no spaces — premium, pro, team.

2. Create products & map them

In Dashboard → Products → New product, add each store SKU with:

  • Storeapp_store, play, stripe, web.
  • Store product id — exactly as registered in that store's console.
  • Typesubscription, non_consumable, or consumable.
  • Entitlements — one or more entitlement keys this product grants (the mapping).
Match store product ids exactly

The store_product_idmust be byte-for-byte identical to the identifier in App Store Connect / Play Console. A mismatch means a real purchase won't resolve to an entitlement (unknown_product).

Worked example

An app with a lifetime unlock and a monthly subscription, on both stores:

EntitlementProduct (store · id)Type
premiumplay · app_premium_lifetime
app_store · app_premium_lifetime
non_consumable
proplay · app_pro_monthly
app_store · app_pro_monthly
subscription

Both platforms' SKUs map to the same entitlement key, so your app checks premium / pro and never branches on platform.

Doing it over the API

The dashboard is the supported path, but the same operations are available to server-side tooling (secret key):

typescript
// Entitlements and products are created via the authenticated dashboard endpoints.
// From code, prefer the dashboard for catalog setup, then use the runtime API:
//   POST /v1/subscribers/{id}/purchases   → record a purchase (maps product → entitlement)
//   POST /v1/subscribers/{id}/grant       → grant an entitlement directly
//   GET  /v1/offerings                     → read your catalog for a paywall

With a catalog in place, grab your keys: API keys.