Payments (Stripe Checkout) — SanadiqCloud Billing
Product version: 1.0.0+1 Last updated: 2026-08-03 Audience: Users with
billing:update
A. There Is No Payments Page
The Flutter app does not ship /billing/payments or a payment-history list. Paying happens through Stripe Hosted Checkout from:
- Plans → Pay (new subscription — Checkout subscription mode)
- Subscription / Hub → Complete payment (pending subscription or unpaid invoice after adjust)
- Invoice detail → Pay unpaid (Checkout payment mode)
- Adjust stages quantity/term changes and creates an unpaid invoice — you pay that invoice via Checkout, not by entering a card on the Adjust form
B. Checkout Flow
- App creates a checkout session via the billing API.
- You are redirected to Stripe Checkout.
- Success/cancel return URLs under
/billing/subscription/checkout/…confirm or abandon the session; Stripe webhooks also finalize payment on the server.
Card data is entered on Stripe’s hosted page — not in a SanadiqCloud Elements form.
C. Do Not Expect (current app)
- Saved card vault / last-four display UI
- Stripe Customer Portal
- Retry-against-card-on-file button
- Payment status ledger (Succeeded / Failed / Refunded list)
- In-app PCI card iframe (Elements)
- Itemized proration breakdown UI (Adjust invoices a single update-charge total; see Subscription)
Related: Overview | Plans | Invoices | Subscription