1. Aperçu

Le serveur fournit trois outils et une ressource que les agents IA peuvent appeler via le Model Context Protocol.

ScénarioOutil / Ressource
Vérifier une facture avant l'envoivalidate_invoice
Lire les données XML d'un PDF ZUGFeRDextract_xml
Vérifier que le PDF et le XML concordentcheck_consistency
Interroger les formats et jeux de règles disponiblesvalidation://rules
Toutes les réponses sont du JSON structuré. Pas de texte libre — chaque erreur contient l'ID de règle, le champ concerné, le message d'erreur, une suggestion de correction applicable et le XPath.

2. Architecture & flux de données

Agent IA │ │ Message MCP (JSON-RPC via stdio) ▼ ┌─────────────────────────────────────────┐ │ zugferd-mcp-client (npm, local) │ │ │ │ validate_invoice · extract_xml │ │ check_consistency │ │ │ │ │ Requête REST HTTPS │ │ ▼ │ │ API ZUGFeRD Validator (hébergée) │ │ api.zugferd-validator.de │ │ Auth: X-Api-Key │ │ │ │ │ Base64 → Mustang + KoSIT (parallèle) │ │ ▼ │ │ Parseur rapport + BdD corrections │ └─────────────────┬───────────────────────┘ │ JSON structuré ▼ L'agent IA reçoit le résultat

Déroulement pour validate_invoice

1
Le client MCP reçoit l'appel — fichier Base64 + paramètres de l'agent IA
2
Requête HTTPS vers l'API — POST /v1/validate avec l'en-tête X-Api-Key
3
Auth & limite de débit — l'API vérifie la clé et la limite du forfait
4
Double validation (en parallèle) — Mustang CLI (ZUGFeRD/Factur-X) et l'outil de validation KoSIT (XRechnung + EN 16931 CII) s'exécutent en même temps (max. 30 s)
5
Consolidation des résultats — les erreurs des deux moteurs sont fusionnées et dédupliquées ; les suggestions de correction sont ajoutées
6
Résultat JSON — l'API répond, le client MCP transmet à l'agent IA

3. Moteurs de validation

Chaque requête est vérifiée par deux moteurs en même temps. Les résultats sont consolidés, dédupliqués, puis renvoyés.

MoteurVersionFormats couverts
Mustang Project v2.22.0 ZUGFeRD 1.0–2.4, Factur-X 1.0, XRechnung (général)
Outil de validation KoSIT v1.6.2 XRechnung 3.0.2 (CII + UBL), EN 16931 CII/UBL (brut), Factur-X 1.07.3 / 1.08 (tous les profils)
Réponse consolidée : les erreurs des deux moteurs apparaissent dans la même liste errors. Les doublons (même ID de règle + message) sont supprimés automatiquement. Les erreurs KoSIT ne sont retenues que si un scénario de validation adapté a été détecté — pour des GuidelineIDs inconnus, Mustang seul prend le relais.

4. Installation & configuration

1
Obtenir une clé API
# Kostenlos registrieren:
https://zugferd-validator.de/portal
2
Installer le client MCP
npm install -g zugferd-mcp-client
3
Configurer dans le client MCP
// mcp_config.json (je nach Client abweichender Pfad)
{
  "mcpServers": {
    "zugferd": {
      "command": "zugferd-mcp-client",
      "env": {
        "ZUGFERD_API_KEY": "zv_dein_key_hier"
      }
    }
  }
}

API REST directe

L'API peut aussi être appelée directement, sans client MCP :

# Beispiel: Validierung per curl
curl -X POST https://api.zugferd-validator.de/v1/validate \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: zv_dein_key_hier" \
  -d '{"file_content":"<base64>","file_type":"xml"}'

Variables d'environnement (client MCP)

VariableDescriptionDéfaut
ZUGFERD_API_KEYClé API du portail– (obligatoire)
ZUGFERD_API_URLURL de base de l'APIhttps://api.zugferd-validator.de

