Paid checkout flow via Platform API and confirmation URL.
Payments
Flow
1. User selects a paid plan_price on the paywall
2. App calls createPayment(plan_price_id, return_url)
3. API creates provider payment + pending Platform payment row
4. App opens confirmation_url
5. Provider webhook → Platform marks succeeded → grants entitlements / subscription period
6. App refreshes entitlements (and updates local cache)
Client rules
- Require auth JWT + public key
- Never send provider secrets from the client
- Do not call createPayment for free prices
- After return, call
getMyEntitlements()again
Response (paid)
{
"data": {
"payment_id": "uuid",
"provider_payment_id": "…",
"status": "pending",
"confirmation_url": "https://…",
"amount": 1490,
"currency": "RUB",
"requires_purchase": true
}
}
Free attempt
{
"error": "free_plan_offline",
"is_free": true,
"requires_purchase": false,
"works_offline": true
}
Display discount
discount_percent is cosmetic. Charged amount is always amount. Strike-through uses compare_at_amount.