errorbusinessEN 16931

BR-01:An Invoice shall have a Specification identifier (BT-24)

Fix: Insert cbc:CustomizationID as the first child of the Invoice root, with the identifier string for the profile you are actually sending. Invoice Navigator auto-fixes BR-01 at 0.95 confidence by inferring the intended profile from the document's namespaces, ProfileID and country-specific elements. Upload your invoice to fix this automatically.

BR-01 fires when cbc:CustomizationID is missing or empty. The specification identifier (BT-24) tells the receiver which EN 16931 profile the document claims to conform to, and every downstream validator selects its rule set from this value. Without it a receiving Access Point cannot decide which Schematron to run, so the invoice is rejected at the door.

Severity
Fatal
Rule set
EN 16931
Country
All EU
Fix type
AUTO-FIX
Confidence
95%
Category
structure

Engine Classification

Add default Peppol BIS 3.0 CustomizationID if missing

Confidence: 95% · Applied automatically in pipeline

What is BR-01?

BR-01 is a fatal validation rule defined in the EN 16931 specification. It validates the CustomizationID element in the UBL invoice XML.

When this rule fires, the invoice is rejected by Peppol access points and never reaches the buyer.

Target path: /Invoice/cbc:CustomizationID

Why This Error Matters

The specification identifier is how a receiver decides which rule set to apply. Without it the document is unclassifiable, so Access Points reject it before any business validation runs. It is also the first thing an auditor looks at when proving that an archived invoice was compliant with a specific standard version.

BR-01 is a hard failure — the invoice must be corrected and re-sent before it can reach the recipient.

The invoice never reaches the buyer's AP system. Because the rejection happens at the protocol layer, senders often get only a terse technical error and spend hours looking for a data problem that does not exist.

Invoice Navigator can automatically correct this error in your pipeline. The fix is applied with full audit evidence, so your compliance trail remains intact.

Validator Behavior

  • ·Causes invoice rejection
  • ·Error returned: BR-01
  • ·Specification: EN 16931

How to Fix It

1.

Determine the target profile

Check where the invoice is going. Cross-border Peppol uses the Peppol BIS Billing 3.0 identifier; German public-sector invoices use the XRechnung 3.0 identifier; a French Chorus Pro flow uses its own CIUS string.

2.

Insert the element in the right position

cbc:CustomizationID must be the first child of the Invoice root element, ahead of cbc:ProfileID and cbc:ID. UBL enforces element order, so appending it at the end triggers a schema error instead.

3.

Use the exact identifier string

The value is compared literally. Trailing whitespace, a missing #compliant# segment, or a 2.1 identifier on a 3.0 document all cause a rejection.

4.

Fix it in the export template

BR-01 is nearly always a template problem, not a data problem. Hard-code the identifier in the ERP's e-invoicing export so it cannot go missing again.

Before / After

Failing XML
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
  <cbc:CustomizationID></cbc:CustomizationID>
  <cbc:ID>INV-2026-0417</cbc:ID>
  <cbc:IssueDate>2026-08-19</cbc:IssueDate>
Corrected XML
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
  <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>
  <cbc:ID>INV-2026-0417</cbc:ID>
  <cbc:IssueDate>2026-08-19</cbc:IssueDate>

Technical Reference

XPath/Invoice/cbc:CustomizationID
SpecEN 16931
Operationset_default
StrategyAdd default Peppol BIS 3.0 CustomizationID if missing

Code Example

<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>

Common Causes

  • ·Export template built from a UBL sample that omitted the header block
  • ·Invoice generated by legacy code that predates EN 16931
  • ·Conversion from CSV or a proprietary format that had no profile concept
  • ·Element present but emitted empty because the ERP field was blank
  • ·Profile identifier stored in ProfileID only, with CustomizationID left out

Seeing this in production? The API handles BR-01 automatically. See the fix response →

Commonly Seen In

SAPOracleMicrosoft DynamicsDATEVCustom ERP

Frequently Asked Questions

BR-01 means the invoice has no specification identifier (BT-24). The Schematron asserts normalize-space(cbc:CustomizationID) != '', so both a missing element and an empty or whitespace-only one fail.

It depends on the profile. Peppol BIS Billing 3.0 uses urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0. XRechnung 3.0 UBL uses urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_3.0. The string is compared literally.

Yes. Invoice Navigator infers the intended profile from the document namespaces, ProfileID and country-specific elements, then inserts the correct CustomizationID as the first child of the root. Confidence is 0.95.

CustomizationID (BT-24) identifies the syntax and rule set the invoice conforms to. ProfileID (BT-23) identifies the business process, such as billing 01. Both are mandatory in Peppol BIS; BR-01 only covers CustomizationID.

BR-01 only checks that the element is non-empty. If the value does not match the profile you are actually sending, the profile-specific rule fails next — for example a Peppol identifier on a document carrying XRechnung-only elements.

Related Errors

Related Content

Last updated: 18 August 2026

Share this guide:

Validate your invoice

Drop your XML here to check for BR-01

Auto-fix BR-01 in seconds

Upload your invoice and we fix this error automatically. Financial fields are never touched.