5. Outils

validate_invoice TOOL

Valide une facture électronique (PDF ZUGFeRD/Factur-X ou XML XRechnung) selon la norme EN 16931 et les extensions allemandes. Renvoie des erreurs, avertissements et suggestions de correction structurés.

Schéma d'entrée

file_content * string Contenu du fichier PDF ou XML encodé en Base64. Les préfixes data-URL (data:application/pdf;base64,…) sont retirés automatiquement.
file_type * enum "pdf" pour les PDF ZUGFeRD/Factur-X · "xml" pour les fichiers XML XRechnung/CII purs
profile enum? Indication de profil optionnelle. En cas d'écart avec le profil détecté, un warning avec rule_id: "PROFILE_MISMATCH" est généré.
Valeurs : minimum · basic_wl · basic · en16931 · extended · xrechnung

Schéma de sortie

{
  "valid":    true,
  "format":   "ZUGFeRD 2.x",
  "profile":  "EN16931",
  "summary":  "Keine Probleme gefunden",
  "errors":   [],
  "warnings": [],
  "notices":  [],
  "metadata": {
    "invoice_number": "RE-2026-001",
    "issue_date":     "2026-04-01",
    "seller":         "Musterfirma GmbH",
    "buyer":          "Beispiel AG",
    "total_amount":   "1190.00",
    "currency":       "EUR"
  }
}
{
  "valid":   false,
  "format":  "ZUGFeRD 2.x",
  "profile": "EN16931",
  "summary": "2 Fehler, 1 Warnung gefunden",
  "errors": [
    {
      "severity":       "error",
      "rule_id":        "BR-DE-15",
      "field":          "BT-10",
      "message":        "Die Käuferreferenz / Leitweg-ID (BT-10) muss übermittelt werden.",
      "fix_suggestion": "Füge die Käuferreferenz / Leitweg-ID (BT-10) in 'ram:ApplicableHeaderTradeAgreement/ram:BuyerReference' ein.",
      "xpath":          "//ram:ApplicableHeaderTradeAgreement/ram:BuyerReference"
    }
  ],
  "warnings": [
    {
      "severity":       "warning",
      "rule_id":        "BR-CL-10",
      "field":          "BT-81",
      "message":        "Zahlungsmittelcode muss aus UNTDID 4461 stammen.",
      "fix_suggestion": "Verwende z.B. '58' für SEPA-Überweisung oder '59' für SEPA-Lastschrift.",
      "xpath":          "//ram:SpecifiedTradeSettlementPaymentMeans/ram:TypeCode"
    }
  ]
}

Champs de sortie

ChampTypeObligatoireDescription
validbooleanOuitrue si aucune erreur n'a été trouvée
formatstringNonFormat détecté, p. ex. "ZUGFeRD 2.x", "CII EN16931", "XRechnung 3.0"null si aucun XML n'est extractible
profilestringNonProfil détecté en majuscules, p. ex. "EN16931", "XRECHNUNG"null si aucun XML n'est extractible
summarystringOuiRésumé lisible, p. ex. "2 Fehler, 1 Warnung gefunden"
errorsarrayOuiErreurs de validation — rendent la facture non valide
warningsarrayOuiAvertissements — la facture peut néanmoins être valide
noticesarrayNonRemarques informatives sans effet sur la validité
metadataobjectNonDonnées de facture extraites — présentes pour les PDF si le XML intégré a pu être lu, et toujours pour file_type: "xml"
extract_xml TOOL

Extrait le document XML intégré d'un PDF ZUGFeRD/Factur-X. Renvoie le contenu XML complet sous forme de chaîne, avec le format et le profil détectés.

Entrée

pdf_content * string Contenu du fichier PDF ZUGFeRD/Factur-X encodé en Base64.

Sortie

