Skip to content
Pro · Professional tierRequires an Easy Invoice Pro Professional licence or above. Get Easy Invoice Pro →

E-Invoicing

A PDF is not a structured invoice. Across the EU, invoicing between businesses is moving to machine-readable documents that conform to EN 16931 — and for most of the businesses using this plugin, that stopped being optional.

This addon turns any invoice into a compliant structured document, and reads the ones your suppliers send you.

Do you need this?

If you invoice a business in the EU, almost certainly yes — and probably sooner than you think.

CountryWhat appliesFrom
GermanyMust be able to receive structured invoicesJanuary 2025
BelgiumPeppol exchange between VAT-registered businessesJanuary 2026
PolandKSeF, phasing inApril 2026
FranceEvery VAT-liable business must receive1 September 2026
FranceSMEs must issueSeptember 2027
GermanyIssuance obligation2027–28
EU-wideViDAby 2030

Note the pattern: receiving comes first, and it applies to everybody. You are likely to be sent a structured invoice by a supplier before you are required to send one. If that happens and you cannot open it, that is a problem today — not in 2027.

If you only invoice consumers, or only invoice within a single non-EU country, you don't need this addon.

What the formats are

EN 16931 allows two syntaxes, and the market never settled on one. You do not choose between them — your customer's country does.

  • Factur-X / ZUGFeRD — a PDF/A-3 file that is an ordinary PDF a person can read, with the machine-readable XML carried inside it. One file satisfies both the human and the system receiving it. Used by France and Germany.
  • UBL (Peppol BIS Billing 3.0) — plain XML. Used by Belgium, the Netherlands, Norway, and everything travelling over the Peppol network.

Easy Invoice produces both, from the same invoice.

Enabling

  1. Open Easy Invoice → Addons
  2. Find E-Invoicing (Factur-X / ZUGFeRD / Peppol UBL)
  3. Click Activate

A new E-Invoicing screen appears in the sidebar.

What you have to fill in first

A structured invoice has mandatory fields that an ordinary PDF invoice does not. The E-Invoicing screen shows you which of yours are still missing.

Your details — under Easy Invoice → Settings → Company Information:

  • Company name
  • Country (two-letter code, e.g. DE)
  • VAT number (including the country prefix, e.g. DE123456789)

Per invoice — on the invoice itself:

  • Customer name
  • Customer country (two-letter code)
  • Customer VAT number — needed for reverse charge, and expected by most receivers

If something is missing, the download tells you exactly which fields, all at once, rather than failing one at a time.

Sending an invoice

Each invoice row on Easy Invoice → All Invoices gains two links:

  • Factur-X — downloads a PDF with the XML embedded
  • UBL — downloads Peppol BIS 3.0 XML

Send whichever your customer's country expects. Both are built from the same invoice, so the figures cannot disagree.

Easy Invoice does not transmit the invoice

This addon produces the compliant file. It does not send it over Peppol, KSeF, or the French PDP network.

Those are accounts you hold with a provider — an access point, or a partner platform — and they involve registration, credentials, and a contract in your name. A WordPress plugin cannot hold those on your behalf. Keep sending through whatever channel you already use, and hand the file to your access point if you have one.

Reading an invoice you receive

On the E-Invoicing screen, under Reading invoices you receive, upload a supplier's file. Easy Invoice shows you what it says: who sent it, the amount due, the line items, and the VAT breakdown with any exemption reasons.

It reads:

  • Factur-X and ZUGFeRD PDFs
  • CII XML
  • UBL XML

Nothing is stored. The file is read, shown to you, and discarded — this is a viewer, not an inbox. It does not create an expense, post to your books, or pay anything.

Reverse charge and exemptions

A structured invoice cannot simply show 0.00 in the tax column. Each line carries a category code and, where the tax is zero, a stated reason — an invoice that zero-rates VAT without saying why is rejected.

If you turn on Work out reverse charge and exports automatically under Settings → Tax, Easy Invoice determines this for you from the two countries and two VAT numbers:

  • Both parties VAT-registered in different EU countries → reverse charge (category AE), no VAT charged, and the invoice states that the customer accounts for it
  • Supply leaving the EU → export (category G), zero-rated

That determination flows into both the PDF and the structured document. See Additional Tax Lines if you instead need several named taxes on one invoice.

Mixing taxable and non-taxable lines

If some lines on an invoice are marked non-taxable, the structured document reports them as a separate exempt group, with the taxable lines in their own group at your rate. This is required: each VAT breakdown group's tax amount must equal that group's own basis times its own rate.

You don't have to do anything for this — it follows from the per-line taxable checkbox you already use.

Discount before or after tax

EN 16931 defines the taxable basis as the line total minus discounts. That means the apply discount after tax setting cannot be expressed in a structured invoice.

If an invoice is configured that way, the download refuses and says so, rather than sending a tax authority a different total from the one your customer received. Switch that invoice to discount before tax.

Peppol participant identifiers

If you send over the Peppol network, your access point will expect an endpoint identifier for you and for your customer. These are read from:

  • easy_invoice_peppol_endpoint_id / easy_invoice_peppol_endpoint_scheme (site options — yours)
  • _easy_invoice_customer_peppol_id / _easy_invoice_customer_peppol_scheme (post meta — your customer's)

Without them the UBL is still valid EN 16931 and fine for portal upload or email; an access point will want them.

For developers

HookTypePurpose
easy_invoice_tax_treatmentfilterOverride the determined tax category for a document
easy_invoice_tax_exemption_reasonfilterChange the wording printed for a category
easy_invoice_einvoicing_before_serialiseactionAdjust the CII document before it is written
easy_invoice_facturx_before_generateactionAttach extra files, or change PDF/A conformance
easy_invoice_ubl_presetfilterSwap the UBL profile (Peppol by default; presets exist for IT, RO, AT, ES, NL)
easy_invoice_ubl_before_writeactionAdjust the UBL document before it is written

See also

Pro · ProfessionalE-Invoicing requires a Professional licence or above. Compare plans →