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)
Invopop allows you to send and receive documents through the Peppol network using a single integration while continuing to work with our GOBL format.
This guide walks you through the steps to register a company in Invopop and then issue and receive invoices on its behalf.
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
If you only want to send invoices through Peppol, you can skip step 3 and 4 of the setup. Alternatively, if you only want to receive invoices through Peppol, you can skip step 2.
The Peppol app is designed to only send and receive the document, generating and importing the appropriate file is delegated to format specific apps such as Oasis UBL or UN/CEFACT CII. This is done to keep the Peppol app simple and focused on the Peppol protocol, while allowing you to use the format that best suits your needs.
1
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
2
Configure a workflow to issue invoices
Now we’ll create the workflow that converts invoices to a valid Peppol format and sends them through the Peppol network. In this example, we’ll generate a Peppol BIS Billing UBL 3.0 document.
Skip this step if you only want to receive invoices via Peppol.
Finally, in the Error Handling area, add the Set State action and select Error.
4
Configure the Peppol app
Within the Console, navigate to Configuration → Apps, find the Peppol App and click Configure. You’ll need to set two fields:
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.
5
Configure a Party registration workflow
This workflow onboards companies (Peppol participants) to Invopop before they can issue or receive invoices. If you’re managing your own invoices only, you may use this workflow just once. However, if you’re offering Peppol to your customers through Invopop (white-label use case), you’ll run this workflow for each merchant you onboard.
Example Peppol register party invoice workflow with states
Copy
Ask AI
{ "title": "Peppol Register Party", "description": "Onboards participants before they can issue or receive invoices", "schema": "bill/invoice", "steps": [ { "id": "7a5a4db0-0fae-11f0-b37b-0be1c251a274", "name": "Register Peppol Party", "provider": "peppol.register", "summary": "Enable with groups: ubl-invoice", "config": { "doc_groups": [ "ubl-invoice" ], "visibility": "smp+sml+peppol", "disable": false } }, { "id": "7c2fa9f0-0fae-11f0-b37b-0be1c251a274", "name": "Set State", "provider": "silo.state", "summary": "Set state to `registered`{.state .registered}", "config": { "state": "registered" } } ], "rescue": [ { "id": "a34e83f0-25dc-11f0-b641-350e77c28eed", "name": "Set State", "provider": "silo.state", "summary": "Set state to `error`{.state .error}", "config": { "state": "error" } } ]}
Before starting, review the workflows guide to understand the general setup process.
In Console, create a new workflow and choose Empty Party workflow as the base. Then name the workflow with a descriptive label such as “Register Peppol participant”.
This worfkow is composed by these steps:
Register Peppol Party - the configuration of this step will depend on on the formats you want to work with and if you want to send, receive or both.
Set State - select Registered.
Finally, in the Error Handling area, add the Set State action and select Error.
Congratulations! Your workspace is now configured to send and receive Peppol documents and programmatically onboard Peppol participants with Invopop.
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.
Select the Register Supplier workflow created during setup
Click Run Workflow
The execution should succeed, and the silo entry’s state will change to “Processing.” Click the Meta tab to see the registration link:
When successful, you’ll see the Peppol Participant ID in the Meta tab of the entry. The party can now send and/or receive invoices in Peppol via Invopop.
Send it to the Sending Invoice Workflow created during setup
You can perform these steps manually via the Console or programmatically via the API using the Create an Entry and Create a Job endpoints. For API usage, refer to our quickstart guide.
When creating your invoice, ensure you:
Set the appropriate $regime field based on the issuer’s country (e.g., NO for Norway, FI for Finland)
Add the peppol addon to enable Peppol-specific validations and extensions
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.