Subscription Invoices — SanadiqCloud Billing
Product version: 1.0.0+1 Last updated: 2026-08-03 Audience: Users with
billing:read(billing:updateto pay)
These are subscription invoices (plan charges and capacity-update invoices), not Sales/customer invoices.
A. Invoice List
Path: /billing/invoices.
Pending update payment CTAs open this list pre-filtered to status open.
| Filter | Options |
|---|---|
| Search | Invoice number / id |
| Status | All, draft, open, sent, paid, overdue, failed, cancelled, refunded, voided |
| Dates | From / to |
Columns
Number, Status, Issue date, Due date, Total.
B. Invoice Detail
Path: /billing/invoices/:id (or detail route used by the app).
- Header totals and status
- Line items table (description, qty, unit price, line total)
- Pay when unpaid → Stripe Checkout in payment mode (
POST /invoices/{id}/checkout) - Unpaid invoices may be edited (notes, due date, tax, discount) or deleted when permissions allow
The Flutter client can open a PDF when a document_url is present on the invoice payload. The billing API does not currently produce document_url, so PDF download is typically unavailable until that field is populated by a future change.
Typical subscription line items
When the billing service builds a subscription invoice from plan rates, lines commonly include:
| Line | Quantity | Unit price |
|---|---|---|
| Monthly base fee | Selected months | rate_per_month |
| Per-employee fee | Selected employees / seats | rate_per_employee |
| Storage fee (GB above free allowance) | Billable GB only | rate_per_gb |
Billable GB = max(selected storage GB − plan free_storage_gb, 0). If billable GB is zero, the storage line is omitted.
Adjust subscription creates an unpaid invoice for the update charge with itemized lines (prorated seat/storage increases and/or added-month components — see Subscription); paying it activates the staged changes. Prior invoices are not recalculated. Older unpaid update invoices generated before itemization may still show a single "Subscription update" line — delete and re-adjust to regenerate.
There is no separate Payments ledger page; payment happens from Plans, Subscription/Hub, or Invoice detail via Checkout.
Related: Overview | Subscription | Payments (Checkout)