A Peppol document and a Peppol transmission depend on different sets of code lists, maintained by different bodies on different release cycles. Document content draws on UN/CEFACT and ISO lists that Peppol subsets. The network itself draws on the OpenPeppol eDEC code lists. A value that is valid in the parent standard can still be rejected, because Peppol accepts only its own subset.
The two families
| Family | Governs | Maintained by | Current |
| BIS Billing document code lists | Values inside the invoice or credit note | UN/CEFACT, ISO and CEF, subset by OpenPeppol | Peppol BIS Billing 3.0.21 |
| eDEC code lists | Values used to address and route the transmission | OpenPeppol | Peppol Code Lists v9.7, 2 July 2026 |
The two families are versioned independently. An artifact update to BIS Billing does not update the eDEC lists, and the reverse is also true.
Document code lists
| List | Governs | Source |
| UNCL1001 | Invoice and credit note type | UN/CEFACT D.16B, Peppol subset |
| UNCL5305 | VAT category | UN/CEFACT D.16B, Peppol subset |
| EAS | Scheme of an electronic address, BT-34 and BT-49 | CEF |
| ICD | Scheme of a party or location identifier | ISO 6523 |
| VATEX | Reason for VAT exemption | CEF |
| UNCL4461 | Payment means | UN/CEFACT |
| UN/ECE Rec 20 and 21 | Unit of measure | UN/ECE |
| ISO 4217 | Valuutta | ISO |
| ISO 3166-1 | Maa | ISO |
eDEC code lists
| List | Governs |
| Document Types | Which document types may be exchanged, and how a receiver declares support |
| Participant Identifier Schemes | Which identifier registers may be used to address a participant |
| Processes | Which business processes are supported |
| Transport Profiles | Which transport protocols may be used |
| SPIS Use Case Identifier | Use cases within the SPIS framework |
Entries in these lists carry a state. A row marked deprecated should not be used for newly issued documents. A row with a removal date becomes unusable in the Peppol network after that date. Scheme identifiers are never reused, so a deprecated code does not come back with a different meaning.
Why a valid code can still fail
Peppol publishes a subset of most document code lists. UNCL1001 in its full UN/CEFACT form is far larger than the Peppol subsets: the invoice code list contains 27 codes and the credit-note code list 5. Profile-specific rules may narrow the permitted values further. A code that is valid UN/CEFACT and outside the relevant subset produces a BR-CL- error.
If a validator rejects a code used in a current registration or document, compare the validator’s artifact version with the current Peppol release before changing the data.
Code-list changes in BIS Billing 3.0.21
Version 3.0.21 changed several code lists, including removals that may affect stored master data.
| List | Change in 3.0.21 |
| EAS | 14 codes removed, none added, 11 descriptions changed |
| ICD | 3 codes added: 0246, 0247, 0248 |
| ISO 4217 | ANG and BGN removed, XCG added |
OpenPeppol states that the EAS list had been pointing at the wrong source list and therefore contained codes that were not usable. Version 3.0.21 removes those codes and corrects the descriptions of eleven others.
If your customer master holds an address under a code that no longer exists, the document fails BR-CL-25 or PEPPOL-EN16931-CL008. Audit stored scheme codes against the current list at each release.
Earlier additions include EAS 0244 in 3.0.20 and the Slovak tax identification code 0245 in the 3.0.20 hotfix in January 2026.
Keeping code lists current
Update validation artifacts before the mandatory-from date for a BIS release. Track the eDEC code lists separately, since they follow their own schedule.
Run a regression set against the new artifacts before the mandatory date. Added codes may enable new registrations or document values. Deprecated or removed codes may require stored receiver data to be updated.
Auditing code lists at a release
Perform the audit between the publication date and the mandatory date.
- Read the release notes and write down every code list that changed, with the codes added and removed. The notes name them individually.
- Query your own data for the removed codes. Scheme codes in the customer master, VAT category codes in product and tax setup, unit codes in article data, currency codes in price lists.
- For every match, determine the receiver’s current identifier. Confirm the current registration rather than assuming a fixed replacement mapping.
- Update validation artifacts and run the regression set. Do this after the data audit, so that failures you see are new defects rather than known stale codes.
- Record which pages, integrations and mappings depend on the changed lists, so the next release starts from a list rather than from a search.