CII Invoice Generator API
Test the CII REST API, submit your invoice details and download a validated UN/CEFACT CII XML. EN 16931 Schematron-checked.
Every profile, minimum to extended
More invoice detail
- MINIMUM
- BASIC WL
- BASIC
- EN 16931
- EXTENDED
Invoice Automation Wherever You Work
Built for developers and AI-driven workflows. Make your invoices compliant on your ERP or AI Agent via our secure MCP server and REST API.
Built for Developers
Submit a JSON invoice document, receive a validated UN/CEFACT CII XML. ZUGFeRD and Factur-X embeddable, EN 16931 Schematron-checked.
- Native, scanned and photographed PDF invoices, no preprocessing needed
- Every response validated against official Schematron rules
Supports ZUGFeRD · Factur-X · XRechnung · UBL · CII · EN 16931
API Documentation$ curl -X POST https://api.invoicexml.com/v1/create/cii \ -H "Authorization: Bearer sk_live_..." \ -H "Content-Type: application/json" \ -d '{ "invoice": { "invoiceNumber": "INV-2025-001", "seller": { "name": "Acme GmbH" }, "buyer": { "name": "ACME Corp" }, "lines": [ { "item": "Consulting", "quantity": 1, "netPrice": 1000, "vatRate": 19 } ] } }' // => 200 OK: returns the validated invoice file
One flag adds the French Flux 2 checks to your CII
Plenty of teams generate standalone CII and assemble the Factur-X container themselves, or hand the raw XML to the platform that transmits it. Under the French e-invoicing reform that payload eventually meets the BR-FR rule set (the Flux 2 checks derived from the FNFE-MPE artifacts), and it is much cheaper to fail in your build pipeline than at the Plateforme Agréée. POST /v1/create/cii runs those checks during generation when you ask for them:
{ "invoice": { ... }, "options": { "rules": ["br-fr"] } }
The XML you get back has passed both gates in one round trip: the EN 16931 rule set its specification identifier declares, and the French mandate rules on top of it, from the authorised VAT rate list (BR-FR-16) to the SIREN legal registration (BR-FR-10) and the coded payment-terms mentions (BR-FR-05). The BT-24 identifier is never rewritten, so the document still declares exactly what it is. Three details worth knowing:
- A document that declares the EXTENDED-CTC-FR profile already carries the Flux 2 rules in its own pipeline; asking for br-fr on top never runs them twice.
- The header-only MINIMUM and BASIC WL profiles are rejected with a clear 400: the mandate reads them as booking aids, not fiscal invoices.
- Violations return as ordinary findings with BR-FR rule ids and JSON field paths, in the same errors array your integration already parses.
Full details in the CII creation API reference.
Validation errors in German, French and English
Ask for German, French or English and every finding comes back as a plain-language explanation of what is wrong and how to fix it, ready to show in your app as it is. Each finding also carries its rule id, Business Term code and field path, so you can highlight the form field that caused it.
-
One field, three languages
Send validationLanguage with the upload, or options.validationLanguage with a create call: German, French or English. Validate, create, embed, convert and transform all speak it, with no translation layer to build or maintain on your side.
-
Every rule explained, not just translated
Every EN 16931 business rule, the XRechnung and Peppol BIS rules and the French BR-FR rules each have their own reviewed message, written for the people who fix invoices rather than for Schematron authors. No rule codes in the text, just what to change.
-
A PDF report in the same language
The printable report follows the same setting: verdict, field names, dates and every finding, in the language your reader works in.
The seller's VAT identifier must start with the code of the country that issued it, for example DE123456789. Greece uses EL.
{ "rule": "BR-CO-09", "btCodes": ["BT-31"], "fields": ["seller.vatIdentifier"], "message": "The seller's VAT identifier must start with the code of the country that issued it, for example DE123456789. Greece uses EL." }
rule, btCodes and fields stay the same in every language
The PDF report, as your reader gets it
POST /v1/validate/…/report
One finding, three languages
The same finding as each language returns it.
The seller's VAT identifier must start with the code of the country that issued it, for example DE123456789. Greece uses EL.
Die USt-IdNr. des Verkäufers muss mit dem Code des ausstellenden Landes beginnen, z. B. DE123456789. Griechenland verwendet EL.
Le numéro de TVA du vendeur doit commencer par le code du pays qui l'a attribué, par exemple DE123456789. La Grèce utilise EL.
We keep you up to date.
Integration stays the same.
Invoices go in, validated invoices come out. When an authority publishes a new rule set, we load it on its effective date while the line keeps moving.
You don't track regulatory updates to change the rulebooks. We ship it while it runs, on its effective dates.
Beyond the Form: Automate Your CII Invoice Workflow
This form is perfect for one-off invoices. But if you generate dozens or hundreds of CII documents, for ZUGFeRD embedding, ERP integration, or e-invoicing network delivery, InvoiceXML gives you the tools to automate the full pipeline with a single API call or no-code trigger.
1. Developer-First REST API
Integrate CII generation directly into your ERP, accounting software, or custom application with a single HTTP call:
- • Single Endpoint: POST your invoice fields as JSON and receive a validated UN/CEFACT CII XML back instantly, ready for standalone delivery or PDF/A-3 embedding.
- • Stateless & Secure: We process your data in memory and return the XML. No financial data is stored or logged.
- • Full Compliance: Every generated CII document is validated against EN 16931 Schematron business rules before delivery, the same rules ZUGFeRD and Factur-X validators enforce.
- • ZUGFeRD & Factur-X Ready: The output CII XML is structurally identical to the XML embedded in ZUGFeRD and Factur-X documents, attach it to a PDF/A-3 in your own pipeline or use our /create/zugferd and /create/facturx endpoints to get the full hybrid PDF in one step.
Pro Tip: Check out our API Documentation to see the full request schema and response format.
2. Email Gateway, Send JSON, Receive CII XML
The InvoiceXML Email Gateway requires zero API integration, any system that can send email can trigger CII generation:
- • How it works: Email a JSON attachment containing your invoice data to your dedicated InvoiceXML gateway address. We generate the validated CII XML and email it back, ready for delivery or ZUGFeRD embedding.
- • Legacy ERP Friendly: Any system with outbound email capability can trigger CII generation, no webhook setup, no API keys in your code, no infrastructure changes.
- • Batch Support: Send multiple invoice objects in a single JSON array and receive all corresponding CII XML files in return.
3. No-Code Automation (Zapier, Make.com & n8n)
Connect InvoiceXML to the tools your team already uses, no developer required:
- • ERP & Accounting: Trigger CII generation automatically whenever a new invoice is created or approved in your system, no manual export step.
- • Google Sheets / Airtable: Turn a row of invoice data into a validated CII XML and forward it to your document management system or e-invoicing network automatically.
- • ZUGFeRD Pipeline: Chain CII generation with a PDF/A-3 embedding step in Make.com or n8n to fully automate ZUGFeRD hybrid invoice production without writing a line of code.
Why UN/CEFACT CII Is the XML Backbone of European E-Invoicing
UN/CEFACT CII (Cross Industry Invoice) is one of the two official XML syntaxes of the European EN 16931 e-invoicing standard. It is the format embedded inside every ZUGFeRD and Factur-X document, making it the most widely deployed structured invoice format in Germany and France. Beyond hybrid PDFs, CII is used as a standalone XML exchange format by ERP systems, accounting platforms, and e-invoicing networks across the EU and internationally.
| Feature | Our CII Implementation |
|---|---|
| Standard | EN 16931 + UN/CEFACT CII |
| Output Format | Standalone CII XML (PDF/A-3 embeddable) |
| Schema Version | CII (CrossIndustryInvoice) |
| Compatible Formats | ZUGFeRD, Factur-X, standalone XML |
| Validation | EN 16931 Schematron business rules |
Complete CII Toolkit
Everything you need to create, convert, validate, and preview CII invoices, via REST API or online.
Frequently Asked Questions
Does InvoiceXML store my data?
No. We process your invoice data in memory and discard it immediately after the XML is generated and downloaded. Nothing is persisted.
Can I embed the generated CII XML in a ZUGFeRD or Factur-X PDF?
Yes. The output is a fully validated CII XML that is structurally identical to the XML embedded in ZUGFeRD and Factur-X documents. You can attach it to a PDF/A-3 using any compliant library. Alternatively, use the /create/zugferd or /create/facturx endpoints to get the complete hybrid PDF in a single API call.
What is the difference between CII and UBL?
Both are valid EN 16931 syntaxes. CII (UN/CEFACT) is the format used by ZUGFeRD and Factur-X hybrid PDFs, it is the dominant choice in Germany and France. UBL (OASIS) is the native format of the Peppol network and is used for B2G invoicing in Nordic countries, Singapore, and Australia. Choose CII when your recipient uses ZUGFeRD, Factur-X, or a CII-based ERP integration.
What is the difference between /create/cii and /create/zugferd?
/create/cii returns a standalone CII XML file, ideal for ERP import, direct transmission, or manual PDF/A-3 embedding in your own pipeline. /create/zugferd returns a complete ZUGFeRD-compliant PDF/A-3 with the CII XML already embedded, ready for direct B2B exchange.
Can I automate CII generation from my ERP via email?
Yes. The InvoiceXML Email Gateway lets any system with outbound email trigger CII generation without API integration. Email a JSON attachment to your dedicated gateway address and receive the validated CII XML in reply.
Does /create/cii support the French e-invoicing mandate (Flux 2)?
Yes. Set options.rules to ["br-fr"] and the generated CII is validated against the BR-FR Flux 2 rule set of the French CTC mandate in the same call, on top of the rule set its declared profile already selects. That covers the mandate-specific content a Plateforme Agréée checks at intake: the seller's SIREN, the authorised French VAT rates, the cadre de facturation, electronic party addresses, and the mandatory coded mentions for late-payment penalties, recovery costs and escompte. The specification identifier (BT-24) is never modified, so the output remains a plain EN 16931 or Factur-X profile document that simply proved it also satisfies the French rules.
Ready to automate your invoices?
Validate, convert and embed compliant e-invoices through one API. Start your 30-day free trial. No credit card required.