{
  "xml_content": "<?xml version='1.0' encoding='UTF-8'?>\n<rsm:CrossIndustryInvoice ...>...</rsm:CrossIndustryInvoice>",
  "format":      "ZUGFeRD 2.x",
  "profile":     "EN16931"
}
Le xml_content extrait peut être transmis directement (après encodage Base64) à validate_invoice avec file_type: "xml".
check_consistency TOOL

Vérifie que les données visibles par l'humain dans le PDF (numéro de facture, date, montant total) correspondent aux données machine stockées dans la pièce jointe XML. Révèle les manipulations ou erreurs de saisie.

Entrée

pdf_content * string Contenu du fichier PDF ZUGFeRD/Factur-X encodé en Base64.

Sortie

{
  "consistent":    true,
  "discrepancies": []
}
{
  "consistent":    false,
  "discrepancies": [
    {
      "field":     "total_amount",
      "pdf_value": "1190.00",
      "xml_value": "1180.00",
      "message":   "Gesamtbetrag im PDF ('1190.00') unterscheidet sich von dem im XML ('1180.00')."
    }
  ]
}

Champs vérifiés & tolérances

ChampMotif de détection dans le PDFTolérance
invoice_numberRechnungsnummer:, Rechnung Nr., Invoice No.Casse, espaces et tirets ignorés
issue_dateRechnungsdatum:, Datum:, Invoice Date:Aucune — les formats de date sont normalisés en ISO 8601
total_amountGesamtbetrag:, Rechnungsbetrag:, Total:±0,01 EUR (différences d'arrondi)
La reconnaissance de texte repose sur le texte PDF lisible par machine. Les PDF scannés sans couche OCR ne sont pas pris en charge.
create_invoice TOOL

Crée une facture électronique valide à partir de données structurées — au choix comme PDF ZUGFeRD (PDF/A-3 avec XML CII EN 16931 intégré) ou comme XML XRechnung pur (CII avec CIUS XRechnung 3.0 et Leitweg-ID pour le B2G). Plusieurs lignes, toutes les catégories de TVA (S/Z/E/AE), remises/majorations, informations de paiement. REST : POST /v1/create. Sans état — rien n'est stocké. Montants en centimes, date au format YYYY-MM-DD.

Entrée (extrait)

format *stringzugferd (PDF) ou xrechnung (XML)
document_typestringType de document, défaut invoice : credit_note (avoir/annulation), corrected, self_billed, prepayment (acompte), partial (facture partielle). En brut via type_code.
preceding_invoiceobjectRéférence à la facture d'origine { number, date } — pour annulation/correction (BT-25/26)
number, date *stringNuméro et date du document (YYYY-MM-DD)
seller, buyer *objectParties (name, street, zip, city, country, vat_id, email …)
lines *arrayLignes : name, quantity, unit_net_price_cents, vat_category, vat_rate
allowances_chargesarrayRemises/majorations au niveau du document
buyer_referencestringLeitweg-ID (BT-10) — obligatoire pour xrechnung
payment_terms, due_date, payment_meansstring/objectConditions de paiement, échéance, IBAN/BIC
seller_logostringLogo en Base64 (PNG/JPG) — uniquement Automatiser/Scaler
self_checkbooleanVérifier immédiatement selon EN 16931 (plus lent). Défaut false.

Sortie

{
  "format":     "zugferd",
  "profile":    "EN16931",
  "pdf_base64": "JVBERi0xLjc…",
  "xml":        "<?xml version=\"1.0\"…",
  "branding":   "free_footer"
}
Self-check découplé : par défaut, la facture est renvoyée immédiatement. La preuve de conformité s'obtient dans un second temps via validate_invoice sur le pdf_base64 ou le xml renvoyé — ou en réglant self_check: true pour un aller-retour unique. Le branding (pied de page sur le forfait Gratuit / white-label à partir d'Automatiser) est déterminé côté serveur selon le forfait. Quota hebdomadaire propre : Gratuit 1, Automatiser 20, Scaler illimité.
Clé sandbox (zv_test_…, via GET /v1/keys/me) : pour intégrer librement sans entamer le quota réel. Les factures créées portent un filigrane « DEMO » en mosaïque sur chaque page plus un marqueur XML — entièrement testables, mais sans valeur comme véritable facture. 100/jour, 3/minute ; comptées séparément du quota réel.

