Traitement sidekiq-like, idéal pour ERP custom et portails fournisseurs.

FacturX API pour Symfony

Utilisez HttpClient, Messenger et Notifier pour piloter la validation.

HttpClient + AsyncDecorator
Messenger pour gérer les retries
Notifications Slack/Email intégrées

Exemple curl

multipart/form-data
curl -X POST https://api.facturxapi.com/api/v1/validate \
  -H "Authorization: Bearer $FACTURX_API_KEY" \
  -F "file=@facture-x.pdf" \
  -F "lang=fr"

Snippet Symfony

Auth + appel /api/v1/validate
$client = HttpClient::create();

$response = $client->request('POST', 'https://api.facturxapi.com/api/v1/validate', [
    'headers' => [
        'Authorization' => 'Bearer ' . $_ENV['FACTURX_API_KEY'],
    ],
    'timeout' => 15,
    'body' => [
        'file' => fopen('/srv/app/var/FX-2024-0001.pdf', 'r'),
        'lang' => 'fr',
    ],
]);

$data = $response->toArray(false);
if (!($data['valid'] ?? false)) {
    $this->notifier->send(new ChatMessage('Erreur FacturX: ' . ($data['errors'][0]['message'] ?? 'inconnue')));
}

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 conforme. veraPDF-certifié.

curl -X POST https://api.facturxapi.com/api/v1/convert \
  -H "Authorization: Bearer $KEY" \
  -F "file=@facture.pdf" \
  -F 'invoice_data={"invoiceNumber":"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

  • Utiliser la pool de transport Async pour ne pas bloquer le worker

  • Ajouter un middleware Messenger pour tracer request_id

  • Stocker les rapports dans un storage chiffré (S3 SSE)

Retries & timeouts

Configurer Messenger pour rejouer 3 fois avec délai progressif (1/4/15 min).

  • • Timeout HttpClient : 15 s
  • • Limiter le parallélisme via messenger:consume --limit
  • • Notifier les erreurs 5xx via Notifier component

Erreurs fréquentes

Mappez vos logs aux codes pour des corrections rapides.

network_timeout

Firewall bloquant l'API sortante.

💡 Autoriser api.facturxapi.com sur votre proxy/SASE.

invalid_lang

Paramètre lang invalide.

💡 Utiliser fr ou en (default fr).

payload_corrupted

Flux tronqué lors de l'envoi.

💡 Toujours streaming via fopen et éviter file_get_contents sur gros PDF.

FAQ

Peut-on utiliser API Platform ?

Oui, déclarez un provider custom qui appelle l'API FacturX.

Comment tracer le request_id ?

Ajoutez un middleware PSR pour logger X-Request-Id dans Monolog.

Guide Schematron

Comprendre les règles métier

Errors library

Trouver l'origine d'un BR-xx

Pricing

Prévoir votre budget