Skip to content
Python SDK

Add Peppol e-invoicing to
your Django app.

Install the peppol.sh pip package and send compliant Peppol e-invoices from your Django views. Type-annotated, validated, and delivered. Ship in minutes.

Your code calls. We deliver via Peppol.

Call the peppol.sh API from your Django app. We convert your invoice to Peppol BIS 3.0 UBL, validate it, and deliver it to your customer's access point on the Peppol network.

1

Send invoice from your view

Call peppol.invoices.send() from your Django view or Celery task with your invoice data as a dictionary.

2

peppol.sh converts & validates

We convert your JSON to Peppol BIS Billing 3.0 UBL XML and run EN 16931 validation. Type errors are caught at build time, validation errors at runtime.

3

Delivered via the Peppol network

The validated e-invoice is delivered to your customer's Peppol access point. Track delivery status via webhooks or the API.

event flow
Django App
└→ peppol.invoices.send()
└→ peppol.sh
JSON → UBL conversion
EN 16931 validation
BIS 3.0 compliance
└→ Peppol Network
└→ Customer Access Point
status: delivered ✓

Everything your Django app needs for Peppol

A type-annotated SDK that handles the full lifecycle from JSON invoice to Peppol delivery.

Python SDK

Full type annotations and Pydantic models for invoices, credit notes, and API responses. Catch errors early with static analysis.

EU e-invoicing compliance

Invoices are validated against EN 16931 and Peppol BIS 3.0 before delivery. Meet Belgium 2026 and EU ViDA mandates.

Django integration

Configure via Django settings, run management commands, and call from anywhere in your Django project.

Webhook support

Receive delivery confirmations, validation errors, and status updates. Verify signatures in your Django views.

Sandbox mode

Test your integration with sandbox mode. Send test invoices without touching the live Peppol network.

Error handling

Typed exceptions with validation details. Know exactly what field is missing or invalid before delivery.

Three steps. Five minutes.

Get Peppol e-invoicing running in your Django app in under five minutes.

1

Install the package

Run pip install peppol-sh to add the peppol.sh SDK to your Django project.

2

Configure your API key

Add your PEPPOL_API_KEY to your Django settings or environment variables. Get one free from the dashboard.

3

Send your first invoice

Call peppol.invoices.send() with your invoice data. We handle conversion, validation, and delivery.

EN 16931 validated
Peppol BIS 3.0 compliant
Belgium 2026 ready
EU ViDA ready
Certified Access Point

Pay per invoice. No monthly fees.

0.25/ invoice sent via Peppol
Free sandbox foreverNo monthly feesCredit notes includedVolume discounts
View pricing details →

Common questions

Does this work with Django REST Framework?

Yes. The SDK works anywhere in your Django project — views, DRF viewsets, Celery tasks, management commands, or signals.

Do I need to generate UBL XML myself?

No. Send your invoice as a JSON object using the SDK. We handle the conversion to Peppol BIS Billing 3.0 UBL XML, validation against EN 16931, and delivery via the Peppol network.

What if my customer isn't on Peppol?

You can look up any company on the Peppol network using our lookup endpoint. If the recipient isn't registered, the API returns a clear error before you attempt to send.

How do I handle webhooks in Django?

Create a Django view with a URL pattern. The SDK includes a decorator to verify webhook signatures and parse the payload.

Is this compliant with EU e-invoicing mandates?

Yes. Every invoice is validated against EN 16931 (the EU standard) and Peppol BIS Billing 3.0 before delivery. This covers the Belgium B2B mandate (January 2026), and prepares you for ViDA (EU-wide, 2030).

Can I test before going live?

Yes. Start in sandbox mode to send test invoices via email. When you're ready, complete KYC verification and switch to live mode to deliver via the real Peppol network.

Peppol e-invoicing for Django. Ship in minutes.

Install the SDK, configure your API key, and start sending compliant e-invoices from your Django app.

Get started →