Intégration
Export MarkdownDocumentation API externe V1
Pack documentaire technique pour l’implémentation et la revue API en libre-service. Cette page résume le contrat API externe, le modèle d’accès et les contraintes d’intégration.
Vue d’ensemble
L’API accepte les envois multipart, renvoie des réponses JSON et utilise les codes de statut HTTP standard ainsi que l’authentification Bearer. Envoyez une facture PDF, attendez le traitement asynchrone, puis récupérez le résultat généré.
Envoyez une facture PDF 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 approuvé
Chemin de base: /api/v1. Dernière synchronisation 2026-06-09.
Fonctionnalités clés
Utilisez ces points comme contrôles pratiques pour cette section.
- Endpoints d’upload pour factures PDF et données de facture structurées
- Extraction de données de facture assistée par IA
- 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
Artefacts de livraison
Téléchargez les artefacts d’intégration lisibles par machine pour la Developer API.
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 PDF en e-facture structurée
POST /api/v1/invoices:convert-structured
LiveConvertir des données structurées
GET /api/v1/tasks/{task_id}
LiveInterroger le statut de tâche
Obtenir un accès API
Utilisez ces points comme contrôles pratiques pour cette section.
- Créez un compte et demandez l’accès API.
- Utilisez des crédits API prépayés pour les tests approuvés ou une facturation Enterprise par order form pour l’usage production.
- Après approbation, créez une clé API live depuis la section d’accès API.
- Envoyez la première requête avec des identifiants côté serveur, puis surveillez l’usage et tournez les clés depuis votre profil.
URL de base et clés API
Utilisez ces points comme contrôles pratiques pour cette section.
- 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 des clés live approuvées 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.pdfetformat=XRECHNUNG. - Interrogez toutes les
10-15 secondes:GET /api/v1/tasks/{task_id}jusqu’au statutcompletedoufailed. - 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. - 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
Utilisez ces points comme contrôles pratiques pour cette section.
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; pour les intégrations déterministes, définissez unprofileexplicite commePEPPOL,XRECHNUNGouEN16931.CII: envoyezformat=CII; pour les intégrations déterministes, définissez unprofileexplicite commeEN16931.
En-têtes requis
Utilisez ces points comme contrôles pratiques pour cette section.
- Authorization: Bearer <api_key>
Règles d’authentification
L’accès API est soumis à approbation. Les comptes approuvés peuvent créer des clés API depuis le profil, les utiliser comme Bearer token et utiliser des crédits prépayés pour les tests approuvés ou une facturation Enterprise par order form pour la production.
- Les clés sont des identifiants live limités au tenant pour les comptes approuvés. Le préfixe de production actuel est
icp_.... - Créez, tournez et révoquez les clés API depuis votre profil après activation de l’accès API. 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
Utilisez ces points comme contrôles pratiques pour cette section.
- 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. - Les clés d’idempotence expirent après
24 heures.
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 une facture PDF et démarrez la conversion asynchrone. Renvoie un task_id pour le polling. Requête: multipart/form-data; file (binary, requis) — fichier PDF de facture; 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. Les valeurs par défaut dépendent du format ; les valeurs autorisées incluent XRECHNUNG, PEPPOL, EN16931 et les profils ZUGFeRD/Factur-X pris en charge; 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. 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. Valeur par défaut selon le format; 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. Réponse: 202 Accepted.
GET /api/v1/tasks/{task_id}
LiveInterrogez le statut actuel d’une tâche de conversion. Renvoie pending, processing, 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. 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. 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. 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 202 TASK_NOT_READY ; les problèmes de validation bloquants renvoient 422 VALIDATION_FAILED, les dépendances temporairement indisponibles renvoient 503, et les échecs d’invariant d’artefact renvoient 500, toujours sans corps de fichier. 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.
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.4 / Factur-X 1.08 | 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 |
Journal des modifications
Dernières évolutions visibles de l’API.
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-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-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.
2026-02-20
Réponses de statut simplifiées vers une sortie centrée sur le statut. Validation de soumission IndexNow et contrôles d’authentification renforcés. Contrôles d’accès API et comportement de limitation de requêtes durcis en production.
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 |
| INSUFFICIENT_API_CREDITS | 402 | Non | Utilisez des crédits de test prépayés approuvés ou une facturation Enterprise par order form |
| IDEMPOTENCY_KEY_REQUIRED | 400 | Non | Endpoint d’écriture appelé sans Idempotency-Key |
| INVALID_IDEMPOTENCY_KEY | 400 | Non | Format de clé d’idempotence invalide |
| IDEMPOTENCY_CONFLICT | 409 | Non | Même clé utilisée avec un hash de requête différent |
| IDEMPOTENCY_IN_PROGRESS | 409 | Oui | Réessai sûr plus tard avec la même clé/le même payload |
| 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 |
| 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 | Backend de rate-limit indisponible |
| RATE_LIMITED | 429 | Oui | Respecter Retry-After et les headers de quota |
| BAD_REQUEST | 400 | Non | JSON invalide ou paramètre de chemin UUID invalide |
| 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 | 4xx/5xx | Conditionnel | Corriger les options de requête invalides ; réessayer uniquement pour les cas 5xx transitoires |
| TASK_NOT_READY | 202 | Oui | Poller à nouveau pour la fin asynchrone |
| VALIDATION_FAILED | 422 | Non | Des problèmes de validation bloquants subsistent ; 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 |
| 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 |
| 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é |
| 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 | Erreur de connectivité temporaire (504 pour timeout) |
Erreurs courantes et actions à mener
Utilisez ces points comme contrôles pratiques pour cette section.
- Réessayez avec backoff :
429,500,502,503,504. - Corrigez la requête ou les données source :
400,409,413,422. - Corrigez l’accès ou les identifiants :
401,403. - Confirmez l’approbation, les crédits de test prépayés ou la facturation Enterprise par order form :
402 INSUFFICIENT_API_CREDITS. - Continuez à poller plus tard :
202 TASK_NOT_READY. - 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é.
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. Les deux endpoints d’upload utilisent le quota de base du plan (par défaut
30/minet500/hour) ; le polling de tâche est actuellement au moins10/minet120/hour, et les téléchargements de résultat au moins10/minet environ134/hourpar défaut. - Lisez les limites effectives dans
X-RateLimit-Limit-MinuteetX-RateLimit-Limit-Hoursur les réponses. - Taille maximale d’upload PDF :
20 MB - 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 de rate-limit incluent
Retry-After,X-RateLimit-Limit-MinuteetX-RateLimit-Limit-Hour.
Guide de nouvelle tentative
Utilisez ces points comme contrôles pratiques pour cette section.
- Utilisez un backoff exponentiel avec jitter.
- Ne réessayez que les classes transitoires (
429,500,502,503,504) avec le même payload et la même clé d’idempotence lorsque possible. - Ne réessayez pas aveuglément les erreurs de validation ou de contrat (
400,401,402,403,409,413,422).
Cycle de vie des tâches et rétention
Utilisez ces points comme contrôles pratiques pour cette section.
- Les tâches terminées (completed) et échouées (failed) restent disponibles pendant
10 minutesaprès l’état terminal. - Le traitement expire après
5 minutes; les tâches bloquées sont automatiquement marquéesfailed. - Les clés d’idempotence expirent après
24 heures. - Les compteurs de rate-limit se réinitialisent sur une fenêtre glissante.
Modèle de support
Utilisez ces points comme contrôles pratiques pour cette section.
- 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.
Envoyer un retour technique
Partagez avec notre équipe les questions d’implémentation, risques et changements de contrat nécessaires.
Utiliser Postman et OpenAPI
Utilisez ces points comme contrôles pratiques pour cette section.
- Importez la collection Postman et définissez
baseUrl,apiKeyet une nouvelle variableidempotencyKey. - 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.