Invoices & Receipts
The Invoices tab keeps a clean history of every charge on your account — new subscription, renewal, plan change, data top-up, prepaid card redemption. Each invoice is a PDF you can download and a public URL with a QR code you can share for tax or expense purposes.
How to get here
Section titled “How to get here”After login, from the portal:
- Sidebar → Invoices
- Direct URL:
/customer/invoices - Mobile app: More → Invoices
The tab is visible to every customer; the list is filtered to your own subscriber row.
Layout
Section titled “Layout”The Invoices page is a single list, newest first:
| Column | Meaning |
|---|---|
| Number | Invoice number — typically INV-YYYY-XXXX. Auto-incremented. |
| Date | When the invoice was issued. |
| Description | What it’s for: Renewal Fiber 10M, Data top-up 10 GB, Plan change to Fiber 20M. |
| Amount | Total billed, in your ISP’s currency. |
| Status | paid, pending, partially paid, cancelled. |
| Actions | View, Download PDF, Copy public link. |
Tapping a row opens the invoice detail with line items, totals, taxes, and operator contact info.
What’s on an invoice
Section titled “What’s on an invoice”A standard invoice contains:
- From — your operator’s company name, address, registration number, contact details.
- To — your name, phone, address, the username on the service.
- Line items — what’s charged. Most invoices have one or two items:
Service renewal — Fiber 10M (2026-04-15 to 2026-05-15)— $30.00Data top-up — 10 GB @ $1.50/GB— $15.00
- Subtotal, Tax (if your operator charges VAT or similar), Total.
- Bank / payment info — how to pay if the invoice is
pending. - QR code — links to the public receipt URL (see below).
- Issue date and due date.
- Notes from the operator (optional).
The PDF design and paper size are chosen by your operator in Settings → Billing (17 sizes supported — A4, Letter, A3, A5, B4, etc.). The same data renders on screen, on PDF, and on the public receipt URL.
Statuses
Section titled “Statuses”| Status | Meaning |
|---|---|
| paid | Fully paid. You don’t owe anything. |
| pending | Issued, not paid yet. Your operator may suspend service if it stays pending past the due date. |
| partially paid | Some payment received. Difference still owed. |
| cancelled | Voided by the operator. Not collectible. |
Status changes are visible in the audit log on the operator side. Customers don’t have a way to dispute or change status from the portal — that’s a Support Ticket conversation.
PDF download
Section titled “PDF download”Tap Download PDF to get a printable copy. The PDF is generated server-side by rendering the same React invoice template via headless Chromium — it looks identical to the web view, with the operator’s logo, fonts, and color scheme.
Use cases:
- Tax records. Keep one PDF per invoice for your accountant.
- Reimbursement. Hand the PDF to your employer if you expense home internet.
- Disputes. Email the PDF when raising a question with the operator.
Public receipt URL + QR code
Section titled “Public receipt URL + QR code”Every invoice has a public URL that doesn’t require login. The URL contains a long random token (in the QR code) — anyone who has the URL can view the invoice; nobody else can guess it. This lets you:
- Show the QR code on your phone for someone to scan.
- Email the URL to an accountant who isn’t a customer.
- Share with the operator’s WhatsApp for clarification.
The URL is permanent — it survives even if you log out of the portal. If you ever need to revoke access, contact your operator to have the QR token rotated.
When invoices are created
Section titled “When invoices are created”You get a new invoice automatically when any of these happen:
| Event | Invoice contents |
|---|---|
| Subscription created | One line: New subscription — <plan> |
| Plan renewed | One line: Renewal — <plan> |
| Plan changed mid-cycle | One line: Service change — <old> → <new> (prorated <days> days) |
| Data top-up | One line: Data top-up — <X> GB @ <price>/GB |
| Prepaid card redeemed | Line(s) reflecting what the card was applied to. |
| Refill (operator action) | Line: Quota refill — <details> |
| Manual invoice (operator action) | Whatever the operator typed. |
You don’t get an invoice for:
- Balance transfers (those are wallet movements, not charges).
- Wallet top-ups via cash to the operator (those become wallet credits, no invoice).
Common workflows
Section titled “Common workflows”Downloading last month’s invoice for tax
Section titled “Downloading last month’s invoice for tax”- Invoices → scroll to the prior month.
- Find the renewal row.
- Click Download PDF.
- Save the file with a date in the name: e.g.
internet-2026-04.pdf. - Hand to your accountant or upload to your expense system.
Sharing an invoice with someone who’s not a customer
Section titled “Sharing an invoice with someone who’s not a customer”- Invoices → tap the row.
- Click Copy public link (or scan the QR with your phone, which opens the URL).
- Paste the link into email / WhatsApp / wherever.
- Recipient opens the link in any browser — no login needed.
”An invoice shows up that I don’t recognise”
Section titled “”An invoice shows up that I don’t recognise””- Tap the invoice → look at the line items for what’s being charged.
- Check the date — was this generated when you made a recent change (plan change, top-up)?
- Look at the matching transaction in Buy Extra Data → Bonus History or the Change Plan record.
- If still confused, open a Support Ticket and reference the invoice number.
Edge cases
Section titled “Edge cases”| Case | Behavior |
|---|---|
| Currency mismatch | Invoices are always in the operator’s configured currency. If you pay in a different currency, the conversion happens off-portal (between you and the operator). |
| Invoice deleted by operator | Soft-delete only on the operator side — the row stays in the DB but is hidden from the list. You won’t see it. |
| No invoice for a transaction | Some movements (wallet transfers, internal adjustments) are tracked as transactions but not as invoices. Use the operator’s transaction view or open a ticket. |
| PDF generation timeout | Rare, but if PDF rendering fails, the View URL still works. Try again in a minute; if it persists, the operator’s server may be overloaded. |
Privacy and access
Section titled “Privacy and access”Each invoice has a subscriber_id foreign key. The portal queries only invoices for the logged-in customer_username → matched subscriber. There’s no way to enumerate or list other subscribers’ invoices.
The public QR URL is not scoped by login — anyone with the URL sees it. Treat the URL like a “view-only password” — share it deliberately.
Permissions
Section titled “Permissions”The Invoices tab has no permission gates. Visibility:
| Condition | Effect |
|---|---|
| Customer JWT valid | Tab visible. |
customer_username ownership | Only your invoices appear. |
| Public QR token | Anyone with the URL can view (read-only). |
Related pages
Section titled “Related pages”- Customer Portal Overview — the rest of the tabs.
- Change Plan — generates a
service_changeinvoice. - Buy Extra Data — generates a
data_topupinvoice. - Support Tickets — disputing an invoice.
- Admin → Billing Settings — operator-side invoice template configuration.