Subscription Invoices — SanadiqCloud Billing

Product version: 1.0.0+1 Last updated: 2026-10-02 Audience: Users with billing:read (billing:update to 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

PDF

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)