Skip to main content

Document Types

GoRoute supports the full range of Peppol BIS 3.0 document types. This guide covers each document type, its purpose, and when to use it.

Supported Documents​

Primary Documents​

Document TypeUBL TypeProcess IDUse Case
InvoiceInvoice-2BIS Billing 3.0Standard invoices
Credit NoteCreditNote-2BIS Billing 3.0Refunds, corrections
Self-Billing InvoiceInvoice-2BIS Billing 3.0Buyer-issued invoices

Ordering Documents​

Document TypeUBL TypeProcess IDUse Case
OrderOrder-2BIS Ordering 3.0Purchase orders
Order ResponseOrderResponse-2BIS Ordering 3.0Order confirmations
Order ChangeOrderChange-2BIS Ordering 3.0Order modifications

Catalogue Documents​

Document TypeUBL TypeProcess IDUse Case
CatalogueCatalogue-2BIS Catalogue 3.0Product catalogs
Catalogue ResponseApplicationResponse-2BIS Catalogue 3.0Catalog confirmations

Logistics Documents​

Document TypeUBL TypeProcess IDUse Case
Despatch AdviceDespatchAdvice-2BIS Despatch 3.0Shipping notifications
Invoice ResponseApplicationResponse-2BIS MLR 3.0Invoice status updates

Invoice (Most Common)​

The Invoice is the most frequently used document type on Peppol.

Required Fields​

<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">

<!-- Profile and Customization -->
<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>

<!-- Invoice Identification -->
<cbc:ID>INV-2024-001</cbc:ID>
<cbc:IssueDate>2024-01-15</cbc:IssueDate>
<cbc:DueDate>2024-02-15</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>

<!-- Seller Information -->
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0106">12345678</cbc:EndpointID>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Supplier BV</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>

<!-- Buyer Information -->
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0106">87654321</cbc:EndpointID>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Customer BV</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>

<!-- Tax Summary -->
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">21.00</cbc:TaxAmount>
</cac:TaxTotal>

<!-- Totals -->
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">100.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">121.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">121.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

<!-- Invoice Lines -->
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Consulting Services</cbc:Name>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</Invoice>

Invoice Type Codes​

CodeDescriptionUse Case
380Commercial InvoiceStandard invoice
381Credit NoteCorrections/refunds
384Corrected InvoiceInvoice with corrections
389Self-billed InvoiceBuyer issues invoice
751Invoice InformationFor reference only

Credit Note​

Credit Notes are used to correct or cancel invoices.

When to Use​

  • Customer returned goods
  • Pricing error on original invoice
  • Service not delivered
  • Discount applied after invoicing

Example​

<CreditNote xmlns="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-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-2024-001</cbc:ID>
<cbc:IssueDate>2024-01-20</cbc:IssueDate>
<cbc:CreditNoteTypeCode>381</cbc:CreditNoteTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>

<!-- Reference to original invoice -->
<cac:BillingReference>
<cac:InvoiceDocumentReference>
<cbc:ID>INV-2024-001</cbc:ID>
<cbc:IssueDate>2024-01-15</cbc:IssueDate>
</cac:InvoiceDocumentReference>
</cac:BillingReference>

<!-- ... rest of credit note ... -->
</CreditNote>

Document Identifiers​

Each document type has specific identifiers:

Document Type URIs​

DOCUMENT_TYPES = {
"invoice": "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
"credit_note": "urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2",
"order": "urn:oasis:names:specification:ubl:schema:xsd:Order-2",
"order_response": "urn:oasis:names:specification:ubl:schema:xsd:OrderResponse-2",
"despatch_advice": "urn:oasis:names:specification:ubl:schema:xsd:DespatchAdvice-2",
"catalogue": "urn:oasis:names:specification:ubl:schema:xsd:Catalogue-2"
}

Process Identifiers​

PROCESS_IDS = {
"billing": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0",
"ordering": "urn:fdc:peppol.eu:2017:poacc:ordering:01:1.0",
"catalogue": "urn:fdc:peppol.eu:2017:poacc:catalogue:01:1.0",
"despatch": "urn:fdc:peppol.eu:2017:poacc:despatch:01:1.0",
"mlr": "urn:fdc:peppol.eu:2017:poacc:mlr:01:1.0"
}

Sending Documents via API​

Send an Invoice​

import requests

# Send a Peppol invoice
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/send",
headers={
"X-API-Key": "your_api_key",
"Content-Type": "application/xml"
},
data=invoice_xml
)

result = response.json()
print(f"Transaction ID: {result['transaction_id']}")
print(f"Status: {result['status']}")

Send a Credit Note​

# Send a credit note referencing an invoice
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/send",
headers={
"X-API-Key": "your_api_key",
"Content-Type": "application/xml"
},
data=credit_note_xml
)

Validation Rules​

All documents are validated before sending:

Layer 1: XSD Validation​

# UBL 2.1 schema validation
# Checks document structure

Layer 2: Business Rules​

# Mathematical calculations
# - Line totals match item × quantity × price
# - Tax amounts are correct
# - Invoice total = sum of lines + tax

Layer 3: Schematron Rules​

# EN16931 European Standard
# Peppol BIS 3.0 specific rules
# Country-specific rules (XRechnung, etc.)
Pre-Validation

Use the validation endpoint before sending to catch errors early:

response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/validate",
headers={"X-API-Key": "your_api_key"},
data=invoice_xml
)

Document Capabilities​

When you register on Peppol, you declare which document types you can receive:

# Register for invoice and credit note reception
capabilities = {
"participant": {
"scheme": "0106",
"identifier": "12345678"
},
"document_types": [
{
"document_type": "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2",
"process_id": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
},
{
"document_type": "urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2",
"process_id": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
}
]
}

Attachments​

Peppol documents can include attachments:

<cac:AdditionalDocumentReference>
<cbc:ID>Supporting Document</cbc:ID>
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject
mimeCode="application/pdf"
filename="contract.pdf">
<!-- Base64 encoded content -->
JVBERi0xLjQKJeLjz9MKMyAw...
</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>

Supported MIME Types​

MIME TypeExtensionMax Size
application/pdf.pdf10 MB
image/png.png5 MB
image/jpeg.jpeg/.jpg5 MB
text/csv.csv5 MB
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.xlsx10 MB

Next Steps​