Bestandsmap
Facturen als bestanden aanleveren.
- Nog niet in de sandbox
In gewone woorden
De bestandsmap is bedoeld voor ERP’s die alleen bestanden kunnen schrijven: ze zetten facturen in een map, en de dienst stuurt de resultaten als bestanden terug in dezelfde map. Zo hoeft een eindklant geen API-koppeling te bouwen. De dienst bewaakt een map op de machine waarop hij draait. Ze is niet ingeschakeld in de gehoste sandbox, en beveiligde bestandsoverdracht en cloudopslag zijn niet gebouwd.
Een ERP dat alleen bestanden kan schrijven, kan facturen via één map aanleveren. De dienst bewaakt de map en behandelt elk bestand als een indiening: een JSON-bestand zoals POST /invoices, een XML-bestand zoals POST /invoices/xml. De resultaten komen als bestanden terug in dezelfde map.
Opmerking
Nog niet in de sandbox
De bestandsmap bewaakt een lokale map. Ze is niet ingeschakeld in de gehoste sandbox. Er is geen SFTP en geen objectopslag; die zouden we alleen bouwen als een pilot ze nodig heeft.
Instellen
De map wordt ingesteld wanneer de dienst wordt geïnstalleerd. De dienst controleert ze elke seconde en bewaakt niets als er geen map is ingesteld. Een bestand doorloopt dezelfde inname als een API-aanroep, en wordt dus om dezelfde redenen geweigerd.
De bestandsnaam
| Bestand | Behandeld als |
|---|---|
INVOICE-REF.json | POST /invoices. De inhoud is de JSON-body van die aanroep (zie JSON indienen). Als de body een invoice_ref heeft, moet die gelijk zijn aan de bestandsnaam zonder .json. |
INVOICE-REF.ROUTE.xml | POST /invoices/xml. ROUTE is DE-XRECHNUNG, PEPPOL, FR-PA, PL-KSEF of RO-EFACTURA. De inhoud is het factuurbestand (zie XML indienen). |
- Een factuurreferentie telt maximaal 100 tekens en bevat geen
/of\. - Een bestand groter dan 5 MB wordt geweigerd.
- Een naam die met een punt begint,
..bevat of in geen van beide patronen past, blijft onaangeroerd. - De
Idempotency-Keybestaat uit de eerste 32 tekens van de SHA-256 van het bestand. Een identiek bestand opnieuw in de map zetten is een herhaling, geen tweede factuur.
Wat er terugkomt
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 hereEen geaccepteerd bestand gaat naar done/. De statusberichten van de factuur worden naar status/ geschreven, één bestand per bericht, met de naam INVOICE-REF-<sequence>.json. Elk bestand is één item uit het antwoord op GET /invoices/{id}/events. Ze bevatten de hash van de factuur en geen factuurinhoud.
{
"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"
}De statusberichten die bestaan op het moment dat het bestand wordt geaccepteerd, worden meteen geschreven. Elk later bericht wordt geschreven zodra het binnenkomt, tot de factuur een eindstatus bereikt (accepted, delivered, rejected, validation_failed, dead_letter of cancelled) of er 30 dagen zijn verstreken.
Een geweigerd bestand gaat naar failed/, en status/INVOICE-REF-error.json bevat het antwoord dat de API zou hebben gegeven. Voor een bestand dat geen factuur is, is dat de 422 hieronder. Corrigeer de gegevens en zet het bestand opnieuw in de map, onder dezelfde naam.
{
"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
}Wat hier ontbreekt
- SFTP en objectopslag.
- Een manier om de
inv_-ID van een geaccepteerde factuur uit de map te lezen. De statusbestanden bevatteninvoice_refeninvoice_number.