API REST à intégrer dans votre workflow d'export — pas un plugin maintenu par FacturX API.

Brancher Dolibarr à un moteur Factur-X EN16931 via API REST

Intégrateurs Dolibarr, éditeurs et ESN métier : appelez FacturX API depuis un module ou un hook Dolibarr pour diagnostiquer un export, transformer un PDF en Factur-X avec compléments invoice_data, réparer un XML CII ou extraire le XML d'un Factur-X reçu — avant transmission via la Plateforme Agréée du client.

API REST appelable depuis un module ou un hook Dolibarr (PHP)
Mode invoice_data JSON pour compléter SIREN, schemeID, taux TVA absents de l'export
Liberté du choix de Plateforme Agréée — FacturX API n'est pas PA

Exemple curl

multipart/form-data — /convert + invoice_data JSON
curl -X POST https://api.facturxapi.com/api/v1/convert \
  -H "Authorization: Bearer $FACTURX_API_KEY" \
  -F "file=@./facture-dolibarr.pdf" \
  -F 'invoice_data={"invoice_number":"FA-2026-001","issue_date":"2026-05-15","currency":"EUR","seller":{"name":"Ma Société","siren":"552120222","vat_number":"FR40552120222"},"buyer":{"name":"Client Final","siren":"123456789"}}'

Snippet Dolibarr

Hook Dolibarr — appel /api/v1/convert
<?php

/**
 * Hook Dolibarr custom — appel FacturX API /convert
 * Place ce code dans un module Dolibarr custom (htdocs/custom/yourmodule/)
 * et déclenche-le depuis BILL_VALIDATE ou un cron.
 */

use Symfony\Component\HttpClient\HttpClient;

function facturx_convert_dolibarr_invoice(string $pdfPath, array $invoice): array
{
    $client = HttpClient::create([
        'timeout' => 20,
        'headers' => [
            'Authorization' => 'Bearer ' . getenv('FACTURX_API_KEY'),
        ],
    ]);

    // Compléter ce que l'export Dolibarr ne fournit pas toujours
    $invoiceData = [
        'invoice_number' => $invoice['facnumber'],
        'issue_date' => $invoice['date'],
        'currency' => $invoice['multicurrency_code'] ?: 'EUR',
        'seller' => [
            'name' => $invoice['seller_name'],
            'siren' => $invoice['seller_siren'],     // BT-30, schemeID 0002
            'vat_number' => $invoice['seller_tva'],  // BT-31
        ],
        'buyer' => [
            'name' => $invoice['buyer_name'],
            'siren' => $invoice['buyer_siren'],
        ],
    ];

    $response = $client->request('POST', 'https://api.facturxapi.com/api/v1/convert', [
        'body' => [
            'file' => fopen($pdfPath, 'r'),
            'invoice_data' => json_encode($invoiceData),
        ],
    ]);

    return $response->toArray(false);
}

Les 4 endpoints — appels multipart

Mêmes headers d'auth, mêmes codes d'erreur, même pipeline PDF/A-3 + Schematron EN16931.

POST /api/v1/validate

PDF/A-3 + XSD + Schematron

Valide un PDF Factur-X ou un XML CII. Retourne un rapport JSON structuré avec codes BR-* par ligne/champ.

curl -X POST https://api.facturxapi.com/api/v1/validate \
  -H "Authorization: Bearer $KEY" \
  -F "file=@./facture.pdf"

POST /api/v1/extract

XML CII embarqué → JSON

Extrait le XML CII d'un PDF Factur-X reçu. Paramètre validate=true combine extraction + validation en une requête.

curl -X POST https://api.facturxapi.com/api/v1/extract \
  -H "Authorization: Bearer $KEY" \
  -F "file=@./facture-recue.pdf" \
  -F "validate=true"

POST /api/v1/convert

PDF → Factur-X PDF/A-3

Convertit un PDF visuel + données ERP (mode invoice_data JSON) en Factur-X PDF/A-3 avec XML CII, à valider dans votre parcours de contrôle avant transmission PA/SC.

curl -X POST https://api.facturxapi.com/api/v1/convert \
  -H "Authorization: Bearer $KEY" \
  -F "file=@./facture.pdf" \
  -F 'invoice_data={"invoice_number":"FA-001",...}'

POST /api/v1/repair

Corrections déterministes

