Feature - Invoicing API

E-invoicing API for Peppol invoices and credit notes

Send and receive invoices, credit notes, self-billing documents and invoice responses through one REST API. Qvalia validates each document, finds the recipient on Peppol and delivers it, and webhooks report every status back to your system.

Documents

Invoices and credit notes

Plus self-billing and invoice responses

Formats

JSON or UBL XML

UBL 2.1-based, one document per request

Events

Signed webhooks

Received, delivered, delayed and failed

Availability

99.8% per month

Contractual, with service credits

Send an invoice with one request

Post the invoice as JSON or UBL XML to the outgoing endpoint of your account. Qvalia validates it, looks up the recipient on Peppol and delivers it. Credit notes, self-billing documents and invoice responses follow the same pattern.

  • Sandbox at api-test.qvalia.com, production at api.qvalia.com
  • API key in the Authorization header, or a short-lived token (JWT)
  • An Idempotency-Key header makes retries safe

●  ●  ●

Sandbox request: send an invoice

curl -X POST \ “https://api-test.qvalia.com/transaction/$ACCOUNT_REG_NO/invoices/outgoing” \ -H “Authorization: $QVALIA_API_KEY” \ -H “Content-Type: application/json” \ -H “Idempotency-Key: $(uuidgen)” \ -d @invoice.json
curl -X POST \
  "https://api-test.qvalia.com/transaction/$ACCOUNT_REG_NO/invoices/outgoing" \
  -H "Authorization: $QVALIA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @invoice.json

How an invoice moves through the API

Your system works with one API. Qvalia operates the Peppol Access Point behind it.

1. Submit

Post one document per request. If the data is invalid, or the recipient is not registered for the document type and no other delivery channel is configured, the API answers 422 with a stable error code, before anything is sent.

2. Validate and deliver

Qvalia checks the document against the applicable Peppol rules, finds the recipient’s Access Point and delivers the document over AS4.

3. Follow the status

Webhooks report delivery, retries in progress and failures. The status endpoint returns each document’s latest status without the document payload.

4. Receive

Incoming invoices and responses wait on the incoming endpoints. The read endpoint returns unread documents and marks them as read, so the next call returns only new ones.

Invoice documents and endpoints

Every path starts with /transaction/{accountRegNo}, the registration number of your account. Each document type has outgoing and incoming endpoints, a read endpoint for unread documents and a status endpoint.

DocumentEndpointPeppol specification
Invoice/invoicesPeppol BIS Billing 3.0
Credit note/creditnotesPeppol BIS Billing 3.0
Self-billing invoice/selfbillinginvoicesPeppol BIS Self-Billing
Self-billing credit note/selfbillingcreditnotesPeppol BIS Self-Billing
Invoice response/invoiceresponsesPeppol BIS Invoice Response
Message level response/messagelevelresponsesPeppol BIS Message Level Response

Which document types your account uses depends on the service and plan. Request and response schemas are in the Invoice API and Credit Note API references. For all of Qvalia’s APIs, see Peppol APIs and developer tools.

Check the recipient before you send

Look up a Peppol ID before you submit the invoice. The response shows whether the participant is registered on Peppol and which document types it can receive, so your system can flag a missing or wrong ID before the network rejects the invoice.

  • Narrow the check to one document type with docTypeRoot, for example Invoice or CreditNote
  • The Peppol ID is the scheme and the identifier, for example 0007:1234567890
  • Same base URLs and authentication as the Transaction API

●  ●  ●

Sandbox request: look up a recipient

curl \ “https://api-test.qvalia.com/account/$ACCOUNT_REG_NO/action/lookup/peppol/0007:1234567890?docTypeRoot=Invoice” \ -H “Authorization: $QVALIA_API_KEY”
curl \
"https://api-test.qvalia.com/account/$ACCOUNT_REG_NO/action/lookup/peppol/0007:1234567890?docTypeRoot=Invoice" \
-H "Authorization: $QVALIA_API_KEY"

Built for production integrations

The details that decide whether an integration holds up at volume, all documented in the API reference.

  • Safe retries
    Send an Idempotency-Key, and a repeated request returns the original response instead of creating a second invoice.
  • Signed webhooks
    Each event carries an event ID and, once you set a signing secret, a signature you can verify.
  • Event replay for 30 days
    Fetch any delivered event again by its ID, for example after downtime on your side.
  • Status without the payload
    Reconcile at volume with lightweight status records, filtered by date, document ID or update time.
  • Clear rate limits
    Limits are counted per account, and a 429 response tells you how long to wait.
  • Attachments
    Add PDF files and images inside the message. The whole request, attachments included and Base64-encoded, must stay under Peppol’s 100 MB limit.

