Skip to content

Peppol API integration for SaaS platforms

Add Peppol invoicing to a multi-tenant SaaS or ERP without opening a provider account for every customer. Provision isolated customer identities, send JSON invoices on their behalf, and follow each result through one API.

This model is for products that manage invoicing for multiple legal entities. If you invoice only for your own company, use the standard Send an Invoice guide.

Start with one sandbox customer

Prove the complete platform flow before involving a real customer. The example creates a synthetic Belgian customer through POST https://api.getpeppr.dev/v1/legal-entities. Its registryless 9915 identifier is unique on every run, so it needs no real company number and does not collide with an earlier test.

  1. 1. Create a synthetic customer — run the example with a sandbox master key. The detailed Legal Entities guide explains the request and response.
  2. 2. Wait for no_registry — poll the Legal Entity until the sandbox lifecycle reaches its documented registryless state. See the lifecycle reference for every state.
  3. 3. Send to the test receiver — complete the sandbox walkthrough, then use the sending and webhooks guide to follow delivery.
Sandbox exercises getpeppr’s test environment only. It does not register a real business on the production Peppol network.
Create a synthetic Belgian customer
import { randomUUID } from "node:crypto";
import { Peppol } from "@getpeppr/sdk";

const peppol = new Peppol({ apiKey: "sk_sandbox_your_master_key" });
const testId = randomUUID().replaceAll("-", "").slice(0, 12).toUpperCase();

const customer = await peppol.legalEntities.create({
  externalId: `customer_${testId.toLowerCase()}`,
  companyName: "Your Customer SRL",
  country: "BE",
  address: {
    line1: "Customer street and number",
    city: "Brussels",
    zip: "1000",
  },
  identifier: { scheme: "9915", value: `ACME${testId}` },
});

console.log(customer.id, customer.status);

From sandbox to a live customer

The API shape stays consistent, but production adds identity and authorisation gates that the sandbox deliberately skips.

  1. 1. Provision — create one isolated Legal Entity for the customer your platform manages.
  2. 2. Verify and authorise — getpeppr checks the identifier where automatic verification is available; other supported cases require manual review. In production, the customer confirms your authority through a signed, single-use link.
  3. 3. Send JSON — once the Legal Entity is ready, submit invoices on its behalf. An accepted submission is not proof of delivery, so keep following the result to a terminal state.
  4. 4. Follow the result — use actionable webhooks for lifecycle changes and delivery events, and poll the API when your interface needs fine-grained intermediate states.

The specialised guides remain the source of truth for customer provisioning, state transitions, and sending and webhooks.

What the integration handles

The boundary is operational, not magical: getpeppr handles the Peppol integration layer, while your product remains responsible for the business data and decisions it supplies.

getpeppr handles

  • Tenant-isolated Legal Entities and master-key authorisations.
  • Orchestration of verification, production attestation, and network registration.
  • JSON-to-UBL conversion and versioned validation for JSON invoice sends.
  • Provider submission, lifecycle events, and delivery status updates.

Your platform remains responsible for

  • Correct customer, invoice, tax, and payment data.
  • Onboarding only customers authorised to use your product.
  • Handling intermediate, failed, and rejected states in your user experience.
  • Your own legal, tax, retention, and customer-support obligations.

Country coverage from one source

These lists are rendered from the same country data as the canonical coverage page; they are not copied into this guide. A country change therefore updates both surfaces together.

Self-serve
France, Belgium, Ireland, the Netherlands, Denmark and Sweden
Assisted
Germany, Norway and the United Kingdom
Not available yet
Italy, Greece and Iceland

Use current country availability for the meaning of each tier and identifier verification for scheme-level behaviour. Verification coverage and invoice-rule coverage are separate capabilities.

Start in sandbox, plan production separately

An eligible organisation admin can choose A platform for my customers during signup, or start the platform sandbox trial later from the console overview. Create a sandbox master key there and run the walkthrough without a sales call, agreement, payment card, or real customer.

Production access is a separate gate. Request it at hello@getpeppr.dev; an active platform contract and a signed platform agreement, including the data-processing terms, are required before a production master key can be created.

Current plans and limits live only on the pricing page. When you are ready to test, run the sandbox walkthrough from start to finish.