Profiles, versions and rule updates
E-invoicing rules are moving targets: KoSIT, OpenPeppol, CEN and FNFE-MPE all publish new rule sets on their own schedules, each with its own legally binding effective date. This page explains the policy the API follows so your integration never has to chase those dates itself.
The core promise
By using our service, you are always compliant to the latest regulatory standards out of the box, no changes required from your end. We do the compliance monitoring for you. Changes are shipped automatically.
Two rules govern everything below:
- What we stamp is what we validate. A created invoice always declares exactly the profile it was validated against: the
CustomizationIDin the output and the rule set applied ensures your document is 100% compliant. - Omitted means currently in force. When you do not pin a version, the API applies the rule set that is legally effective on the day of the request, the same rules a receiving portal or access point enforces.
How a new specification version rolls out
Authorities announce new versions months before they become binding and define a transition window in which both versions are accepted. The API mirrors that lifecycle exactly:
| Phase | What happens |
|---|---|
| 1. Published | The authority publishes the new version (for example, KoSIT announces XRechnung 4.0). It becomes available as an opt-in options.version value during the official transition window, so early adopters can test against the new portal rules before they are mandatory. |
| 2. Effective date | On the authority's effective date, the default flips: requests without options.version start producing and validating the new version. The flip is announced ahead of time in the changelog and by email, and the date is the regulator's, not ours. |
| 3. Transition | The outgoing version stays pinnable via options.version until the authority's sunset date, for integrations that submit to portals lagging behind the switchover. |
| 4. Sunset | After the sunset date, pinning the retired version returns a clear HTTP 400 naming the supported values, never a silent upgrade. |
Rule maintenance releases need nothing from you
Most updates are not new specification versions but maintenance releases of the validation artifacts: OpenPeppol ships rule updates twice a year with stated effective dates, the CEN EN 16931 Schematron gets periodic fix releases, and the Dutch Peppol Authority refreshes SI-UBL on the Peppol calendar. These change which documents pass validation, but not the API contract: no request field, identifier or response shape moves. We apply them on their effective dates, so validating against InvoiceXML always means validating against the rules a receiver runs today.
Profiles: the other axis
Versions answer "which revision of a rule set"; profiles answer "which rule set". On
POST /v1/create/ubl, options.profile selects the
CIUS: peppol-bis-3 (default), en16931,
nlcius, ehf, xrechnung
or pint. On the validation endpoints there is nothing to select at all: the
profile is detected from the document's specification identifier (BT-24), the matching rules are applied,
and the response reports what ran in data.profile and
data.customizationId.
Documents declaring a profile we have no dedicated
rules for are validated against the EN 16931 base rules and flagged with a
PROFILE-DETECTION warning instead of being rejected.
Rule sets currently applied
Every artifact is the official publication of its authority, vendored unmodified and swapped on the authority's effective dates:
| Rule set | Version applied | Source |
|---|---|---|
| EN 16931 base rules | Validation artifacts 1.3.16 (UBL and CII) | CEN / European Commission |
| Peppol BIS Billing 3.0 | 3.0.20, the November 2025 release including the 2025-Q4 hotfix, mandatory on the Peppol network since 23 February 2026. Also carries the Norwegian rules used by EHF Billing 3.0. | OpenPeppol |
| XRechnung | Specification 3.0.2 (the version in force in Germany), KoSIT Schematron release 2.5.0, both CII and UBL syntax | KoSIT |
| NLCIUS | SI-UBL 2.0.3.12, the release effective since 23 February 2026 | Dutch Peppol Authority |
| Peppol PINT Billing | 1.1.2, mandatory since 9 March 2026 | OpenPeppol |
| Factur-X / ZUGFeRD profiles | Factur-X 1.0.8 per-profile schemas and rules (MINIMUM, BASIC WL, BASIC, EXTENDED; EN 16931 profile documents use the CEN rules above, XRechnung-declared ones the KoSIT rules) | FNFE-MPE / FeRD |
Upcoming and already on our calendar: the Peppol May 2026 release and SI-UBL 2.0.3.13 both become mandatory
on 17 August 2026 and will be applied that day, and XRechnung 4.0 (announced by KoSIT as the German CIUS of
the revised EN 16931) will appear as an options.version value when its
transition window opens.