
Whether you’re a small business, a large enterprise, or a software vendor, Qvalia’s API gives you a single, standards-based way to integrate with the Peppol network, with optional support for additional EDI flows, intelligent document processing, and data enrichment.
The same API can:
- Help a small company start sending Peppol invoices quickly
- Support a large enterprise with structured, high-volume message flows
- Power invoicing software and ERPs that need multi-tenant connectivity for many customers
In this guide, you will learn how to:
- Set up Qvalia’s Transaction API as your Peppol and EDI hub
- Exchange your first Peppol invoice via API
- Expand beyond invoices to orders, catalogues, and more
- Enables scalable, multi-tenant models for software vendors
- Add advanced AI-driven data features for data enrichment and PDF extraction
Overview: API for Peppol and EDI
Qvalia’s API provides a unified interface for electronic business messages over Peppol and EDI. It is built to support core scenarios such as:
- Invoices and credit notes
- Purchase orders and order responses
- Order changes and cancellations
- Catalogues and item updates
- Despatch advice
- Message-level responses and status updates
Common design principles across all of this:
- REST-based HTTP endpoints
- Support for both JSON and XML
- UBL 2.1 as the underlying data model
- Error handling using standard HTTP status codes
For you, this means you can think in terms of business messages instead of networks and protocols. You create valid UBL-based documents; Qvalia handles the Peppol and EDI layer in the background.
Before you start: What you need to use the Peppol API
Getting started with Qvalia’s Peppol API requires only a few basics:
- Qvalia account
Your organisation is onboarded as a Qvalia customer. You receive an account registration number that uniquely identifies your account in all transaction calls. - API key
Authentication is handled via an API key, with separate keys for test and production environments. All calls are made over HTTPS with modern TLS. - Account registration number in the URL path
Transaction calls include your accountRegNo in the path. For example:
POST /transaction/{accountRegNo}/invoices/outgoing - Format choice: JSON or XML
You can choose JSON or XML via standard HTTP headers (Content-Type and Accept). JSON is the default if no explicit choice is made.
Once these elements are in place, you are ready to start testing Peppol traffic with Qvalia.
Step-by-step: integrating your first Peppol invoice flow (send and receive)
This section walks through a typical first integration between your system and Qvalia’s Transaction API, covering both sending and receiving Peppol invoices.
Step 1: Start in the sandbox
Begin by integrating against the sandbox environment:
- Base URL (example): https://api-qa.qvalia.com
- Same authentication model, endpoints, and structure as production
This lets you build and test without affecting real customers or financial flows.
Step 2: Use your API key and accountRegNo
In your configuration, store:
- Your API key (for the sandbox)
- Your accountRegNo
Each request should include:
- Authorization header with the API key
- accountRegNo in the endpoint path, for example:
Outgoing invoices:/transaction/{accountRegNo}/invoices/outgoing
Incoming invoices (pull):/transaction/{accountRegNo}/invoices/incoming
Step 3: Choose JSON or XML (UBL-based)
All transactions use UBL 2.1 as the underlying standard.
You can either:
- Generate UBL 2.1 XML, or
- Use the UBL JSON representation, mapping the same structure into JSON fields
Headers control the format:
- JSON (default)
Content-Type: application/jsonAccept: application/json - XML
Content-Type: application/xmlAccept: application/xml
This flexibility allows you to integrate the Peppol API into both JSON-first and XML-first environments.
Step 4: Map your invoice to UBL
Next, map your internal invoice model to UBL elements:
- Header information (Invoice, IssueDate, InvoiceTypeCode)
- Parties (AccountingSupplierParty, AccountingCustomerParty)
- Totals (TaxTotal, LegalMonetaryTotal)
- Lines (InvoiceLine, Item, Price, TaxCategory)
The goal is to ensure that:
- All mandatory fields are present
- Values conform to the relevant Peppol profile (for example BIS Billing)
- Your own business requirements (references, cost centers, project codes) are met
You then serialize this as either JSON or XML, depending on your format choice. For incoming invoices, you use the same UBL structure when reading, validating, and mapping data from Qvalia into your internal model.
Step 5a: Send an outgoing Peppol invoice
Step 5.1: Send an outgoing Peppol invoice
With your outgoing payload ready:
- Endpoint example:
POST https://api-qa.qvalia.com/transaction/{accountRegNo}/invoices/outgoing
Include:
- Authorization header with your API key
- Correct Content-Type header (JSON or XML)
- The UBL-based invoice payload in the request body
Qvalia validates the invoice, routes it via the Peppol network or EDI/VAN, and returns a response with identifiers and status.
Step 5.2: Receive incoming Peppol invoices
To retrieve incoming invoices from Qvalia via API, you typically:
- Call the incoming endpoint, for example:
GET https://api-qa.qvalia.com/transaction/{accountRegNo}/invoices/incoming
Optionally, you can:
- Filter or page results (depending on your setup)
- Use “read” endpoints to differentiate new vs. already-processed invoices
The returned UBL JSON or XML is then mapped into your internal data model for posting, approval, or further processing.
Step 6: Handle monitoring, responses and errors
The Transaction API uses predictable HTTP status codes that you can map to logs, monitoring, and user messages. Typical patterns:
- 200 OK – The request was successful, and data is returned
- 204 No Content – Successful request, no body needed
- 400 / 422 – Invalid data or schema; adjust your payload or parsing
- 401 / 403 – Authentication or permission issues
- 404 – Resource not found (often a path or ID issue)
- 409 – Conflict, such as duplicates
- 429 – Rate limit reached; slow down your requests
- 500 – Internal error; retry or notify support if persistent
The same patterns apply whether you are sending or receiving invoices.
Use the transaction log for operational follow-up
In addition to the API responses, you can always log in to Qvalia and review activity in the transaction log. This gives you a UI-based view of what is happening in your integration, including, for example:
- Sent and received invoices
- Status for individual transactions
- Error details and validation feedback
- Technical and business-level timestamps
The transaction log is useful for:
- First-line support and operational teams that do not work directly with the API
- Troubleshooting specific issues reported by customers or internal users
- Verifying that changes in your integration behave as expected in production
Together, the HTTP status codes and the transaction log provide a complete picture: your system can react programmatically to responses, while your team can investigate and follow up directly in Qvalia when needed.
Beyond invoices: extend your Peppol API use case
Once you have invoices in place, it is straightforward to extend your integration to a full Peppol message portfolio.
Typical extensions include:
Purchase orders. Receive and send structured orders electronically
Order responses and changes. Confirm, modify, or cancel orders
Catalogues. Maintain product and price information in electronic catalogues
Despatch advice. Communicate shipment information
Message-level responses. Track technical and business-level acknowledgements
Because all of this uses the same API design, authentication model, UBL 2.1 data model you do not need separate projects or gateways for each document type. You enable new use cases as your business or your customers’ requirements evolve.
This is where the “one Peppol API regardless of need” promise becomes tangible: the same integration serves small suppliers, large enterprises, and complex platform scenarios.
5. Partner API for invoicing software and ERPs
If you are a software vendor — operating an invoicing platform, ERP, accounting solution or integration platform— your requirements are slightly different. You need to:
- Serve many end customers from one platform
- Keep a clear separation between each customer’s data and transactions
- Avoid operating your own Peppol access point or EDI gateway
- Qvalia’s partner-oriented model is designed specifically for this purpose
How the partner setup works
- Your company is onboarded as a partner and receives a partner identifier.
- Each of your end customers has their own Qvalia account and accountRegNo.
- API calls include both your partner context and the specific customer account, allowing you to send and receive messages on their behalf.
Example: Partner implementation
Onboarding
- Your organisation receives partner credentials and configuration, including a partnerRegNo and API key.
- You set up a single integration towards Qvalia’s API, using the
/partner/{partnerRegNo}prefix for all partner-scoped calls.
Customer onboarding in your product
- When a customer activates Peppol/e-invoicing in your UI, a Qvalia account is created or linked for that customer.
- You store the customer’s accountRegNo alongside your own customer ID so you can address transactions per customer.
Sending and receiving transactions per customer
- Your application generates or consumes UBL payloads (invoices, orders, etc.) in the same way as with the standard Transaction API.
- To send or receive transactions on behalf of a specific customer, you call the Transaction API through the partner-prefixed URI pattern:
/partner/{partnerRegNo}/transaction/{accountRegNo}/(message-type)/(direction)
For example:
- Sending an outgoing invoice:
/partner/{partnerRegNo}/transaction/{accountRegNo}/invoices/outgoing(POST) - Fetching incoming invoices:
/partner/{partnerRegNo}/transaction/{accountRegNo}/invoices/incoming(GET) - Using
readvariants where applicable by addingreadin the path.
Qvalia routes and receives messages as if they were sent or received directly by the customer, with full traceability per account.
Benefits for software vendors
- One technical integration, many customers, using a consistent partner and account model.
- No need to run and maintain your own Peppol or EDI backbone.
- Easy scaling to new markets, mandates, and message types by reusing the same partner integration pattern.
6. Additional functionality: AI enrichment
In addition to transport and connectivity, Qvalia also offers the Enrichment API, which can enrich transactions with line-item classification, pre-posting, and more, and also extract and transform PDF documents into rich, structured, and validated data with minimal effort.
The Enrichment API is designed as an asynchronous service:
- You submit an invoice file (for example, PDF or XML) using the API.
- You receive a pollingId in the response.
- You poll for status until the enrichment is complete.
- You retrieve a structured JSON result with enriched information.
This result can include:
- Parsed invoice content extracted from the original file
- Validation against Peppol or other business rules
- Normalised fields suitable for analytics, automation, and AI workflows
Implementation pattern
A typical integration looks like this:
- Submit an invoice for enrichment
Call an endpoint such asPOST /enrichment/{accountRegNo}/invoice.
Attach the invoice file and any relevant metadata.
Store the returned pollingId. - Poll for completion
CallGET /enrichment/{accountRegNo}/{pollingId}at a safe interval.
While processing, the API confirms that the job is still running.
When finished, it returns a status and links to the enrichment result. - Retrieve specific enrichment types
CallGET /enrichment/{accountRegNo}/{pollingId}/{enrichmentType}to obtain a particular enrichment output—for example, detailed invoice data or Peppol validation results.
Feed this into your accounting engine, analytics stack, or automation logic.
Use cases
- Small businesses
Can benefit from enterprise-level intelligent document processing; clean, structured data without investing in complex OCR or validation tools. - Large enterprises
Can standardise invoice and document data across entities, systems, and geographies, and enable better data control, analytics, and accounting automation. - Software vendors and partners
Can embed advanced enrichment capabilities directly into their products, without building their own parsing and rule engines.
In all cases, access to this technology is straightforward: the same account and security model as Transaction API, and a small set of well-defined endpoints.
7. Peppol API access for any business
Qvalia’s API is built to give you simplified, scalable access to the Peppol network, regardless of your company type:
- A small business needing to exchange compliant e-invoices
- A large enterprise managing high-volume, multi-entity flows
- A software vendor offering invoicing, ERP, or finance solutions to many customers
Your next step is straightforward: connect to the sandbox, send your first test invoice, and start planning how Peppol, EDI, and enrichment can become a built-in part of your operations or product — rather than a separate, complex project.
Get in touch
Manage, automate, and visualize your sales and purchase transactions with Qvalia.
Exchange e-invoices, e-orders and more. Gain efficient Peppol access and multichannel EDI. Get connected efficiently via API.
Our customers transform processes and achieve full control over transactional data and get deeper insights at the line-item level. Contact us to see how we can optimize your processes.
Create, send & receive electronic business documents efficiently
AI-powered data enrichment
Digitize and streamline your processes