Factur-X & ZUGFeRD, explained: one PDF that is also a structured invoice

Factur-X (France, by FNFE-MPE) and ZUGFeRD (Germany, by FeRD) are not two formats — they are the same one. From ZUGFeRD 2.1 / Factur-X 1.0 onward the two are technically identical and interoperable: a PDF/A-3 file with a structured EN 16931 XML invoice embedded inside it. A person opens the PDF and reads it; a system opens the same file and parses the XML. That is the whole idea of a hybrid e-invoice.

Legal obligations and the profile your buyer or platform requires vary by country and by mandate phase. This page explains the document format. Always confirm the live requirement with your PDP, your buyer, and the relevant tax authority — Slipstack tracks the format, not your filing status.

Why “hybrid”

A pure structured invoice (UN/CEFACT CII or OASIS UBL XML) is perfect for machines and unreadable to people. A plain PDF is the opposite. Factur-X / ZUGFeRD carries both in one file: the visible PDF is a normal-looking invoice, and attached to it is factur-x.xml — the same data as EN 16931 CII XML. This works because PDF/A-3 (ISO 19005-3), the archival PDF standard, explicitly permits arbitrary embedded files. The embedded XML, not the rendered pixels, is the legally meaningful part.

The embedded file is named factur-x.xml in ZUGFeRD 2.x and Factur-X (older ZUGFeRD 1.0 used ZUGFeRD-invoice.xml); the XRECHNUNG profile uses xrechnung.xml.

The profiles, least to most data

A Factur-X / ZUGFeRD file declares a profile — how much structured data the XML actually carries:

Factur-X / ZUGFeRD vs XRechnung vs plain CII/UBL

They are layers, not rivals. EN 16931 is the European semantic standard (the meaning of the fields). CII and UBL are two XML syntaxes that express it. XRechnung is Germany’s CIUS — a stricter national tightening of EN 16931, usually delivered as standalone XML with no PDF wrapper. Factur-X / ZUGFeRD takes the EN 16931 CII XML and wraps it inside a PDF/A-3. France accepts Factur-X; Germany accepts ZUGFeRD (EN 16931 profile and up) as well as XRechnung. Because both ride on EN 16931, one well-formed document travels the Franco-German corridor.

Generate one from JSON

Slipstack turns the same JSON you already use for PDF invoices into a Factur-X hybrid PDF — the PDF/A-3 with the CII XML embedded — or standalone CII XML if your buyer wants pure structured data.

// Factur-X / ZUGFeRD hybrid PDF (PDF + embedded EN 16931 CII XML)
const res = await fetch("https://slipstack.dev/api/v1/einvoice", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SLIPSTACK_KEY}`, // Pro plan
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    options: { format: "facturx-pdf" }, // or "xrechnung-cii" for standalone XML
    data: {
      from: {
        name: "Atelier Lumiere SARL",
        countryCode: "FR",          // required for e-invoices
        vatId: "FR32123456789",     // required when taxRate > 0
        address: "12 Rue de la Roquette",
        city: "Paris", postalCode: "75011",
      },
      to: { name: "Müller Bau GmbH", countryCode: "DE", vatId: "DE811569869" },
      number: "FX-2026-0042",
      date: "2026-09-02",
      currency: "EUR",
      items: [{ description: "Conseil / Beratung", quantity: 8, unitPrice: 120 }],
      taxRate: 20,
    },
  }),
});

Validate before you send — free, no account

Whether you build the XML with Slipstack or your own code, paste or upload the CII (or UBL) into the free EN 16931 / XRechnung core validator — up to 20 checks a day, no signup. Scope, stated plainly: it checks the EN 16931 core schematron (ConnectingEurope release v1.3.16). It does not check the KoSIT XRechnung CIUS or Peppol BIS rules, which are stricter.

What Slipstack is — and is not

Slipstack generates and validates the e-invoice document (the Factur-X / ZUGFeRD PDF and its CII XML). It is not a PDP / Peppol access point: it does not transmit invoices, exchange them with your buyers, or report data to a public portal. You pick a registered platform for transmission and e-reporting — Slipstack produces and checks the compliant file that flows through it.

Mandate context by country: France e-invoicing mandate · Germany e-invoicing mandate.

Generate a Factur-X / ZUGFeRD invoice from one JSON call

EN 16931 CII embedded in a PDF/A-3, or standalone XML. Validate the core rules for free first.