Same file, same rule set, same verdict — ten years from now.
Factlint takes an electronic invoice (Factur-X, XRechnung, CII) and returns either a usable document or the exact list of what is missing: for each gap, its rule, its XPath location, and whether it can be fixed automatically.
curl -X POST https://api.factlint.com/v1/validate \ -F "file=@facture_2026_048.pdf" \ -F "ruleset=eu-en16931-2026-08" \ -F "pinned=true"
Factlint's non-negotiable guarantees
Built for demanding architects and developers. A validation infrastructure that is deterministic, zero-trust and reproducible.
Nothing is kept
Full GDPR confidentialityProcessing is 100% in volatile memory (RAM). Your invoice payload — customer names, addresses, amounts, IBAN bank details — is never written to disk, nor to any log file.
Replayable verdicts
Every report is backed by a rule set that is pinned, time-stamped and hashed (SHA-256). Even when the standard moves on, the verdict stays identical and verifiable ten years later.
No amount is ever written
Financial discrepancies (VAT, net and gross totals, taxable bases) are computed and offered in the suggested_value field. They are never rewritten automatically, so that the liability stays where it belongs — with you.
No sign-up required
Immediate accessThe validation endpoint POST /v1/validate is open and free, and available straight away — no account and no API key needed for your integration tests.
The compliance pipeline
Five independent building blocks, or a single POST /v1/process call that orchestrates them all.
Validate
5 automated levels of checking
Fix
Automatic correction of defects
Check third parties
Live checks on SIREN / VAT numbers
Convert
Extract or attach the XML
Seal
Cryptographic proof of the verdict
How the Validate step works
PDF/A-3 container (veraPDF), attachments and XMP, profile coherence, XSD validation, then European (CEN EN 16931) and national Schematron.
Need to run everything in one request?
The /v1/process endpoint chains validation, autofix, BAN/VIES enrichment, conversion and cryptographic sealing into a single HTTP call.
A dated verdict you can replay years later
Regulatory rule sets keep moving (Factur-X 1.08 to 1.09, half-yearly CEN revisions, DGFiP specifications V3.0 to V3.2). An invoice that was in order when it was issued risks being wrongly rejected two years later by a newer validator.
At Factlint, every verdict carries the exact identifier, the SHA-256 hash and the effective date of the rule set — and of every artefact used (Schematron, XSD, veraPDF, Saxon).
The eu-en16931-2026-08 manifest is sealed in full. Its artefacts (Saxon 12.5, CEN Schematron 1.3.16) are hashed and kept executable.
One page per error code
Every error returned by the API is documented with its technical explanation, the standard behind it, and what to do to fix it.
The amount due including VAT does not match the net total plus VAT
The total amount including VAT (BT-112) must be exactly the net total (BT-109) plus the total VAT amount (BT-110).
The profile declared in the XMP differs from the one in the XML
`fx:ConformanceLevel` in the PDF's XMP metadata must match the profile URN declared in the embedded XML.
The output colour profile is missing
A PDF/A-3 must declare an OutputIntent with an ICC profile — in practice sRGB for an invoice.
The specification identifier is missing
The invoice must declare the URN of the profile it conforms to, in `ram:GuidelineSpecifiedDocumentContextParameter/ram:ID`.
Europe is switching over, country by country
10 jurisdictions tracked, every line sourced and dated. Statuses are computed from the dates, never typed in by hand — which is what stops them going stale without anyone noticing.
receiving — all VAT-registered businesses.
issuing — large and mid-sized businesses.
issuing — all other resident VAT-registered businesses.
issuing — businesses with turnover above €800k.
Drop in an invoice, see what breaks
Five automated levels of checking, a readable report, and the detail of what ran. No account, no API key, no volume limit — and the document is never kept.