Corrige automatiquement les erreurs réparables d'un XML CII (dates, décimaux, namespaces, schemeID). Retour : diff + XML réparé.

curl -X POST https://api.facturxapi.com/api/v1/repair \
  -H "Authorization: Bearer $KEY" \
  -F "file=@./facture-invalide.xml"

Checklist intégration

  • Stocker FACTURX_API_KEY hors du dépôt Dolibarr (vault, env serveur, conf/conf.php override)

  • Appeler FacturX API depuis un hook BILL_VALIDATE ou un cron, pas dans la transaction métier

  • Conserver le request_id retourné pour corréler avec vos logs Dolibarr (rowid facture)

  • Pour les exports incomplets, compléter via invoice_data JSON plutôt que de modifier le générateur PDF Dolibarr

Retries & timeouts

Configurez un retry exponentiel (max 3 tentatives) côté module Dolibarr sur 429/502, et traitez 402 (quota) comme un signal business — pas comme une erreur transitoire.

  • • Timeout HttpClient recommandé : 20 s (PDF + Schematron peuvent monter à 10 s sur gros PDF)
  • • Backoff : 1s, 3s, 9s — utiliser le retry intégré de Symfony HttpClient
  • • Tracer request_id dans la table llx_facture_extrafields pour audit ultérieur

Erreurs fréquentes

Mappez vos logs aux codes pour des corrections rapides.

BR-CO-26

Aucun identifiant vendeur (BT-29, BT-30, BT-31) présent. Cas fréquent sur les exports Dolibarr où le SIREN société est vide ou son schemeID="0002" absent.

💡 Renseigner le SIREN dans Société → Configuration générale, OU compléter via invoice_data.seller.siren au moment de l'appel /convert.

BR-CO-15

Somme des lignes ≠ total HT déclaré. Lié aux arrondis multi-taux TVA dans Dolibarr (5,5 % alimentaire + 20 % standard).

💡 Vérifier la précision monétaire MAIN_MAX_DECIMALS_UNIT et MAIN_MAX_DECIMALS_TOT. À défaut, appeler /repair pour corriger les décimaux avant /validate.

422 invalid_payload

PDF Dolibarr généré sans embedding XML CII (TCPDF < v19) — l'extract API ne trouve pas de XML.

💡 Mettre à jour Dolibarr 19+ ou passer par /convert avec invoice_data JSON pour générer un Factur-X PDF/A-3 depuis le PDF visuel.

402 quota_exceeded

Plan Free saturé (10 factures traitées / mois).

💡 Passer en plan Integration (500 ops/mois) ou Design Partner. Surfacer le warning côté Dolibarr via Notifications module.

FAQ

Est-ce un plugin Factur-X officiel pour Dolibarr ?

Non. FacturX API ne distribue pas de module DoliStore. C'est une API REST que vous appelez depuis un module Dolibarr custom ou un hook. Si vous cherchez un module communautaire à configurer, voir notre guide /blog/dolibarr-facturx-2026-module-validation.

Faut-il modifier l'export PDF de Dolibarr pour utiliser FacturX API ?

Non. Vous envoyez le PDF tel que généré par Dolibarr et complétez les champs manquants via le paramètre invoice_data JSON de /convert. Aucun fork du générateur Dolibarr n'est requis.

FacturX API est-elle une Plateforme Agréée (PA) ?

Non. FacturX API est un moteur de diagnostic, conversion et réparation EN16931. La transmission officielle à l'administration et au destinataire reste à la charge de la Plateforme Agréée choisie par votre client final.

FacturX API archive-t-elle mes factures ?

Non. Pas d'archivage légal, pas de valeur probante NF Z42-013. Les fichiers transitent en mémoire et ne sont pas stockés. L'archivage légal reste de la responsabilité de votre PA et de votre solution d'archivage.

Mon client est-il obligé de choisir une PA spécifique ?

Non. FacturX API n'impose aucune Plateforme Agréée — votre client garde la main sur ce choix. Notre brique technique se branche en amont, avant la transmission officielle.

URN, XSD et Schematron Factur-X

Référence rapide des profils, URN canoniques et règles Schematron EN16931.

Dolibarr & Factur-X 2026 (guide)

Configurer un module Factur-X communautaire et corriger les erreurs EN16931 les plus fréquentes.

France CTC / EN16931

Comprendre la séparation socle européen / profil Factur-X / contraintes françaises.