Intégration

Une API REST, et les mêmes opérations exposées comme outils MCP pour les agents. Un seul format d'entrée : le JSON canonique, sous-ensemble strict du modèle sémantique EN 16931, où chaque champ porte son terme métier (BT-/BG-).

Consulter la documentation API interactive · tester une facture sans clé.

Contrôler une facture

curl -s https://api.validationfacture.fr/v1/validate \
  -H "Authorization: Bearer $CLE_API" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: F2026-0142" \
  -d '{"invoice": { … }}'

La réponse contient le verdict, la liste des anomalies et un paquet de preuves (empreinte de l'entrée, empreintes des sorties, version du référentiel, signature).

Une anomalie, telle qu'elle est renvoyée

{
  "code": "BR-CO-15",
  "severity": "error",
  "field": "totals.tax_inclusive_amount",
  "business_term": "BT-112",
  "message": "Le total TTC n'est pas égal au total HT augmenté de la TVA.",
  "fix": "Portez totals.tax_inclusive_amount à 1224.00.",
  "expected": "1224.00",
  "actual": "1220.00",
  "auto_repairable": true,
  "source": "EN 16931"
}

Branchez votre traitement sur code, jamais sur message : un code ne change pas de signification, et une règle retirée laisse son code retiré plutôt que recyclé. Voir les 89 codes.

Boucle d'intégration recommandée

  1. validate_invoice d'abord — 25 fois moins cher que la conversion, et il vous dit si la suite est nécessaire.
  2. Si toutes les anomalies portent auto_repairable: true, appelez repair_invoice : la correction est déterministe et la liste des changements vous est rendue.
  3. Sinon, remontez les anomalies à un humain : le service refuse de deviner une donnée absente ou de trancher entre deux montants contradictoires.
  4. convert_invoice pour produire le Factur-X, l'UBL ou le CII.
  5. En cas de rejet malgré tout, explain_rejection avec le code et la facture. Voir les codes de rejet.

Les mêmes opérations en MCP

{
  "mcpServers": {
    "validation-facture": {
      "command": "invoice-guard-mcp",
      "env": { "INVOICE_GUARD_API_KEY": "…" }
    }
  }
}

Un verdict obtenu en MCP est identique au verdict obtenu en REST, et porte le même paquet de preuves : c'est le même moteur, exposé sur deux transports.