6. Ressource : validation_rules

Renvoie l'ensemble de règles actuel du serveur : formats et profils pris en charge, ainsi que le moteur de validation utilisé.

URI : validation://rules

{
  "supported_formats": [
    "ZUGFeRD 1.0", "ZUGFeRD 2.0", "ZUGFeRD 2.1", "ZUGFeRD 2.2",
    "ZUGFeRD 2.3", "ZUGFeRD 2.x / Factur-X 1.0x",
    "XRechnung 1.2", "XRechnung 2.0", "XRechnung 2.3", "XRechnung 3.0"
  ],
  "supported_profiles": [
    "minimum", "basic_wl", "basic", "en16931", "extended", "xrechnung"
  ],
  "validation_engines": [
    "Mustang Project v2.22.0",
    "KoSIT Validierungstool v1.6.2 (XRechnung 3.0.2 + EN 16931 CII)"
  ],
  "last_updated":      "2026-04-08"
}

7. Gestion des erreurs

En cas d'erreur, tous les outils renvoient un objet JSON avec un champ error. Il n'y a jamais de sortie d'erreur non structurée.

{
  "error":   "Kurze Fehlerkategorie",
  "details": "Ausführliche Beschreibung mit konkretem Hinweis zur Behebung."
}
errorDéclencheur
"Fehlender Parameter"Champ obligatoire non transmis
"Ungültiger Parameter"Valeur incorrecte pour file_type
"Ungültiger Base64-Input"Chaîne Base64 non valide transmise
"Validierungsfehler"Mustang CLI n'a pas pu démarrer (p. ex. Java absent) ou timeout après 30 s
"XML-Extraktion fehlgeschlagen"Aucun fichier XML trouvé dans la pièce jointe du PDF (pour extract / consistency). Pour validate, un notice avec rule_id: "NO_EMBEDDED_XML" est renvoyé à la place et valid: true est défini
"PDF-Lesefehler"Le PDF ne peut pas être lu
"XML-Parsing-Fehler"Le XML extrait n'est pas un XML valide
"Interner Fehler"Erreur d'exécution inattendue
Timeout : les deux moteurs de validation s'exécutent en parallèle et sont interrompus après 30 secondes chacun. Si Mustang échoue, "error": "Validierungsfehler" est renvoyé. Un timeout de KoSIT est ignoré en silence — les résultats de Mustang sont conservés.

8. Types de données communs

ValidationIssue

Utilisé dans les tableaux errors, warnings et notices de validate_invoice.

ChampTypeObligatoireDescription
severity"error" | "warning" | "notice"OuiNiveau de gravité du constat
rule_idstringOuiID de règle, p. ex. "BR-DE-1", "BR-CL-10". Valeur "UNKNOWN" pour les violations de schéma XSD (KoSIT) ou lorsqu'aucune ID de règle n'a pu être déterminée
fieldstringNonChamp BT concerné, p. ex. "BT-10"
messagestringOuiMessage d'erreur (en allemand)
fix_suggestionstringNonConseil de correction concret avec exemple XML
xpathstringNonXPath vers l'élément XML concerné

InvoiceMetadata

Champ optionnel dans le résultat de validate_invoice (uniquement pour file_type: "xml").

ChampTypeDescription
invoice_numberstring?Numéro de facture (BT-1)
issue_datestring?Date de facture ISO 8601, p. ex. "2026-04-01"
sellerstring?Nom du vendeur (BT-27)
buyerstring?Nom de l'acheteur (BT-44)
total_amountstring?Montant total sous forme de chaîne décimale, p. ex. "1190.00"
currencystring?Code devise ISO 4217, p. ex. "EUR"

