await peppol.invoices.send(invoice)
The Peppol API that reads the rulebook, so your code doesn't.
Send and receive e-invoices on the Peppol network from your software. One call submits an invoice under a verified sender identity, with the pre-send checks that apply to it; waitFor() or a webhook then tells you when the receiver's access point has it.
Built for software that invoices for many companies. Each customer you onboard sends under its own registered company identity.
You drive each customer's Peppol registration with a few API calls; getpeppr runs the regulated steps: ID verification and, in production, the customer's confirmation on a page we host.
No credit card for the sandbox.
- C1Your software
- C2getpeppr
- C3 · C4ReceiverReceiver's access point
import { Peppol } from "@getpeppr/sdk";
const peppol = new Peppol({ apiKey: "sk_sandbox_..." }); // master key
const invoice = await peppol.invoices.send({
sender: { externalSubTenantId: "customer_8412" }, // your customer
number: "INV-2026-001",
to: { peppolId: "9925:BE0314595348", // sandbox test receiver
},
lines: [{ description: "Consulting", quantity: 1, unitPrice: 90,
}],
});
await peppol.invoices.waitFor(invoice.id, "delivered", );import { Peppol } from "@getpeppr/sdk";
const peppol = new Peppol({ apiKey: "sk_sandbox_..." }); // master key
const invoice = await peppol.invoices.send({
sender: { externalSubTenantId: "customer_8412" }, // your customer
number: "INV-2026-001", buyerReference: "INV-2026-001",
to: { peppolId: "9925:BE0314595348", // sandbox test receiver
name: "SPF Economie (test receiver)", street: "Rue du Progrès 50",
city: "Brussels", postalCode: "1210", country: "BE" },
lines: [{ description: "Consulting", quantity: 1, unitPrice: 90,
// sandbox: "AE" if this test customer has a VAT number
vatRate: 0, vatCategory: "O" }],
});
await peppol.invoices.waitFor(invoice.id, "delivered", {
timeout: 600_000, // 10 min: a sandbox delivery can take minutes
});The receiver's Peppol access point has the invoice.
Sandbox send to the test receiver · statuses from send() and waitFor()
$ claude mcp add --transport http getpeppr https://api.getpeppr.dev/mcp
Send a sandbox test invoice of EUR 90 and tell me when it's delivered.
send_test_invoice → submitted
get_document_status → delivered
Delivered to the sandbox test receiver 9925:BE0314595348 on the Peppol test network. Sandbox only: nothing was sent in production.
Needs a free getpeppr account with your company registered. You sign in, no key to copy: /mcp in Claude Code, codex mcp login getpeppr in Codex; Cursor uses /mcp/auth.
Free sandbox. Your company: from EUR 49/mo, all prices excl. VAT. Compare plans
- Before a send
- JSON invoices get the pre-send checks that apply to them: required fields, VAT category codes, and the national checks our cartridge for the sender's country holds. Compliance gates
- From an assistant
- Claude Code or Codex sends test invoices through our hosted MCP server, with a free account and no API key to copy. MCP docs, Claude's directory (opens in a new tab)
- Verified identities
- Peppol identifiers are checked against a verification source before any live send, in 11 countries today. Countries, ID verification
Every identifier behind these words is a real rule of the Peppol rulebooks, BIS Billing 3.0 release v3.0.21, network and national families alike, or a scheme the lookup offers.
Try it from your terminal or your AI assistant
Validate invoices and look up receivers with no account, from your terminal, Claude Code or Codex. To send a test invoice, create a free account and register your company; your assistant then signs in, and everything it sends goes only to the sandbox test receiver.
SDK 6.4.0, CLI 0.14.2, latest on npm.
No terminal to hand? Check a receiver in your browser: the same Peppol Directory lookup, free.
Terminal
No account, no API key
# writes a starter invoice.json
npx @getpeppr/cli init# offline pre-flight checks, not a Peppol conformance verdict
npx @getpeppr/cli validate invoice.json# reads the public Peppol Directory
npx @getpeppr/cli lookup 0208:0685660237
To send, store a free sandbox key with npx @getpeppr/cli login --sandbox, then send with the CLI.
AI assistant
Hosted MCP server, nothing to install
# Claude Code
claude mcp add --transport http getpeppr https://api.getpeppr.dev/mcp# Codex
codex mcp add getpeppr --url https://api.getpeppr.dev/mcp
- Claude Code: Sign in later with /mcp when an account tool asks.
- Codex: Run codex mcp login getpeppr before the account tools.
Cursor and Claude (web & desktop) connect through https://api.getpeppr.dev/mcp/auth and ask you to sign in to getpeppr when you connect.
Without an account, your assistant can check whether a company is on Peppol, validate a sample invoice, plan your integration and find the documentation page that answers a question. With a free account, it can send a test invoice to the sandbox test receiver and follow it until it is delivered or failed. Cursor and Claude (web & desktop) sign in when they connect. Every tool, in the MCP docs
A test send goes only to the sandbox test receiver 9925:BE0314595348 (SPF Economie); any other receiver and any production key (sk_live_…) are refused. Going live happens in the console and in your own code. Give it sample or test invoices only, never a real invoice or real people's data. Listed in the MCP Registry as dev.getpeppr/mcp.
Invoice from 11 countries today
Peppol is one network, but every country decides how a company proves who it is. Where we can check that automatically, you sign up and send. Where we can't, we do it with you.
On getpeppr today: French regulated CTC not yet open in production.
Self-serve · 11 countries
- Francenetwork rules only
- Belgiumnetwork rules only
- Irelandnetwork rules only
- United Kingdomnetwork rules only
- NetherlandsNL-R-001 NL-R-002 NL-R-003 NL-R-004 NL-R-005 NL-R-006 NL-R-007 NL-R-008 NL-R-009
- DenmarkDK-R-002 DK-R-014 DK-R-016 DK-R-013 DK-R-005 DK-R-006 DK-R-007 DK-R-008 DK-R-009 DK-R-010 DK-R-011 DK-R-017 DK-R-003 DK-R-004
- GermanyDE-R-001 DE-R-015 DE-R-016 DE-R-017 DE-R-018 DE-R-022 DE-R-026 DE-R-030 DE-R-031 DE-R-T02 DE-R-002 DE-R-003 DE-R-004 DE-R-005 DE-R-006 DE-R-007 DE-R-027 DE-R-028 DE-R-008 DE-R-009 DE-R-010 DE-R-011 DE-R-019 DE-R-023-1 DE-R-023-2 DE-R-024-1 DE-R-024-2 DE-R-020 DE-R-025-1 DE-R-025-2 DE-R-014
- SwedenSE-R-001 SE-R-002 SE-R-003 SE-R-004 SE-R-013 SE-R-005 SE-R-006 SE-R-007 SE-R-010 SE-R-008 SE-R-009 SE-R-011 SE-R-012
- NorwayNO-R-002 NO-R-001Sending: VAT-registered companies only
- Estonianetwork rules only
- IcelandIS-R-001 IS-R-002 IS-R-003 IS-R-006 IS-R-007 IS-R-008 IS-R-009 IS-R-010 IS-R-004 IS-R-005
Sign up and send on your own. We check your declared Peppol identifier automatically through the relevant verification source. No call with us and no manual approval on our side — you set yourself up from the console.
Legal mandates
What the law requires, country by country, with the date a government has fixed. Product coverage above; the law here.
- Belgium
- Live, B2B mandate since 1 Jan 2026. Structured invoices via Peppol BIS for Belgian VAT-taxable B2B.
- Germany
- Receive live, since 1 Jan 2025. Issuing obligations phase in after transitional periods.
- France
- Receive mandate live, since 1 Sept 2026. All receive since 1 Sept 2026; large and mid-sized businesses issue since then, SMEs follow on 1 Sept 2027.
Regulation moves. You keep one API.
getpeppr is built on Storecove, a certified Peppol Access Point. When BIS 3.0, a country's rules or the network change, we update the gateway and the SDK: your API keeps its shape.
(opens in a new tab)- A certified backbone
- Storecove is a certified Peppol Access Point on the Peppol network. We track BIS 3.0 updates and country rules in the gateway and the SDK; the changelog says when one changes what you can send.
- A layer per country
- As each country opens on getpeppr, we ship its layer: identifier schemes, validation rules, national extensions. Same API; a new rule can refuse a value the network no longer accepts, and a new country may ask for a field of its own. The France guide walks through the newest one.
- The EU calendar
- BIS 3.0 today, with country rules for the countries we serve. Next on the EU calendar: ViDA Digital Reporting Requirements for cross-border B2B, from 1 July 2030.
One platform account. Every customer its own identity.
Your customers each keep their own Peppol identity. Your team keeps one integration. getpeppr models that directly: provision a customer, capture authorisation, send on their behalf, and listen for lifecycle webhooks.
No XML in your product, no access-point operations in your backlog, and no per-customer onboarding loop rebuilt from scratch.
Read the Peppol API integration guide, or see how it compares with other Peppol APIs for a multi-tenant SaaS.
Peppol API comparison
Five providers compared on tenant model, tooling, pricing, onboarding, and market focus. The source-checked guide explains where each one fits.
| Provider | SDKs | Pricing | Countries | Self-Service | Evaluation path |
|---|---|---|---|---|---|
| getpepprYou are here | TypeScript + CLI + hosted MCP server (sandbox) | Business from EUR 49/mo + usage; Platform: one plan at EUR 99/mo + usage, 50 Legal Entities included, no per-customer minimum | Belgium + France + Ireland + UK + Netherlands + Denmark + Germany + Sweden + Norway + Estonia + Iceland self-serve · French regulated CTC not yet open in production | Sandbox self-serve; Platform production contract-gated | Free sandbox + offline CLI + AI assistant via hosted MCP |
| peppol.sh | REST/OpenAPI + code samples; TypeScript SDK published on npm (0.1.0), Python and PHP announced as coming soon | Personal EUR 0.20/document; Connect EUR 0.16→0.10 (EUR 250 top-up) | Developer- and agent-first Peppol | Yes (API-created sandbox) | Instant API-created sandbox |
| e-invoice.be | 5 languages (TS, Python, PHP, Ruby, Java) + MCP | From EUR 0.25/invoice; Enterprise from EUR 0.18 | Belgian certified AP; claims 30+ reachable countries | Yes | Free sandbox, no sales call |
| Storecove | RESTful JSON API + OpenAPI/Swagger | Quote required | 31-country compliance; Peppol + DBNAlliance | 30-day test account by request | Requested 30-day sandbox |
| Basware | Network REST API + XML integrations | Subscription; contact Basware | Global network | Support-provisioned test account | Testing account via Basware Support |
getpepprYou are here
- SDKs:
- TypeScript + CLI + hosted MCP server (sandbox)
- Pricing:
- Business from EUR 49/mo + usage; Platform: one plan at EUR 99/mo + usage, 50 Legal Entities included, no per-customer minimum
- Countries:
- Belgium + France + Ireland + UK + Netherlands + Denmark + Germany + Sweden + Norway + Estonia + Iceland self-serve · French regulated CTC not yet open in production
- Self-Service:
- Sandbox self-serve; Platform production contract-gated
- Evaluation path:
- Free sandbox + offline CLI + AI assistant via hosted MCP
peppol.sh
- SDKs:
- REST/OpenAPI + code samples; TypeScript SDK published on npm (0.1.0), Python and PHP announced as coming soon
- Pricing:
- Personal EUR 0.20/document; Connect EUR 0.16→0.10 (EUR 250 top-up)
- Countries:
- Developer- and agent-first Peppol
- Self-Service:
- Yes (API-created sandbox)
- Evaluation path:
- Instant API-created sandbox
e-invoice.be
- SDKs:
- 5 languages (TS, Python, PHP, Ruby, Java) + MCP
- Pricing:
- From EUR 0.25/invoice; Enterprise from EUR 0.18
- Countries:
- Belgian certified AP; claims 30+ reachable countries
- Self-Service:
- Yes
- Evaluation path:
- Free sandbox, no sales call
Storecove
- SDKs:
- RESTful JSON API + OpenAPI/Swagger
- Pricing:
- Quote required
- Countries:
- 31-country compliance; Peppol + DBNAlliance
- Self-Service:
- 30-day test account by request
- Evaluation path:
- Requested 30-day sandbox
Basware
- SDKs:
- Network REST API + XML integrations
- Pricing:
- Subscription; contact Basware
- Countries:
- Global network
- Self-Service:
- Support-provisioned test account
- Evaluation path:
- Testing account via Basware Support
See the full Peppol API comparison, with its sources and the date each provider was checked.
Pricing, written down
Start free in the sandbox. Pay when you go live, for what you send and receive.
Business plans run from a free sandbox to EUR 399/month. The Platform plan lets SaaS products send and receive on behalf of their customer companies, with 50 companies included and no per-customer minimum.
For companies sending their own Peppol invoices.
∞test docs
sk_sandbox_… keys, the sandbox test receiver only
Sandbox
Test everything. No credit card required.
- Unlimited test documents
- Full SDK access
- Sandbox environment
- Validation API
- Documentation & guides
No credit card. No time limit.
100docs / month
then EUR 0.25/doc, sent or received
Starter
For developers and early-stage SaaS.
- 100 documents included (sent + received)
- Live Peppol delivery
- Webhooks & events
- Email support (< 24h)
- Management dashboard
- Up to 3 team members
800docs / month
then EUR 0.22/doc, sent or received
Pro
For growing businesses.
- 800 documents included (sent + received)
- Live Peppol delivery
- Webhooks & events
- Management dashboard
- Email support (< 24h)
- Up to 10 team members
2,000docs / month
then EUR 0.20/doc, sent or received
Business
For high-volume document exchange.
- 2,000 documents included (sent + received)
- Live Peppol delivery
- Webhooks & events
- Management dashboard
- Priority email support
- Up to 25 team members
For SaaS products that send and receive Peppol documents on behalf of their customer companies.
One contract, one bill for the whole platform. Your customers never pay us.
One plan for every platform
50customer companies
then EUR 1 per registered company / month · EUR 0.25 per document
Platform
Everything a multi-tenant product needs to put its customers on Peppol, priced by what they actually exchange.
- Send and receive for every customer company under one contract
- EUR 0.25 per production document, sent or received
- No per-customer fee for your first 50 companies, no setup fee, no per-customer minimum: a customer that sends two invoices costs you two documents
- 50 customer Legal Entities included, then EUR 1 per registered Legal Entity per month. Deregister a customer you no longer serve and it stops counting
- One central bill for the whole platform, never one per customer. Usage is charged when it reaches EUR 50
- Identity verification of your customer companies, DPA and platform agreement included
- Free sandbox with unlimited test documents and up to 10 test customer companies, before and after you go live
Free and self-serve, no agreement. Production after a signed platform agreement and DPA.
Estimate your monthly bill
Two numbers are enough. Move the sliders or type your own.
- PlatformEUR 99.00
- 600 documents × EUR 0.25EUR 150.00
- 150 Legal Entities beyond the 50 included × EUR 1EUR 150.00
That is EUR 2.00 per customer per month, EUR 0.67 per document all-in.
Estimate in EUR, excluding VAT. Plan: EUR 99/mo, EUR 0.25/doc, 50 Legal Entities included, EUR 1 per extra Legal Entity.
Any business document (invoice, credit note or other) that reaches the Peppol network for one of your customers, sent or received, in production. Sandbox traffic is never billed, and neither is a document refused at submission.
One customer company registered with your platform in production. It counts while it is registered, because our access point reserves its place from the moment you create it, whether or not it transacts yet.
Nothing changes in the formula. Each registered company beyond the 50th adds EUR 1 a month, and that is all. Above 2,000 documents a month, talk to us about a committed rate.
Tell us about your platform: how many customer companies, roughly how many documents each, and which countries.
Email hello@getpeppr.dev and we will reply with the platform agreement + DPA path.
All prices in EUR, excluding VAT. Business plans have no setup fees. Platform production access is contract-gated. Usage counts documents both sent and received.
Questions developers ask first
The answers below are the same ones search engines and AI assistants read from this page.
Which countries can I send invoices to?
Any participant on the Peppol network, wherever it is registered — that part does not depend on where you are. What does depend on your country is where you can invoice FROM. We check your declared Peppol identifier automatically through the relevant verification source. You are self-serve in France, Belgium, Ireland, the United Kingdom, the Netherlands, Denmark, Germany, Sweden, Norway, Estonia and Iceland today. The coverage page at getpeppr.dev/countries has the full list.
Is the sandbox really free?
Yes. Free forever, unlimited test documents, no credit card required. When you're ready to go live, plans start at EUR 49/month.
Do I need to understand Peppol or UBL?
No. Send JSON: getpeppr checks it before it leaves and sends it over Peppol through our access-point provider, which generates the UBL. Zero XML knowledge required.
Can my AI assistant send invoices?
Test invoices only. With a free getpeppr account and your own company registered, your AI assistant can send a sandbox test invoice to the sandbox test receiver (9925:BE0314595348, SPF Economie) and follow its status until it is delivered or failed. The MCP server never sends in production and refuses production keys (sk_live_…); real invoices go out from your own code with a production key.
Is getpeppr production-ready?
Yes. We run on Storecove's certified Peppol Access Point and production sending is enabled. Our SDK and gateway carry 15,000+ automated tests and are built for Peppol BIS 3.0.
What is the SaaS Platform plan for?
It is for SaaS products that send and receive Peppol documents on behalf of many customer companies. Each customer company you register for production counts as one Legal Entity. There is one Platform plan: EUR 99 a month plus EUR 0.25 per document, with 50 Legal Entities included, then EUR 1 per registered Legal Entity per month beyond them. There is no per-customer minimum and no setup fee.
Can SaaS platforms go live self-serve?
Sandbox is free, needs no agreement and is self-serve: an organisation admin chooses “A platform for my customers” at signup, or starts the platform sandbox trial later from the console overview, then creates the sandbox master key in the console. Production platform access is contract-gated — we enable it after a signed platform agreement and DPA, so responsibilities, the entity count you are billed on, and data processing terms are clear before live customer sending.
How is platform usage billed?
One central bill for the whole platform, never one per customer: the EUR 99 platform fee, EUR 0.25 per document sent or received in production, and EUR 1 per month for each registered customer Legal Entity beyond the 50 included. Accrued usage is charged when it reaches EUR 50, so small volumes never produce noisy micro-charges. There is no per-customer setup fee and no per-customer minimum. Sandbox is free, self-serve and needs no agreement.
How does getpeppr compare to building with raw Peppol?
A typical Peppol integration takes 3–5 weeks: reading UBL 2.1 specs, implementing XML generation, handling AS4 protocol, and managing BIS 3.0 validation rules. With getpeppr, you send JSON and we handle everything. Most developers send their first test invoice in minutes, not weeks.
Ready to send your first Peppol invoice?
Validate locally or create a free sandbox. No credit card, full SDK access.
npm install @getpeppr/sdk
Free sandbox, no time limit. Production access follows the plan you choose.