400 unsupported_media_type
Extension non supportée (docx, zip).
💡 Filtrer les uploads côté CLI et imposer pdf/xml uniquement.
requests + retry, async possible via httpx, parfait pour orchestrer vos batchs EN16931.
Compatible scripts CLI, worker Celery, pipelines Airflow ou FastAPI.
curl -X POST https://api.facturxapi.com/api/v1/validate \
-H "Authorization: Bearer $FACTURX_API_KEY" \
-F "[email protected]" \
-F "lang=fr" import os
import requests
API_KEY = os.environ['FACTURX_API_KEY']
API_URL = 'https://api.facturxapi.com/api/v1/validate'
files = {
'file': open('invoices/FX-2024-0001.pdf', 'rb'),
}
response = requests.post(
API_URL,
headers={'Authorization': f'Bearer {API_KEY}'},
files=files,
data={'lang': 'fr'}
)
data = response.json()
if not data.get('valid'):
print('Erreurs détectées:', data.get('errors', [])) Uploader depuis un dossier temporaire protégé (pas de /tmp partagé)
Utiliser retrying ou tenacity pour gérer 429/500
Anonymiser les logs (pas de PDF complet en clair)
Utilisez tenacity ou httpx.Retry avec jitter pour protéger vos workers.
Mappez vos logs aux codes pour des corrections rapides.
Extension non supportée (docx, zip).
💡 Filtrer les uploads côté CLI et imposer pdf/xml uniquement.
Validation lourde (PDF + Schematron) > 30 s.
💡 Découper le lot et relancer plus tard (queue Celery + countdown).
Seuil mensuel dépassé.
💡 Abonner un handler Celery pour déclencher Analytics.quota_exceeded et alerter votre équipe.
Oui, bouclez sur vos lignes et envoyez les fichiers un par un (max 3 en parallèle).
Sauvegardez le JSON de réponse dans S3 ou Postgres avec le hash de la facture.
Comprendre les profils et règles
Uploader rapidement un échantillon
Anticiper vos lots mensuels
Et après ?
Choisissez l'étape suivante pour activer FacturX API sur votre stack. Tous les liens sont internes pour garder le suivi clair.
10 validations gratuites + clés distinctes pour dev/staging.
Free, Pro ou Scale selon vos appels mensuels et SLA requis.
Endpoints détaillés + schémas JSON pour parser les réponses.
Uploader un fichier depuis l'UI pour comparer avec la réponse API.