API-Dokumentation

Rechnungsempfang

Beide Endpunkte nehmen ein eingehendes ZUGFeRD/Factur-X-PDF entgegen — als multipart-Feld pdf (Datei) oder Formularfeld pdfBase64. Es wird nichts erzeugt und nichts gespeichert.

POST /v1/read — lesen (deserialisieren)

Extrahiert das eingebettete CII-XML und liefert die Rechnung als vollständiges JSON-Objekt im eunormia-Schemademselben Schema, das /v1/convert als Eingabe nimmt. Sie können das Ergebnis also direkt weiterverarbeiten oder unverändert wieder in eine Konvertierung geben (Round-Trip).

Antwort: {"standard": "facturx", "invoice": {…}, "xml": "<rsm:CrossIndustryInvoice…"}. Das rohe XML liegt bei, falls Sie Felder außerhalb des Schemas brauchen. Kein lesbares E-Rechnungs-PDF → 422.

POST /v1/validate — prüfen

Validiert das PDF gegen das Doppel-Gate: veraPDF (PDF/A-3) und EN-16931-Schematron. Optional zusätzlich:

FeldBeschreibung
kosit=trueAmtlicher KoSIT-Validator (XRechnung/DE) als drittes Gate.
frCtc=trueFranzösische CTC-Regeln (FNFE-MPE) als viertes Gate.

Antwort: {"valid": true|false, "verapdf": {…}, "xml": {…}, "kosit": {…}?, "frCtc": {…}?, "sha256": "…"}. Jedes Gate meldet result (PASS/FAIL/UNAVAILABLE) und bei FAIL die konkreten failures. Ein nicht installiertes Prüfmodul meldet ehrlich UNAVAILABLE — nie einen stillen PASS.

Zum Ausprobieren im Browser: Validierungs-Seite.

Quickstarts

cURL — /v1/read

curl -X POST https://eunormia.com/v1/read -F 'pdf=@eingang.pdf'

cURL — /v1/validate (+ KoSIT + FR-CTC)

curl -X POST https://eunormia.com/v1/validate \
  -F 'pdf=@eingang.pdf' -F 'kosit=true' -F 'frCtc=true'

C# (HttpClient)

using var client = new HttpClient();
var form = new MultipartFormDataContent {
  { new ByteArrayContent(File.ReadAllBytes("eingang.pdf")), "pdf", "eingang.pdf" }
};
var resp = await client.PostAsync("https://eunormia.com/v1/read", form);
var doc = System.Text.Json.JsonDocument.Parse(await resp.Content.ReadAsStringAsync());
var number = doc.RootElement.GetProperty("invoice").GetProperty("number").GetString();