Intégration
Export MarkdownDocumentation API externe V1
Convertissez vos factures en e-factures validées depuis vos propres systèmes : envoyez un document PDF, DOCX ou TXT – ou des données ERP structurées – et téléchargez la sortie XRechnung, ZUGFeRD, EN 16931, UBL ou CII une fois la validation réussie. Cette page constitue le contrat d’intégration complet : modèle d’accès, endpoints, catalogue d’erreurs et limites.
Cinq endpoints REST transforment des factures PDF, DOCX ou TXT – ou des données ERP structurées – en e-factures validées XRechnung, ZUGFeRD, EN 16931, UBL et CII. Les abonnés Enterprise actifs créent directement leurs clés ; 100 conversions partagées E-mail/API sont incluses chaque mois, puis chaque conversion utilise 0,40–0,50 € de crédits prépayés.
Vue d’ensemble
L’API accepte les envois multipart, renvoie des réponses JSON et utilise les codes de statut HTTP standard avec authentification Bearer. Chaque conversion est asynchrone : envoyez le document, interrogez la tâche, téléchargez le résultat. Un fichier n’est livré qu’après validation réussie – il n’existe aucune sortie non validée.
Envoyez un document de facture PDF, DOCX ou TXT ou des données de facture structurées à un endpoint de conversion. Invoice-Converter démarre une tâche asynchrone pour l’extraction, la validation et la génération d’artefacts. L’endpoint de résultat renvoie un fichier uniquement lorsque l’artefact demandé est validé, contrôlé et prêt ; pendant le traitement, il renvoie 202 TASK_NOT_READY, et les problèmes de validation bloquants renvoient 422 VALIDATION_FAILED.
Statut: accès Enterprise
Chemin de base: /api/v1. Dernière synchronisation 2026-09-08.
Fonctionnalités clés
- Endpoints d’upload pour factures PDF et données de facture structurées
- Extraction des données de facture avec contrôle des champs par rapport à la source
- Validation automatique EN 16931 et KoSIT
- Formats de sortie XRechnung, ZUGFeRD, EN16931, UBL et CII
- Traitement asynchrone avec polling, petites factures en environ 30 secondes et factures plus volumineuses jusqu’à 1-2 minutes
- Écritures idempotentes pour des retries sûrs
Démarrer l’accès API Enterprise
Chaque abonné Enterprise actif peut créer des clés API de production directement dans son profil.
- Créez un compte et démarrez Enterprise depuis la page des tarifs : 35 €/mois en facturation annuelle (420 €/an) ; en facturation mensuelle : 50 €/mois.
- Utilisez les 100 conversions partagées E-mail/API incluses chaque mois ; les conversions supplémentaires utilisent des crédits prépayés à 0,40–0,50 € chacune.
- Créez une clé API live depuis la section d’accès API de votre profil.
- Envoyez la première requête avec des identifiants côté serveur, puis surveillez l’usage et tournez les clés depuis votre profil.
Démarrer Enterprise
Démarrage rapide
Trois appels API terminent une conversion. L’endpoint de conversion est servi sous /api/v1 et nécessite une authentification.
POST /api/v1/invoices:convert
LiveConvertir un document de facture
POST /api/v1/invoices:convert-structured
LiveConvertir des données structurées
GET /api/v1/tasks/{task_id}
LiveInterroger le statut de tâche
Démarrage rapide avec curl
Remplacez $API_KEY par votre clé live et $TASK_ID par le task_id de la première réponse. Les trois mêmes appels fonctionnent pour tous les formats de sortie.
curl -X POST "https://www.invoice-converter.com/api/v1/invoices:convert" \
-H "Authorization: Bearer $API_KEY" \
-H "Idempotency-Key: inv-2026-0001" \
-F "file=@invoice.pdf" \
-F "format=XRECHNUNG"curl "https://www.invoice-converter.com/api/v1/tasks/$TASK_ID" \
-H "Authorization: Bearer $API_KEY"curl -o invoice.xml \
"https://www.invoice-converter.com/api/v1/tasks/$TASK_ID/result?download=xml" \
-H "Authorization: Bearer $API_KEY"URL de base et clés API
- URL de base production :
https://www.invoice-converter.com/api/v1. - Les clés live utilisent le host de production et le préfixe
icp_.... - Lancez les requêtes d’onboarding et de validation avec votre clé live avant d’envoyer du volume de production.
- Traitez les clés comme des secrets serveur. Ne les intégrez pas dans des clients navigateur ou mobiles.
Première requête réussie
Utilisez cette séquence comme parcours minimal après création d’une clé API.
- Téléversement :
POST /api/v1/invoices:convertavecAuthorization,Idempotency-Key,file=@invoice.pdf(ou.docx/.txt) etformat=XRECHNUNG. - Interrogez avec backoff : attendez environ
20 secondesaprès le202, puis appelezGET /api/v1/tasks/{task_id}à 20s, 30s, 45s, 60s puis 60s d’intervalle jusqu’au statutcompletedoufailed. Restez dans le quota de statut de10/minet120/hour, et abandonnez après environ 16 minutes. - Téléchargement :
GET /api/v1/tasks/{task_id}/result?download=xmlet stockezX-Correlation-IDpour le traçage support. - Pour une sortie PDF ZUGFeRD, demandez
format=ZUGFERDau convert etdownload=pdfau result ; la sortie PDF hybride exige une source PDF. - Pour une entrée structurée, appelez
POST /api/v1/invoices:convert-structuredavecpdf_file=@invoice.pdf,data_file=@invoice-data.jsonet leformatcible. - Envoyez éventuellement
client_referenceouexternal_invoice_idetsource_systempour le rapprochement ERP. - Pour des exports ERP fractionnés d’une facture, répétez
data_file; pour plusieurs factures, démarrez une tâche par facture avec sa propre clé d’idempotence. - Conservez
result_artifactsdepuis la réponse de statut pour savoir quels artefacts XML/PDF sont validés, mis en cache ou encore indisponibles à cause de dépendances.
Exemples courants de payload
XRECHNUNG: envoyezformat=XRECHNUNG.ZUGFERD: envoyezformat=ZUGFERD; utilisezdownload=pdfau result pour la sortie hybride PDF/A-3.Entrée structurée: envoyezpdf_fileavec une ou plusieurs partiesdata_file; les formats de données acceptés sont CSV, JSON, XML, XLSX et TXT, avec tout format cible pris en charge. Les partiesdata_filedoivent contenir toutes les données obligatoires ; le PDF ne complète pas les champs manquants. .xls, les PDF et les images sont refusés commedata_file.Factures multiples: envoyez des requêtes convert séparées et suivez chaquetask_idrenvoyé ; les partiesdata_filerépétées servent uniquement aux exports fractionnés de la même facture.UBL: envoyezformat=UBL; les profils acceptés sontXRECHNUNG,PEPPOLetEN16931, avecEN16931par défaut.CII: envoyezformat=CII; les profils acceptés sontXRECHNUNG,EN16931,ZUGFERD_EN16931etZUGFERD_XRECHNUNG, avecEN16931par défaut.formatxprofileest une table fermée :XRECHNUNGaccepte[XRECHNUNG](par défautXRECHNUNG),EN16931accepte[EN16931](par défautEN16931),UBLaccepte[XRECHNUNG, PEPPOL, EN16931](par défautEN16931),CIIaccepte[XRECHNUNG, EN16931, ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG](par défautEN16931) etZUGFERDaccepte[ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG](par défautZUGFERD_EN16931). Les profils sont comparés sans tenir compte de la casse ;ZUGFERD,FACTURX,FACTUR-XetFACTUR_Xsont des alias deZUGFERD_EN16931, etZUGFERD-XRECHNUNGest un alias deZUGFERD_XRECHNUNG.
En-têtes requis
- Authorization: Bearer <api_key>
Règles d’authentification
Chaque abonné Enterprise actif peut créer des clés API depuis le profil et les utiliser comme Bearer token. Le quota partagé E-mail/API comprend 100 conversions par mois ; les conversions supplémentaires utilisent des crédits prépayés à 0,40–0,50 € chacune.
- Les clés sont des identifiants live limités au tenant pour les abonnements Enterprise actifs. Le préfixe de production actuel est
icp_.... - Créez, tournez et révoquez les clés API depuis votre profil tant que l’abonnement Enterprise est actif. Copiez les nouvelles clés immédiatement, car leur valeur en clair n’est affichée qu’une seule fois.
- Une clé manquante ou invalide renvoie
401. - Les appels vers
/api/v1reçoivent automatiquement unX-Correlation-IDs’il est omis. - Les appels d’écriture exigent
Idempotency-Key; gardez cette valeur stable entre les réessais. - Utilisez une intégration serveur-à-serveur depuis votre backend. L’accès depuis une origine navigateur est restreint en production.
Contrat d’idempotence
- Envoyez un
Idempotency-Keyà chaque appel d’écriture. - Les clés d’idempotence doivent correspondre à
[A-Za-z0-9._:-]+et faire au plus 200 caractères. - Si vous fournissez votre propre clé, la même clé + le même payload renvoie la réponse en cache.
- La même clé + un payload différent renvoie
409 IDEMPOTENCY_CONFLICT, qui n’est pas réessayable ; utilisez une nouvelle clé pour un nouveau payload. - Une seconde requête avec la même clé pendant que la première est encore en cours renvoie
409 IDEMPOTENCY_IN_PROGRESS; réessayez la même clé après un court délai. Une réservation bloquée est libérée après15 minutes. - Une fois la tâche d’origine au-delà de sa rétention de 24 heures, un rejeu renvoie
409 IDEMPOTENCY_REPLAY_EXPIRED; lancez une nouvelle conversion avec une nouvelle clé. - Les enregistrements d’idempotence vivent
24 heures, comme la rétention des tâches.
Référence des endpoints
Tous les endpoints sont disponibles sous /api/v1. Les timeouts apparaissent en 504 et les autres erreurs temporaires de connectivité en 502 ; les ID de corrélation aident le support à suivre les requêtes de bout en bout.
POST /api/v1/invoices:convert
LiveTéléversez un document de facture PDF, DOCX ou TXT et démarrez la conversion asynchrone. Renvoie un task_id pour le polling. Les PDF hybrides ZUGFeRD/Factur-X exigent une source PDF ; pour les sources DOCX/TXT, demandez des résultats XML. Le XML de facture intégré est ignoré par défaut ; définissez use_embedded_xml=true uniquement si votre intégration l’accepte comme source d’extraction principale. Requête: multipart/form-data; file (binary, requis) — document source de facture PDF, DOCX ou TXT ; les anciens fichiers DOC/RTF, images et autres fichiers sont refusés; format (string, requis) — format de sortie cible ; voir la matrice des formats ci-dessous; profile (string, optionnel, recommandé pour les intégrations déterministes) — profil de conformité explicite, comparé sans tenir compte de la casse. Chaque format a un ensemble fermé de valeurs acceptées et une seule valeur par défaut : XRECHNUNG → [XRECHNUNG] (par défaut XRECHNUNG) ; EN16931 → [EN16931] (par défaut EN16931) ; UBL → [XRECHNUNG, PEPPOL, EN16931] (par défaut EN16931) ; CII → [XRECHNUNG, EN16931, ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG] (par défaut EN16931) ; ZUGFERD → [ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG] (par défaut ZUGFERD_EN16931). ZUGFERD, FACTURX, FACTUR-X et FACTUR_X sont des alias de ZUGFERD_EN16931 ; ZUGFERD-XRECHNUNG est un alias de ZUGFERD_XRECHNUNG. Une valeur hors de l’ensemble accepté renvoie 422 OUTPUT_PROFILE_CONFLICT ; un nom de profil non reconnu renvoie 422 INVALID_PROFILE avec details.allowed_profiles; jurisdiction (string, optionnel) — contexte de juridiction ISO 3166-1 alpha-2 explicite utilisé pour les contrôles de validation/conseil ; ne remplace pas le profil; transaction_scope (string, optionnel) — contexte de périmètre transactionnel explicite, par exemple B2G ; appliqué à la tâche mise en file; delivery_channel (string, optionnel) — PEPPOL, DIRECT_XML, PORTAL, EMAIL_PDF ou UNKNOWN ; appliqué à la tâche mise en file; client_reference ou external_invoice_id (string, optionnel) — référence facture/job côté client renvoyée dans les uploads acceptés et les réponses de statut; source_system (string, optionnel) — libellé ERP ou système de facturation amont renvoyé dans les uploads acceptés et les réponses de statut; email_input (texte libre, optionnel, sources PDF uniquement) — instructions client dans n’importe quelle langue, jusqu’à 10 000 caractères, transmises sans marqueurs de bloc e-mail ; toutes les étapes d’extraction et de correction IA les reçoivent séparément du texte source de la facture ; incompatible avec use_embedded_xml=true, intégré à l’identité de requête utilisée pour l’idempotence et non pris en charge par invoices:convert-structured ; la validation de facture standard reste appliquée; use_seller_master_data (boolean, optionnel) — si omis, la valeur par défaut du profil du tenant s’applique ; false ignore les données de base vendeur enregistrées pour cette requête, true fournit/utilise les données de base vendeur; seller_master_data (chaîne d’objet JSON, optionnel) — données vendeur utilisées uniquement lorsque use_seller_master_data=true ; prend en charge les champs société, adresse, fiscalité, contact et paiement (payment_means_code 30/42/58, payment_iban, payment_bic, payment_account_name, payment_terms_note) ; chaque valeur du profil remplace la valeur extraite correspondante, les champs absents du profil restent inchangés et les différences créent des avertissements non bloquants ; electronic_address et electronic_address_scheme doivent être fournis ensemble ou tous deux omis; use_embedded_xml (boolean, optionnel, false par défaut) — le XML Factur-X, ZUGFeRD ou XRechnung intégré est ignoré sauf si la valeur est explicitement true ; utilisez cette option uniquement si l’intégration accepte le XML intégré comme source d’extraction principale. Réponse: 202 Accepted.
POST /api/v1/invoices:convert-structured
LiveTéléversez un PDF porteur avec des données de facture CSV, JSON, XML, XLSX ou TXT et démarrez une conversion asynchrone depuis données structurées. Les parties data_file sont la seule source sémantique ; le PDF ne complète pas les champs de facture manquants. Pour ZUGFeRD/Factur-X, il sert de PDF porteur ; pour les sorties orientées XML, il est conservé comme artefact PDF soumis. Utilisez une requête de conversion par facture ; répétez data_file uniquement pour des exports ERP fractionnés décrivant la même facture. Requête: multipart/form-data; pdf_file (binary, requis) — PDF porteur utilisé pour l’intégration ZUGFeRD/Factur-X et conservé pour les sorties orientées XML; data_file (binary, requis, répétable) — données de facture CSV, JSON, XML, XLSX ou TXT utilisées comme seule source sémantique ; .xls, les PDF et les images sont refusés comme data_file ; répéter pour les exports header/lines fractionnés de la même facture ; les alias data_files et data_files[] sont acceptés; taille totale des données structurées — maximum 2 MB sur toutes les parties data_file; format (string, requis) — format de sortie cible ; prend en charge XRECHNUNG, ZUGFERD, EN16931, UBL et CII; profile (string, optionnel, recommandé pour les intégrations déterministes) — profil de conformité explicite, comparé sans tenir compte de la casse. Chaque format a un ensemble fermé de valeurs acceptées et une seule valeur par défaut : XRECHNUNG → [XRECHNUNG] (par défaut XRECHNUNG) ; EN16931 → [EN16931] (par défaut EN16931) ; UBL → [XRECHNUNG, PEPPOL, EN16931] (par défaut EN16931) ; CII → [XRECHNUNG, EN16931, ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG] (par défaut EN16931) ; ZUGFERD → [ZUGFERD_EN16931, ZUGFERD_FACTURX_EXTENDED, ZUGFERD_XRECHNUNG] (par défaut ZUGFERD_EN16931). Une valeur hors de l’ensemble accepté renvoie 422 OUTPUT_PROFILE_CONFLICT ; un nom de profil non reconnu renvoie 422 INVALID_PROFILE avec details.allowed_profiles; jurisdiction (string, optionnel) — contexte de juridiction ISO 3166-1 alpha-2 explicite utilisé pour les contrôles de validation/conseil ; ne remplace pas le profil; transaction_scope (string, optionnel) — contexte de périmètre transactionnel explicite, par exemple B2G ; appliqué à la tâche mise en file; delivery_channel (string, optionnel) — PEPPOL, DIRECT_XML, PORTAL, EMAIL_PDF ou UNKNOWN ; appliqué à la tâche mise en file; client_reference ou external_invoice_id (string, optionnel) — référence facture/job côté client renvoyée dans les uploads acceptés et les réponses de statut; source_system (string, optionnel) — libellé ERP ou système de facturation amont renvoyé dans les uploads acceptés et les réponses de statut; use_seller_master_data (boolean, optionnel) — si omis, la valeur par défaut du profil du tenant s’applique ; false ignore les données de base vendeur enregistrées pour cette requête, true fournit/utilise les données de base vendeur; seller_master_data (chaîne d’objet JSON, optionnel) — données vendeur utilisées uniquement lorsque use_seller_master_data=true ; prend en charge les champs société, adresse, fiscalité, contact et paiement (payment_means_code 30/42/58, payment_iban, payment_bic, payment_account_name, payment_terms_note) ; chaque valeur du profil remplace la valeur extraite correspondante, les champs absents du profil restent inchangés et les différences créent des avertissements non bloquants ; electronic_address et electronic_address_scheme doivent être fournis ensemble ou tous deux omis. Réponse: 202 Accepted.
GET /api/v1/tasks/{task_id}
LiveInterrogez le statut actuel d’une tâche de conversion. Renvoie pending (acceptée et en file, pas encore démarrée), processing, completed ou failed. Rate limit 10/min et 120/hour, ce qui constitue la contrainte déterminante pour le polling : attendez environ 20 secondes après le 202 accepté avant le premier appel, puis espacez les appels (20s, 30s, 45s, 60s, puis 60s ensuite) et arrêtez sur completed ou failed. Les tâches terminées incluent des diagnostics result_artifacts pour indiquer quels artefacts XML/PDF sont disponibles, mis en cache et prouvés par validation. Les payloads des tâches terminées peuvent inclure des entrées additives _processing_warnings et _validation_warnings avec des ID de règle SOURCE_CONTEXT_* lorsque les preuves source étaient indisponibles, douteuses ou tronquées ; traitez-les comme des signaux de revue, pas comme des échecs. En cas d’échec, la réponse inclut un champ error avec le motif. Requête: aucun (GET); task_id (path, requis) — UUID renvoyé par l’endpoint de conversion; include_validation_report_html (query, optionnel) — true ou false (false par défaut) ; avec true, la réponse de statut inclut le rapport de validation HTML assaini de l’artefact strict actuel lorsqu’il est disponible. Réponse: 200 OK.
GET /api/v1/tasks/{task_id}/result
LiveTéléchargez le fichier généré (XML ou PDF). La syntaxe du résultat correspond au format initial de la tâche : XRECHNUNG/EN16931/UBL renvoient du XML UBL, CII/ZUGFERD renvoient du XML CII, et ZUGFERD + download=pdf renvoie un PDF/A-3 hybride. Pour d’autres formats, download=pdf peut renvoyer un PDF rendu ; sur une tâche terminée, download=xml est l’artefact attendu comme disponible, pas un artefact garanti. Les téléchargements répétés peuvent être servis depuis des artefacts générés en cache lorsque la preuve de validation est encore actuelle. Pendant le traitement, cet endpoint renvoie un 202 portant l’enveloppe d’erreur standard ({"code":"TASK_NOT_READY","message":"Strict conversion is still processing. No validated artifact is available yet.","correlation_id":"<uuid>"}) ; les problèmes de validation bloquants renvoient 422 VALIDATION_FAILED, les dépendances temporairement indisponibles renvoient 503, les échecs de conversion terminaux renvoient 500 TASK_FAILED avec la raison dans details.code, et les échecs d’invariant d’artefact renvoient 500 INTERNAL_ARTIFACT_INVARIANT_FAILED, toujours sans corps de fichier. Les téléchargements réussis portent X-Correlation-ID, Content-Disposition, Cache-Control: no-store, X-Artifact-Sha256, X-Validation-Proof-Id, X-Artifact-Proof-Id, X-Artifact-State, X-Validation-State, X-Proof-Status et X-Validator-Bundle-Id ; X-Task-Id n’est pas défini sur cet endpoint. Rate limit 10/min et environ 134/hour. Requête: aucun (GET); task_id (path, requis) — UUID renvoyé par l’endpoint de conversion; download (query, requis) — xml ou pdf. Réponse: 200 OK.
GET /api/v1/tasks/{task_id}/validation-report
LiveTéléchargez le rapport de l’artefact de résultat validé actuel. Le rapport est disponible seulement après le stockage d’un artefact avec une preuve à jour ; sinon, l’endpoint renvoie 202 ou 404. Les headers de réponse identifient l’artefact et la preuve du rapport. X-Artifact-Sha256 désigne l’artefact de résultat, pas le fichier du rapport. Rate limit : 10/min et 120/heure. Requête: aucun (GET); task_id (chemin, requis) — UUID renvoyé par un endpoint de conversion; download (query, optionnel) — html ou xml. Réponse: 200 OK.
Matrice des formats de sortie
| Format | Syntaxe | Version / Profil | Content-Type | Extension |
|---|---|---|---|---|
| XRECHNUNG | UBL 2.1 XML | XRechnung 3.0.2 | application/xml | .xml |
| ZUGFERD | CII XML (download=xml) / PDF/A-3 hybride (download=pdf) | ZUGFeRD 2.5 / Factur-X 1.09 | application/xml ou application/pdf | .xml / .pdf |
| EN16931 | UBL 2.1 XML | EN 16931 | application/xml | .xml |
| UBL | UBL 2.1 XML | OASIS UBL 2.1 | application/xml | .xml |
| CII | UN/CEFACT CII XML | D16B | application/xml | .xml |
Contrat d’erreur
| Code | HTTP | À retenter | Notes |
|---|---|---|---|
| AUTHENTICATION_REQUIRED | 401 | Non | Bearer token manquant/vide |
| INVALID_API_KEY | 401 | Non | Clé API introuvable, révoquée ou expirée |
| API_NOT_ENABLED_FOR_TENANT | 403 | Non | La clé est valide, mais l’accès External API est désactivé pour ce compte ; contactez le support |
| INSUFFICIENT_API_CREDITS | 402 | Non | L’allocation mensuelle incluse plus les crédits API prépayés ne couvraient pas la requête. Deux formes de details : prépayé (remaining, minimum_purchase 100) et allocation incluse (included_remaining, credit_remaining, shortfall, minimum_purchase 100). Analysez le code et lisez les clés effectivement présentes |
| IDEMPOTENCY_KEY_REQUIRED | 400 | Non | Endpoint d’écriture appelé sans Idempotency-Key |
| INVALID_IDEMPOTENCY_KEY | 400 | Non | La clé d’idempotence doit correspondre à [A-Za-z0-9._:-]+ et faire au plus 200 caractères |
| IDEMPOTENCY_CONFLICT | 409 | Non | La clé a déjà été utilisée avec un payload différent, ou la réservation idempotente n’a pas pu démarrer ; utilisez une nouvelle clé pour un nouveau payload |
| IDEMPOTENCY_IN_PROGRESS | 409 | Oui | La première requête avec cette clé est encore en cours ; réessayez avec la MÊME clé après un court délai. Une réservation bloquée est libérée après 15 minutes |
| IDEMPOTENCY_REPLAY_EXPIRED | 409 | Non | La tâche initiale dépasse la conservation de 24 heures ; démarrez une nouvelle conversion avec une nouvelle clé |
| FORMAT_REQUIRED | 400 | Non | Format requis manquant dans la requête de conversion |
| INVALID_FORMAT | 422 | Non | Format de conversion non pris en charge |
| CLIENT_REFERENCE_CONFLICT | 400 | Non | client_reference et external_invoice_id diffèrent |
| INVALID_CLIENT_METADATA | 400 | Non | client_reference, external_invoice_id ou source_system dépasse la limite de longueur ou contient des caractères de contrôle |
| INVALID_EMAIL_INPUT | 400 | Non | email_input est envoyé plusieurs fois, dépasse 10 000 caractères, est combiné à une source non PDF ou à use_embedded_xml=true, ou est envoyé à invoices:convert-structured |
| INVALID_EMBEDDED_XML_POLICY | 400 | Non | use_embedded_xml doit être true ou false |
| INVALID_SELLER_MASTER_DATA | 400 | Non | use_seller_master_data ou seller_master_data n’est pas analysable ou échoue à la validation des champs ; electronic_address et electronic_address_scheme doivent être fournis ensemble ou tous deux omis |
| METHOD_NOT_ALLOWED | 405 | Non | Les chemins de conversion n’acceptent que POST et les chemins de tâche que GET ; la réponse inclut Allow: POST, OPTIONS (conversion) ou Allow: GET, OPTIONS (tâche) |
| DOWNLOAD_FORMAT_REQUIRED | 400 | Non | Paramètre download requis manquant dans la requête de résultat de tâche |
| INVALID_DOWNLOAD_FORMAT | 400 | Non | download doit être xml ou pdf |
| AUTH_SERVICE_UNAVAILABLE | 503 | Oui | Backend d’auth indisponible |
| RATE_LIMIT_SERVICE_UNAVAILABLE | 503 | Oui | Le service de rate-limit n’a pas pu être joint ; réessayez avec backoff |
| PLAN_TIER_CHECK_FAILED | 503 | Oui | Le service n’a pas pu vérifier le plan ou l’accès API ; réessayez avec backoff |
| API_CREDIT_SERVICE_UNAVAILABLE | 503 | Oui | La vérification des crédits API prépayés ou du quota de canal est temporairement indisponible sur les uploads de conversion |
| RATE_LIMITED | 429 | Oui | Respecter Retry-After. Retry-After, X-RateLimit-Limit-Minute et X-RateLimit-Limit-Hour ne sont renvoyés que sur les réponses 429 ; le corps porte details.minute_count, details.hour_count, details.limit_minute et details.limit_hour |
| BAD_REQUEST | 400 | Non | JSON invalide ou paramètre de chemin UUID invalide |
| INVALID_QUERY_PARAMETER | 400 | Non | include_validation_report_html doit être true ou false |
| PAYLOAD_TOO_LARGE | 413 | Non | Limite de taille d’upload dépassée |
| INVALID_UPLOAD | 400 | Non | Échec de lecture/parsing de l’upload |
| UPLOAD_FAILED | 422 | Non | Un champ de contexte optionnel (jurisdiction, transaction_scope, delivery_channel) contenait une valeur non reconnue ; les valeurs autorisées figurent dans le message |
| INVALID_PROFILE | 422 | Non | Nom de profil inconnu ; details.allowed_profiles liste les valeurs acceptées |
| TASK_NOT_READY | 202 | Oui | Poller à nouveau pour la fin asynchrone |
| TASK_NOT_FOUND | 404 | Non | La tâche est inconnue, n’appartient pas au tenant, ou a dépassé sa rétention de 24 heures après avoir atteint un état terminal |
| VALIDATION_FAILED | 422 | Non | Des problèmes de validation bloquants subsistent, y compris les échecs de prérequis stricts ZUGFeRD et les entrées blocking_source_conflict non résolues ; corrigez les données de facture avant de réessayer |
| AUTHORITATIVE_VALIDATION_UNAVAILABLE | 503 | Oui | La validation faisant autorité, la persistance de la preuve ou une dépendance de génération hybride est indisponible ; réessayez plus tard |
| TASK_STATUS_FAILED | 4xx/5xx | Conditionnel | Réessayer si la condition de service est transitoire |
| TASK_RESULT_FAILED | 4xx/5xx | Conditionnel | Réessayer si la condition de service est transitoire |
| TASK_FAILED | 500 | Conditionnel | Échec de conversion signalé sur l’endpoint de résultat. Lisez details.code et details.retryable : MULTIPLE_INVOICES_IN_DOCUMENT, NO_INVOICE_DETECTED, INSUFFICIENT_INVOICE_SIGNAL, SCHEMA_PARSE_FAILED et ARTIFACT_PARITY_FAILED sont terminaux ; PROVIDER_ERROR et tout details.code non reconnu suivent details.retryable, et details.retryable=true signifie lancer une NOUVELLE conversion avec une nouvelle Idempotency-Key au lieu de re-poller la même tâche. La conversion échouée ne consomme pas d’unité de facturation |
| MULTIPLE_INVOICES_IN_DOCUMENT | 500 (details code) | Non | Terminal : la source contient plusieurs factures. Scindez-la en un fichier par facture et lancez des conversions séparées |
| NO_INVOICE_DETECTED | 500 (details code) | Non | Terminal : le document ne semble pas être une facture ; envoyez-le au traitement humain |
| INSUFFICIENT_INVOICE_SIGNAL | 500 (details code) | Non | Terminal : la source ne contient pas assez de données de facture ; fournissez une meilleure source ou utilisez la conversion structurée |
| SCHEMA_PARSE_FAILED | 500 (details code) | Non | Terminal pour cette entrée : les données extraites n’ont pas pu être analysées selon le schéma. Lancez une nouvelle conversion ; escaladez si le même document échoue encore |
| PROVIDER_ERROR | 500 (details code) | Conditionnel | Le fournisseur d’extraction a échoué. Suivez details.retryable ; pour provider_context_too_large, utilisez un document source plus petit |
| XML_GENERATION_FAILED | 500 | Oui | Échec transitoire ou timeout de génération XML |
| PDF_GENERATION_FAILED | 500 | Oui | Échec transitoire ou timeout de génération PDF |
| ARTIFACT_GENERATION_RERUN_REQUIRED | 503 | Non | La génération stricte d’artefact a échoué après les réessais serveur ; lancez une nouvelle conversion après le rétablissement de la dépendance |
| EXTRACTION_INCOMPLETE_GROUP_FAILURE | 503 | Non | Un ou plusieurs groupes d’extraction ont échoué. La tâche ne peut pas reprendre ; lancez une nouvelle conversion et consultez details.failed_groups |
| ARTIFACT_GENERATION_FAILED | 503 (details code) | Non | Enregistré sur les tâches échouées pour les échecs d’émission stricte réessayables ; les téléchargements de résultat renvoient 503 ARTIFACT_GENERATION_RERUN_REQUIRED avec ce code dans details |
| ARTIFACT_PARITY_FAILED | 500 (details code) | Non | Signalé dans les details de 500 TASK_FAILED lorsque l’artefact strict ne correspond pas aux données de facture finales revues ; escaladez avec l’ID de corrélation |
| INTERNAL_ARTIFACT_INVARIANT_FAILED | 500 | Non | La tâche stricte terminée n’a aucun artefact stocké sûr pour le téléchargement demandé ; escaladez avec l’ID de corrélation |
| PROFILE_MISMATCH | 422 | Non | Le profil demandé ne correspond pas au CustomizationID du résultat stocké lors du téléchargement du résultat |
| ZUGFERD_SOURCE_PDF_INCOMPATIBLE | 422 | Non | La génération stricte du PDF hybride ne peut pas intégrer le XML dans le PDF source téléversé |
| ZUGFERD_SOURCE_PDF_REQUIRED | 422 | Non | download=pdf pour ZUGFERD exige une source PDF (les sources DOCX/TXT ne peuvent pas porter le PDF hybride) ; demandez download=xml à la place |
| VALIDATION_REPORT_NOT_FOUND | 404 | Non | Aucun rapport de validation n’est lié à la preuve de l’artefact actuellement livré |
| VALIDATION_REPORT_FAILED | 4xx/5xx | Conditionnel | Échec de récupération du rapport de validation ; réessayez uniquement pour les cas 5xx transitoires |
| OUTPUT_PROFILE_REQUIRED | 422 | Non | Un contrat de sortie générique exige un profil explicite lorsqu’aucune valeur par défaut non ambiguë ne peut être déterminée |
| OUTPUT_PROFILE_CONFLICT | 422 | Non | Le profil contredit le format de sortie sélectionné ou la variante explicite |
| PROXY_ERROR | 502/504 | Oui | Défaillance de transport plutôt que résultat de conversion : échec proxy/amont (504 pour timeout). Réessayez avec backoff et la même clé d’idempotence |
Erreurs courantes et actions à mener
- Réessayez avec backoff :
429,502,504,503avec un code réessayable, et les500transitoires qui ne sont pasTASK_FAILEDniINTERNAL_ARTIFACT_INVARIANT_FAILED.500 TASK_FAILEDn’est réessayable que sidetails.retryablevauttrue, et uniquement sous forme de nouvelle conversion. - Ne réessayez pas :
400,401,402,403,404,405,413,422,409 IDEMPOTENCY_CONFLICT,409 IDEMPOTENCY_REPLAY_EXPIRED,500 TASK_FAILEDlorsquedetails.retryablene vaut pastrue, et500 INTERNAL_ARTIFACT_INVARIANT_FAILED. - Corrigez la requête ou les données source :
400,413,422. - Corrigez l’accès ou les identifiants :
401 INVALID_API_KEY.403 API_NOT_ENABLED_FOR_TENANTsignifie que la clé est valide mais que l’accès External API n’est pas activé pour le compte — contactez le support. - Vérifiez l’allocation mensuelle incluse ou achetez un pack de crédits API prépayés :
402 INSUFFICIENT_API_CREDITS. Lisez les clésdetailseffectivement présentes (remainingpour les comptes prépayés, ouincluded_remaining/credit_remaining/shortfalllorsqu’une allocation incluse s’applique). - Continuez à poller plus tard :
202 TASK_NOT_READY. - Pour
500 TASK_FAILED, lisezdetails.codeetdetails.retryable.MULTIPLE_INVOICES_IN_DOCUMENT,NO_INVOICE_DETECTED,INSUFFICIENT_INVOICE_SIGNAL,SCHEMA_PARSE_FAILEDetARTIFACT_PARITY_FAILEDsont terminaux ;PROVIDER_ERRORet tout code non reconnu suiventdetails.retryable, ettruesignifie lancer une NOUVELLE conversion au lieu de re-poller la même tâche. Une conversion échouée ne consomme pas d’unité de facturation. - Pour
422 VALIDATION_FAILED, montrez le champ, l’ID de règle et la correction proposée à une personne chargée de la revue avant de réessayer avec les données corrigées. - Pour
503 AUTHORITATIVE_VALIDATION_UNAVAILABLE, récupérez le même résultat de tâche plus tard ; aucun artefact non vérifié n’a été livré. Pour503 ARTIFACT_GENERATION_RERUN_REQUIREDet503 EXTRACTION_INCOMPLETE_GROUP_FAILURE, lancez plutôt une nouvelle conversion. 502et504 PROXY_ERRORsont des défaillances de transport et non des résultats de conversion ; réessayez avec backoff et la même clé d’idempotence.
Limites de débit et de payload
Les rate limits par clé API et les contraintes de taille de payload s’appliquent à tous les appels API. Les conversions refusées ne consomment pas de crédits API prépayés ; les rate limits sont évaluées séparément par endpoint.
- Les limites sensibles à l’endpoint sont pondérées par coût, et chaque endpoint a son propre bucket afin que le polling ne puisse pas affamer le débit de conversion. Valeurs par défaut par clé API :
POST /invoices:convertetPOST /invoices:convert-structured30/minet500/hour;GET /tasks/{task_id}10/minet120/hour;GET /tasks/{task_id}/result10/minet environ134/hour;GET /tasks/{task_id}/validation-report10/minet120/hour. - Les headers de quota ne sont renvoyés que sur les réponses
429 RATE_LIMITED. Les réponses réussies ne portent pas de headers de quota : traitez le tableau ci-dessus comme le contrat de travail et lisez les valeurs effectives exactes sur une réponse429. - Le bucket de statut est la contrainte déterminante pour le polling : attendez environ
20 secondesaprès le202accepté avant le premier appel de statut, puis espacez les appels (20s, 30s, 45s, 60s, puis 60s ensuite) et arrêtez surcompletedoufailed. N’interrogez pas toutes les 10 secondes ; une seule tâche interrogée ainsi épuise tout son budget horaire en 20 minutes. - Taille maximale d’upload de document source :
20 MBpour les fichiers PDF, DOCX ou TXT. - Taille maximale d’upload des données structurées :
2 MBau total sur toutes les partiesdata_file. - Taille maximale de payload JSON :
1 MB - Les réponses
429incluentRetry-After,X-RateLimit-Limit-MinuteetX-RateLimit-Limit-Hour, ainsi quedetails.minute_count,details.hour_count,details.limit_minuteetdetails.limit_hour.
Guide de nouvelle tentative
- Utilisez un backoff exponentiel avec jitter, et réutilisez la même
Idempotency-Keyà chaque réessai d’une requête d’écriture. - Décidez sur le
codelisible par machine — et surdetails.codeplusdetails.retryablepour500 TASK_FAILED— jamais sur le seul statut HTTP. Un500n’est pas automatiquement réessayable dans cette API. - Réessayable :
429,502,504,503avec un code réessayable, les500transitoires qui ne sont PASTASK_FAILEDniINTERNAL_ARTIFACT_INVARIANT_FAILED, et500 TASK_FAILEDlorsquedetails.retryablevauttrue(échecs fournisseur transitoires : limitation de débit, timeout, erreur de transport) — réessayez ce cas comme une NOUVELLE conversion avec une nouvelleIdempotency-Key, pas en re-pollant la même tâche. - Ne jamais réessayer :
400,401,402,403,404,405,413,422,409 IDEMPOTENCY_CONFLICT,409 IDEMPOTENCY_REPLAY_EXPIRED,500 TASK_FAILEDlorsquedetails.retryablene vaut pastrue, et500 INTERNAL_ARTIFACT_INVARIANT_FAILED. Une conversion échouée de manière terminale ne consomme pas d’unité de facturation. 409 IDEMPOTENCY_IN_PROGRESSest réessayable avec la MÊME clé après un court délai ; une réservation bloquée est libérée après 15 minutes.503 ARTIFACT_GENERATION_RERUN_REQUIREDet503 EXTRACTION_INCOMPLETE_GROUP_FAILUREexigent une NOUVELLE conversion plutôt qu’un réessai de la même tâche.
Cycle de vie des tâches et rétention
- Une tâche et ses artefacts stockés sont conservés
24 heuresaprès que la tâche atteint un état terminal (completedoufailed), puis purgés. Après la purge, les requêtes de statut, de résultat et de rapport de validation renvoient404 TASK_NOT_FOUND. - Il n’y a pas de timeout de conversion fixe. Une tâche échoue après une fenêtre d’inactivité de
5 minutessans mise à jour d’étape ou de progression, ou dès que le traitement total dépasse le plafond absolu de15 minutes. - Réglez votre timeout côté client à environ
16 minutesà partir du202accepté. La plupart des conversions se terminent bien en dessous de deux minutes. - Les enregistrements d’idempotence vivent
24 heures, comme la rétention des tâches. Une requête bloquée en cours est libérée après15 minutes. - Les compteurs de rate-limit se réinitialisent sur une fenêtre glissante.
Modèle de support
- Support en heures ouvrées selon des efforts commercialement raisonnables.
- Aucun SLA formel, crédit de service ou engagement de temps de réponse sauf accord dans un order form.
Journal des modifications
Dernières évolutions visibles de l’API.
2026-09-08
seller_master_data traite désormais electronic_address et electronic_address_scheme comme une paire facultative. Fournissez les deux champs ou omettez-les tous les deux ; une paire incomplète renvoie 400 INVALID_SELLER_MASTER_DATA.
2026-09-07
Correction de la documentation tarifaire : 1 000 crédits prépayés coûtent 400 EUR (0,40 EUR par crédit). Les forfaits de 100, 200 et 500 crédits restent à 50, 100 et 250 EUR. Les prix appliqués et les achats existants ne changent pas.
2026-08-24
La conversion de documents ignore désormais le XML de facture intégré par défaut. Définissez use_embedded_xml=true uniquement si l’intégration accepte explicitement le XML intégré comme source d’extraction principale. L’import e-mail ignore toujours le XML de facture intégré. La modification de use_embedded_xml modifie le hash d’idempotence de la requête ; utilisez un nouvel Idempotency-Key lorsque vous modifiez cette option.
2026-08-20
Lorsque les données maître vendeur remplissent un champ, les drapeaux d’extraction restants restent visibles mais ne bloquent plus l’import e-mail strict ni l’API externe. Acheteur, lignes, taxe, livraison, échéance, escompte, motif de virement, champs de profil non renseignés et valeurs invalides restent bloquants.
2026-08-07
Enterprise est devenu disponible en achat direct à 50 EUR/mois ou 420 EUR/an. Enterprise comprend 100 conversions E-mail/API partagées par mois ; les conversions supplémentaires utilisent des crédits prépayés à 0,40–0,50 EUR. Les clés API ne demandent plus d’approbation manuelle.
2026-07-29
Publication du catalogue d’erreurs actuel et des règles de réessai par code. Un statut 500 n’est pas automatiquement réessayable ; consultez code, details.code et details.retryable. Documentation des deux formes de details pour 402 INSUFFICIENT_API_CREDITS et des parcours de reprise différents pour les erreurs 409 d’idempotence. Publication des headers de preuve du rapport, de la conservation de 24 heures, des timeouts de tâche et des rate limits par endpoint. Publication de la table fermée format/profil et correction des indications de téléchargement, METHOD_NOT_ALLOWED et PROFILE_MISMATCH.
2026-07-28
La conversion API rejette maintenant une source confirmée avec plusieurs factures par l’erreur terminale MULTIPLE_INVOICES_IN_DOCUMENT. Scindez les fichiers multi-factures confirmés. Un signal incertain renvoie plutôt 422 VALIDATION_FAILED pour examen.
2026-07-26
Les données de référence vendeur activées remplacent maintenant les valeurs vendeur ou paiement extraites correspondantes. Les champs absents du profil laissent les valeurs extraites inchangées ; les écarts restent des avertissements non bloquants.
2026-07-25
Remplacé par 2026-07-26 : les données de référence vendeur remplacent maintenant les valeurs extraites correspondantes au lieu de combler seulement les valeurs absentes.
2026-07-10
Rattrapage de documentation ; aucun changement de comportement à l’exécution. Le catalogue d’erreurs documente désormais des codes d’erreur d’exécution auparavant non documentés, dont API_CREDIT_SERVICE_UNAVAILABLE, TASK_NOT_FOUND, INVALID_CLIENT_METADATA, INVALID_SELLER_MASTER_DATA, PROFILE_MISMATCH, ZUGFERD_SOURCE_PDF_REQUIRED, VALIDATION_REPORT_NOT_FOUND, VALIDATION_REPORT_FAILED, INVALID_QUERY_PARAMETER et METHOD_NOT_ALLOWED. Les clients qui analysent les réponses d’erreur via le champ code lisible par machine n’ont rien à changer ; les clients qui s’appuient sur une liste fixe de codes doivent ajouter les valeurs nouvellement documentées. Dates du changelog corrigées : la prise en charge des sources DOCX/TXT a été livrée le 2026-06-30 et non le 2026-07-06.
2026-07-06
Les payloads des tâches terminées peuvent inclure des entrées additives _processing_warnings et _validation_warnings avec des ID de règle SOURCE_CONTEXT_* lorsque les preuves source étaient indisponibles, douteuses ou tronquées avant l’extraction. Traitez les entrées SOURCE_CONTEXT_* comme des signaux de revue pour la gestion des exceptions côté client ; les téléchargements d’artefacts stricts restent régis par la preuve de validation et les contrôles d’artefact.
2026-07-03
Les échecs de prérequis stricts ZUGFeRD (champs obligatoires manquants pour la génération hybride) échouent désormais en 422 VALIDATION_FAILED avec les ID de règle bloquants au lieu d’un 503 réessayable ; orientez-les vers un flux de correction des données, pas vers une boucle de réessai. Pour les formats XML uniquement (XRECHNUNG, EN16931, UBL, CII), le rendu PDF est désormais un artefact de commodité en best effort : download=xml reste la référence disponible sur les tâches terminées, tandis que download=pdf peut être indisponible si le rendu a échoué après l’émission du XML. Les conversions avec des conflits de source bloquants non résolus échouent désormais en 422 VALIDATION_FAILED avec des entrées blocking_source_conflict au lieu d’émettre un artefact.
2026-06-30
POST /api/v1/invoices:convert accepte désormais les documents sources de facture PDF, DOCX et TXT dans le champ file. Les anciens fichiers DOC, RTF, images et autres sources non prises en charge sont refusés avant le démarrage de la conversion. Les téléchargements PDF hybrides ZUGFeRD/Factur-X exigent toujours une source PDF ; utilisez les téléchargements XML pour les conversions depuis DOCX/TXT. Ajout de l’option include_validation_report_html=true sur GET /api/v1/tasks/{task_id} pour inclure en ligne le rapport de validation HTML assaini lorsqu’il est disponible. Les uploads de conversion acceptent désormais les champs optionnels use_seller_master_data et seller_master_data sur les deux endpoints, afin que les tenants approuvés puissent activer des données de base vendeur enregistrées ou limitées à la requête.
2026-06-29
Ajout de GET /api/v1/tasks/{task_id}/validation-report?download=html|xml pour récupérer le rapport de validation lié à la preuve de l’artefact de résultat strict actuel. Les réponses du rapport de validation exposent les headers ID de tâche, SHA-256 de l’artefact, ID de preuve de validation, ID de preuve du rapport, type de contenu du rapport et ID de corrélation.
2026-06-10
Les données de facture envoyées sont maintenant la source de données de la sortie ZUGFeRD hybride ; le nettoyage déterministe et la normalisation fiscale restent actifs. Les tâches échouent en cas d’arrêt de progression ou à la limite de 15 minutes, et non après un timeout fixe de cinq minutes.
2026-06-09
Un échec de stockage du suivi d’usage ne bloque plus une réponse validée prête et ne facture pas de crédit en plus ; les événements sont mis en file pour rapprochement.
2026-06-02
L’accès External API est maintenant documenté comme accès approuvé et non comme création de clé non contrôlée. Clarification qu’aucun SLA formel, crédit de service ou pénalité contractuelle ne s’applique sauf accord dans un order form. format est désormais requis sur les deux endpoints de conversion ; les valeurs manquantes renvoient 400 FORMAT_REQUIRED et les valeurs non prises en charge 422 INVALID_FORMAT. download est désormais requis sur les requêtes task-result ; les valeurs manquantes renvoient 400 DOWNLOAD_FORMAT_REQUIRED et les valeurs non prises en charge 400 INVALID_DOWNLOAD_FORMAT. Les uploads de conversion acceptent maintenant client_reference/external_invoice_id et source_system pour le rapprochement côté client. Les réponses de conversion acceptée et de statut de tâche incluent maintenant status_url, primary_result_format, primary_result_url et les champs de rapprochement fournis.
2026-06-01
La conversion structurée accepte désormais tous les formats de sortie publics : XRECHNUNG, ZUGFeRD, EN16931, UBL et CII. La conversion structurée accepte maintenant des parties data_file répétables ainsi que les alias data_files et data_files[] pour les exports ERP scindés. Les bundles structurés multi-fichiers doivent décrire exactement une facture et échouent rapidement si les ID de facture du bundle sont contradictoires ou manquants. Clarification que plusieurs documents de facture doivent être soumis comme tâches de conversion séparées, chacune avec sa propre clé d’idempotence.
2026-05-27
Ajout de POST /api/v1/invoices:convert-structured pour la conversion de données structurées avec PDF porteur et CSV/JSON/XML/XLSX/TXT sur les formats de sortie pris en charge. Documentation du fait que les données structurées sont la seule source sémantique sur cet endpoint ; le PDF sert à l’intégration hybride. Artefacts OpenAPI et Postman mis à jour pour la conversion structurée.
2026-05-26
Les artefacts XML stricts et PDF hybrides ont reçu des données internes de parité ; utilisez result_artifacts pour l’état de disponibilité et de validation. La base URL de production documentée est devenue https://www.invoice-converter.com/api/v1.
2026-05-19
GET /api/v1/tasks/{task_id}/result sert uniquement à la récupération ; il ne génère, ne répare et ne valide aucun fichier. Les tâches strictes se terminent seulement après le stockage d’un artefact validé ; l’absence de preuve actuelle échoue en mode fermé. La conversion External API est fixée à l’émission stricte, sans brouillon ni contournement des avertissements. Le statut de tâche a reçu les diagnostics result_artifacts et les valeurs delivery_channel documentées.
2026-05-08
Crédits API externes prépayés ajoutés pour les tenants non Enterprise. 402 INSUFFICIENT_API_CREDITS documenté pour les tenants approuvés sans facturation Enterprise par order form ni crédits prépayés. Confirmation que les relectures idempotentes ne consomment pas de crédits API supplémentaires. Clarification que le routage de modèle External API V1 est géré côté serveur, tandis que le profil et le contexte de livraison restent contrôlés par l’appelant.
2026-03-28
Le statut de tâche a reçu des diagnostics de disponibilité des artefacts XML/PDF. Les téléchargements stricts renvoient un fichier seulement après les contrôles d’artefact côté serveur.
2026-03-26
Les téléchargements réussis ont reçu une preuve de validation côté serveur pour l’artefact renvoyé. Les dépendances de validation ou de preuve absentes renvoient 503 AUTHORITATIVE_VALIDATION_UNAVAILABLE. Les téléchargements en cache sont réutilisés seulement si leur preuve de validation stockée reste à jour.
2026-03-06
Les téléchargements task-result respectent désormais le format pour les sorties CII et ZUGFERD. Réutilisation d’artefacts de résultat en cache ajoutée pour les téléchargements XML/PDF répétés d’une même tâche. Quotas de polling alignés sur les buckets de rate-limit pondérés par endpoint.
2026-02-23
Réponses d’erreur API plus claires et cohérentes ajoutées sur tous les endpoints. Options de conversion étendues et comportement de téléchargement XML/PDF documenté pour les résultats de tâche. Sécurité des réessais améliorée avec des exigences d’idempotence et une validation plus strictes. Artefacts OpenAPI/Postman mis à jour pour correspondre au comportement actuel de l’API.
Artefacts de livraison
Téléchargez les artefacts d’intégration lisibles par machine pour la Developer API.
Utiliser Postman et OpenAPI
- Importez la collection Postman et définissez les variables de collection
base_url,api_keyetidempotency_key. - Exécutez la collection dans l’ordre : convert, polling du statut, puis récupération du résultat.
- Utilisez l’OpenAPI JSON pour générer des clients typés, mais couvrez upload fichier, polling et résultat binaire par des tests d’intégration.
- Enregistrez
X-Correlation-IDdans les logs afin que le support puisse tracer les requêtes de bout en bout.
Envoyer un retour technique
Partagez avec notre équipe les questions d’implémentation, risques et changements de contrat nécessaires.