Automation Blog Pricing Contact
POST /v1/validate/facturx

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

Upload a Factur-X PDF and receive a structured JSON compliance report covering CII XSD schema, PDF/A-3b conformance, and all EN 16931 Schematron business rules. Every rule violation returned with its rule ID, severity, and XPath location.

Validate Factur-X REST API Request

Validating your Factur-X invoice programatically takes just a couple of lines of code:

Request
$ 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

Response — valid invoice
// 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

Response — invalid invoice
// 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
validbooleanPrimary flag to branch on. true when compliant, false when errors found.
detailstringHuman-readable summary, e.g. "Your invoice is Factur-X compliant…" or "Validation failed with 2 error(s)".
data.conformanceLevelstringDetected conformance level, e.g. EN16931, UBL 2.1, XRechnung.
Valid only
data.schemaValidbooleanXSD schema check passed.
data.schematronValidbooleanSchematron business rules check passed.
Invalid only
errors.xmlstring[]Raw Schematron messages with rule codes, e.g. "[BR-01] An invoice shall have a specification identifier."
errors.friendlyobject[]Plain-language error objects for UI display.
friendly[].rulestringRule identifier, e.g. BR-01, BR-CO-14.
friendly[].lineint?Invoice line item number, or null for document-level errors.
friendly[].messagestringHuman-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 docs

Zapier / 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 integrations

CI/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 example

Complete 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.

Ready to automate your invoices?

Start your 30-day free trial. No credit card required.

Get Started