GLN as Peppol Endpoint ID: How to Use GS1 GLN Codes in E-Invoices
Most Belgian companies use their enterprise number (scheme 0208) as their Peppol endpoint. But some trading partners, especially large retailers and multinationals, use a GLN (Global Location Number) instead. If you need to send an e-invoice to a GLN-based endpoint, you need to use scheme 0088. This guide explains what a GLN is, when to use it, and how to implement it in your UBL invoices and API calls.

What Is a GLN?
A GLN (Global Location Number) is a 13-digit identifier managed by GS1, the organization behind barcodes and the EAN/GTIN system. A GLN can identify four types of entities: legal entities (companies), functions (departments or business units), physical locations (stores, warehouses), and digital locations (online platforms). The GLN itself contains no information about the location. It is a key that links to the systems where that information is stored.
GLNs are widely used in retail, healthcare, logistics, and manufacturing. Companies like Colruyt Group, Delhaize, Carrefour, and major pharmaceutical distributors use GLNs as their primary identifier across supply chain systems. When these companies join the Peppol network, they often register with their GLN rather than (or in addition to) their national registration number.
GLN Structure
┌─────────────────────┬──────────────────┬─────┐
│ GS1 Company Prefix │ Location Ref. │ C/D │
│ (variable, 6-9) │ (variable) │ (1) │
└─────────────────────┴──────────────────┴─────┘
Example: 5 4 0 0 0 0 0 0 0 0 0 0 1
├─────────┤ ├────────┤ └─ Check digit
Company Location
Prefix Reference- Always 13 digits, purely numeric
- The GS1 Company Prefix (6-9 digits) is assigned by a GS1 Member Organization. Belgian prefixes start with 540-549.
- The Location Reference is assigned by the company itself
- The last digit is a check digit calculated using the GS1 modulo-10 algorithm
Scheme 0088: GLN in Peppol
In the Peppol network, every participant is identified by a combination of a scheme and an identifier value. For GLN-based endpoints, the scheme is 0088. This code comes from the ISO 6523 ICD (International Code Designator) list, where it is officially registered as "EAN Location Code" with GS1 (formerly EAN International) as the issuing agency. The Peppol Code Lists (maintained by OpenPeppol) include 0088 as a supported participant identifier scheme.
Peppol ID Format with GLN
0088:5400000000001Where:
- 0088 = GS1 GLN scheme identifier (fixed)
- 5400000000001 = The 13-digit GLN
Who Uses GLN as Their Peppol Endpoint?
GLN-based Peppol endpoints are common in industries that already rely on GS1 standards throughout their supply chain.
- Retail and FMCG: Large retail chains like Colruyt Group use Peppol for thousands of invoices per month. Retailers already use GLNs to identify stores, distribution centers, and legal entities. Using the same GLN as their Peppol endpoint is a natural fit.
- Healthcare (NHS England): The UK Department of Health and Social Care mandates that all NHS suppliers use GS1 and Peppol standards. Suppliers must register their GLN as their Peppol ID and exchange purchase orders and invoices carrying GS1 GLNs over Peppol Access Points.
- Organizations with multiple departments: A company with a single Belgian enterprise number can register multiple GLN-based Peppol endpoints for different departments or cost centers. Each department gets its own GLN, so invoices are routed to the correct one. This is common for municipalities, hospitals, and large corporations.
- Logistics and transport: GLNs identify warehouses, loading docks, and distribution hubs. Companies in this sector often use their GLN as their Peppol endpoint for consistency across their supply chain systems.
GLN vs Enterprise Number: When to Use Which
The scheme you use depends on how the recipient is registered on the Peppol network. You cannot choose freely. You must use the scheme under which the recipient's Access Point has registered them.
| Scheme | Identifier | Typical Use |
|---|---|---|
| 0208 | Belgian enterprise number (10 digits) | Most Belgian SMEs, default for B2B in Belgium |
| 0088 | GLN (13 digits) | Retail chains, logistics, healthcare, multinationals |
| 9925 | Austrian VAT number | Cross-border invoicing to Austria |
To determine which scheme a recipient uses, look them up in the Peppol Radar or the Peppol Directory. The lookup result will show the exact scheme and identifier the company is registered under. For more on Belgian identifiers, see our guide on Peppol Participant Identifiers in Belgium.
GLN Endpoint in UBL XML
In a Peppol BIS Billing 3.0 invoice (UBL 2.1), the GLN is placed in the EndpointID element with schemeID="0088". The schemeID attribute is mandatory on the EndpointID element per the Peppol BIS specification. For a deeper dive into UBL invoice structure, see our UBL format guide. Here is a complete example of both the seller and buyer sections.
Seller (AccountingSupplierParty) with GLN
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0088">5400000000001</cbc:EndpointID>
<cac:PartyIdentification>
<cbc:ID schemeID="0088">5400000000001</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>Supplier Company NV</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Rue de la Loi 1</cbc:StreetName>
<cbc:CityName>Brussels</cbc:CityName>
<cbc:PostalZone>1000</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0123456789</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Supplier Company NV</cbc:RegistrationName>
<cbc:CompanyID schemeID="0208">0123456789</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>Buyer (AccountingCustomerParty) with GLN
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0088">5400000000028</cbc:EndpointID>
<cac:PartyIdentification>
<cbc:ID schemeID="0088">5400000000028</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>Retail Chain SA</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Avenue Louise 100</cbc:StreetName>
<cbc:CityName>Brussels</cbc:CityName>
<cbc:PostalZone>1050</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0987654321</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Retail Chain SA</cbc:RegistrationName>
<cbc:CompanyID schemeID="0208">0987654321</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>Important: EndpointID vs CompanyID
Notice that the EndpointID uses the GLN (scheme 0088), while the CompanyID in PartyLegalEntity still uses the enterprise number (scheme 0208). These serve different purposes. The EndpointID is the Peppol routing address. The CompanyID is the legal registration. They can use different schemes.
Sending to a GLN Endpoint via the e-invoice.be API
When using the e-invoice.be API to send an invoice to a GLN-based recipient, you specify the recipient's Peppol ID in the customer_peppol_id field using the 0088: prefix. For a full walkthrough of the API, see our guide on e-invoicing API integration.
cURL Example
curl -X POST https://api.e-invoice.be/invoices \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"invoice_id": "INV-2026-001",
"invoice_date": "2026-03-05",
"due_date": "2026-04-04",
"document_type": "INVOICE",
"vendor_name": "Your Company NV",
"vendor_tax_id": "BE0123456789",
"customer_name": "Retail Chain SA",
"customer_tax_id": "BE0987654321",
"customer_peppol_id": "0088:5400000000028",
"items": [
{
"description": "Product delivery Q1 2026",
"quantity": 500,
"unit_price": 12.50,
"tax_rate": 21
}
]
}'Python Example
import requests
response = requests.post(
"https://api.e-invoice.be/invoices",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"invoice_id": "INV-2026-001",
"invoice_date": "2026-03-05",
"due_date": "2026-04-04",
"document_type": "INVOICE",
"vendor_name": "Your Company NV",
"vendor_tax_id": "BE0123456789",
"customer_name": "Retail Chain SA",
"customer_tax_id": "BE0987654321",
"customer_peppol_id": "0088:5400000000028",
"items": [
{
"description": "Product delivery Q1 2026",
"quantity": 500,
"unit_price": 12.50,
"tax_rate": 21,
}
],
},
)
print(response.json())JavaScript / Node.js Example
const response = await fetch("https://api.e-invoice.be/invoices", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
invoice_id: "INV-2026-001",
invoice_date: "2026-03-05",
due_date: "2026-04-04",
document_type: "INVOICE",
vendor_name: "Your Company NV",
vendor_tax_id: "BE0123456789",
customer_name: "Retail Chain SA",
customer_tax_id: "BE0987654321",
customer_peppol_id: "0088:5400000000028",
items: [
{
description: "Product delivery Q1 2026",
quantity: 500,
unit_price: 12.50,
tax_rate: 21,
},
],
}),
});
const data = await response.json();
console.log(data);How to Validate a GLN
Before sending an invoice to a GLN endpoint, validate the GLN to avoid delivery failures. A valid GLN must pass two checks: it must be exactly 13 digits, and the last digit must be a valid GS1 check digit. For general Peppol invoice validation, see our overview of the best Peppol validation tools.
Peppol Validation Rule PEPPOL-COMMON-R040
The Peppol BIS Billing 3.0 specification includes a fatal validation rule for GLN format. Rule PEPPOL-COMMON-R040 states: "GLN must have a valid format according to GS1 rules." This rule applies to EndpointID, PartyIdentification/ID, and CompanyID elements with schemeID="0088". An invoice with an invalid GLN will be rejected before it reaches the recipient.
GLN Check Digit Algorithm (JavaScript)
function isValidGLN(gln) {
if (!/^\d{13}$/.test(gln)) return false;
const digits = gln.split("").map(Number);
let sum = 0;
for (let i = 0; i < 12; i++) {
sum += digits[i] * (i % 2 === 0 ? 1 : 3);
}
const checkDigit = (10 - (sum % 10)) % 10;
return checkDigit === digits[12];
}
// Examples
console.log(isValidGLN("5400000000001")); // true or false
console.log(isValidGLN("1234567890123")); // check digit validationGLN Check Digit Algorithm (Python)
def is_valid_gln(gln: str) -> bool:
if not gln.isdigit() or len(gln) != 13:
return False
digits = [int(d) for d in gln]
total = sum(
d * (1 if i % 2 == 0 else 3)
for i, d in enumerate(digits[:12])
)
check_digit = (10 - (total % 10)) % 10
return check_digit == digits[12]
# Examples
print(is_valid_gln("5400000000001"))
print(is_valid_gln("1234567890123"))GLN for Delivery Locations
GLNs are not only used as endpoint IDs. In Peppol BIS Billing 3.0, you can also use a GLN to specify the delivery location. This is useful when invoicing large organizations that have multiple warehouses or branches.
<cac:Delivery>
<cac:DeliveryLocation>
<cbc:ID schemeID="0088">5400000000035</cbc:ID>
<cac:Address>
<cbc:StreetName>Warehouse District 5</cbc:StreetName>
<cbc:CityName>Antwerp</cbc:CityName>
<cbc:PostalZone>2000</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:Address>
</cac:DeliveryLocation>
</cac:Delivery>The Peppol BIS Billing 3.0 specification explicitly mentions GLN as the recommended identifier for delivery locations. The same GLN value can appear in multiple contexts within a single invoice, but each serves a distinct purpose:
| Context | XML Element | Purpose | schemeID |
|---|---|---|---|
| Endpoint | cbc:EndpointID | Routing address on the Peppol network | Mandatory |
| Party ID | cac:PartyIdentification/cbc:ID | Business identifier for the legal entity | Recommended |
| Delivery | cac:DeliveryLocation/cbc:ID | Physical delivery point (warehouse, store) | Optional |
Common Peppol Identifier Schemes
For reference, here are the most commonly used Peppol identifier schemes you may encounter alongside GLN:
| Scheme | Name | Format |
|---|---|---|
| 0088 | GS1 GLN | 13 digits |
| 0208 | Belgian enterprise number | 10 digits |
| 0007 | Swedish organization number | 10 digits |
| 0106 | Dutch KvK number | 8 digits |
| 0009 | French SIRET | 14 digits |
| 0211 | Italian Codice Fiscale | 11 or 16 characters |
Scheme 0088 vs 0209: Which GS1 Scheme to Use?
GS1 has two ISO 6523 ICD codes registered for use in Peppol. It is important to use the right one.
- 0088 is for plain 13-digit GLNs without any extension. This is the standard scheme for Peppol endpoint identification. Use this in the vast majority of cases.
- 0209 is a newer, more flexible code that supports any GS1 identifier with Application Identifier (AI) prefixes. This includes GLN with extension components (AI 254), serialized GTINs, SSCCs, and other GS1 key types. Only use 0209 when you need an extended GLN or a non-GLN GS1 identifier.
For standard Peppol endpoint identification with a regular 13-digit GLN, always use scheme 0088.
Common Mistakes When Using GLN in Peppol
- Wrong number of digits: A GLN is always exactly 13 digits. Do not strip leading zeros or add extra characters.
- Using scheme 0208 with a GLN value: If the identifier is a GLN, the scheme must be 0088. Using 0208 with a GLN will cause a lookup failure because the SMP won't find a match.
- Invalid check digit: Always validate the GLN check digit before sending. An invalid GLN will be rejected during validation.
- Confusing delivery GLN with endpoint GLN: The endpoint GLN (in
EndpointID) routes the invoice. The delivery GLN (inDeliveryLocation/ID) specifies the physical location. Do not mix them up. - Not verifying the recipient first: Always check that the recipient is actually registered under scheme 0088 before sending. Use the Peppol Radar to verify.
Frequently Asked Questions
What is a GLN code?
A GLN (Global Location Number) is a 13-digit identifier issued by GS1. It uniquely identifies a legal entity, a function within an entity, or a physical location. In the Peppol network, a GLN can be used as an endpoint identifier under scheme 0088.
When should I use a GLN instead of an enterprise number as my Peppol endpoint?
Use a GLN when your trading partner is registered on Peppol with their GLN (scheme 0088) rather than a national registration number. This is common for large retailers, logistics companies, and multinationals that use GS1 standards across their supply chain.
Can a company have both a GLN-based and an enterprise number-based Peppol ID?
Yes. A company can be registered on Peppol under multiple identifier schemes. For example, a Belgian company might be reachable via both 0208:0123456789 (enterprise number) and 0088:5400000000001 (GLN). The sender chooses which endpoint to address.
How do I find a company's GLN code?
You can look up GLN codes in the GS1 Global Electronic Party Information Register (GEPIR) at gepir.gs1.org, or ask the trading partner directly. Many large companies publish their GLN in their supplier onboarding documentation.
Is scheme 0088 widely used in Peppol?
Yes. Scheme 0088 (GLN) is one of the most widely used identifier schemes in Peppol alongside national schemes like 0208 (Belgium), 0007 (Sweden), and 0106 (Netherlands). It is especially common in retail, healthcare, and logistics. In the UK, the NHS mandates GLN-based Peppol IDs for all healthcare suppliers.
What happens if I send an invoice to the wrong endpoint scheme?
The invoice delivery will fail. The Peppol network looks up the recipient in the SMP (Service Metadata Publisher) using the exact scheme and identifier you provide. If the recipient is not registered under that combination, the lookup fails and the invoice is not delivered.
What is the difference between scheme 0088 and 0209?
Both are GS1 schemes, but they serve different purposes. Scheme 0088 is for plain 13-digit GLNs. Scheme 0209 is a newer, more flexible code that supports any GS1 identifier with Application Identifier prefixes, including GLN with extension components. For standard Peppol endpoint identification with a plain GLN, always use 0088.
Can I use GLN to have multiple Peppol endpoints for one company?
Yes. This is one of the main advantages of GLN in Peppol. A company with a single Belgian enterprise number (0208) can register multiple GLN-based Peppol endpoints (0088) for different departments, branches, or locations. Each department gets its own GLN, and invoices are routed to the correct one.
Send e-invoices to any Peppol endpoint
e-invoice.be supports all Peppol identifier schemes, including GLN (0088). Register your account and start sending e-invoices to any company on the Peppol network, whether they use a GLN, an enterprise number, or any other scheme.