Intégration
Export MarkdownDocumentation API externe V1
Pack documentaire technique pour la revue et le feedback des équipes IT partenaires approuvées en bêta fermée. Cette page résume le contrat API externe et les contraintes d’accès.
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 à un endpoint unique et Invoice-Converter gère l’extraction, la validation et la génération de sortie. L’endpoint de résultat ne renvoie le fichier généré qu’après réussite des contrôles de validation ; sinon il renvoie 422 VALIDATION_FAILED.
Statut: bêta fermée
Chemin de base: /api/v1. Dernière synchronisation 2026-05-11.
Fonctionnalités clés
Utilisez ces points comme contrôles pratiques pour cette section.
- Un endpoint unique pour convertir un PDF en XML
- Extraction de données de facture assistée par IA
- Validation automatique EN 16931 et KoSIT
- Formats de sortie XRechnung, ZUGFeRD, 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
En développementConvertir un PDF en e-facture structurée
GET /api/v1/tasks/{task_id}
En développementInterroger le statut de tâche
GET /api/v1/tasks/{task_id}/result
En développementTélécharger le résultat de conversion
Demander l’accès bêta fermée
Utilisez ces points comme contrôles pratiques pour cette section.
- L’accès API est limité aux partenaires approuvés de la bêta fermée.
- Demandez l’accès par e-mail avec entreprise, cas d’usage, date cible d’intégration, volume mensuel attendu et formats requis.
- L’équipe confirme l’adéquation, provisionne les identifiants de test et partage les contacts de support onboarding.
- Les identifiants live sont émis après validation du workflow de test et approbation commerciale.
URL de base et environnements
Utilisez ces points comme contrôles pratiques pour cette section.
- URL de base production :
https://invoice-converter.com/api/v1. - Les clés test et live utilisent le même host ; les préfixes (
icp_test_*,icp_live_*) identifient l’environnement. - Utilisez les clés
icp_test_*pour l’onboarding et les runs de validation avant de passer aux clés live. - 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 réception des identifiants de bêta fermée.
- Téléversement :
POST /api/v1/invoices:convertavecAuthorization,Idempotency-Key,file=@invoice.pdfetformat=XRECHNUNG. - Interrogez toutes les
2-5 secondes:GET /api/v1/tasks/{task_id}jusqu’au statutcompletedoufailed. - Téléchargement :
GET /api/v1/tasks/{task_id}/result?download=xmlet stockezX-Correlation-IDplusX-Validation-Proof-Ids’il est présent. - Pour une sortie PDF ZUGFeRD, demandez
format=ZUGFERDau convert etdownload=pdfau result.
Exemples courants de payload
Utilisez ces points comme contrôles pratiques pour cette section.
XRECHNUNG: envoyezformat=XRECHNUNG; c’est la valeur par défaut si format est omis.ZUGFERD: envoyezformat=ZUGFERD; utilisezdownload=pdfau result pour la sortie hybride PDF/A-3.UBL: envoyezformat=UBLavec unprofileexplicite commePEPPOL,XRECHNUNGouEN16931.CII: envoyezformat=CIIavec 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 actuellement en bêta fermée. Les partenaires approuvés utilisent une clé API comme Bearer token ; les clés sont provisionnées pendant l’onboarding.
- Les clés sont scoped par tenant et par environnement (
live/test). Le préfixe de clé détermine l’environnement. - Les clés sont émises aux partenaires approuvés de la bêta fermée pendant l’onboarding ; contactez le support pour le provisionnement ou la rotation.
- 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 hours.
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
En développementTéléversez une facture PDF et démarrez la conversion asynchrone. Renvoie une task_id pour le polling. Requête: multipart/form-data. Réponse: 202 Accepted.
GET /api/v1/tasks/{task_id}
En développementInterrogez le statut actuel d’une tâche de conversion. Renvoie pending, processing, completed ou failed. En cas d’échec, la réponse inclut un champ error avec le motif. Requête: aucun (GET). Réponse: 200 OK.
GET /api/v1/tasks/{task_id}/result
En développementTé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. Les téléchargements répétés peuvent être servis depuis des artefacts générés en cache. Si des problèmes de validation bloquants subsistent, cet endpoint renvoie 422 VALIDATION_FAILED sans corps de fichier. Requête: aucun (GET). 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-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 |
| 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 |
| 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 | Réessayer uniquement pour les cas 5xx transitoires |
| TASK_NOT_READY | 202 | Oui | Poller à nouveau pour la fin asynchrone |
| 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 |
| OUTPUT_PROFILE_REQUIRED | 422 | Non | Profil explicite manquant pour un format de syntaxe générique comme UBL ou CII |
| 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. - 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.
Limites de débit et de payload
Les rate limits par clé et les contraintes de taille de payload s’appliquent à tous les appels API. Les requêtes refusées ne consomment pas de quota.
- Les quotas sensibles à l’endpoint sont pondérés par coût. Convert utilise le quota de base du plan (par défaut
30/minet500/hour), tandis que les endpoints de polling utilisent des quotas à pondération plus faible. - Lisez les limites effectives dans
X-RateLimit-Limit-MinuteetX-RateLimit-Limit-Hoursur les réponses. - Taille maximale d’upload PDF :
20 MB - 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,403,409,413).
Cycle de vie des tâches et rétention
Utilisez ces points comme contrôles pratiques pour cette section.
- Les tâches completed et 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 hours. - 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 pendant les heures ouvrées.
- Objectif de première réponse : 1 jour ouvré.
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.