Belgium: examples
Submit a standard Belgian B2B tax invoice in sandbox and read its response. Onboard a source and confirm both Peppol participant IDs before you begin.
This GETS example is a single standard-rated tax_invoice with no modifiers. All names, numbers, addresses and amounts are illustrative; replace them with your own company, buyer and source details. The participant IDs are checksum-valid examples, not proof of a registered Peppol recipient. Use sandbox for testing.
Before you send
Onboard your Belgian company and keep its source name and version. Get the buyer’s registered Peppol participant ID and scheme. For Belgian enterprise-number IDs, scheme 0208 uses ten digits without the BE VAT prefix. See the Belgium fields for other document types or VAT treatments.
Submit the request
Save this body as invoice.json. The source is an example: replace it with your onboarded name:version.
{
"country": "BE",
"environment": "sandbox",
"purpose": "invoicing",
"source": "acme-erp:1.0.0",
"documentType": { "base": "tax_invoice", "modifiers": [] },
"payload": {
"header": {
"documentType": { "base": "tax_invoice" },
"documentNumber": "INV-2026-BE-001",
"issueDate": "2026-09-18",
"dueDate": "2026-10-18",
"currency": "EUR"
},
"parties": {
"seller": {
"name": "Meridian Logistics BV",
"address": {
"country": "BE",
"city": "Brussels",
"addressLine1": "12 Harbour Road",
"postalCode": "1000"
},
"taxIds": [{ "type": "VAT", "value": "BE0123456749" }],
"registrationNumbers": [{ "type": "CRN", "value": "0123456749" }],
"peppolId": "0123456749"
},
"buyer": {
"name": "Atelier Dupont BV",
"address": {
"country": "BE",
"city": "Brussels",
"addressLine1": "48 Market Street",
"postalCode": "1000"
},
"taxIds": [{ "type": "VAT", "value": "BE0123456056" }],
"registrationNumbers": [{ "type": "CRN", "value": "0123456056" }],
"peppolId": "0123456056"
}
},
"lineItems": [{
"id": "1",
"name": "Cloud subscription",
"quantity": 20,
"unitCode": "PCE",
"price": { "amount": 100 },
"lineTaxableValue": 2000,
"lineTotal": 2420,
"taxCategory": "S",
"taxRate": 21,
"taxAmount": 420
}],
"totals": {
"totalLineTaxableAmount": 2000,
"totalAmountExcludingTax": 2000,
"totalTaxAmount": 420,
"totalAmountIncludingTax": 2420,
"amountDue": 2420
},
"extensions": {
"peppol_seller_peppolIdScheme": "0208",
"peppol_buyer_peppolIdScheme": "0208",
"peppol_buyerAccountingReference": "PO-88213"
}
}
}Send it using a sandbox API key:
curl --request POST 'https://prod.gets.complyance.io/api/v3/unify' \
--header "Authorization: Bearer ${COMPLYANCE_API_KEY}" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'new-api: true' \
--data @invoice.jsonThe new-api: true header selects this GETS request format. The sample has a €2,000 taxable total plus €420 VAT, for €2,420 due. Use the actual rate and tax category for your transaction.
Read the response
A 200 response confirms that validation passed and the document was stored. It includes documentId, documentNumber, message and Base64XML (the generated invoice XML encoded as Base64). The XML is not reproduced here: its value depends on your invoice. An illustrative response shape is:
{
"documentId": "01K5EXAMPLE00000000000142",
"documentNumber": "INV-2026-BE-001",
"message": "Your invoice was validated and is ready for submission.",
"Base64XML": "PEludm9pY2U+PElEPklOVi0yMDI2LUJFLTAwMTwvSUQ+PC9JbnZvaWNlPg=="
}The Base64XML above encodes a short illustrative XML fragment, not a complete Peppol invoice. Your actual response contains the generated document; do not send the illustrative value to a buyer. Save documentId and check delivery status: 200 is not proof of delivery.
If something goes wrong
422means validation failed. Readerrors[].getsPath,errors[].payloadPathanderrors[].message, correct the fields, then send again. Check the Belgium validation rules.401means the API key is missing or invalid. Check the bearer token.403can mean your key does not match the requested environment; use a sandbox key forsandbox.404for an unknown source means the name or version does not match an onboarded source. Checksourceagainst the company’s source details.
Last updated