A Factur-X invoice is two documents in one file: a PDF anyone can open, and CII XML their software ingests. Tooling that runs one rule set across the whole ladder gets it wrong, failing EXTENDED invoices for using extended fields. InvoiceXML detects the declared profile and validates against that profile's own schema and rules, MINIMUM through EXTENDED, from the official 1.0.8 package. And with the French reform dated September 2026, the rules keep themselves current.
curl -X POST https://api.invoicexml.com/v1/create/facturx \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "invoice": { ... }, "options": { "language": "fr", "brandColor": "#234E52" } }'
HTTP/1.1 200 OK Content-Type: application/pdf Content-Disposition: attachment; filename="invoice-facturx-2026-0184.pdf" # validated CII inside, rendered PDF outside
The hybrid's whole point is that nobody has to choose. Your customer's accountant opens an invoice; their ERP parses a data set. You control each layer independently.
Use our rendered invoice face in English, German, or French, with your brand color on headings and accents. Or skip our template entirely: hand us your own PDF via options.pdfUrl (up to 20 MB) and we embed the XML into it. Your design, our compliance.
You post BT-first JSON; we compute totals, VAT breakdowns, and defaults, build the CII XML, and validate it against the full rule set before the file leaves the API. The identifier stamped into the XML is the rule set it survived, so receivers parse with confidence.
The ladder runs from header-only MINIMUM to everything-included EXTENDED. Validation reads BT-24 from the embedded XML and applies that profile's XSD and Schematron, so a document is only ever measured against the rules it claims.
| Profile | What the XML carries | Identifier detected (BT-24) | What we run |
|---|---|---|---|
| MINIMUM | The bare bones to book: parties and totals, no line items | urn:factur-x.eu:1p0:minimum | The MINIMUM-restricted XSD plus its own rule set (1.0.8) |
| BASIC WL | Richer header data with document-level charges, still no lines | urn:factur-x.eu:1p0:basicwl | The BASIC WL XSD plus its own rule set |
| BASIC | A complete invoice with line items, an EN 16931 subset | ...en16931:2017#compliant#urn:factur-x.eu:1p0:basic | The BASIC XSD plus the BASIC rules |
| EN 16931 | The full European core data set | urn:cen.eu:en16931:2017 | CEN artifacts 1.3.16 |
| EXTENDED | Beyond the core: extra structures for complex billing | ...en16931:2017#conformant#urn:factur-x.eu:1p0:extended | The EXTENDED XSD plus the EXTENDED rules; extended fields are never a failure |
PROFILE-DETECTION warning. Documents declaring XRechnung route to the KoSIT rules instead; that world has its own home on the XRechnung hub.
Generation, validation, embedding, extraction: every hybrid operation as an endpoint, each with a free in-browser companion.
JSON in, a validated hybrid PDF out, your invoice number in the file name.
Open toolPer-profile checks on the embedded XML of any hybrid you send or receive.
Open toolAlready have the CII? We embed it into a PDF/A-3 hybrid.
Open toolPull the embedded CII out of a received hybrid, untouched.
Open toolReceived hybrids become BT-mapped JSON for your ERP.
Open toolTurn UBL, CII, or XRechnung files into hybrid PDFs.
Open toolFactur-X is published jointly by FNFE-MPE in France and FeRD in Germany, and the French reform made it a core format. We vendor the official 1.0.8 validation package unmodified, per-profile XSD plus Schematron, regression-test it against the publishers' own sample sets, and apply specification updates on their effective dates, server-side. Your integration posts the same JSON the day before and the day after.
Check the versioning policy and the artifacts live todayEvery French business must be able to receive e-invoices; large and mid-size ones must issue. Issuance for everyone follows in September 2027.
Validating a hybrid means finding the XML first. Every attachment name the family uses is recognized, the document is extracted, its profile detected, and only then do rules run. Each finding still carries the layer that objected.
No XML inside returns a PDF-EMBED finding. UBL inside returns PDF-EMBED-SYNTAX with directions, never a cryptic schema error.
{
"valid": false,
"data": {
"hasEmbeddedXml": true,
"profile": "en16931",
"customizationId": "urn:cen.eu:en16931:2017"
},
"errors": [
{
"rule": "BR-CO-14",
"layer": "en16931",
"message": "The invoice total VAT amount does
not match the sum of VAT breakdown
amounts. Check that all VAT
calculations are consistent.",
"btCodes": ["BT-110", "BT-117"],
"fields": ["totals.taxTotalAmount",
"vat[].taxAmount"]
}
]
}
The reform routes domestic flows through registered platforms (the PDP ecosystem) with Factur-X as a core format, while B2G stays on Chorus Pro. The same file is equally legal east of the Rhine.
B2G submission runs through Chorus Pro, and the European baseline is Directive 2014/55/EU. The country-by-country picture lives on the Mandate Map.
zugferd.de identifiers map to the same profiles.options.pdfUrl (an absolute URL, up to 20 MB) and we fetch your PDF with SSRF, size, and content-type protections, then embed the validated CII XML into it. The language and brandColor options only affect our rendered template, so they are ignored on this path.PDF-EMBED finding. A PDF carrying UBL instead of CII returns PDF-EMBED-SYNTAX with directions to the UBL validator. Recognized attachment names: factur-x.xml, zugferd-invoice.xml (legacy), and xrechnung.xml (the reference profile).Validate, convert and embed compliant e-invoices through one API. Start your 30-day free trial. No credit card required.