Peppol credit notes: type code 381, amount signs and the P9 process
A credit note in Peppol is document type code 381 (UNTDID 1001), sent as a UBL CreditNote document. Code 381 already tells the receiver "this reduces what the buyer owes". So you do not negate the whole document a second time. The totals on a credit note are stated as positive numbers.
That is the part everyone gets right. Here is the part almost every article gets wrong: individual lines on a credit note can be negative. The official Peppol BIS Billing 3.0 credit note example contains a line with CreditedQuantity of −3 and a LineExtensionAmount of −1500. Negative lines are legal. A globally negated document is what breaks. And exactly one amount may never be negative: the item net price (BT-146), enforced by rule BR-27.
This page covers the three things people actually search for. What code 381 means and how it differs from 380. What Peppol business process P9 is, and why you never put "P9" in the XML. How to reference the original invoice with BillingReference, and whether that reference is mandatory.

Invoice type code 381 vs 380
EN 16931 calls this business term BT-3, the invoice type code. The value comes from the UNTDID 1001 code list. In UBL the element name depends on the document root. An Invoice document uses cbc:InvoiceTypeCode. A CreditNote document uses cbc:CreditNoteTypeCode. Peppol BIS Billing 3.0 restricts BT-3 to a short list, and every allowed code maps to one of the two UBL document types.
| Code | Meaning | UBL document |
|---|---|---|
| 380 | Commercial invoice | Invoice |
| 381 | Credit note | CreditNote |
| 83 | Credit note related to financial adjustments | CreditNote |
| 532 | Forwarder's credit note | CreditNote |
| 386 | Prepayment invoice | Invoice |
| 384 | Corrected invoice (Germany only) | Invoice |
If you send code 381, the root element must be CreditNote and the lines must be CreditNoteLine with CreditedQuantity. Putting 381 inside an Invoice document is a schema mismatch, not a business rule violation, so the error you get back is often unhelpful.
Peppol business process P9
Peppol BIS Billing 3.0 lists nine invoicing processes, P1 through P9. P9 is the credit note process. The specification defines it in one line:
"P9: Credit notes or invoices with negative amounts, issued for a variety of reasons including the return of empty packaging."
Read that definition again. P9 explicitly covers both credit notes and invoices with negative amounts. Peppol does not forbid negative amounts. It forbids saying the same thing twice in two conflicting ways.
You never write "P9" in the XML
P1 to P9 are narrative process descriptions in the BIS document. The machine-readable field is BT-23, the business process type, carried in cbc:ProfileID. Profile 01 Billing uses one single value for both invoices and credit notes: urn:fdc:peppol.eu:2017:poacc:billing:01:1.0. Rule PEPPOL-EN16931-R001 makes it mandatory and PEPPOL-EN16931-R007 requires it to be an approved identifier.
The sign rule, precisely
The Peppol BIS Billing 3.0 specification states two symmetric rules. For a credit note: "The function of crediting or debiting is controlled merely by the business document type (e.g. 380 or 381) while the representation of the amount, including its sign, is not affected." For a negative invoice: "The function of crediting or debiting is controlled merely by the sign of the amount concerned, while the business document type (e.g. 380) has no relevance on the operation."
In plain language: pick one carrier for the credit signal. Either the document type carries it (381 with amounts stated as you would state them on the original invoice), or the sign carries it (380 with the amounts negated). Never both. A credit note whose totals are all negative means "credit a negative amount", which is a charge. That is the double negation problem, and it is a silent one. Many such documents pass validation and then book the wrong sign in the receiver's ledger.
The sign of an individual line is a different matter. Correction documents routinely credit one line and re-charge another. That is why the BIS credit note example carries a positive line 1 and a negative line 2. The line signs describe the correction. The document type describes the direction.
A correct Peppol credit note in UBL
This is the shape of a valid credit note. Note the profile identifiers, the BillingReference, the positive item net price, and the mixed line signs.
<CreditNote xmlns="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-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>CN-2026-001</cbc:ID>
<cbc:IssueDate>2026-03-10</cbc:IssueDate>
<cbc:CreditNoteTypeCode>381</cbc:CreditNoteTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cbc:BuyerReference>PO-99812</cbc:BuyerReference>
<!-- BG-3: the invoice being credited -->
<cac:BillingReference>
<cac:InvoiceDocumentReference>
<cbc:ID>INV-2026-042</cbc:ID>
<cbc:IssueDate>2026-02-28</cbc:IssueDate>
</cac:InvoiceDocumentReference>
</cac:BillingReference>
<!-- Line 1: 7 days credited, positive -->
<cac:CreditNoteLine>
<cbc:ID>1</cbc:ID>
<cbc:CreditedQuantity unitCode="DAY">7</cbc:CreditedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">2800.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Consulting, senior</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.0</cbc:Percent>
<cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<!-- BR-27: never negative -->
<cbc:PriceAmount currencyID="EUR">400.00</cbc:PriceAmount>
</cac:Price>
</cac:CreditNoteLine>
<!-- Line 2: 3 days re-charged, negative. This is legal. -->
<cac:CreditNoteLine>
<cbc:ID>2</cbc:ID>
<cbc:CreditedQuantity unitCode="DAY">-3</cbc:CreditedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">-1500.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Consulting, junior</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.0</cbc:Percent>
<cac:TaxScheme><cbc:ID>VAT</cbc:ID></cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">500.00</cbc:PriceAmount>
</cac:Price>
</cac:CreditNoteLine>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">1300.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">1300.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">1573.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">1573.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
</CreditNote>The document totals are positive. They say "credit €1,573.00". The document type says "this is a credit". Nothing is stated twice.
Referencing the original invoice with BillingReference
This is the single most searched detail about Peppol credit notes, and the spec answer is short. The preceding invoice reference is business group BG-3. In UBL it is cac:BillingReference containing a cac:InvoiceDocumentReference. The invoice number goes in cbc:ID (BT-25). The issue date goes in cbc:IssueDate (BT-26).
<!-- Credit one invoice -->
<cac:BillingReference>
<cac:InvoiceDocumentReference>
<cbc:ID>INV-2026-042</cbc:ID>
<cbc:IssueDate>2026-02-28</cbc:IssueDate>
</cac:InvoiceDocumentReference>
</cac:BillingReference>
<!-- Credit a second invoice: repeat the whole group -->
<cac:BillingReference>
<cac:InvoiceDocumentReference>
<cbc:ID>INV-2026-043</cbc:ID>
</cac:InvoiceDocumentReference>
</cac:BillingReference>Is BG-3 mandatory on a credit note?
No. Neither EN 16931 nor Peppol BIS Billing 3.0 requires it. BG-3 is 0..n. Rule BR-55 only says that if you provide BG-3, it must contain the preceding invoice number BT-25. A credit note with no BillingReference at all will pass Peppol validation.
Include it anyway. The receiving ERP has no other reliable way to reconcile the credit against the original invoice, so a credit note without it typically lands in a manual exception queue. Several national CIUS profiles and most large public buyers make it a hard requirement on their side. The BIS also notes that cbc:IssueDate shall be filled when the invoice number is not unique on its own, which matters if you restart your numbering each year. If a correction spans a large number of invoices, the spec allows you to give the invoicing period (BG-14) plus a clarifying note (BT-22) at document level instead of listing every reference.
The alternative: a negative invoice (380)
P9 permits the other route. Send a normal Invoice with type code 380 and negate the amounts. Here the sign carries the whole meaning.
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cac:BillingReference>
<cac:InvoiceDocumentReference>
<cbc:ID>INV-2026-042</cbc:ID>
</cac:InvoiceDocumentReference>
</cac:BillingReference>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="DAY">-7</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">-2800.00</cbc:LineExtensionAmount>
<cac:Price>
<!-- still positive: BR-27 -->
<cbc:PriceAmount currencyID="EUR">400.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">-2800.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">-2800.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">-3388.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">-3388.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>Notice that the unit price stays positive in both routes. The quantity goes negative instead. That is the one detail most home-grown UBL generators get wrong, and it is the direct cause of the most common rejection.
For Belgian B2B under the 2026 e-invoicing mandate, the credit note (381) is the route to use. VAT reporting and most accounting packages expect a separate credit document rather than an invoice with a negative total. Negative invoices are mainly a legacy escape hatch for systems that cannot emit aCreditNote root element at all.
Validation rules that actually fire
These are the rules you will see in a real rejection message, with their exact spec wording. Two of them are hard sign rules. The rest are arithmetic rules that break when software flips only some of the amounts.
BR-27"The Item net price (BT-146) shall NOT be negative." Fires oncac:Price/cbc:PriceAmount. This is the number one cause of rejected credit notes. Negate the quantity, not the price.BR-28"The Item gross price (BT-148) shall NOT be negative." Same rule for the gross price when you use a price discount.BR-CO-10Sum of invoice line net amount (BT-106) = Σ line net amounts (BT-131). Fires when the lines were negated but the totals were not, or the other way round.BR-CO-13Total without VAT (BT-109) = Σ line net amounts − document allowances + document charges. Half-negated allowance and charge amounts land here.BR-CO-15Total with VAT (BT-112) = total without VAT (BT-109) + total VAT (BT-110). The VAT amount must follow the same sign as the base it was computed on.BR-CO-16Amount due for payment (BT-115) = total with VAT − paid amount + rounding amount.BR-55Each preceding invoice reference (BG-3) shall contain a preceding invoice reference (BT-25). Only fires if you sent an emptyBillingReference.R001PEPPOL-EN16931-R001: business process must be provided. A missingcbc:ProfileIDis a fatal error on credit notes exactly as it is on invoices.
One rule that does not apply to credit notes
BR-CO-25 requires a payment due date (BT-9) or payment terms (BT-20). Peppol BIS Billing 3.0 changed it so that it only fires for invoices. You do not need payment terms on a document with type code 381. If your validator complains about it, you are running an outdated schematron.
Quick reference
| Credit note (381) | Negative invoice (380) | |
|---|---|---|
| UBL root | CreditNote | Invoice |
| Type code element | cbc:CreditNoteTypeCode | cbc:InvoiceTypeCode |
| Line element | CreditNoteLine / CreditedQuantity | InvoiceLine / InvoicedQuantity |
| Document totals | Positive | Negative |
| Individual line amounts | Usually positive, may be negative | Usually negative, may be positive |
| Item net price (BT-146) | Always positive (BR-27) | Always positive (BR-27) |
| Credit signal carried by | Document type | Sign of the amounts |
| ProfileID (BT-23) | Identical for both: urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 | |
| Payment terms (BR-CO-25) | Not required | Required |
Sending a credit note through the API
If you do not want to hand-build UBL, post flat JSON. Set document_type to CREDIT_NOTE and point referenced_invoice_id at the original invoice. Keep unit_price and quantity positive for a straight credit. The API emits the CreditNote root, sets CreditNoteTypeCode to 381, builds the BillingReference, and runs the Peppol BIS 3.0 schematron before delivery.
POST https://api.e-invoice.be/api/documents/
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"document_type": "CREDIT_NOTE",
"invoice_id": "CN-2026-001",
"invoice_date": "2026-03-10",
"referenced_invoice_id": "INV-2026-042",
"vendor_name": "Your Company BV",
"vendor_tax_id": "BE0123456789",
"vendor_address": "Kerkstraat 1, 1000 Brussels, BE",
"customer_name": "Client NV",
"customer_tax_id": "BE0987654321",
"customer_peppol_id": "0208:0987654321",
"currency": "EUR",
"items": [
{
"description": "Consulting, senior",
"quantity": 7,
"unit_price": 400.00,
"tax_rate": 21.00
}
]
}To check what your own system produces before you send it, drop the XML into the Peppol invoice viewer. It renders the parsed document type, the amounts and the preceding invoice reference, so a wrong sign or a missing BillingReference is visible in seconds.
If your software emits the wrong signs
1. Check the export mode, not the invoice
Most accounting packages store credit notes internally as negative documents and flip them on export. If yours does not, the setting is usually in the Peppol or UBL export profile, not in the credit note itself.
2. Fix the price before anything else
If you see BR-27, you are negating cac:Price/cbc:PriceAmount. Move the minus sign to the quantity. That single change clears most rejections.
3. Let the access point build the document
With e-invoice.be you can email the credit note as a PDF or post it as JSON. The platform generates the CreditNote document with type code 381, the correct signs and the BillingReference, then validates it before it enters the network.
Sending credit notes via Peppol?
e-invoice.be builds the credit note document for you: type code 381, correct amount signs, and the BillingReference to the original invoice. Send it as a PDF by email or as JSON through the API. The account and your Peppol ID are free. You pay per invoice sent and received, from €0.25.
Frequently asked questions
What is invoice type code 381?
381 is the UNTDID 1001 code for a credit note. In UBL it is carried in cbc:CreditNoteTypeCode inside a CreditNote document. Code 380 is a commercial invoice and lives in cbc:InvoiceTypeCode inside an Invoice document. Both codes map to BT-3 in EN 16931. The code, not the sign of the amounts, tells the receiver whether the document credits or charges.
Can a Peppol credit note contain negative amounts?
Yes, individual lines can be negative. The Peppol BIS Billing 3.0 credit note example itself contains a line with CreditedQuantity -3 and LineExtensionAmount -1500. What is wrong is negating the whole document to signal the credit, because code 381 already does that. And one amount is never allowed to be negative: the item net price (BT-146), enforced by rule BR-27.
What is Peppol business process P9?
P9 is one of the nine invoicing processes listed in Peppol BIS Billing 3.0. The spec defines it as: credit notes or invoices with negative amounts, issued for a variety of reasons including the return of empty packaging. P9 is documentation only. You never write P9 into the XML.
What ProfileID do I use for a Peppol credit note?
The same one as for an invoice. Profile 01 Billing uses cbc:ProfileID urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 and cbc:CustomizationID urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0. One pair covers both the invoice and the credit note. Rules PEPPOL-EN16931-R001 and R007 make the business process mandatory and require an approved identifier.
Is the preceding invoice reference mandatory on an EN 16931 credit note?
Not at EN 16931 or Peppol BIS level. BG-3 Preceding invoice reference is optional, and rule BR-55 only says that if you provide BG-3 it must contain the invoice number BT-25. In practice you should always include it. Receiving ERPs use it to match the credit note to the original invoice, and some national CIUS profiles and large buyers reject credit notes without it.
How do I reference the original invoice in UBL?
Use cac:BillingReference with a cac:InvoiceDocumentReference containing cbc:ID set to the original invoice number. Add cbc:IssueDate when the invoice number is not unique on its own. Repeat cac:BillingReference to credit more than one invoice.
What validation error do I get for a wrongly signed credit note?
The most common fatal error is BR-27, the item net price (BT-146) shall not be negative, triggered when software flips cac:Price/cbc:PriceAmount. BR-28 does the same for the gross price. If only some amounts are flipped you get total mismatches instead: BR-CO-10, BR-CO-13, BR-CO-15 and BR-CO-16. A fully negated document often passes schematron and then books the wrong sign at the receiver, which is worse.
Do payment terms have to be on a credit note?
No. Peppol BIS Billing 3.0 changed rule BR-CO-25 so that it only fires for invoices, not credit notes. You do not need a payment due date or payment terms on a document with type code 381.
Credit notes bouncing on BR-27 or landing in a manual queue? 15 minutes to fix the structure.
We'll look at your actual credit note XML, check the type code, the amount signs and the BillingReference, and show you what to change in your export.

Vendor-neutral. No obligation to switch platforms.