On this page
The short answer
PEPPOL-EN16931-CL001 fails when the mimeCode of a cbc:EmbeddedDocumentBinaryObject is not exactly one of the six codes Peppol permits for attachments: PDF, PNG, JPEG, CSV, Excel xlsx and OpenDocument spreadsheet. The recorded PDF was declared as application/x-pdf, an unregistered name some software still uses for PDF; the value to send is application/pdf.
This is the Peppol copy of BR-CL-24. Both rules hold the same six values and compare them the same way, so a value that fails one fails the other, and a single correction clears both.
What the rule checks
Every embedded binary object that carries a mimeCode attribute is tested, and the finding points at that element.
The comparison is exact: no trimming and no case folding. When tried, application/PDF, application/pdf with a leading space and an empty attribute each failed, and each was also reported by BR-CL-24.
Types of other formats fail even when they are registered MIME types. When tried, application/vnd.ms-excel for an older Excel workbook and text/plain were both rejected.
No value separates this rule from BR-CL-24: the two lists match entry for entry and neither rule trims the attribute, so in every case tried the two findings came together.
| Term | Meaning | UBL element |
|---|---|---|
| BT-125-1 | Attached document Mime code | cac:AdditionalDocumentReference/cac:Attachment/cbc:EmbeddedDocumentBinaryObject/@mimeCode |
| BT-125 | Attached document | cac:AdditionalDocumentReference/cac:Attachment/cbc:EmbeddedDocumentBinaryObject |
How an integration ends up here
Possible causes, from the shape of the rule rather than from measured usage:
- A MIME library or an operating system table returns a legacy alias such as
application/x-pdf. - The type of the older binary Excel format,
application/vnd.ms-excel, is sent for any spreadsheet. - The attribute is copied from file metadata without normalising case or whitespace.
- A text or XML export is attached as it is, although neither type is on the list.
How to fix it
- Determine the format from the file content or a trusted extension check, not from whatever a library suggests.
- Map the format through a fixed table to the six permitted values, so a PDF is always sent as
application/pdf. - Convert any other format, such as a Word document or an
.xlsworkbook, to PDF, xlsx or ods before embedding it, and change the file name to match. - Correct the value once, in the mapping; the EN 16931 and Peppol checks read the same attribute.
Validate your corrected invoice
Before and after
These are fragments, not complete documents. The complete synthetic documents they come from are linked below.
Fragment of the failing invoice: the PDF timesheet is declared as application/x-pdf
<cac:AdditionalDocumentReference>
<cbc:ID>TIMESHEET-001</cbc:ID>
<cbc:DocumentDescription>Timesheet</cbc:DocumentDescription>
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/x-pdf" filename="timesheet.pdf">JVBERi0xLjQK</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>Fragment of the corrected invoice: the same file declared as application/pdf
<cac:AdditionalDocumentReference>
<cbc:ID>TIMESHEET-001</cbc:ID>
<cbc:DocumentDescription>Timesheet</cbc:DocumentDescription>
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename="timesheet.pdf">JVBERi0xLjQK</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>Only the mimeCode attribute differs: application/x-pdf in the failing invoice, application/pdf in the corrected one, for the same timesheet.pdf content. The failing document also reports BR-CL-24 at the same element, the EN 16931 check against the same six values.
What the validator reported
- The failing invoice reports BR-CL-24 and PEPPOL-EN16931-CL001. The corrected document passes every layer with no findings.Download the failing XMLDownload the corrected XML
Recorded on phive 12.1.0 / phive-rules-peppol 4.5.6 / Saxon-HE 12.10, the engine behind the free validator, using synthetic data. A recorded result is regression evidence for these documents; it is not a certification.
Where it applies
- Applies to
InvoiceandCreditNote; when tried, an attachment declared asapplication/x-pdfin a credit note reported this rule andBR-CL-24. - A Peppol BIS Billing 3.0 rule, reported on the Peppol layer with the code list of the pinned May 2026 release.
- An attachment without any
mimeCodenever reaches this rule: when tried, it failed the XSD layer, which requires the attribute. - A document referenced by URL in
cac:ExternalReferenceis not embedded, has no MIME code and is outside the rule.
Related rules
- BR-CL-24 applies the same six MIME codes on the EN 16931 layer
- UBL-DT-07 requires the filename attribute beside the MIME code
- BR-52 requires an identifier on the supporting document that carries the file
- Browse every rule in the reference
- Background: How Peppol invoice validation actually works
Scope and source
Written for Peppol BIS Billing 3.0.21 (May 2026), EN 16931 1.3.16, as applied to UBL 2.1 Invoice and CreditNote documents. Other profiles, syntaxes and releases can define this identifier differently. Guidance version 2026-09-28.1: source checked 2026-09-28, explanation last updated 2026-09-28.
The official definition of PEPPOL-EN16931-CL001 carries the normative wording and test. This page is our explanation of it, not a copy.
Guidance does not change the engine verdict. Fixing this finding does not mean the document passes every layer, and validation does not certify legal or tax compliance or transmit a document over Peppol.

