Developer documentation

XRechnung API

REST API to generate XRechnung and ZUGFeRD programmatically, validate against EN 16931 and send over Peppol — hosted in Germany, GDPR-compliant.

Overview

The Invocore API turns simple JSON into fully compliant e-invoices. You send the invoice data, we generate valid XRechnung XML (UBL 2.1 or UN/CEFACT CII) or a ZUGFeRD hybrid PDF, validate it against EN 16931, and can deliver it over Peppol.

  • JSON in, XRechnung XML / ZUGFeRD PDF / FatturaPA / EDIFACT out
  • Validation against EN 16931 including national profiles (XRechnung CIUS)
  • Peppol network delivery and DATEV export included
  • Webhooks for invoice.created / sent / paid / overdue (HMAC-SHA256)

Authentication

Every endpoint is protected by a Bearer token (JWT). Generate the token in your account settings and pass it in the Authorization header.

Base URL

https://api.invocore.eu/api/v1

Rate limit

1,000 requests / hour

Formats

JSON (input) · XML UBL/CII, PDF (output)

Core endpoints

POST/invoicesCreate an EN 16931 invoice
GET/invoices/{id}/xmlDownload XRechnung XML (UBL/CII)
GET/invoices/{id}/pdfDownload ZUGFeRD hybrid PDF
POST/invoices/{id}/validateValidate invoice against EN 16931
POST/peppol/send/{invoice_id}Send invoice over Peppol
GET/peppol/status/{message_id}Query Peppol delivery status

1. Create an invoice

curl -X POST https://api.invocore.eu/api/v1/invoices \
  -H "Authorization: Bearer $INVOCORE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "currency": "EUR",
    "issue_date": "2026-06-05",
    "due_date": "2026-07-05",
    "buyer": {
      "name": "Mustermann GmbH",
      "vat_id": "DE123456789",
      "email": "rechnung@mustermann.de"
    },
    "lines": [
      { "description": "Beratung", "quantity": 10, "unit_price": "120.00", "vat_rate": 19 }
    ]
  }'

2. Fetch the XRechnung XML

# XRechnung-XML (UBL 2.1) der erstellten Rechnung abrufen
curl https://api.invocore.eu/api/v1/invoices/$INVOICE_ID/xml \
  -H "Authorization: Bearer $INVOCORE_TOKEN" \
  -o xrechnung.xml

3. Validate (EN 16931)

# Gegen EN 16931 / XRechnung CIUS validieren
curl -X POST https://api.invocore.eu/api/v1/invoices/$INVOICE_ID/validate \
  -H "Authorization: Bearer $INVOCORE_TOKEN"
# → { "valid": true, "errors": [], "warnings": [] }

Official SDKs

Instead of raw HTTP calls you can use the typed SDKs:

Python

pip install invocore-sdk

JavaScript / TypeScript

npm install @invocore/sdk

Frequently asked questions

Is there an API to generate XRechnung invoices?

Yes — POST /invoices creates the invoice, GET /invoices/{id}/xml returns the generated XRechnung XML. Auth uses a Bearer token (JWT).

How do I validate against EN 16931?

Call POST /invoices/{id}/validate. You get a structured ValidationResult with errors and warnings.

Can I send over Peppol?

Yes, with POST /peppol/send/{invoice_id}; query the status via GET /peppol/status/{message_id}.

Related