Skip to content

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.

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.

The Invoices page is a single list, newest first:

ColumnMeaning
NumberInvoice number — typically INV-YYYY-XXXX. Auto-incremented.
DateWhen the invoice was issued.
DescriptionWhat it’s for: Renewal Fiber 10M, Data top-up 10 GB, Plan change to Fiber 20M.
AmountTotal billed, in your ISP’s currency.
Statuspaid, pending, partially paid, cancelled.
ActionsView, Download PDF, Copy public link.

Tapping a row opens the invoice detail with line items, totals, taxes, and operator contact info.

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.00
    • Data 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.

StatusMeaning
paidFully paid. You don’t owe anything.
pendingIssued, not paid yet. Your operator may suspend service if it stays pending past the due date.
partially paidSome payment received. Difference still owed.
cancelledVoided 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.

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.

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.

You get a new invoice automatically when any of these happen:

EventInvoice contents
Subscription createdOne line: New subscription — <plan>
Plan renewedOne line: Renewal — <plan>
Plan changed mid-cycleOne line: Service change — <old> → <new> (prorated <days> days)
Data top-upOne line: Data top-up — <X> GB @ <price>/GB
Prepaid card redeemedLine(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).

Downloading last month’s invoice for tax

Section titled “Downloading last month’s invoice for tax”
  1. Invoices → scroll to the prior month.
  2. Find the renewal row.
  3. Click Download PDF.
  4. Save the file with a date in the name: e.g. internet-2026-04.pdf.
  5. 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”
  1. Invoices → tap the row.
  2. Click Copy public link (or scan the QR with your phone, which opens the URL).
  3. Paste the link into email / WhatsApp / wherever.
  4. 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””
  1. Tap the invoice → look at the line items for what’s being charged.
  2. Check the date — was this generated when you made a recent change (plan change, top-up)?
  3. Look at the matching transaction in Buy Extra Data → Bonus History or the Change Plan record.
  4. If still confused, open a Support Ticket and reference the invoice number.
CaseBehavior
Currency mismatchInvoices 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 operatorSoft-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 transactionSome 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 timeoutRare, 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.

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.

The Invoices tab has no permission gates. Visibility:

ConditionEffect
Customer JWT validTab visible.
customer_username ownershipOnly your invoices appear.
Public QR tokenAnyone with the URL can view (read-only).