Peppol for
developers.
Send Peppol e-invoices from your app in one API call. JSON in. Compliant UBL out. Delivered via Peppol.
# Create an account (no UI needed) curl -X POST https://api.peppol.sh/v1/signup \ -d '{"email": "dev@acme.com"}' # → {"api_key": "ps_test_a1b2c3...", "status": "sandbox"} # Send your first invoice curl https://sandbox.peppol.sh/v1/invoices \ -H "Authorization: Bearer ps_test_a1b2c3..." \ -d '{ "number": "INV-2026-001", "issue_date": "2026-03-01", "from": { "name": "Acme BVBA", "tax_id": "BE0123456789" }, "to": { "name": "TechCorp BV", "tax_id": "NL123456789B01" }, "lines": [{ "description": "Consulting Q1", "quantity": 1, "unit_price": 5000, "tax_rate": 21 }] }' # → {"id": "inv_a1b2c3", "status": "queued"} ✓
import Peppol from '@peppol-sh/node'; const peppol = new Peppol('ps_test_...'); await peppol.invoices.send({ number: "INV-2026-001", issue_date: "2026-03-01", from: { name: "Acme BVBA", tax_id: "BE0123456789" }, to: { name: "TechCorp BV", tax_id: "NL123456789B01" }, lines: [{ description: "Consulting Q1", quantity: 1, unit_price: 5000, tax_rate: 21 }] }); // → { id: "inv_a1b2c3", status: "queued" } ✓
from peppol_sh import Peppol peppol = Peppol("ps_test_...") peppol.invoices.send( number="INV-2026-001", issue_date="2026-03-01", from_={ "name": "Acme BVBA", "tax_id": "BE0123456789" }, to={ "name": "TechCorp BV", "tax_id": "NL123456789B01" }, lines=[{ "description": "Consulting Q1", "quantity": 1, "unit_price": 5000, "tax_rate": 21 }] ) # → Invoice(id="inv_a1b2c3", status="queued") ✓
use PeppolSh\Client; $peppol = new Client('ps_test_...'); $peppol->invoices->send([ 'number' => 'INV-2026-001', 'issue_date' => '2026-03-01', 'from' => [ 'name' => 'Acme BVBA', 'tax_id' => 'BE0123456789' ], 'to' => [ 'name' => 'TechCorp BV', 'tax_id' => 'NL123456789B01' ], 'lines' => [[ 'description' => 'Consulting Q1', 'quantity' => 1, 'unit_price' => 5000, 'tax_rate' => 21 ]] ]); // → {"id": "inv_a1b2c3", "status": "queued"} ✓
You send JSON. We handle Peppol.
No UBL schemas. No SMP lookups. No access point configuration. Just a simple API call to send compliant e-invoices.
JSON in, UBL out
Send a simple JSON payload. We convert to Peppol BIS 3.0 UBL, validate against the spec, and deliver via the Peppol network.
One call to send
No multi-step flows. POST to /v1/invoices and it's queued for delivery. Track status via webhooks or polling.
Sandbox from signup
Create an account via API, get a sandbox key instantly, and send test invoices in under a minute. No UI, no approval, no credit card.
Fully API-driven. No dashboard required.
Create an account, send test invoices, and go live. All from your terminal or your AI agent. No browser needed.
Create an account via API
POST your email to /v1/signup and get a sandbox API key back instantly.
Send test invoices immediately
Use your ps_test_ key to send invoices. Sandbox delivers via email. Safe to experiment.
Submit KYC when ready
POST your company details to /v1/account/kyc. We verify your identity.
Go live on Peppol
After approval, create a ps_live_ key and your invoices are delivered via the real Peppol network.
# 1. Create account $ curl -X POST https://api.peppol.sh/v1/signup \ -d '{"email":"dev@acme.com"}' { "id": "ten_k8m2x9", "status": "sandbox", "api_key": "ps_test_a1b2c3d4e5..." } # 2. Send a test invoice $ curl https://sandbox.peppol.sh/v1/invoices \ -H "Authorization: Bearer ps_test_a1b2..." \ -d '{"number":"INV-001", ...}' { "id": "inv_f7g8h9", "status": "queued" } # 3. Submit KYC → 4. Create live key $ curl -X POST .../v1/account/kyc -d '...' $ curl -X POST .../v1/account/keys \ -d '{"sandbox": false}' { "api_key": "ps_live_x9y8z7..." }
Peppol e-invoicing for
every Stripe payment
Automatically send compliant Peppol e-invoices for your Stripe invoices. Install the app, configure your settings, and every invoice gets delivered via Peppol. No code changes required.
Everything you need to send Peppol
A focused toolkit for sending compliant e-invoices to any company on the Peppol network.
Send invoices & credit notes
JSON or PDF upload. Two ways to send compliant documents via Peppol. One endpoint, one call.
API-first bootstrapping
Create an account, manage keys, and submit KYC. All via API. No dashboard needed. Perfect for automation.
Sandbox from day zero
Every account starts in sandbox mode. Send unlimited test invoices via email before going live on Peppol.
Delivery tracking
Know exactly when your invoice arrives. Webhooks for delivery events, or poll the status endpoint.
Peppol participant lookup
Check if a company is registered on Peppol before sending. Search by name or tax ID.
AI-agent ready
SKILL.md included. AI agents can create accounts, send invoices, and track delivery autonomously.
Pay per document sent. No surprises.
Send your first Peppol invoice in 30 seconds.
One curl to sign up. One curl to send. No UI, no approval, no credit card.
Start for free →