VAT & Currency

Tax categories, VAT calculation modes, rounding modes, supported currencies, and locale formatting.

InvoicePDF produces a baseline VAT-correct visual PDF. All money math runs in exact integer arithmetic — floats never touch a calculation.

Tax categories

Each line item declares a taxCategory. The category is explicit input — the API never infers it from country codes.

CategorytaxRateBehavior
standardthe standard rate, e.g. "19"VAT charged at the given rate.
reducedthe reduced rate, e.g. "7"VAT charged at the given (reduced) rate.
zeromust be "0"Zero-rated. No VAT charged; the line is still reported.
exemptmust be "0"VAT-exempt. No VAT charged.
reverse_chargemust be "0"VAT = 0 on the line. The invoice renders the mandatory reverse-charge legal note, and buyer.vatId is required.

A non-zero taxRate on zero, exempt, or reverse_charge returns 422 INVOICE_ERR_VAT_INCONSISTENT.

Reverse charge renders this note on the document: "Reverse charge — VAT to be accounted for by the recipient (Article 196, Directive 2006/112/EC)."

taxMode

ValueBehavior
summary (default)Lines are grouped by rate. Each group's VAT is computed once from the summed net. The document shows a VAT breakdown table: one row per rate (rate, taxable base, VAT amount). This is the EU-standard method and avoids per-line penny drift.
per_lineVAT is computed and rounded per line. The document shows a VAT column on each line; totals sum the rounded line VATs.

rounding

ValueBehavior
per_rate (default)VAT is rounded once per rate group.
per_lineVAT is rounded per line.

Both modes are legal; they can legitimately differ by cents on the same invoice data, depending on jurisdiction convention. Rounding uses half-away-from-zero, the EU commercial default.

Supported currencies

20 ISO 4217 currencies. Decimal places come from the currency, never from locale — most use 2 decimals; JPY and ISK use 0.

CurrencyDecimals
EUR2
USD2
GBP2
JPY0
CHF2
SEK2
PLN2
NOK2
DKK2
CZK2
HUF2
RON2
BGN2
ISK0
CAD2
AUD2
NZD2
TRY2
ILS2
ZAR2

A currency code outside this table returns 422 INVOICE_ERR_INVALID_FIELD.

Locale formatting

locale (BCP 47, default en-IE) controls the decimal separator, grouping separator, currency symbol placement, and date formatting — never the number of decimal places, which always comes from the currency.

LocaleAmountDate
de-DE1.234,56 €08.07.2026
en-IE€1,234.5608/07/2026

Limits

LimitValue
Max line items200 — INVOICE_ERR_TOO_MANY_LINES above this
Max rendered pages50 — INVOICE_ERR_TOO_MANY_PAGES above this
Max request body size256 KB