Dépôt de fichiers
Remettre les factures sous forme de fichiers.
- Pas encore dans le bac à sable
En termes simples
Le dépôt de fichiers s’adresse aux ERP qui ne savent qu’écrire des fichiers : ils déposent les factures dans un dossier, et le service renvoie les résultats sous forme de fichiers dans le même dossier. Il évite au client de développer une connexion par API. Il surveille un dossier sur la machine qui exécute le service. Il n’est pas activé sur le bac à sable hébergé, et le transfert de fichiers sécurisé et le stockage cloud ne sont pas développés.
Un ERP qui ne sait qu’écrire des fichiers peut remettre les factures par un seul dossier. Le service surveille le dossier et traite chaque fichier comme une soumission : un fichier JSON comme POST /invoices, un fichier XML comme POST /invoices/xml. Les résultats reviennent sous forme de fichiers dans le même dossier.
Remarque
Pas encore dans le bac à sable
Le dépôt de fichiers surveille un dossier local. Il n’est pas activé sur le bac à sable hébergé. Il n’y a ni SFTP ni stockage objet. L’un ou l’autre ne serait développé que si un pilote en avait besoin.
Configuration
Le dossier est défini à l’installation du service. Le service le vérifie une fois par seconde, et ne surveille rien quand aucun dossier n’est défini. Un fichier passe par la même entrée qu’un appel d’API : il est donc refusé pour les mêmes raisons.
Nommer le fichier
| Fichier | Traité comme |
|---|---|
INVOICE-REF.json | POST /invoices. Le contenu est le corps JSON de cet appel (voir soumettre du JSON). Si le corps contient un invoice_ref, il doit être égal au nom du fichier sans .json. |
INVOICE-REF.ROUTE.xml | POST /invoices/xml. ROUTE vaut DE-XRECHNUNG, PEPPOL, FR-PA, PL-KSEF ou RO-EFACTURA. Le contenu est le fichier de facture (voir soumettre du XML). |
- Une référence de facture compte jusqu’à 100 caractères et ne contient ni
/ni\. - Un fichier de plus de 5 Mo est refusé.
- Un nom qui commence par un point, contient
..ou ne correspond à aucun des deux modèles est ignoré. - La clé
Idempotency-Keycorrespond aux 32 premiers caractères du SHA-256 du fichier. Déposer à nouveau un fichier identique est un rejeu, et non une seconde facture.
Ce qui revient
drop/
DE-4711.json you write this
status/
DE-4711-1.json one file per status event
DE-4712-error.json the answer to a refused file
done/
DE-4711.json an accepted file moves here
failed/
DE-4712.json a refused file moves hereUn fichier accepté est déplacé dans done/. Les événements de la facture sont écrits dans status/, un fichier par événement, nommé INVOICE-REF-<sequence>.json. Chacun est un élément de la réponse de GET /invoices/{id}/events. Ils contiennent l’empreinte de la facture et aucun contenu de facture.
{
"occurred_at": "2026-10-02T17:17:55.857Z",
"sequence": 1,
"environment": "sandbox",
"invoice_ref": "CAPTURE-JSON-1790961440",
"document_sha256": "3b41395db498666777b74f9f5b9fae82871720304bc25bbb590e25b7b75ea1d4",
"event_id": "evt_200c0def79ed702df81d702f",
"country_route": "DE-XRECHNUNG",
"invoice_number": "CAPTURE-JSON-1790961440",
"status": "validated"
}Les événements qui existent au moment où le fichier est accepté sont écrits aussitôt. Chaque événement ultérieur est écrit à son arrivée, jusqu’à ce que la facture atteigne un état final (accepted, delivered, rejected, validation_failed, dead_letter ou cancelled) ou que 30 jours se soient écoulés.
Un fichier refusé est déplacé dans failed/, et status/INVOICE-REF-error.json contient la réponse qu’aurait donnée l’API. Pour un fichier qui n’est pas une facture, il s’agit du 422 ci-dessous. Corrigez les données et déposez à nouveau le fichier sous le même nom.
{
"type": "https://eurinvoice.com/problems/validation-failed",
"title": "The invoice did not pass the checks",
"errors": [
{
"code": "EI-XML-TYPE",
"fix_hint": "Send the invoice itself, in the format agreed for the route.",
"who_fixes": "erp",
"source": "XML-safety",
"message": "The file is not an invoice in a format this route accepts. Please send the invoice in the agreed format."
}
],
"status": 422
}Ce qui manque
- Le SFTP et le stockage objet.
- Un moyen de lire depuis le dossier l’identifiant
inv_d’une facture acceptée. Les fichiers de statut contiennentinvoice_refetinvoice_number.