Factur-X Validation API
The InvoiceXML Factur-X validation API validates a PDF against the official EN 16931 Schematron and PDF/A-3b conformance rules — the same checks run by French Plateformes Agréées before accepting invoices.
Drop your Factur-X PDF here
or browse files to upload
POST /v1/validate/facturx · Accepted format: PDF · Max 20 MB
Validate Factur-X REST API Request
Validating your Factur-X invoice programatically takes just a couple of lines of code:
$ curl -X POST https://api.invoicexml.com/v1/validate/facturx \ -H "Authorization: Bearer YOUR_API_KEY" \ -F "[email protected]"
Validate Factur-X API Response
Both valid and invalid invoices return HTTP 200. Branch on the valid boolean to determine compliance. The response includes the detected conformance level (e.g. EN16931, BASIC, EXTENDED) so you know exactly which standard was checked.
Validation errors come in two formats: raw Schematron codes for machines, and a friendly error message array with easy to read and comprehend messages ready to display directly to end users, no more cryptic rule IDs or XPath expressions.
Valid Factur-X Invoice Response
// 200 OK { "valid": true, "detail": "Your invoice is Factur-X compliant and meets the EN 16931 specifications.", "data": { "schemaValid": true, "schematronValid": true, "conformanceLevel": "EN16931" } }
Invalid Factur-X Invoice Response
// 200 OK { "valid": false, "detail": "Validation failed with 3 error(s)", "data": { "conformanceLevel": "EN16931" }, "errors": { "xml": [ "[BR-01] An invoice shall have a specification identifier (BT-24).", "[BR-06] An invoice shall contain the seller name (BT-27).", "[BR-08] An invoice shall contain the document total amount." ], "friendly": [ { "rule": "BR-01", "message": "The invoice is missing a specification identifier." }, { "rule": "BR-06", "message": "The seller must have a name." }, { "rule": "BR-08", "line": 2, "message": "Line item 2: Document total amount with VAT is missing." } ] } }
What the Factur-X validation API checks
CII XSD Schema
Validates the embedded factur-x.xml against the UN/CEFACT CII D16B XSD schema. Catches malformed XML, missing required elements, incorrect data types, and namespace errors before Schematron runs.
EN 16931 Schematron
Validates all 200+ EN 16931 business rules (BR-xx codes). Includes arithmetic rules like BR-CO-14 (invoice total VAT must equal sum of VAT breakdown amounts), conditional rules like BR-AE-05 (reverse charge VAT rate must be zero), and party rules like BR-01 (specification identifier must be present).
Factur-X Profile Rules
Detects the declared profile (MINIMUM, BASIC WL, BASIC, EN 16931, EXTENDED) and validates that the invoice only contains fields permitted by that profile. A MINIMUM invoice that includes line items fails here.
PDF/A-3b Conformance
Checks that the outer PDF container meets ISO 19005-3 archival requirements: embedded fonts, ICC colour profile, XMP metadata structure, and correct AFRelationship declaration for the XML attachment. A PDF that fails PDF/A-3b will be rejected by Plateforme Agréée platforms in France regardless of XML validity.
REST API Response schema
Both valid and invalid invoices return HTTP 200. Use the valid boolean to branch your logic. The response includes the detected conformance level and human-readable error messages with optional line numbers — designed so you can render them directly in your UI without post-processing. Create/convert endpoints return HTTP 400 with the same errors structure on validation failure.
| Field | Type | Description |
|---|---|---|
| Always present | ||
| valid | boolean | Primary flag to branch on. true when compliant, false when errors found. |
| detail | string | Human-readable summary, e.g. "Your invoice is Factur-X compliant…" or "Validation failed with 2 error(s)". |
| data.conformanceLevel | string | Detected conformance level, e.g. EN16931, UBL 2.1, XRechnung. |
| Valid only | ||
| data.schemaValid | boolean | XSD schema check passed. |
| data.schematronValid | boolean | Schematron business rules check passed. |
| Invalid only | ||
| errors.xml | string[] | Raw Schematron messages with rule codes, e.g. "[BR-01] An invoice shall have a specification identifier." |
| errors.friendly | object[] | Plain-language error objects for UI display. |
| friendly[].rule | string | Rule identifier, e.g. BR-01, BR-CO-14. |
| friendly[].line | int? | Invoice line item number, or null for document-level errors. |
| friendly[].message | string | Human-readable error description suitable for end users. |
Integrate Factur-X validation into your workflow
REST API
Call POST /v1/validate/facturx from any language. Returns structured JSON in under 2 seconds. Use the valid boolean to gate downstream processing — only forward invoices that pass.
API docsZapier / Make / n8n
Add a validation step to your no-code invoice workflow. On validation failure, route the errors[].message values to Slack, email, or your helpdesk.
Automation integrationsCI/CD Pipeline
Validate your invoice generation output on every build. The API returns a non-zero errorCount for non-compliant output, making it straightforward to fail a build step if generated invoices don't pass Schematron validation.
View cURL exampleComplete Factur-X Toolkit
Everything you need to create, convert, validate, and extract Factur-X invoices — via REST API or online.
Build a Factur-X PDF/A-3 from structured data — no source PDF required.
Validate a Factur-X PDF against EN 16931 XSD schema and Schematron business rules.
Convert any PDF invoice into a Factur-X PDF/A-3 with embedded CII XML using AI extraction.
Extract the embedded CII XML from a Factur-X PDF for ERP import or further processing.
Why Factur-X Validation is Essential for 2026 Compliance
As the French e-invoicing mandate approaches, ensuring every invoice meets the EN 16931 standard is no longer optional. A Factur-X file is more than just a PDF; it is a complex hybrid container that must align perfectly across three different layers: the visual PDF layer, the embedded Cross Industry Invoice (CII) XML, and the PDF/A-3b archival metadata.
Our Factur-X Validation API provides a deterministic "gatekeeper" for your financial workflows. By integrating a programmatic validation step, businesses can prevent the submission of non-compliant documents to government portals like Chorus Pro or private Plateformes de Dématérialisation Partenaires (PDP).
Comprehensive Schematron and XSD Checks
Unlike basic XML parsers, the InvoiceXML engine performs deep-tissue validation. This includes checking the UN/CEFACT CII D16B schema for structural integrity and executing over 200 Schematron business rules. These rules catch the most common reasons for invoice rejection, such as:
- Mathematical discrepancies in VAT breakdowns and total amounts (BR-CO-12).
- Missing mandatory identifiers like Seller VAT IDs or Specification identifiers (BR-01).
- Profile-specific constraints, ensuring that "MINIMUM" or "BASIC" profiles do not contain forbidden data fields.
Automating Compliance with REST and No-Code
By using a RESTful API approach, developers can automate compliance checks within their existing ERP or accounting software. This reduces manual auditing time and eliminates the risk of "silent failures" where an invoice appears correct to the human eye but fails machine-readable validation. Whether you are using a custom tech stack or no-code tools like Zapier and Make.com, our validator returns structured JSON reports that make debugging compliance errors simple and fast.
Frequently Asked Questions
Which Factur-X profiles does the API validate?
The API validates all five Factur-X profiles: MINIMUM, BASIC WL, BASIC, EN 16931, and EXTENDED. The declared profile is detected automatically from the XML SpecificationIdentifier and the corresponding XSD schema and Schematron rules are applied.
What is the difference between error and warning in the response?
An error (severity: error) is a blocking rule violation — the invoice is non-compliant and will be rejected by platforms like Chorus Pro. A warning (severity: warning) is an advisory finding that does not block compliance but indicates a best-practice deviation, such as a missing optional field that receivers commonly expect.
Does validation check the PDF/A-3b layer or only the XML?
Both. The API runs a full PDF/A-3b conformance check on the outer PDF container — embedded fonts, ICC colour profile, XMP metadata, AFRelationship — in addition to CII XSD schema validation and EN 16931 Schematron rules on the embedded XML. A PDF that fails PDF/A-3b will be rejected by French Plateformes Agréées regardless of XML validity.