At a glance
- Formats: XRechnung 3.0.2 in UBL and CII, ZUGFeRD 2 / Factur-X as PDF/A-3 (XRECHNUNG profile), optionally embedded in your own PDF.
- Validation: every invoice checked against the official KoSIT rule set (v2026-08-31) before it leaves; every rule violation explained in plain German or English.
- Free: 50 generated invoices a month with no credit card, validation unlimited; then from €19 a month.
- Data protection: processing in the EU, no storage of invoice content, a data processing agreement for every customer.
- Integration: REST with JSON, an OpenAPI specification, the TypeScript client
@normapi/client, an MCP server for AI agents, Idempotency-Key for safe retries.
One call
Invoice data in as JSON, a validated XRechnung out. With syntax=cii the same invoice comes back as CII, with syntax=zugferd as a ZUGFeRD PDF. The server computes the totals, in decimal arithmetic.
curl -X POST 'https://api.normapi.de/v1/invoices?syntax=ubl' \
-H "Authorization: Bearer $NORMAPI_KEY" \
-H 'Content-Type: application/json' \
-H 'Accept-Language: en' \
-o invoice.xml \
-d '{
"invoiceNumber": "RE-2026-0042",
"issueDate": "2026-10-16",
"dueDate": "2026-11-15",
"currency": "EUR",
"buyerReference": "04011000-12345-03",
"seller": {
"name": "Muster Software GmbH",
"vatId": "DE123456789",
"electronicAddress": "rechnung@muster-software.de",
"address": { "street": "Beispielstraße 12", "city": "Berlin",
"postcode": "10115", "country": "DE" },
"contact": { "name": "Maria Muster", "phone": "+49 30 1234567",
"email": "maria@muster-software.de" }
},
"buyer": {
"name": "Beispiel Handel AG",
"electronicAddress": "einkauf@beispiel-handel.de",
"address": { "street": "Handelsweg 3", "city": "Hamburg",
"postcode": "20095", "country": "DE" }
},
"payment": { "meansCode": "58", "iban": "DE02120300000000202051" },
"lines": [
{ "name": "Softwarelizenz Jahresabo", "quantity": 3, "unit": "C62",
"unitPrice": 199.00, "vatCategory": "S", "vatRate": 19 }
]
}'Every field, error code and variant is in the API documentation; AI agents connect through the MCP server.
What the API covers
- Invoice, credit note, corrected, partial and final invoice, self-billing
- Allowances and charges on invoice and line, amounts already paid
- Credit transfer, SEPA direct debit and card payment
- Your own invoice layout: the XML embedded in your PDF, checked against PDF/A-3
- Validating incoming e-invoices, free — XRechnung, ZUGFeRD and Factur-X
- An explanation of every validation rule by its code, for messages in your own interface
Sending and archiving are not included: the finished file goes back to your system. If you already generate with horstoeko, Mustang or your own code and only need the check, see the KoSIT validator as an API. For a single invoice you received, the XRechnung viewer is enough.
Prices
| Plan | Per month | Generated invoices |
|---|---|---|
| Validator | €0 | 50 a month |
| Starter | €19 | 500 a month |
| Business | €49 | 2,500 a month |
| Scale | €149 | 10,000 a month, then €0.05 per invoice |
Validation is free on every plan. With an individual contract and SLA: €599 a month for 150,000 invoices a year. Everything else is on the pricing page.
Frequently asked questions
What is an e-invoice API?
An interface through which software has e-invoices generated, instead of building the XML format itself and keeping it current. With NormAPI your system sends the invoice data as JSON and gets back a validated XRechnung or ZUGFeRD PDF.
What does the API cost?
Validation is free and unlimited. Generation: 50 invoices a month free, then €19 a month for 500, €49 for 2,500 or €149 for 10,000. With an individual contract and SLA: €599 a month for 150,000 invoices a year. All prices net.
Can I try the API for free?
Yes: create an account, make a key, start — no credit card. 50 generated invoices a month are free, and validation never counts.
Which formats does the API generate?
XRechnung 3.0.2 in UBL and CII, and ZUGFeRD 2 / Factur-X as PDF/A-3 in the XRECHNUNG profile — with our layout or embedded in your own PDF. Invoice, credit note, corrected, partial and final invoice.
Is every invoice validated?
Yes. Every generated invoice goes through the official KoSIT validator (rule set v2026-08-31) before it leaves; a 200 means it passes. New rule sets are tracked without any change to your integration.
Where is data processed?
In the EU (Amsterdam). Invoice content is processed but not stored; every customer gets a data processing agreement.
Can I keep my own invoice layout?
Yes. Send your PDF along and the API embeds the XML in it; the result is checked against PDF/A-3 with veraPDF before it comes back.
Are there SDKs?
A TypeScript client on npm (@normapi/client) and an OpenAPI specification to generate clients for any language. For AI agents there is an MCP server. Examples for PHP, Java and CI are on the KoSIT-validator-as-an-API page.
Does the API send the invoices?
No. The finished file goes back to your system and your delivery route takes over — email or your Peppol provider. Archiving stays with you too.
Can I validate incoming e-invoices too?
Yes, through the same validation endpoint, free and unlimited: XRechnung in UBL and CII, and ZUGFeRD and Factur-X PDFs. Every rule violation comes with a plain-language explanation.
What happens when the allowance runs out?
On Starter and Business the API answers 402 until the month turns or the plan changes. Scale keeps billing per invoice up to the cap you set — preset to €300 a month.
XRechnung or ZUGFeRD — which do I need?
For invoices to public-sector buyers usually XRechnung, with a Leitweg-ID. Between businesses both are allowed; ZUGFeRD helps when the recipient should be able to read the invoice without software. Both come from the same call.
Who has to issue e-invoices from 2027?
From 1 January 2027 businesses with more than €800,000 turnover in the previous year, from 1 January 2028 every business in domestic B2B trade. Receiving them has been mandatory since 2025.