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 Type | UBL Type | Process ID | Use Case |
|---|---|---|---|
| Invoice | Invoice-2 | BIS Billing 3.0 | Standard invoices |
| Credit Note | CreditNote-2 | BIS Billing 3.0 | Refunds, corrections |
| Self-Billing Invoice | Invoice-2 | BIS Billing 3.0 | Buyer-issued invoices |
Ordering Documents​
| Document Type | UBL Type | Process ID | Use Case |
|---|---|---|---|
| Order | Order-2 | BIS Ordering 3.0 | Purchase orders |
| Order Response | OrderResponse-2 | BIS Ordering 3.0 | Order confirmations |
| Order Change | OrderChange-2 | BIS Ordering 3.0 | Order modifications |
Catalogue Documents​
| Document Type | UBL Type | Process ID | Use Case |
|---|---|---|---|
| Catalogue | Catalogue-2 | BIS Catalogue 3.0 | Product catalogs |
| Catalogue Response | ApplicationResponse-2 | BIS Catalogue 3.0 | Catalog confirmations |
Logistics Documents​
| Document Type | UBL Type | Process ID | Use Case |
|---|---|---|---|
| Despatch Advice | DespatchAdvice-2 | BIS Despatch 3.0 | Shipping notifications |
| Invoice Response | ApplicationResponse-2 | BIS MLR 3.0 | Invoice 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​
| Code | Description | Use Case |
|---|---|---|
380 | Commercial Invoice | Standard invoice |
381 | Credit Note | Corrections/refunds |
384 | Corrected Invoice | Invoice with corrections |
389 | Self-billed Invoice | Buyer issues invoice |
751 | Invoice Information | For 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 Type | Extension | Max Size |
|---|---|---|
application/pdf | 10 MB | |
image/png | .png | 5 MB |
image/jpeg | .jpeg/.jpg | 5 MB |
text/csv | .csv | 5 MB |
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | .xlsx | 10 MB |