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โ€‹