Invoices
Numbering, what an invoice contains, why it can be rebuilt byte-for-byte, and how to resend one.
An invoice is issued automatically and delivered to the customer as a PDF over WhatsApp — either when the order is confirmed, or after you approve payment. You choose which.
When it is issued
Set this in the dashboard under More → Invoice settings, When invoices are issued. It applies to future orders only; invoices already issued are never re-dated or withdrawn.
When the order is confirmed (the default). The invoice goes out with the payment request, so the customer has the amount and the reference in front of them when they pay — the way an invoice normally works for bank transfers. It is a request for payment, so it shows the full amount as due, and it is not re-issued when the payment arrives; the customer gets a plain "payment received" message instead.
If the order is later cancelled or expires unpaid, its invoice is marked void. It keeps its number and is never deleted, so the sequence has no gaps. A void invoice can still be viewed and rebuilt, but not resent.
After you approve payment. The invoice goes out once the money is in —
whether that came from PAID FB-1204 on WhatsApp or the Approve button in the
dashboard, or from the part-payment that finally clears the balance. A
part-payment that leaves a balance issues nothing. Every invoice number then
belongs to an order that was actually paid, and nothing is sent to a customer
who never pays.
Either way, these are the only two points. Nothing else in the system creates an invoice.
What it contains
- Your shop's name and details, and your invoice header settings.
- The invoice number and issue date.
- The order reference, so the two can always be tied together.
- The customer's name and delivery address.
- Every line: product, quantity, unit price, line total — as they were frozen on the order, not as your catalogue reads today.
- The total, in the order's own currency.
Numbering
Sequential per shop, zero-padded: INV-000001, INV-000002.
The number is reserved inside the same transaction that confirms the order or marks it paid (depending on your setting), so a later failure cannot consume one and leave a gap. Gaps in an invoice sequence are the kind of thing an accountant asks about.
Why it can be rebuilt exactly
The renderer is given the invoice record and its lines, and nothing else — no live shop settings, no current catalogue, no database access at all.
That constraint is what makes Rebuild safe. Regenerating a six-month-old invoice cannot pull in today's address, today's prices or today's shop name, because the renderer has no way to reach them. The document's own issue date is used as its creation timestamp, so a rebuild is byte-for-byte identical to the original.
Sending and resending
The PDF is uploaded to WhatsApp and sent as a document.
WhatsApp media ids expire after 30 days, so the id is treated as a delivery detail and never as the document itself. The stored PDF is the durable artifact, and Resend re-uploads from storage.
There is no approved template for documents, so a send outside the customer's 24-hour window is not attempted — it would fail. Instead it is logged, you are alerted, and Resend works the moment the customer messages you again.
Fonts and names
The PDF embeds a Unicode font, so Latin and extended-Latin names render correctly and the text is selectable and searchable rather than an image.
From the dashboard
The order screen offers View, Resend and Rebuild. There is also a Generate action for historical orders that were paid before invoicing existed.

