Docs
8

Dateiablage

Rechnungen als Dateien übergeben.

  • Noch nicht in der Sandbox

In einfachen Worten

Die Dateiablage ist für ERP-Systeme gedacht, die nur Dateien schreiben können: Diese legen Rechnungen in einem Ordner ab, und der Service gibt die Ergebnisse als Dateien im selben Ordner zurück. Das erspart einem Kunden den Bau einer API-Anbindung. Der Service überwacht einen Ordner auf dem Rechner, auf dem er läuft. In der gehosteten Sandbox ist sie nicht aktiviert, und sichere Dateiübertragung und Cloud-Speicher sind nicht gebaut.

Ein ERP, das nur Dateien schreiben kann, kann Rechnungen über einen Ordner übergeben. Der Service überwacht den Ordner und behandelt jede Datei als Übermittlung: eine JSON-Datei wie POST /invoices, eine XML-Datei wie POST /invoices/xml. Die Ergebnisse kommen als Dateien im selben Ordner zurück.

Noch nicht in der Sandboxnicht in der gehosteten Sandbox

Hinweis

Noch nicht in der Sandbox

Die Dateiablage überwacht einen lokalen Ordner. In der gehosteten Sandbox ist sie nicht aktiviert. Es gibt kein SFTP und keinen Objektspeicher; beides würde nur gebaut, wenn ein Pilot es braucht.

Einrichten

Der Ordner wird bei der Installation des Service festgelegt. Der Service prüft ihn einmal pro Sekunde und überwacht nichts, wenn kein Ordner festgelegt ist. Eine Datei durchläuft denselben Eingang wie ein API-Aufruf; für eine Abweisung gelten deshalb dieselben Gründe.

Die Datei benennen

DateiBehandelt als
INVOICE-REF.jsonPOST /invoices. Der Inhalt ist der JSON-Body dieses Aufrufs (siehe JSON übermitteln). Hat der Body eine invoice_ref, muss sie dem Dateinamen ohne .json entsprechen.
INVOICE-REF.ROUTE.xmlPOST /invoices/xml. ROUTE ist DE-XRECHNUNG, PEPPOL, FR-PA, PL-KSEF oder RO-EFACTURA. Der Inhalt ist die Rechnungsdatei (siehe XML übermitteln).
  • Eine Rechnungsreferenz hat bis zu 100 Zeichen und enthält kein / oder \.
  • Eine Datei über 5 MB wird abgewiesen.
  • Ein Name, der mit einem Punkt beginnt, .. enthält oder zu keinem der beiden Muster passt, bleibt unangetastet.
  • Als Idempotency-Key dienen die ersten 32 Zeichen des SHA-256-Hashs der Datei. Eine identische Datei erneut abzulegen, ist eine Wiederholung, keine zweite Rechnung.

Was zurückkommt

Text
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 here

Eine angenommene Datei wird nach done/ verschoben. Die Ereignisse der Rechnung werden nach status/ geschrieben, eine Datei je Ereignis, benannt INVOICE-REF-<sequence>.json. Jede Datei entspricht einem Eintrag der Antwort von GET /invoices/{id}/events. Sie enthalten den Hash der Rechnung und keinen Rechnungsinhalt.

status/DE-4711-1.json
{
  "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"
}
Ein Ereignis aus einer aufgezeichneten Antwort, auf mehrere Zeilen verteilt; die Datei besteht aus einer Zeile.

Die Ereignisse, die existieren, wenn die Datei angenommen wird, werden sofort geschrieben. Jedes spätere Ereignis wird geschrieben, sobald es eintrifft, bis die Rechnung einen Endzustand erreicht (accepted, delivered, rejected, validation_failed, dead_letter oder cancelled) oder 30 Tage vergangen sind.

Eine abgewiesene Datei wird nach failed/ verschoben, und status/INVOICE-REF-error.json enthält die Antwort, die die API gegeben hätte. Für eine Datei, die keine Rechnung ist, ist das die 422-Antwort unten. Korrigieren Sie die Daten und legen Sie die Datei unter demselben Namen erneut ab.

status/DE-4712-error.json
{
  "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
}
Die Antwort auf eine `.xml`-Datei, die keine Rechnung ist, aus einem aufgezeichneten Aufruf.

Was es hier nicht gibt

  • SFTP und Objektspeicher.
  • Eine Möglichkeit, die inv_-ID einer angenommenen Rechnung aus dem Ordner zu lesen. Die Statusdateien enthalten invoice_ref und invoice_number.

Auf dieser Seite