What an invoice PDF must contain: the fields tax authorities actually check
The eleven fields present on a compliant invoice in the EU, UK and US, the ones people forget, and how to bake them into a template so they are never missing.
An invoice is a tax document before it is a request for money. Auditors do not care how it looks; they care that a fixed set of fields is present, consistent across the sequence, and stored for as long as the law requires. Here is what actually gets checked.
Fields required almost everywhere
- Seller's legal name, address and tax registration number
- Buyer's legal name and address
- A unique, sequential invoice number
- Issue date, and the supply date if it differs
- A description of each line: quantity, unit price, net amount
- Tax rate and amount per rate — or the reason none applies
- Total net, total tax, total gross
- Currency
- Payment terms and due date
Get these right and most jurisdictions are satisfied. The differences are in the details below.
European Union
The VAT Directive sets a common baseline, and member states add to it:
- Both VAT numbers on cross-border B2B supplies. Without the buyer's number, the seller generally
must charge domestic VAT.
- Reverse charge wording where the buyer accounts for the tax. The invoice must say so —
"Reverse charge" or the local equivalent — and show no VAT amount.
- Sequential numbering without gaps. A cancelled invoice is corrected with a credit note, never by
deleting or renumbering.
- Retention of six to ten years depending on the country.
E-invoicing mandates are spreading: Italy, France, Poland and others require structured formats (FatturaPA, Factur-X, KSeF) for some transactions. A PDF alone may not satisfy them — check before assuming a generated document is enough.
United Kingdom
Broadly the EU baseline post-Brexit: VAT registration number, a sequential identifying number, time of supply, and the rate and amount of VAT per line. Simplified invoices are permitted under £250 with fewer fields.
United States
There is no federal invoice format. Sales tax is state-level, and what matters is usually contractual rather than statutory: a purchase order number, remittance details, and terms. Where sales tax applies, show it as a separate line — many buyers' systems will reject an invoice that bakes it into the unit price.
The mistakes that cause real problems
Gaps in numbering. The most common audit finding. Generate numbers server-side in a transaction, never in the template, and never from a client that might retry.
Editing an issued invoice. Once sent, it is a record. Corrections go on a credit note that references the original number.
Missing reverse-charge wording. Expensive: the tax authority may assess the VAT you did not charge, plus penalties.
Rounding drift. Compute totals in your ledger, in minor units, and pass formatted strings to the template. A template that multiplies and rounds independently will eventually disagree with your accounts by a cent — and that cent shows up in a reconciliation report.
Storing only the data, not the document. Regenerating an invoice years later with a changed template produces a different document from the one the customer received. Store the rendered PDF.
Baking it into generation
Two rules make compliance structural rather than hopeful:
1. Required fields fail loudly. If a required field is empty, the render should error rather than produce a document with a blank where the VAT number belongs. 2. The numbering lives in your billing code, inside the same transaction that creates the invoice record — not in the request, not in the template.
With an API, that looks like:
invoice = create_invoice_record(order) # numbering happens here, atomically
assert invoice.seller_vat and invoice.buyer_name # fail before rendering
pdf = requests.post(
"https://pdfgeny.com/api/v1/render",
headers={"Authorization": f"Bearer {KEY}"},
json={"template": "invoice", "data": invoice.as_template_data(),
"store": True, "response": "json"},
).json()
invoice.pdf_url = pdf["document_url"]
invoice.save()
The invoice template carries the standard fields; for prepayment situations use the proforma invoice, which must be marked clearly so it is not booked as a receivable.
Archiving
Retention periods run from six to ten years in most of Europe, and formats matter as much as duration — a PDF that will not open in 2035 is not a record. For long-term storage, generate PDF/A, which embeds fonts and colour profiles so the file renders identically decades later:
{"template": "invoice", "data": {…}, "pdfa": true}
Details on what the standard requires are in PDF/A from HTML.