Do a Factur-X / ZUGFeRD invoice's own numbers actually reconcile? Drop a file
below and its totals, tax breakdown, category/rate coherence and payable are recomputed from the
invoice's structured data the way a RECEIVER's accounting system would before booking it — so a document
whose figures don't add up is caught before you pay it. No signup. Honest: a file we cannot parse is a
real error, never a fabricated consistent.
🇫🇷 France mandate: from 1 September 2026 every business must RECEIVE structured e-invoices — and reclaim input VAT off numbers it can defend. A supplier's PDF that disagrees with its own XML is exactly the mismatch this catches before it reaches your books.
BR-CO-15 (tax basis + tax = grand total) · BG-23 breakdown reconciliation · BR-CO-17
per-category tax (basis × rate) · amount-payable vs grand total · EN 16931 category-vs-rate coherence
(zero-rated / exempt / reverse-charge / standard) · currency (BT-5) and seller/buyer VAT presence ·
payee-IBAN integrity (ISO 7064 mod-97 check digits, and the IBAN's country vs the seller's — the classic
invoice-redirect signal). An
error-severity finding means the document is internally inconsistent; warnings and info are
flags a receiver should see but that don't by themselves make it "inconsistent".
Scope, stated honestly: this recomputes the invoice's structured data (the EN 16931 XML — for a Factur-X / ZUGFeRD file, the XML embedded in the PDF). It does not OCR or read the visual PDF page, so it verifies that the machine-readable figures reconcile — the numbers your accounting system actually imports — not that the rendered picture matches them.
The same maths, one call. POST https://facturproof.com/v1/consistency — 1 credit, or the free no-key
trial below. See the OpenAPI spec.
# Free, no key: curl -F "file=@invoice.pdf" https://facturproof.com/v1/consistency/try
Get an API key — free tier Conformance validator → Human-readable viewer →
FacturProof — e-invoice validation, consistency and VAT verification with signed, offline-verifiable attestations. A finding is honest: an unreadable file is an error, never a pass.