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

  1. App creates a checkout session via the billing API.
  2. You are redirected to Stripe Checkout.
  3. 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