Introduction
Peppol (Pan-European Public Procurement On-Line) is a global network for electronic document exchange, widely adopted for e-invoicing across multiple countries. It provides a standardized protocol for companies to exchange business documents like invoices, credit notes, and purchase orders. The Peppol network is particularly popular in:- Nordic countries (Norway, Finland)
- Asia-Pacific region (Japan, Singapore, Malaysia, Australia, New Zealand)
- Several EU countries for business-to-government invoicing (Germany, Italy, Croatia)
Setup
Letโs prepare your workspace to work with Peppol. Weโll configure the Peppol app and create three workflows:- Invoice issuance workflow: Send invoices through the Peppol network
- Invoice reception workflow: Receive invoices from the Peppol network
- Party registration workflow: Programmatically onboard companies (Parties) with Invopop
Connect the Peppol app
- Within the Console, navigate to Configuration โ Apps
- Find the Peppol app in the list
- Click Connect to activate it. The Peppol app should now appear in the list of Enabled apps

Configure a workflow to issue invoices
Configure a workflow to receive invoices
Configure the Peppol app
- Incoming Workflow: Select the Receive Invoice Workflow created in Step 3. This is where the app will send incoming invoices (expenses) received from the Peppol network.
Configure a Party registration workflow
- Template
- Code
- Build from scratch
Running
After setup, you can perform three key operations with Peppol in Invopop: onboarding entities (parties) so they can use Peppol, sending invoices through Peppol, and receiving Peppol invoices.Registering parties
Business entities are represented in Invopop as GOBLorg.party objects, which we call Parties.
Peppol requires Invopop to collect proof of ownership for regulatory compliance. As outlined in Section 3.3 End user Identification of the Internal Regulations II document, key details such as VAT number, address, contact information, and company name must be provided and validated during registration.
To register a party:
- Upload it to the Silo with required company information
- Send it to the party registration workflow
Upload a party document
You can upload parties via the Create an Entry API endpoint or manually through the Console. For this guide, weโll demonstrate the manual process:- Find the Parties section in the sidebar and click Suppliers
- Click + New Supplier to open the editor
- Use one of the following examples and adapt to your needs
Belgium
Germany
Italy
Spain
- Company name (fiscal name)
- VAT number (tax ID)
- Complete company address
- Contact information
- Peppol Participant ID*
Send to the registration workflow
Once the document is saved:- Click the Select Workflow button
- Select the Register Supplier workflow created during setup
- Click Run Workflow


Programmatic registration (white-label)
For programmatic integration, upload the proof of ownership document using the API. This is particularly useful for white-label implementations when you want to integrate the registration process into your own application. After using this API endpoint the verification process will begin automatically.Completion
After Invopop approves your registration, your party will be registered in the Peppol network. Youโll see the Peppol Participant ID in the Meta tab of the entry, and the GOBL document will contain aninboxes array.

