E-Invoicing for Belgium: API References


Introduction

Belgium is advancing its electronic invoicing and tax compliance frameworks to improve VAT reporting, combat fraud, and enhance business efficiency. The country has adopted the European PEPPOL (Pan-European Public Procurement Online) standard and is moving towards broader e-invoicing mandates in both B2G (Business-to-Government) and B2B (Business-to-Business) transactions.

Key E-Invoicing Frameworks in Belgium

  • B2G E-Invoicing: Mandatory for suppliers dealing with public entities, using the PEPPOL BIS (Business Interoperability Specification) standard.
  • B2B E-Invoicing: Belgium is planning to introduce phased B2B e-invoicing mandates in alignment with EU VAT in the Digital Age (ViDA) reforms.
  • Fiscalization Requirements: Cash register systems (CRS) in specific industries must comply with fiscal data recording and reporting obligations.

PEPPOL E-Invoicing System

Overview

PEPPOL is the primary framework for structured electronic invoicing in Belgium, enabling seamless and secure exchange of invoice data between businesses and public entities. It ensures compliance with EU e-invoicing directives and facilitates interoperability across borders.

Key Features

  • Structured Invoice Format: Invoices must be in PEPPOL BIS 3.0 UBL format.
  • Secure Transmission: Invoices are exchanged via certified PEPPOL Access Points.
  • Validation & Compliance: PEPPOL ensures invoices meet national and EU regulations.
  • Integration with ERP & Accounting Systems: Businesses must integrate PEPPOL-compliant solutions for seamless invoicing processes.

Belgium’s B2B E-Invoicing Roadmap

Belgium is aligning with EU-wide e-invoicing and real-time VAT reporting reforms. Key milestones incluBE:

DateImplementation Milestone
January 2026Planned phased introduction of mandatory B2B e-invoicing.
2028 (TBD)Expected full implementation of real-time VAT reporting.

Technical Compliance Requirements

To comply with Belgian e-invoicing mandates, businesses must ensure:

  • Use of PEPPOL BIS 3.0 format for structured invoices.
  • Integration with certified PEPPOL Access Points for secure exchange.
  • Real-time data transmission for VAT reporting (when mandated).
  • Invoice immutability and traceability to prevent fraud.
  • Long-term archiving of e-invoices for at least 7 years in a compliant format.

For more details, refer to the Belgian tax authority (FPS Finance) and PEPPOL documentation.

POST/be/einvoice/onboard

Onboard to Peppol

This endpoint allows you to onboard into the Peppol Network using Flick as your Access Point. Peppol (Pan-European Public Procurement Online) facilitates the standardized exchange of e-invoices and business documents, ensuring compliance and interoperability between participants.

Request Body

  • Name
    registered_name
    Type
    string: mandatory (limit: 300 chars)
    Description

    Registred Name of Supplier’s business

  • Name
    identifiers
    Type
    array: mandatory
    Description

    For all VAT-registered businesses in Belgium, the VAT Identification Number (BE:VAT) is mandatory. For a non-registrant, they need to give either KBO (Crossroads Bank for Enterprises) number.

  • Name
    BE:VAT
    Type
    string: mandatory if applicable
    Description
  • Name
    BE:KBO
    Type
    string: optional
    Description
  • Name
    city
    Type
    string: optional (limit: 50 chars)
    Description

    Registered City of the supplier.

  • Name
    street
    Type
    string: optional (limit: 150 chars)
    Description

    Street details of the supplier. If not available, provide 'NA'.

  • Name
    county
    Type
    string: optional (limit: 150 chars)
    Description

    County details of the supplier. If not available, provide 'NA'.

  • Name
    country
    Type
    string: ISO 3166-1 alpha-2 country code
    Description

    Country of the supplier. BE in case of Belgium.

  • Name
    contact_number
    Type
    string: optional (limit: 20 chars)
    Description

    The telephone number of the Supplier (e.g., office, mobile, fax).

Sample Request

POST
/be/einvoice/onboard
curl 
  --url https://sandbox-api.flick.network/be/einvoice/onboard \
  --header 'x-flick-auth-key: {token}' \
  --header 'Content-Type: application/json' \
  --data '
  {
    "registered_name": "TestCompany BV",
    "identifiers": [
      {
        "scheme": "BE:VAT",
        "id": "BE0123456789"
      }
    ],
    "city": "Brussels",
    "street": "Rue Exemple 123",
    "county": "Bruxelles-Capitale",
    "country": "BE",
    "contact_number": "+32-2-1234567"
  }'

