> ## Documentation Index
> Fetch the complete documentation index at: https://docs.invopop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Chargebee in Belgium

> Send compliant Peppol e-invoices from Chargebee to Belgian customers

Belgium uses the Peppol network for e-invoicing, which became mandatory in January 2026. The format used is Peppol BIS Billing UBL — the standard Peppol format — with one important Belgian-specific requirement: **customers always expect to receive a PDF alongside the XML**. To handle this, the workflow first downloads the existing Chargebee PDF and attaches it to the UBL document before sending it through Peppol.

This guide assumes you have already connected the Chargebee app and completed the general setup — see the [Chargebee overview](/guides/chargebee) first if you haven't.

**Required apps:** [Peppol](/apps/peppol), [OASIS UBL](/apps/oasis-ubl)

<Info>
  Before processing any invoices, you must register your supplier on the Peppol network through Invopop. See the [Peppol guide](/guides/peppol) for registration steps, and the [Belgium Peppol guide](/guides/be-peppol) for Belgium-specific details.
</Info>

<iframe className="w-full aspect-video rounded-xl" src="https://www.youtube.com/embed/Iyqmgw0cvFY" title="Chargebee + Invopop | Setting up e-invoicing with Peppol" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen loading="lazy" />

## Workflow

<Tabs>
  <Tab title="Template">
    <Card title="Chargebee Peppol" icon="code-branch" iconType="duotone" href="https://console.invopop.com/redirect/workflows/new?template=chargebee-cb-peppol" cta="Add to my workspace">
      Syncs with Chargebee, downloads the PDF, looks up the customer's Peppol participant ID, and sends via the Peppol network.
    </Card>
  </Tab>

  <Tab title="Code">
    <Note>
      The **Lookup Peppol participant** step automatically looks up your customer's Peppol participant ID from the Peppol network at the time the invoice is processed. If you have already set the `cf_gobl_customer_inbox_peppol` [custom field](/guides/chargebee#custom-fields-metadata) on your customers in Chargebee, Invopop will use that value directly and you can remove this step.
    </Note>

    ```json Example Chargebee Peppol workflow theme={"system"}
    {
        "name": "Chargebee Peppol invoice",
        "description": "Sync from Chargebee and send via Peppol",
        "schema": "bill/invoice",
        "steps": [
            {
                "id": "3879bbb0-6c79-11f0-a3f7-072a34d19639",
                "name": "Import document from Chargebee",
                "provider": "chargebee.import"
            },
            {
                "id": "7d00a700-25d2-11f0-b641-350e77c28eed",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `processing`{.state .processing}",
                "config": {
                    "state": "processing"
                }
            },
            {
                "id": "a8bde710-1d46-11f1-ba7f-8d561e47d4e4",
                "name": "Download PDF from Chargebee",
                "provider": "chargebee.pdf.download"
            },
            {
                "id": "c4025680-d103-11f0-a0bd-350448c4fb2d",
                "name": "Lookup Peppol participant",
                "provider": "peppol.lookup",
                "summary": "Lookup customer",
                "config": {
                    "party": "customer"
                }
            },
            {
                "id": "6358ec20-6c79-11f0-913a-f35872125699",
                "name": "Modify silo entry",
                "provider": "silo.modify",
                "summary": "Add `eu-en16931-v2017` addon",
                "config": {
                    "addons": [
                        "eu-en16931-v2017"
                    ],
                    "sign": false
                }
            },
            {
                "id": "b079af50-25d2-11f0-b641-350e77c28eed",
                "name": "Sign envelope",
                "provider": "silo.close"
            },
            {
                "id": "5bb0d200-25d2-11f0-b641-350e77c28eed",
                "name": "Generate UBL document",
                "provider": "ubl.generate",
                "summary": "Peppol BIS Billing v3",
                "config": {
                    "attach_invoice_pdf": true,
                    "doc_type": "bis-invoice-v3",
                    "private": false,
                    "validate_ubl": true
                }
            },
            {
                "id": "606d96c0-25d2-11f0-b641-350e77c28eed",
                "name": "Send Peppol document",
                "provider": "peppol.send"
            },
            {
                "id": "7a321db0-25d2-11f0-b641-350e77c28eed",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `sent`{.state .sent}",
                "config": {
                    "state": "sent"
                }
            },
            {
                "id": "3de955b0-6c79-11f0-a3f7-072a34d19639",
                "name": "Update Chargebee",
                "provider": "chargebee"
            }
        ],
        "rescue": [
            {
                "id": "82674050-25d2-11f0-b641-350e77c28eed",
                "name": "Set state",
                "provider": "silo.state",
                "summary": "Set state to `error`{.state .error}",
                "config": {
                    "state": "error"
                }
            },
            {
                "id": "41da8d10-6c79-11f0-a3f7-072a34d19639",
                "name": "Update Chargebee",
                "provider": "chargebee"
            }
        ]
    }

    ```
  </Tab>
</Tabs>

## Participant ID lookup

Belgium enforces a standard set of Peppol participant ID schemes, all derived from the customer's **BCE number** (Belgian company registration number). Since this number is typically available in Chargebee, the **Lookup Peppol participant** step can automatically resolve the correct Peppol ID for each customer — no manual setup required in most cases.

If you want to specify a Peppol ID manually for a particular customer (or override the lookup result), you can do so with the following custom field:

