All formats
UN/CEFACT CII
D22B

Validate a CII invoice (UN/CEFACT D22B) via API

CII is the United Nations XML syntax for commercial exchange, and it is the one found inside a Factur-X PDF. It can also be submitted on its own, without a container.

What it actually is

One of the two syntaxes EN 16931 allows for carrying an invoice. It is not a competitor to UBL: both express the same data model with different tags. A business rule is therefore written twice, once per syntax, and that is what the sealed artifacts do.

What sets it apart from UBL

CII separates a discount applied to the document from one applied to a line price. Where UBL has a single rule on the discount indicator, CII has two — one per level. It is the most visible difference between the two rule sets, and the reason the same defect can carry two codes depending on syntax.

On its own or inside a PDF

Submitted on its own, the invoice is judged on its business rules. Submitted inside a PDF/A-3, it is judged on those too — plus the container checks.

CII or UBL: how many rules actually differ

55 rules apply identically to both syntaxes. 3 are specific to one — that is where, and only where, the choice of syntax changes the verdict.

  • BR-TMP-3

    The item price base quantity differs between gross and net price

  • PEPPOL-EN16931-R043-1

    The document-level allowance or charge indicator is neither “true” nor “false”

  • PEPPOL-EN16931-R043-2

    The applied price allowance indicator is neither “true” nor “false”

What Factlint judges it against

The sealed floors that accept this format today. Every verdict names the one that issued it, and stays replayable.

  • de-2026-08

    XRechnung 3.0.2 (KoSIT)

  • eu-en16931-2026-08

    EN 16931-1:2017

  • fr-2026-08

    EN 16931 CIUS France + BR-FR-CTC (FNFE)

The codes that apply

58 documented codes apply to this format. Here are 12, in alphabetical order.

See the codes

Try it

The free validator accepts this format without an account. Via API, the call is one line:

curl -X POST https://api.factlint.com/v1/validate \
  -F 'file=@facture.xml' \
  -F 'jurisdiction=FR' \
  -F 'ruleset=latest' \
  -F 'pinned=true' \
  -H 'Accept-Language: fr'
Open the validator