Sample Response

200
Success
{
  "status": "success",
  "message": "Successfully Onboarded to Peppol",
  "data": {
    "supplier_uuid": "f4b173a9-9f0f-4850-b682-762290885fee"
  }
}

POST/be/einvoice/generate/invoice

Submit an Invoice

To Generate a new E-Invoice Document & share it through Peppol, this endpoint can be used along with the Supplier UUID to which it belongs to. Specify transport_mode for proper delivery of the document.

Request Body

  • Name
    ID
    Type
    string: mandatory (limit: 50 chars)
    Description

    Unique Invoice Reference Number. This should be made in sequence.

  • Name
    DocumentType
    Type
    string: mandatory (limit: 50 chars)
    Description

    Specifies the type of document. Refer to the official Peppol documentation for details:

    Document TypeCode
    Request for Payment71
    Debit Note (Goods/Services)80
    Metered Services Invoice82
    Debit Note (Financial Adjustments)84
    Tax Notification102
    Final Payment Request218
    Payment Request for Completed Units219
    Commercial Invoice380
    Debit Note383
    Prepayment Invoice386
    Tax Invoice388
    Factored Invoice393
    Consignment Invoice395
    Freight Invoice780
    Consular Invoice870
    Partial Construction Invoice875
    Partial Final Construction Invoice876
    Final Construction Invoice877
    Credit Note (Goods/Services)381
    Credit Note (Financial Adjustments)383
    Credit Note381
    Factored Credit Note396
    Forwarder's Credit Note532
  • Name
    IssueDate
    Type
    date: mandatory, schema: YYYY-MM-DD
    Description

    Date on which the invoice was issued.

  • Name
    DocumentCurrencyCode
    Type
    string: mandatory (3 chars)
    Description

    Currency in which the invoice was issued. Default value: EUR.

  • Name
    CustomerParty
    Type
    object: mandatory
    Description

    Information about the customer to whom the invoice is issued.

  • Name
    RegisteredName
    Type
    string: mandatory (limit: 300 chars)
    Description

    Name of the Customer/Receiving company.

  • Name
    address
    Type
    object: mandatory
    Description

    Address details of the customer.

  • Name
    Street
    Type
    string: mandatory (limit: 150 chars)
    Description

    Street details of the customer. If not available, provide NA.

  • Name
    ZipCode
    Type
    string: mandatory (limit: 10 chars)
    Description

    ZIP code of the customer's address.

  • Name
    City
    Type
    string: mandatory (limit: 50 chars)
    Description

    City of the customer's address.

  • Name
    Country
    Type
    string: ISO 3166-1 alpha-2 country code
    Description

    Country of the customer. Use BE for Belgium.

  • Name
    Identifiers
    Type
    array: mandatory
    Description

    List of public identifiers for the customer.

  • Name
    Scheme
    Type
    string: mandatory
    Description

    Scheme type of the identifier, e.g., BE:VAT, BE:KBO.

  • Name
    ID
    Type
    string: mandatory (limit: 50 chars)
    Description

    The identifier value for the given scheme.

  • Name
    InvoiceLines
    Type
    array: mandatory
    Description

    Details of the line items in the invoice.

  • Name
    Description
    Type
    string: mandatory (limit: 300 chars)
    Description

    Description of the purchased goods or services.

  • Name
    PriceAmount
    Type
    number: mandatory
    Description

    Amount excluding VAT for the line item.

  • Name
    TaxType
    Type
    object: mandatory
    Description

    Tax details for the line item.

  • Name
    TaxRate
    Type
    number: mandatory
    Description

    The VAT percentage applicable to the line item.

  • Name
    TaxType
    Type
    enum: mandatory
    Description

    Tax category. For example, standard or reduced.

  • Name
    TaxCountry
    Type
    string: ISO 3166-1 alpha-2 country code
    Description

    Country for which the tax is applied. Use BE for Belgium.

  • Name
    TotalIncludingVat
    Type
    number: mandatory
    Description

    Total amount of the invoice, including VAT.

Sample Request

