Exception client locale
Exception client HTTP
Proxy d'entreprise bloquant l'appel.
💡 Autoriser api.facturxapi.com dans vos règles sortantes ou configurer HttpClientHandler côté .NET.
HttpClient + MultipartFormDataContent, idéal pour pipelines finance/ERP.
Fonctionne pour ASP.NET Core, Azure Functions ou Windows Services.
curl -X POST https://api.facturxapi.com/api/v1/convert \
-H "Authorization: Bearer $FACTURX_API_KEY" \
-H "Accept-Language: fr" \
-F "file=@./facture-x.pdf" \
-F "output=facturx_pdfa3" \
-F "validation_target=en16931" \
-F 'invoice_data={"invoice_number":"FA-2026-042","issue_date":"2026-04-01","invoice_type":"380","currency":"EUR","seller":{"name":"Ma Societe SAS","siret":"10000000900017","vat_id":"FR88100000009","address":{"street":"10 rue de Rivoli","city":"Paris","postal_code":"75001","country":"FR"}},"buyer":{"name":"Client SA","siret":"10000001700010","address":{"street":"20 rue de la Republique","city":"Lyon","postal_code":"69002","country":"FR"}},"references":{"buyer_reference":"SERVICE-ACHATS","purchase_order_reference":"PO-2026-0017","contract_reference":"CTR-2026-04"},"totals":{"net":"970.00","tax":"194.00","gross":"1164.00","prepaid_amount":"100.00","rounding_amount":"0.00","due":"1064.00"},"tax_breakdown":[{"rate":"20.00","category":"S","base":"970.00","amount":"194.00"}],"line_items":[{"number":"1","description":"Prestation conseil","quantity":"10","unit":"C62","unit_price":"100.00","net_amount":"970.00","vat_rate":"20.00","vat_category":"S","purchase_order_line_reference":"10","gross_unit_price":"120.00","price_discount":"20.00","allowances":[{"amount":"50.00","reason":"Remise ligne","reason_code":"95"}],"charges":[{"amount":"20.00","reason":"Supplement urgent"}]}],"payment":{"due_date":"2026-05-01","terms":"Paiement a 30 jours","iban":"FR7630006000011234567890189"},"delivery":{"date":"2026-04-01","address":{"street":"20 rue de la Republique","city":"Lyon","postal_code":"69002","country":"FR"}},"invoicing_period":{"start_date":"2026-04-01","end_date":"2026-04-30"}}' using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Text;
var invoiceData = """
{
"invoice_number": "FA-2026-042",
"issue_date": "2026-04-01",
"invoice_type": "380",
"currency": "EUR",
"seller": {
"name": "Ma Societe SAS",
"siret": "10000000900017",
"vat_id": "FR88100000009",
"address": {
"street": "10 rue de Rivoli",
"city": "Paris",
"postal_code": "75001",
"country": "FR"
}
},
"buyer": {
"name": "Client SA",
"siret": "10000001700010",
"address": {
"street": "20 rue de la Republique",
"city": "Lyon",
"postal_code": "69002",
"country": "FR"
}
},
"references": {
"buyer_reference": "SERVICE-ACHATS",
"purchase_order_reference": "PO-2026-0017",
"contract_reference": "CTR-2026-04"
},
"totals": {
"net": "970.00",
"tax": "194.00",
"gross": "1164.00",
"prepaid_amount": "100.00",
"rounding_amount": "0.00",
"due": "1064.00"
},
"tax_breakdown": [
{
"rate": "20.00",
"category": "S",
"base": "970.00",
"amount": "194.00"
}
],
"line_items": [
{
"number": "1",
"description": "Prestation conseil",
"quantity": "10",
"unit": "C62",
"unit_price": "100.00",
"net_amount": "970.00",
"vat_rate": "20.00",
"vat_category": "S",
"purchase_order_line_reference": "10",
"gross_unit_price": "120.00",
"price_discount": "20.00",
"allowances": [
{
"amount": "50.00",
"reason": "Remise ligne",
"reason_code": "95"
}
],
"charges": [
{
"amount": "20.00",
"reason": "Supplement urgent"
}
]
}
],
"payment": {
"due_date": "2026-05-01",
"terms": "Paiement a 30 jours",
"iban": "FR7630006000011234567890189"
},
"delivery": {
"date": "2026-04-01",
"address": {
"street": "20 rue de la Republique",
"city": "Lyon",
"postal_code": "69002",
"country": "FR"
}
},
"invoicing_period": {
"start_date": "2026-04-01",
"end_date": "2026-04-30"
}
}
""";
using var client = new HttpClient
{
BaseAddress = new Uri("https://api.facturxapi.com")
};
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("FACTURX_API_KEY"));
client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("fr");
using var form = new MultipartFormDataContent();
form.Add(new StreamContent(File.OpenRead("Invoices/FX-2024-0001.pdf")), "file", "FX-2024-0001.pdf");
form.Add(new StringContent("facturx_pdfa3"), "output");
form.Add(new StringContent("en16931"), "validation_target");
form.Add(new StringContent(invoiceData, Encoding.UTF8, "application/json"), "invoice_data");
var response = await client.PostAsync("/api/v1/convert", form);
var payload = await response.Content.ReadFromJsonAsync<FacturxReport>();
if (payload is { Success: false })
{
logger.LogWarning("FacturX conversion target {@Target}", payload.Target);
} Commencez par /convert pour produire un livrable Factur-X contrôlé, puis utilisez /validate comme précontrôle ou contrôle indépendant.
Génère un Factur-X PDF/A-3 à partir d'un PDF visuel et de données invoice_data. Les livrables ne sont exposés que si la cible demandée est vérifiée.
curl -X POST https://api.facturxapi.com/api/v1/convert \
-H "Authorization: Bearer $KEY" \
-H "Accept-Language: fr" \
-F "file=@./facture.pdf" \
-F "output=facturx_pdfa3" \
-F "validation_target=en16931" \
-F 'invoice_data={"invoice_number":"FA-2026-042","issue_date":"2026-04-01","invoice_type":"380","currency":"EUR","seller":{"name":"Ma Societe SAS","siret":"10000000900017","vat_id":"FR88100000009","address":{"street":"10 rue de Rivoli","city":"Paris","postal_code":"75001","country":"FR"}},"buyer":{"name":"Client SA","siret":"10000001700010","address":{"street":"20 rue de la Republique","city":"Lyon","postal_code":"69002","country":"FR"}},"references":{"buyer_reference":"SERVICE-ACHATS","purchase_order_reference":"PO-2026-0017","contract_reference":"CTR-2026-04"},"totals":{"net":"970.00","tax":"194.00","gross":"1164.00","prepaid_amount":"100.00","rounding_amount":"0.00","due":"1064.00"},"tax_breakdown":[{"rate":"20.00","category":"S","base":"970.00","amount":"194.00"}],"line_items":[{"number":"1","description":"Prestation conseil","quantity":"10","unit":"C62","unit_price":"100.00","net_amount":"970.00","vat_rate":"20.00","vat_category":"S","purchase_order_line_reference":"10","gross_unit_price":"120.00","price_discount":"20.00","allowances":[{"amount":"50.00","reason":"Remise ligne","reason_code":"95"}],"charges":[{"amount":"20.00","reason":"Supplement urgent"}]}],"payment":{"due_date":"2026-05-01","terms":"Paiement a 30 jours","iban":"FR7630006000011234567890189"},"delivery":{"date":"2026-04-01","address":{"street":"20 rue de la Republique","city":"Lyon","postal_code":"69002","country":"FR"}},"invoicing_period":{"start_date":"2026-04-01","end_date":"2026-04-30"}}' Contrôle un PDF Factur-X ou un XML CII déjà produit. Retourne un rapport JSON structuré avec codes BR-* par ligne/champ.
curl -X POST https://api.facturxapi.com/api/v1/validate?validation_target=en16931 \
-H "Authorization: Bearer $KEY" \
-F "file=@./facture.pdf" 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?validate=true&lang=fr" \
-H "Authorization: Bearer $KEY" \
-F "file=@./facture-recue.pdf" 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" Réutiliser HttpClient (DI) pour éviter l'épuisement des sockets
Ajouter Polly (WaitAndRetry) sur 429/502
Logguer request_id via ILogger pour support
Policy de retry Polly : 3 tentatives avec jitter + circuit-breaker sur 5xx consécutifs.
Mappez vos logs sans confondre codes API publics, exceptions client locales et règles métier EN16931.
Exception client locale
Proxy d'entreprise bloquant l'appel.
💡 Autoriser api.facturxapi.com dans vos règles sortantes ou configurer HttpClientHandler côté .NET.
Code API public
Fichier XML/PDF non accepté par l’API.
💡 Convertir le XML en UTF-8 et envoyer le fichier en multipart.
Règle EN16931
Aucun identifiant vendeur (BT-29, BT-30 ou BT-31) présent dans la facture.
💡 Renseigner le SIREN dans BT-30 (schemeID="0002") ou le numéro de TVA dans BT-31.
Oui, créez un plugin qui envoie le PDF généré via HttpClient.
Exposez les métriques dans Application Insights via custom dimensions.
Vérifier vos exports ERP
Activer votre clé
Tous les endpoints + ERP-assisted
Et après ?
Choisissez l'étape suivante pour activer FacturX API sur votre stack. Tous les liens sont internes pour garder le suivi clair.
Clé Sandbox par email + clés distinctes pour dev/staging.
Comparer les offres actuelles : Sandbox, Launch, Scale, Business et Pilote accompagné.
Endpoints détaillés + schémas JSON pour parser les réponses.
Déposer un fichier depuis l'UI pour comparer le diagnostic avec la réponse API.