9. Formats & profils pris en charge

Formats

FormatStandardRemarque
ZUGFeRD 1.0ZUGFeRD 1.0 / GEFEGVersion plus ancienne, prise en charge des profils limitée
ZUGFeRD 2.0FeRD 2.0Première version basée sur CII
ZUGFeRD 2.1Factur-X 1.0 (FR)Techniquement identique à Factur-X 1.0
ZUGFeRD 2.2Factur-X 1.0.05Corrections mineures
ZUGFeRD 2.3Factur-X 1.0.06Version antérieure à 2.4
ZUGFeRD 2.x / Factur-X 1.0xEN 16931 + D16BVersion principale actuelle (2026) — l'API renvoie "ZUGFeRD 2.x"
XRechnung 1.2XRechnung 1.2Version XRechnung plus ancienne
XRechnung 2.xXRechnung 2.0–2.3Différentes versions intermédiaires
XRechnung 3.0XRechnung 3.0Version XRechnung actuelle

Profils (ZUGFeRD/Factur-X)

ID de profilNom affichéUsage typique
minimumMINIMUMTraitement machine simple
basic_wlBASIC-WLSans détail des lignes
basicBASICFactures standard
en16931EN 16931 (COMFORT)Donneurs d'ordre publics, PEPPOL
extendedEXTENDEDProcessus B2B complexes
xrechnungXRECHNUNGAdministration publique allemande

10. Règles & suggestions de correction

Le serveur contient une base de suggestions de correction pour 63 catégories de règles. Les erreurs des deux moteurs de validation (Mustang + KoSIT) sont consolidées — lorsqu'une ID de règle connue est trouvée, la suggestion de correction est ajoutée automatiquement.

Règles BR-DE 26 règles

Extensions allemandes — obligatoires pour les factures conformes à XRechnung.

ID de règleChampDescription courte
BR-DE-1BG-16PAYMENT INSTRUCTIONS (BG-16) manquantes
BR-DE-2BG-6Contact vendeur (BG-6)
BR-DE-3BT-37Ville du vendeur (BT-37)
BR-DE-4BT-38Code postal du vendeur (BT-38)
BR-DE-5BT-41Interlocuteur du vendeur (BT-41)
BR-DE-6BT-42Numéro de téléphone du vendeur (BT-42)
BR-DE-7BT-43E-mail du vendeur (BT-43)
BR-DE-8BT-52Ville de l'acheteur (BT-52)
BR-DE-9BT-53Code postal de l'acheteur (BT-53)
BR-DE-10BT-77Ville de livraison (BT-77)
BR-DE-11BT-78Code postal de livraison (BT-78)
BR-DE-12supprimée dans la version XRechnung actuelle
BR-DE-13supprimée dans la version XRechnung actuelle
BR-DE-14BT-119Taux de TVA (BT-119)
BR-DE-15BT-10Référence acheteur / Leitweg-ID (BT-10)
BR-DE-16BT-31Numéro de TVA / numéro fiscal du vendeur
BR-DE-17BT-3Code de type de facture non autorisé (BT-3)
BR-DE-18BT-20Informations d'escompte (BT-20) au mauvais format
BR-DE-19supprimée dans la version XRechnung actuelle
BR-DE-20supprimée dans la version XRechnung actuelle
BR-DE-21BT-24Specification identifier (BT-24) non conforme à XRechnung
BR-DE-22Noms de fichiers joints non uniques
BR-DE-23supprimée dans la version XRechnung actuelle
BR-DE-24supprimée dans la version XRechnung actuelle
BR-DE-25supprimée dans la version XRechnung actuelle
BR-DE-26BT-3Correction de facture sans facture de référence (BG-3)

Règles fondamentales EN 16931 (BR-*) 10 règles