POST
/be/einvoice/generate/invoice
curl --url https://sandbox-api.flick.network/be/einvoice/generate/invoice \
  --header 'x-flick-auth-key: {token}' \
  --header 'supplier_uuid: {supplier_uuid}' \
  --header 'transport_mode: peppol' \
  --header 'Content-Type: application/json' \
  --data '
    {
      "ID": "INV-11",
      "DocumentType": "380",
      "IssueDate": "2024-12-01",
      "DocumentCurrencyCode": "EUR",
      "CustomerParty": {
        "RegisteredName": "Test Inc.",
        "address": {
          "Street": "Street Name 987",
          "ZipCode": "9999AA",
          "City": "City Test",
          "Country": "BE"
        },
        "Identifiers": [
          {
            "scheme": "BE:VAT",
            "id": "BE0123456789"
          }
        ]
      },
      "InvoiceLines": [
        {
          "Description": "Test Item",
          "InvoicedQuantity": 2,
          "PriceAmount": 100,
          "TaxType": {
            "TaxRate": 19,
            "TaxType": "standard",
            "TaxCountry": "BE"
          }
        }
      ],
      "TotalIncludingVat": 238.00
    }'

Sample Response

200
Success
{
  "status": "success",
  "data": {
    "DocumentID": "52d08f40-a2a0-450b-857f-2e1dd865064c",
    "DeliveryStatus": "Scheduled"
  }
}

GET/be/einvoice/get-document/{uuid}

Get Document Details

This API endpoint allows users to get details of a document by querying with UUID.

GET Request Parameters

  • Name
    uuid
    Type
    string
    Description

    UUID of the document

Sample Request

POST
/be/einvoice/get-document/{uuid}
curl 
  --url https://sandbox-api.flick.network/be/einvoice/get-document/{uuid} \

  --header 'x-flick-auth-key: {token}' \
  --header 'supplier_uuid: {supplier_uuid}' 

Sample Response

200
Success
{
  "uuid": "52d08f40-a2a0-450b-857f-2e1dd865064c",
  "ID": "INV-11",
  "DocumentType": "380",
  "IssueDate": "2024-12-01",
  "DocumentCurrencyCode": "EUR",
  "CustomerParty": {
    "RegisteredName": "Test Inc.",
    "address": {
      "Street": "Street Name 987",
      "ZipCode": "9999AA",
      "City": "City Test",
      "Country": "BE"
    },
    "Identifiers": [
      {
          "scheme": "BE:VAT",
          "id": "BE0123456789"
      }
    ]
  },
  "InvoiceLines": [
    {
      "Description": "Test Item",
      "InvoicedQuantity": 2,
      "PriceAmount": 100,
      "TaxType": {
        "TaxRate": 19,
        "TaxType": "standard",
        "TaxCountry": "BE"
      }
    }
  ],
  "TotalIncludingVat": 238.00
}

GET/be/einvoice/delivery-status/{uuid}

Get Delivery Status

This API endpoint allows users to query the status of delivery of a document through Peppol.

GET Request Parameters

  • Name
    uuid
    Type
    string
    Description

    UUID of the document

Sample Request

POST
/be/einvoice/delivery-status/{uuid}
curl 
  --url https://sandbox-api.flick.network/be/einvoice/delivery-status/{uuid} \

  --header 'x-flick-auth-key: {token}' \
  --header 'supplier_uuid: {supplier_uuid}' 

Sample Response

200
Success
{
  "DocumentID": "52d08f40-a2a0-450b-857f-2e1dd865064c",
  "DeliveryStatus": "Delivered"
}

WEBHOOKEVENT LISTEN TO BE LISTENED

Received Document

You can listen to this webhook to get new documents issued against the supplier.

Request Body

  • Name
    Event
    Type
    string
    Description

    Type of Event that happend.

  • Name
    EventType
    Type
    string
    Description

    Type of Event Type that happend.

  • Name
    EventGroup
    Type
    string
    Description

    Type of Event group that it belongs.

  • Name
    uuid
    Type
    string
    Description

    UUID of the document

  • Name
    DocumentId
    Type
    string
    Description

    Internal Document ID

  • Name
    Status
    Type
    string
    Description

    Current status of the document

Sample Request

POST
{
  "Event": "DocumentReceived",
  "EventType": "PeppolReceived",
  "EventGroup": "Invoice",
  "uuid": "52d08f40-a2a0-450b-857f-2e1dd865064c",
  "DocumentId": "INV-123",
  "Status": "Delivered"
}