Subscription Invoices — SanadiqCloud Billing
Product version: 1.0.0+1 Last updated: 2026-10-02 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.
Voided invoices
When an organization is deleted, every invoice that is still unpaid (draft, open, sent, overdue, or failed) is set to voided and can no longer be paid. Paid invoices are kept unchanged for billing history.
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)