| Field                 | Metadata key                 | Custom field key                | Example           |
| --------------------- | ---------------------------- | ------------------------------- | ----------------- |
| Peppol Participant ID | `gobl-customer-inbox-peppol` | `cf_gobl_customer_inbox_peppol` | `0208:0123456789` |

<Note>
  The metadata keys listed above follow the Chargebee metadata format (hyphens, no `cf_` prefix). If you prefer to use custom fields instead, replace hyphens with underscores and add the `cf_` prefix. See [Custom fields & metadata](/guides/chargebee#custom-fields-metadata) for details.
</Note>

## FAQ

<AccordionGroup>
  <Accordion title="How do I configure my workspace for Belgian invoicing?">
    Install the Peppol app, register your supplier with BOSA-migrated participant ID, and use a workflow that generates a Peppol BIS Billing 3.0 document and sends it via the Lookup → Send actions.
  </Accordion>

  <Accordion title="Do invoices need to be sent to the tax authority?">
    In Belgium specifically there is no need to send a copy to the tax authority until the e-reporting mandate comes into effect in Jan 2028.
  </Accordion>

  <Accordion title="Where do I find Belgium-specific GOBL documentation?">
    See the [Belgium tax regime in GOBL](https://docs.gobl.org/regimes/be) for tax IDs and category codes. The Peppol BIS Billing 3.0 mapping is shared across EU members and lives in [`peppol-bis-v3`](https://docs.gobl.org/addons/peppol-bis-v3).
  </Accordion>

  <Accordion title="What is the difference between scheme 0208 and 9925 in Belgium?">
    Belgium uses two Peppol scheme identifiers:

    * **`0208` (KBO/BCE enterprise number)** — This is the **preferred and default** scheme for Belgium. It corresponds to the company's KBO/BCE number (Kruispuntbank van Ondernemingen / Banque-Carrefour des Entreprises), which is the official Belgian business register. Most Belgian companies are registered in Peppol under this scheme.
    * **`9925` (BE VAT number)** — This is an older, alternative scheme based on the Belgian VAT number. It is typically used by entities that have a Belgian VAT number but are not registered in the KBO/BCE — for example, foreign companies with a Belgian VAT registration.

    **When you should use `0208`:** Always use `0208` as your first choice when sending invoices to Belgian companies. This is the standard identifier and what the vast majority of Belgian businesses are registered under.

    **When `9925` may be needed:** If you get a "receiver not found" error when sending to a Belgian company using `0208`, and you have confirmed the company exists in the [Peppol Directory](https://directory.peppol.eu), check whether they are registered under `9925` instead. This is uncommon but does happen.

    To specify the scheme when sending, include the customer's Peppol inbox in your GOBL document:

    ```json theme={"system"}
    "customer": {
      "name": "Example Company",
      "tax_id": {
        "country": "BE",
        "code": "0123456789"
      },
      "inboxes": [
        {
          "key": "peppol",
          "scheme": "9925",
          "code": "BE0123456789"
        }
      ]
    }
    ```

    Note that when using `9925`, the code must include the `BE` prefix (e.g. `BE0123456789`), whereas `0208` uses the raw KBO/BCE number without a prefix.

    <Tip>Use the **Lookup Participant ID** workflow step to verify a recipient's Peppol registration before sending. If a lookup with `0208` fails, try again with `9925`.</Tip>
  </Accordion>

  <Accordion title="What should we do if the customer doesn't belong to the Peppol network?">
    In countries where Peppol is the standard but not mandatory, you may still need to issue an e-invoice when the recipient isn't on the network. Both parties can agree on an alternative transfer method, but the invoice must still be EN16931 compliant.

    Recommended approach:

    * Set up a separate workflow that generates the XML without the send-Peppol-document step
    * Or reuse your existing workflow without the customer Peppol ID — the send step is automatically skipped
    * Fetch the generated XML and deliver it through the agreed channel, typically email
  </Accordion>

  <Accordion title="How do I handle B2C invoices in Peppol?">
    B2C invoices typically lack the structured customer information required for Peppol delivery, and most consumers don't have inboxes. Use a conditional workflow:

    1. Add an **If/Else** step that checks for a customer inbox using `count(customer.inboxes, true) > 0`.
    2. On the `false` branch, generate a PDF and email it to the customer, then stop the flow.

    This routes B2B invoices through Peppol while keeping a smooth path for consumers.
  </Accordion>

  <Accordion title="How do I handle 'Receiver Not Found' errors?">
    If a job fails with `KO` and `receiver not found in the peppol network`, treat it like an invalid email address — the recipient simply isn't reachable on Peppol. Add the **Lookup Participant ID** step (ideally in a separate validation workflow run against customer data) so you catch missing IDs before generating the invoice.
  </Accordion>

  <Accordion title="Should I set the `$regime` field when using Peppol?">
    No. The regime is automatically derived from the supplier's settings, which is the recommended approach for Peppol — leave it unset on the document.
  </Accordion>

  <Accordion title="Where do I find Peppol GOBL documentation?">
    See the [`oasis-ubl-v2`](https://docs.gobl.org/addons/oasis-ubl-v2) addon and the [Peppol app reference](/apps/peppol) for required fields, supported document types, and Participant ID schemes.
  </Accordion>
</AccordionGroup>

More available in our [Belgium FAQ](/faq/belgium) section

***

<Card title="Participate in our community" icon="forumbee" href="https://community.invopop.com" arrow="true" horizontal>
  Ask and answer questions about your Chargebee integration →
</Card>