Unregistering a participant
If you need to unregister an entity (because the supplier is no longer your client, for example), use the following workflow template:Sending invoices
To send an invoice, you need to store it as a Silo Entry with the- Store it as a Silo Entry with the Peppol inboxes previously obtained.
- Send it to the Sending Invoice Workflow created during setup
eu-en16931-v2017 addon to enable validations and extensions needed for Peppol
Belgium
Germany
Italy
Spain
Peppol Belgium - B2B standard invoice
Peppol Belgium - B2B standard invoice
- The customer is a registered business (has a tax identification number).
- The customer needs a complete invoice with all tax details for accounting or tax purposes.
eu-en16931-v2017 addon and ensure the customer field contains valid tax identification details. The addon will automatically set the document type to 380 when the silo entry is built (which happens automatically when saving a silo entry through the API or console).Peppol Belgium - B2B zero rated goods invoice
Peppol Belgium - B2B zero rated goods invoice
- Daily and weekly newspapers, as well as periodical publications that meet a specific criteria.
- Recyclable materials such as waste and scrap intended for recycling.
- Educational materials under specific conditions.
zero in your invoice lines. The eu-en16931-v2017 addon will automatically set the UNTDID 5305 tax category to Z (zero rated goods) when the silo entry is built.Peppol Belgium - B2B exempt invoice
Peppol Belgium - B2B exempt invoice
exempt in your invoice lines. The eu-en16931-v2017 addon will automatically set the UNTDID 5305 tax category to E when the silo entry is built. You must also state the reason for the exemption through the CET VATEX - VAT exemption reason codes.supplier must be previously registered with the tax authority and the customer tax id must be valid.Peppol Belgium - B2B services โ EU customer (Reverse Charge)
Peppol Belgium - B2B services โ EU customer (Reverse Charge)
- The customer is a registered business in another EU member state (has a valid EU VAT ID).
- The service is provided to a business customer (B2B), not a consumer.
- The service is subject to VAT but the customer accounts for the VAT in their own country.
reverse-charge in your invoice lines. The eu-en16931-v2017 addon will automatically set the UNTDID 5305 tax category to AE (reverse charge) when the silo entry is built.supplier and customer VAT ID must be valid and registered in the EU VIES system.Peppol Belgium - B2B goods โ EU customer (Intra-Community)
Peppol Belgium - B2B goods โ EU customer (Intra-Community)
- The customer is a registered business in another EU member state (has a valid EU VAT ID).
- Goods are physically delivered to another EU member state.
- The supply is exempt from VAT in the origin country and subject to VAT in the destination country.
intra-community in your invoice lines. The eu-en16931-v2017 addon will automatically set the UNTDID 5305 tax category to K (VAT exempt for EEA intra-community supply of goods and services) when the silo entry is built.supplier must be previously registered with the tax authority and the customer VAT ID must be valid and registered in the EU VIES system.Peppol Belgium - B2B services โ international customer (Outside Scope)
Peppol Belgium - B2B services โ international customer (Outside Scope)
outside-scope in your invoice lines. The eu-en16931-v2017addon will automatically set the UNTDID 5305 tax category to O (Services outside scope of tax) when the silo entry is built.Peppol Belgium - B2B goods โ international customer (Export)
Peppol Belgium - B2B goods โ international customer (Export)
export in your invoice lines. The eu-en16931-v2017 addon will automatically set the UNTDID 5305 tax category to G (Free export item, tax not charged) when the silo entry is built.supplier must be previously registered with the tax authority. Customer tax identification is optional but recommended for record-keeping purposes.payment: { "terms": {"detail": "..."}} field is required for EN16931 (EU) invoices and should be filled in with due dates or payment terms.Receiving invoices
Invopop automatically processes invoices received from the Peppol network using your configured Incoming Workflow. The workflow converts Peppol documents to GOBL format and creates Silo Entries for each invoice. Configure your workflow with webhooks or Google Drive integration to deliver these invoices to your systems.FAQ
Please contact the Invopop support team if you have any questions that are not listed here.What visibility do I need to have in my Peppol Party?
What visibility do I need to have in my Peppol Party?
smp: Only SMP, should be used for testingsmp+sml: SMP and SML, useful when you want to send documents but not receive themsmp+sml+peppol: SMP, SML, and Peppol Directory, recommended for both sending and receiving documents as you will be visible in the Peppol Directory
Can I remove UBL or CII from the 'Peppol receive invoice' workflow if I only use one format?
Can I remove UBL or CII from the 'Peppol receive invoice' workflow if I only use one format?
What are Participant IDs?
What are Participant IDs?
- Scheme: Identifies the type of identifier being used (e.g.,
9920for Spanish VAT numbers,0208for Belgian BCE numbers) - Code: The actual identification number
When registering a supplier we get an error: 'XXXX:XXXXXXXXX is already registered' on the Register Peppol Party step
When registering a supplier we get an error: 'XXXX:XXXXXXXXX is already registered' on the Register Peppol Party step
Should I set the $regime in Peppol?
Should I set the $regime in Peppol?
How do I assign multiple inboxes to a single supplier?
How do I assign multiple inboxes to a single supplier?
What should we do if the customer doesn't belong to the Peppol network?
What should we do if the customer doesn't belong to the Peppol network?
- Set up a separate workflow that generates the XML without sending it via Peppol
- Alternatively, use your current workflow without the customer Peppol ID (the send Peppol document step will automatically skip)
- Fetch the generated XML
- Deliver it through an agreed-upon method, typically email
How do I handle B2C invoices in Peppol?
How do I handle B2C invoices in Peppol?
- Check for Peppol capability โ Using the If/Else workflow step, detect the presence of the customerโs inbox via the following expr:
count(customer.inboxes, true) > 0 - Set up an alternative flow - Adding a workflow condition, select โOKโ and code
false. Then set-up your alternative flow (Generate PDF and send by email, for example). Make sure to stop the flow within the workflow condition at the end.