ID de règleChampDescription courte
BR-1BT-24Specification identifier (BT-24)
BR-2BT-1Numéro de facture (BT-1)
BR-3BT-2Date de facture (BT-2)
BR-4BT-3Code de type de facture (BT-3)
BR-5BT-5Code devise (BT-5)
BR-6BT-27Nom du vendeur (BT-27)
BR-7BT-44Nom de l'acheteur (BT-44)
BR-8BG-5Adresse postale du vendeur (BG-5)
BR-9BG-5Code pays du vendeur (BT-40)
BR-10BG-8Adresse postale de l'acheteur (BG-8)

Règles de calcul (BR-CO-*) & règles de listes de codes (BR-CL-*) 8 règles

ID de règleDescription courte
BR-CO-3La date de taxe et le code de date de taxe s'excluent mutuellement
BR-CO-9Numéro de TVA du vendeur sans préfixe pays
BR-CO-10La somme des montants nets des lignes est incorrecte
BR-CO-13Montant total hors TVA mal calculé
BR-CL-10schemeID non valide (pas issue d'ISO 6523)
BR-CL-16Code de moyen de paiement non valide (pas issu d'UNTDID 4461)
BR-CL-17Catégorie de TVA non valide au niveau de la ligne
BR-CL-18Catégorie de TVA non valide au niveau du document

Règles de catégorie de taxe (BR-S/Z/E/AE-*) 4 règles

ID de règleDescription courte
BR-S-1Montant de taxe indiqué pour le taux normal (S)
BR-Z-1Montant de taxe au taux zéro (Z) = 0
BR-E-1Montant de taxe en cas d'exonération (E) = 0
BR-AE-1Montant de taxe en autoliquidation (AE) = 0

11. Exemples d'utilisation

Exemple 1 : valider un XML XRechnung

{
  "tool": "validate_invoice",
  "arguments": {
    "file_content": "PD94bWwgdmVyc2lvbj0iMS4wIj8+...",
    "file_type":   "xml",
    "profile":     "xrechnung"
  }
}
{
  "valid":   true,
  "format":  "XRechnung 3.0",
  "profile": "XRECHNUNG",
  "summary": "Keine Probleme gefunden",
  "errors":  [],
  "warnings": [],
  "metadata": {
    "invoice_number": "INV-2026-0042",
    "issue_date":     "2026-04-07",
    "seller":         "Tech GmbH",
    "buyer":          "Bundesbehörde X",
    "total_amount":   "5950.00",
    "currency":       "EUR"
  }
}

Exemple 2 : facture erronée avec suggestion de correction

{
  "tool": "validate_invoice",
  "arguments": {
    "file_content": "JVBERi0xLjQK...",
    "file_type":   "pdf"
  }
}
{
  "valid":   false,
  "format":  "ZUGFeRD 2.x",
  "profile": "EN16931",
  "summary": "1 Fehler gefunden",
  "errors": [{
    "severity":       "error",
    "rule_id":        "BR-DE-23",
    "field":          "BT-10",
    "message":        "Käuferreferenz (BT-10) muss für XRechnung angegeben werden.",
    "fix_suggestion": "Füge 'ram:BuyerReference' hinzu, z.B. '04011000-1234-34' für Behörden.",
    "xpath":          "//ram:ApplicableHeaderTradeAgreement/ram:BuyerReference"
  }],
  "warnings": []
}

Exemple 3 : extraire et valider le XML

// Schritt 1 — XML aus PDF extrahieren
{ "tool": "extract_xml", "arguments": { "pdf_content": "JVBERi0x..." } }

// Schritt 2 — Extrahiertes XML validieren (base64-kodiert übergeben)
{ "tool": "validate_invoice", "arguments": { "file_content": "<base64 des xml_content>", "file_type": "xml" } }

Exemple 4 : contrôle de cohérence

{
  "tool": "check_consistency",
  "arguments": { "pdf_content": "JVBERi0xLjQK..." }
}
{
  "consistent":    false,
  "discrepancies": [{
    "field":     "total_amount",
    "pdf_value": "1190.00",
    "xml_value": "1180.00",
    "message":   "Gesamtbetrag im PDF ('1190.00') unterscheidet sich von dem im XML ('1180.00')."
  }]
}

Exemple 3 : PDF simple sans XML intégré

Une facture PDF classique sans pièce jointe ZUGFeRD/Factur-X renvoie valid: true avec un notice informatif — pas d'erreur, mais une indication qu'aucune donnée structurée n'a pu être vérifiée.

{
  "tool": "validate_invoice",
  "arguments": {
    "file_content": "JVBERi0xLjQK...",
    "file_type":   "pdf"
  }
}
{
  "valid":    true,
  "format":   null,
  "profile":  null,
  "summary":  "2 Hinweise gefunden",
  "errors":   [],
  "warnings": [],
  "notices": [
    {
      "severity": "notice",
      "rule_id":  "UNKNOWN",
      "message":  "XML could not be extracted"
    },
    {
      "severity": "notice",
      "rule_id":  "NO_EMBEDDED_XML",
      "message":  "Kein eingebettetes XML gefunden. Die PDF ist möglicherweise keine ZUGFeRD/Factur-X Rechnung."
    }
  ]
}

12. Limites & restrictions connues

RestrictionDétails
TimeoutMustang CLI est interrompu côté serveur après 30 secondes. Les fichiers très volumineux ou corrompus peuvent déclencher ce timeout.
Limite de débitValidation : Gratuit 20/semaine · Automatiser 500/semaine · Scaler illimité. Création (quota propre) : Gratuit 1/semaine · Automatiser 20/semaine · Scaler illimité. Création sandbox : 100/jour, max. 3/minute. En cas de dépassement : HTTP 429.
OCR des PDFcheck_consistency n'analyse que le texte PDF lisible par machine. Les PDF scannés sans couche OCR ne sont pas pris en charge.
Métadonnées pour les PDFvalidate_invoice extrait aussi les métadonnées des PDF, à condition qu'un XML intégré soit présent et lisible. Pour les PDF simples sans XML, ce champ est absent.
Contrôle de cohérenceSeuls trois champs sont comparés (numéro, date, montant). Les adresses, numéros fiscaux et détails de lignes ne sont pas confrontés.
ID de règle inconnuesSi une ID de règle manque dans la base de suggestions, fix_suggestion reste vide. Le message est renvoyé malgré tout.
Taille de fichierAucune limite de taille explicite, mais les PDF très volumineux (>50 Mo) peuvent provoquer un timeout.

13. Journal des modifications

Juin 2026 — Création de factures

  • Nouvel outil create_invoice / POST /v1/create : créer des factures électroniques valides à partir de données structurées — comme PDF ZUGFeRD (PDF/A-3) ou XML XRechnung pur (avec Leitweg-ID pour le B2G).
  • Plusieurs lignes, toutes les catégories de TVA (S/Z/E/AE), remises/majorations, informations de paiement, échéance.
  • Types de document : facture, avoir/annulation, correction, autofacturation, facture d'acompte et facture partielle — avec référence à la facture d'origine.
  • Branding selon le forfait (pied de page sur le forfait Gratuit / white-label à partir d'Automatiser avec logo optionnel) ; quota hebdomadaire propre, distinct de la validation.
  • Clés sandbox/test (zv_test_…) : intégration libre avec filigrane « DEMO », sans entamer le quota réel.

Avril 2026 — Première publication

  • Validation selon EN 16931 (validate_invoice) pour les PDF ZUGFeRD/Factur-X et les XML XRechnung, avec des suggestions de correction concrètes.
  • Extraction XML (extract_xml) et contrôle de cohérence PDF↔XML (check_consistency).
  • Client MCP pour Claude & autres agents IA ; moteurs Mustang et KoSIT.