E-facturen valideren via API
Oordeel, regel-ID's, plausibiliteitscontroles en batchvalidatie
Stuur een e-factuur (bijvoorbeeld een XRechnung als UBL of CII, of een ZUGFeRD PDF) naar POST /v1/validate. De response is JSON met een oordeel en alle bevindingen, zodat uw proces voor inkomende facturen foutieve facturen automatisch kan uitfilteren.
Eén factuur controleren
curl
curl -s -X POST 'https://api.electronic-invoice.app/v1/validate' \
-H 'Authorization: Bearer eia_live_YOUR_KEY' \
-H 'Content-Type: application/xml' \
--data-binary @invoice.xml
Python (requests)
import requests
with open("invoice.xml", "rb") as f:
r = requests.post(
"https://api.electronic-invoice.app/v1/validate",
headers={"Authorization": "Bearer eia_live_YOUR_KEY", "Content-Type": "application/xml"},
data=f.read(),
timeout=60,
)
result = r.json()
print(result["verdict"])
for finding in result["findings"]:
print(finding["severity"], finding["ruleId"], finding["message"])
De response
Een ongeldige factuur retourneert ook status 200; het oordeel staat in verdict: valid, warnings of invalid. Hier ontbreekt de koperreferentie BT-10:
{
"verdict": "invalid",
"country": "DE",
"detected": {
"container": "xml",
"syntax": "UBL-Invoice",
"guidelineId": "urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0",
"profile": "XRECHNUNG",
"scenario": "EN16931 XRechnung (UBL Invoice)"
},
"summary": { "errors": 1, "warnings": 0, "infos": 0 },
"findings": [
{
"ruleId": "BR-DE-15",
"severity": "error",
"source": "schematron",
"location": "/Invoice[1]",
"message": "[BR-DE-15] Das Element \"Buyer reference\" (BT-10) muss übermittelt werden.",
"explanation": {
"de": "XRechnung: Die Käuferreferenz (BT-10, z. B. Leitweg-ID) ist Pflicht.",
"en": "XRechnung: the buyer reference (BT-10, e.g. Leitweg-ID) is mandatory."
}
}
],
"versions": {
"xrechnungConfiguration": "xrechnung-3.0.2-validator-configuration-2026-08-31",
"koSitValidator": "1.6.3",
"mustang": "2.26.0",
"cenSchematron": "1.3.16"
}
}
source geeft de validatiefase aan (xsd, schematron, pdf, api, plausibility). versions legt vast welke regelset voor de controle is gebruikt; u kunt dit samen met het resultaat opslaan.
Plausibiliteit: meer dan alleen het formaat
Met checks=plausibility controleert de API ook wat de formaatregels niet afdekken. De bevindingen hebben regel-ID's die beginnen met PL- en gaan vergezeld van een afzonderlijk blok met berekende waarden.
| Regel-ID's | Controle |
|---|---|
PL-PFL | Verplichte factuurgegevens volgens § 14 lid 4 van de Duitse btw-wet (UStG), toegewezen aan de business terms (BT) |
PL-ARITH | Regeltotalen, btw-uitsplitsing en eindtotalen, tolerantie 0,01 |
PL-DATE, PL-VAT | Datums en btw-tarieven |
PL-SKONTO | Vervaldatum, kortingspercentage bij contante betaling (Skonto) en kortingstermijn uit de betalingsvoorwaarden |
PL-VATID | Formaat en controlecijfer van de btw-id (USt-IdNr.), geen controle bij BZSt of VIES |
curl -s -X POST 'https://api.electronic-invoice.app/v1/validate?checks=plausibility' \
-H 'Authorization: Bearer eia_live_YOUR_KEY' \
-H 'Content-Type: application/xml' \
--data-binary @invoice.xml | jq '.plausibility'
De response, ingekort:
{
"verdict": "warnings",
"summary": { "errors": 0, "warnings": 1, "infos": 1 },
"computed": {
"recalculated": {
"sumOfLineNetAmounts": "200.00",
"totalVat": "38.00",
"totalWithVat": "238.00",
"amountDue": "238.00"
},
"paymentTerms": { "dueDate": "2026-11-16", "daysFromIssueToDue": 14, "skonto": [] }
}
}
De waarschuwing in dit voorbeeld is PL-VATID-02: het voorbeeldnummer DE123456789 heeft een onjuist controlecijfer. Voor facturen tot EUR 250 bruto (§ 33 van de Duitse btw-uitvoeringsverordening, UStDV) worden verschillende gegevens alleen als hint gemeld.
Veel facturen tegelijk
/v1/validate/batch accepteert een ZIP met maximaal 200 bestanden, maximaal 5 MiB per bestand en 50 MiB in totaal. De API meldt dubbele factuurnummers van dezelfde verkoper binnen de batch als PL-DUP-01. Met report=csv of report=pdf krijgt u een samenvattend rapport in plaats van JSON. Batch is beschikbaar vanaf het abonnement Starter; elk gecontroleerd bestand telt als één aanroep.
curl -s -X POST 'https://api.electronic-invoice.app/v1/validate/batch?report=csv' \
-H 'Authorization: Bearer eia_live_YOUR_KEY' \
-H 'Content-Type: application/zip' \
--data-binary @inbox.zip \
-o report.csv
file;status;verdict;errors;warnings;infos;syntax;profile;invoice_number;seller;duplicate_of;first_error_rule;first_error_message
a.xml;checked;invalid;1;0;0;UBL-Invoice;XRECHNUNG;RE-2026-0001;Test GmbH;b.xml;PL-DUP-01;Invoice number RE-2026-0001 of seller Test GmbH appears in 2 files of this batch (different content).
Wat de controle niet doet
De regels controleren het formaat, de bedrijfsregels en, met checks=plausibility, de hierboven genoemde punten. Of de dienst, het btw-tarief of de bankgegevens inhoudelijk juist zijn, kan de API niet weten. Welke formaten de validatie dekt en hoe diepgaand, staat in de tabel Ondersteunde formaten. Voor formaten die zijn gemarkeerd als "schema only" of "core rules only" voeren autoriteiten of nationale regels aanvullende controles uit, zodat een geslaagd oordeel die niet vervangt. Controleer Franse regels met country=FR.
Abonnementen
Free: 0 EUR per maand, 50 aanroepen. Starter: 19 EUR per maand, 2.000 aanroepen. Business: 49 EUR per maand, 10.000 aanroepen. Pro: 149 EUR per maand, 50.000 aanroepen. Vaste maandprijzen, geen verbruiksafhankelijke facturering; wanneer het quotum is verbruikt, antwoordt de API met 429. Alleen voor bedrijven. Er wordt geen btw in rekening gebracht op grond van § 19 van de Duitse btw-wet (UStG). Meer limieten
Anders dan bij de gratis validator in de browser reist uw factuur via het Cloudflare-netwerk naar onze server in Neurenberg. De API verwerkt de factuur in het geheugen en slaat de factuurinhoud niet op. U kunt facturen genereren met XRechnung via API en ZUGFeRD via API; het verzenden naar de ontvanger is aan u.
Veelgestelde vragen
Telt een ongeldige factuur als een aanroep?
Ja. Een ongeldige factuur is een normale response met status 200 en telt als één aanroep.
Is dit de KoSIT-validator?
De API draait de gepubliceerde KoSIT-validator met de XRechnung-configuratie. Het is geen KoSIT-dienst en geen officiële goedkeuring. Onze tests zijn tests tegen voorbeeldbestanden, geen certificering.
Wordt de gevalideerde factuur opgeslagen?
Nee. De factuur wordt in het geheugen verwerkt en de applicatielogs bevatten geen factuurinhoud.
Juridische teksten zijn beschikbaar in het Duits en Engels: privacybeleid, API-voorwaarden en colofon. Alleen de Duitse versie is juridisch bindend.