# Peppol R004 and R007 errors: CustomizationID and ProfileID

> PEPPOL-EN16931-R004 and R007 reject invoices with a wrong CustomizationID or ProfileID. The exact values for BIS Billing 3.0, the '::2.1' trap and how to fix it.

- Canonical URL: https://einvoices.uk/news/peppol-error-r004-r007-customization-profile-id
- Published: 24 October 2026 (2026-10-24)
- Last updated: 24 October 2026 (2026-10-24) (not updated since publication)
- Author: Floris Lindenaar, Editor, e-invoicing expert (https://einvoices.uk/authors/floris-lindenaar)
- Publisher: einvoices.uk (https://einvoices.uk)
- Type: Guide
- Topics: Validation, Technical, Peppol
- Language: en-GB (UK English); covers the United Kingdom

## Sources

- [PEPPOL-EN16931-R004 – Rules for Peppol BIS 3.0 Billing](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-R004/)
- [PEPPOL-EN16931-R007 – Rules for Peppol BIS 3.0 Billing](https://docs.peppol.eu/poacc/billing/3.0/rules/ubl-peppol/PEPPOL-EN16931-R007/)
- [PEPPOL-EN16931-UBL.sch (Peppol BIS Billing 3.0.21)](https://docs.peppol.eu/poacc/billing/3.0/files/PEPPOL-EN16931-UBL.sch)
- [Release notes for Peppol BIS Billing v3](https://docs.peppol.eu/poacc/billing/3.0/release-notes/)
- [Peppol Policy for use of Identifiers 4.4.0 (2025-02-06)](https://docs.peppol.eu/edelivery/policies/Peppol-EDN-Policy-for-use-of-identifiers-4.4.0-2025-02-06.pdf)
- [Peppol Code Lists v9.7 (document types and processes)](https://docs.peppol.eu/edelivery/codelists/)

## Key points

- BIS Billing 3.0 CustomizationID must start with urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0.
- Since release 3.0.21 (mandatory from 17 August 2026), R004 also fails any CustomizationID containing '::', such as one copied from the SMP document type identifier ending ::2.1.
- ProfileID must be an approved process: urn:fdc:peppol.eu:2017:poacc:billing:01:1.0, or urn:peppol:bis:billing_with_response for the new profile 02.
- Process identifiers are case sensitive, so an upper-case ProfileID fails R007.
- 3.0.21 prefixes Peppol rule messages with the rule ID, which may affect log parsers.

---

**PEPPOL-EN16931-R004** means your `cbc:CustomizationID` is wrong. **PEPPOL-EN16931-R007** means your `cbc:ProfileID` is not an approved business process. Both are fatal. For a normal Peppol BIS Billing 3.0 invoice or credit note the two values must be exactly:

```xml
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
```

If those were working until August 2026 and then started failing, read the section on `::2.1` below.

## The rules, as published in BIS 3.0.21

| Rule | Message | Test |
|---|---|---|
| BR-01 (EN 16931) | "An Invoice shall have a Specification identifier (BT-24)." | CustomizationID not empty |
| R004 | "Specification identifier MUST begin with the value 'urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0' and follow the format rules for the identifier." | `starts-with(..., 'urn:cen.eu:...billing:3.0') and not(contains(..., '::'))` |
| R001 | "Business process MUST be provided." | `cbc:ProfileID` exists |
| R007 | "Business process MUST have an approved identifier." | `$profile != 'Unknown'` |

The `$profile` variable in the 3.0.21 Peppol schematron is set to:

- **'01'** for `urn:fdc:peppol.eu:2017:poacc:billing:01:1.0`, and for two temporary French profiles, `urn:peppol:france:billing:regulated` and `urn:peppol:france:billing:non-regulated`
- **'02'** for `urn:peppol:bis:billing_with_response`
- **'Unknown'** for anything else, which triggers R007

## The '::2.1' trap (new in 3.0.21)

The 3.0.21 release notes say: "Fatal rule PEPPOL-EN16931-R004 in UBL and CII schematron updated to reflect the correct requirement for CustomizationID without version information." The release was published on 20 May 2026 and is "Mandatory to use from: 2026-08-17".

The usual cause is confusing two identifiers that look alike:

| Identifier | Where it is used | Value |
|---|---|---|
| Customization ID | `cbc:CustomizationID` in the invoice | `urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0` |
| Document type ID | SMP registration and SBDH envelope | `urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1` |

The Peppol Policy for use of Identifiers (POLICY 20) defines the document type pattern as `<syntax specific id>##<customization id>::<version>`, where the version "is used to reflect the version of the underlying format standard (e.g. the UBL version)". POLICY 18 says the `CustomizationID` in a UBL document "must correspond to the Customization ID of the Document Type Identifier": the part between `##` and `::`, not the whole string.

## What we tested

Changing one value at a time in a valid UK invoice, against the BIS 3.0.21 rules:

| Value sent | Result |
|---|---|
| CustomizationID `...billing:3.0::2.1` | R004 fatal |
| CustomizationID = the full document type ID | R004 fatal |
| CustomizationID `urn:cen.eu:en16931:2017` | R004 fatal |
| CustomizationID `urn:fdc:peppol.eu:2017:poacc:billing:3.0` (missing prefix) | R004 fatal |
| No ProfileID | R001 and R007 fatal |
| ProfileID `urn:peppol:bis:billing` (a PINT process) | R007 fatal |
| ProfileID `urn:fdc:peppol.eu:2017:poacc:billing:1.0` (missing `01`) | R007 fatal |
| ProfileID with `::2.1` appended | R007 fatal |
| ProfileID in upper case | R007 fatal |
| ProfileID `urn:peppol:bis:billing_with_response` | Passes |

Upper case fails because the comparison is exact. The Identifier Policy says "All Process Identifier values have to be treated case sensitive" and the same for document type identifiers (POLICY 2).

## Extensions

R004 uses `starts-with`, so a CustomizationID that extends the BIS value, such as `...billing:3.0#conformant#urn:...`, passes the rule. That does not mean it will be delivered. The Customization ID is part of the document type identifier your Access Point looks up in the receiver's SMP. If the receiver has not registered that exact document type, the lookup fails before validation matters. National extensions are listed in the Peppol code lists (v9.7); there is no UK one today.

## Where wrong values come from

1. **Copied from an SMP or Peppol Directory record.** Those show the document type identifier with `::2.1`.
2. **An Access Point API that asks for "document type".** Some APIs want the full document type ID for routing, separate from the XML. Do not paste it into the XML as well.
3. **Old templates.** BIS 2.0 used different identifiers and now fails R004.
4. **PINT confusion.** `urn:peppol:bis:billing` is a process for Peppol International (PINT) documents, not for BIS Billing 3.0.
5. **Hand-edited XML.** Trailing characters, case changes or a missing `#compliant#`.

## Log parsers: rule IDs in messages

Another 3.0.21 change: "Texts for Peppol rules are now prefixed with rule identifier". A message that used to read "Business process MUST be provided." now reads "[PEPPOL-EN16931-R001]-Business process MUST be provided." If your system matches error text to decide what to do, match on the rule ID instead.

## Not yet settled for the UK

The UK has not published a data specification. If it adopts BIS Billing 3.0 unchanged, these identifiers stay as they are. If it publishes a UK specialisation, the CustomizationID would change for UK documents. Neither is **confirmed**. See [Peppol BIS Billing 3.0: a UK guide](https://einvoices.uk/news/peppol-bis-billing-3-uk-guide).

## What to do now

- Hard-code the two values above and keep them out of user-editable settings.
- Keep the SMP document type ID in your routing layer only.
- Re-test old templates against the 3.0.21 rules in the [e-invoice validator](https://einvoices.uk/tools/e-invoice-validator).

Related: Peppol SBDH envelope explained, [SMP and SML explained](https://einvoices.uk/news/peppol-smp-sml-explained), [common Peppol validation errors](https://einvoices.uk/news/common-peppol-validation-errors).

## Frequently asked questions

### What is the correct CustomizationID for a Peppol BIS Billing 3.0 invoice?

urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0, with nothing appended. The same value is used for credit notes.

### What is the correct ProfileID?

urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 for the normal billing process. The new optional profile 02 uses urn:peppol:bis:billing_with_response and needs a separate SMP registration.

### Why did my invoice start failing R004 in August 2026?

Release 3.0.21, mandatory from 17 August 2026, tightened R004 so that a CustomizationID containing '::' fails. The usual cause is copying the SMP document type identifier, which ends in ::2.1, into cbc:CustomizationID.

### What does R007 'Business process MUST have an approved identifier' mean?

The ProfileID is present but is not one of the process identifiers the BIS Billing rules accept. Check for typos, wrong case, a version suffix or a PINT process ID such as urn:peppol:bis:billing.

---

How to cite: "Peppol R004 and R007 errors: CustomizationID and ProfileID", einvoices.uk, 24 October 2026, https://einvoices.uk/news/peppol-error-r004-r007-customization-profile-id

einvoices.uk is an independent publication and is not affiliated with HMRC or the UK Government. Nothing here is tax advice; check the sources and official GOV.UK guidance before acting.
