Skip to content
Built for AI agents. Fully bootstrappable API →

Peppol for
developers.

Send Peppol e-invoices from your app, or embed e-invoicing into your product. One API call. JSON in. Compliant UBL out.

send-invoice
# 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"} ✓
Works with your stack. browse all integrations →

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.

EU e-invoicing mandates are here.

Structured e-invoicing is becoming mandatory across Europe. ViDA will require it EU-wide by 2030, and multiple member states already enforce it today. peppol.sh handles compliance automatically. EN 16931 validation. Peppol BIS 3.0. Certified Access Point.

Your invoices, or your users' invoices.

The same API supports both patterns. One Company per sender identity. Whether that's you or your customers.

Direct

Send your own invoices.

For companies sending Peppol invoices to their customers. Create one Company, start sending.

SaaS products, e-commerce stores, service businesses

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.

1

Create an account via API

POST your email to /v1/signup and get a sandbox API key back instantly.

sandbox
2

Send test invoices immediately

Use your ps_test_ key to send invoices. Sandbox delivers via email. Safe to experiment.

sandbox
3

Submit KYC when ready

POST your company details to /v1/account/kyc. We verify your identity.

4

Go live on Peppol

After approval, create a ps_live_ key and your invoices are delivered via the real Peppol network.

live
terminal / bootstrapping
# 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..." }
Stripe App Marketplace

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.

Stripe
└→ invoice.finalized
└→ peppol.sh
JSON → UBL conversion
BIS 3.0 validation
└→ Peppol Network
└→ Customer AP
status: delivered ✓

Everything you need to send Peppol

All features available via REST API. No SDK required.

Send invoices & credit notes

JSON or PDF upload. Two ways to send compliant documents via Peppol. One endpoint, one call.

POST /v1/invoices

API-first bootstrapping

Create an account, manage keys, and submit KYC. All via API. No dashboard needed. Perfect for automation.

POST /v1/signup

Sandbox from day zero

Every account starts in sandbox mode. Send unlimited test invoices via email before going live on Peppol.

ps_test_

Delivery tracking

Know exactly when your invoice arrives. Webhooks for delivery events, or poll the status endpoint.

GET /v1/invoices/:id

Peppol participant lookup

Check if a company is registered on Peppol before sending. Search by name or tax ID.

GET /v1/lookup

AI-agent ready

SKILL.md included. AI agents can create accounts, send invoices, and track delivery autonomously.

Learn more →
Certified Peppol Access Point
99.5% uptime SLA
EU data residency
EN 16931 compliant
EU ViDA ready
Full sandbox for free
OpenAPI 3.1 spec
Full lifecycle webhooks
MCP server
AI agent ready

Pay per document. No surprises.

from €0.10/ invoice sent
No monthly minimumNo per-tenant chargesCredits never expireFree sandbox foreverTransparent, public pricing
Start for free →

Send your first Peppol invoice in 30 seconds.

One curl to sign up. One curl to send. No UI, no approval, no credit card.

E-invoicing mandates are rolling out across Europe. Get ahead of compliance.

Start for free →
curl -X POST https://api.peppol.sh/v1/signup -d '{"email": "you@company.com"}'