Documentation de l'API

Réception de factures

Les deux points de terminaison acceptent un PDF ZUGFeRD/Factur-X entrant — en champ multipart pdf (fichier) ou champ pdfBase64. Rien n'est créé, rien n'est enregistré.

POST /v1/read — lire (désérialiser)

Extrait le XML CII intégré et renvoie la facture en objet JSON complet au schéma eunormiale même schéma que /v1/convert accepte en entrée (aller-retour possible).

Réponse : {"standard": "facturx", "invoice": {…}, "xml": "…"}. Le XML brut est joint pour les champs hors schéma. PDF non lisible → 422.

POST /v1/validate — valider

Valide le PDF avec la double barrière : veraPDF (PDF/A-3) et le Schematron EN 16931. En option :

ChampDescription
kosit=trueValidateur officiel KoSIT (XRechnung/DE) en troisième barrière.
frCtc=trueRègles CTC françaises (FNFE-MPE) en quatrième barrière.

Réponse : {"valid": true|false, "verapdf": {…}, "xml": {…}, "kosit": {…}?, "frCtc": {…}?, "sha256": "…"}. Chaque barrière renvoie result (PASS/FAIL/UNAVAILABLE) et, en cas d'échec, les failures concrètes. Un module non installé signale honnêtement UNAVAILABLE — jamais un PASS silencieux.

À essayer dans le navigateur : page de validation.

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();