Plan is the primary purchase object; entitlements fill it; price is the paywall offer.

Plans & prices

Plan is the center of the model. Users buy a plan (via a paywall price).
Entitlements attach to the plan and are granted on successful payment / key.
Plan price is the concrete offer (month / year / lifetime / free) on the storefront.

Paywall
  └── plan_price  ← selected + passed to createPayment
        └── plan
              └── entitlements[]

Plan

FieldNotes
codeStable id (arken_pro_year, free)
namePaywall label
billing_typeone_time | recurring | lifetime | free
duration_daysTimed plans
is_lifetimeNo expiry
statusPublic paywall needs active
entitlementsRights this plan grants

Price (plan_prices)

FieldNotes
amountCharged amount. 0 = free
currencye.g. RUB
discount_percentUI only
payment_provideryookassa or free
is_activeMust be true

API also returns compare_at_amount, has_discount, display, is_free, requires_purchase, works_offline.

Free

  • Catalog / comparison on paywall
  • Not purchasable → free_plan_offline
  • Baseline features stay local in the app

Paid

  • Success → subscription period + plan entitlements
  • Additive to free-local features

SDK flow

  1. getPaywall — show offers.
  2. UI bullets from plan entitlements.
  3. createPayment({ plan_price_id }) — paid only.
  4. After pay — hasEntitlement(code) for gates.