One invoice, the format each recipient needs

Send the invoice once. Qvalia validates it, looks up the recipient and delivers it on the Peppol network as Peppol BIS Billing 3.0 or Peppol PINT. When the recipient is not on Peppol, Qvalia can deliver through EDI, PDF by email, print and B2C internet banks in selected markets. These are additional delivery channels, not Peppol specifications. See which business message formats Qvalia supports.

If your system cannot produce Peppol BIS, upload the invoice in the format it already creates: Svefaktura 1.0, EDIFACT INVOIC, cXML, Finvoice 3.0, XRechnung, CII or the XML in ZUGFeRD and Factur-X. Qvalia converts it to Peppol BIS Billing 3.0, validates it and sends it. See sending invoices in your existing format.

One invoice delivered in the format each recipient needsYour ERP or platform sends the invoice to Qvalia as JSON or UBL XML. Qvalia validates it, looks up the recipient, converts it and delivers it as Peppol BIS Billing 3.0 or Peppol PINT on the Peppol network, or through EDI, PDF by email, print or a B2C internet bank in selected markets. Invoice responses and status come back to your system.Your ERP or platformJSON or UBL XML via APIQvaliaPeppol Access PointValidatePeppol rules before sendingLook up the recipientSML and SMP lookupConvertTo the format the recipient needsDeliver and reportStatus by webhook and APIPeppol networkAdditional channels, selected marketsPeppol BIS Billing 3.0Peppol PINTEDIPDF by emailPrintB2C internet bankInvoice responses and statusPeppol BIS Billing 3.0Peppol PINTEDIPDF by emailSpend Analytics 48Your ERP or platformJSON or UBL XML via API
One invoice delivered in the format each recipient needsYour ERP or platform sends the invoice to Qvalia as JSON or UBL XML. Qvalia validates it, looks up the recipient, converts it and delivers it as Peppol BIS Billing 3.0 or Peppol PINT on the Peppol network, or through EDI, PDF by email, print or a B2C internet bank in selected markets. Invoice responses and status come back to your system.Your ERP or platformJSON or UBL XML via APIQvaliaValidates, looks up the recipient,converts and deliversPeppol networkAdditional channelsPeppol BIS Billing 3.0Peppol PINTEDIPDF by emailPrintB2C internet bankAdditional channels are available in selected markets.Peppol BIS Billing 3.0Peppol PINTEDIPDF by emailSpend Analytics 48Your ERP or platformJSON or UBL XML via API

Choose your starting point

Software platforms

Embedded Peppol

Offer e-invoicing to your own customers. The Partner API creates their accounts and Peppol IDs, and the Invoicing API carries their documents.

ERP and finance teams

Peppol Access Point

Connect your ERP or finance system to Peppol through the API, SFTP or a ready-made connector.

Developers

Quick-start guide

Go from API key to your first sandbox invoice, step by step, with request examples.

Invoicing API FAQ

What is an e-invoicing API?

An e-invoicing API lets your software send and receive structured electronic invoices without building the network connection itself. With Qvalia’s Invoicing API, your system posts invoices as JSON or UBL XML, and Qvalia validates them and delivers them over the Peppol network.

Which invoice documents can I send and receive?

Invoices, credit notes, self-billing invoices and credit notes, and invoice responses, each with outgoing and incoming endpoints. Which document types your account uses depends on the service and plan.

Do I need to know Peppol BIS to use the API?

Your documents follow Peppol BIS Billing 3.0, in UBL 2.1-based JSON or XML. The sample data on api.qvalia.io shows a complete invoice, and validation errors point to the rule to fix. See How Peppol validation works.

Is there a sandbox?

Yes. The sandbox at api-test.qvalia.com uses its own API key, so you can test against your own systems without affecting real customers. API and sandbox access are included from the Connect Medium plan.

How do I avoid sending the same invoice twice?

Send an Idempotency-Key header with each submission. If you repeat the request, for example after a timeout, the API returns the original response instead of creating a second document. A new submission with the same document ID and receiver returns 409 Conflict unless you choose to overwrite.

How do I know an invoice was delivered?

Subscribe to webhooks for delivery and error events, or read the status endpoint. A webhook that your endpoint fails to accept is not sent again, so keep a periodic status check as a safety net. Any delivered event can be fetched again for 30 days.

How do I receive incoming invoices?

Subscribe to the new document webhook, then fetch the invoice from the incoming endpoint. The read endpoint returns unread invoices and marks them as read.

What does the Invoicing API cost?

API access is included from the Connect Medium plan. Partner and enterprise pricing depends on volume and delivery model. See Plans and pricing.

All platform features