Beleg-Upload
Belege hochladen, ohne Doppelungen wiederholen und den Verarbeitungsstatus abfragen.
Achtung
Teste den Upload deshalb mit einer Firma und einem Beleg, die du dafür vorgesehen hast. Die Referenz bietet für den Upload bewusst keinen Testversand an.
Voraussetzungen
- Ein Schlüssel mit der Berechtigung
upload(in der App: Belege hochladen). POSTanPOST /api/document/alsmultipart/form-data.- Genau eine Datei je Anfrage, in genau einem dieser Felder:
| Feld | Bedeutung |
|---|---|
auto[] | bimetrics erkennt die Belegart selbst |
receipt[] | Eingangsbeleg, etwa eine Rechnung eines Lieferanten |
invoice[] | Ausgangsrechnung, also eine Rechnung, die die Firma gestellt hat |
Weitere Formularfelder oder mehrere Dateien lehnt die API mit 400 ab. Unterstützt werden PDF, PNG, JPEG und Textformate wie XML-E-Rechnungen; die Art wird am Inhalt erkannt, nicht an der Dateiendung. Eine Datei darf höchstens 30 MiB groß sein; eine größere Datei ergibt 400. Ist die ganze Anfrage größer als erlaubt, antwortet die API mit 413 (siehe Limits).
Upload-ID
Jede Anfrage braucht den Header X-Upload-Request-Id: 1 bis 128 druckbare ASCII-Zeichen ohne Leerzeichen, zum Beispiel eine UUID oder die ID des Belegs in deinem System.
- Für jeden neuen Beleg eine neue ID verwenden.
- Bei einer Wiederholung derselben Übertragung ID, Datei, Dateiname und Feld gleich lassen.
curl --fail-with-body https://app.bimetrics.de/api/document/ \
-H "Authorization: Bearer $BIMETRICS_API_KEY" \
-H "X-Upload-Request-Id: rechnung-2026-0001" \
-F "auto[]=@rechnung.pdf"Sicher wiederholen
Firma, Schlüssel und Upload-ID bilden zusammen die Identität eines Uploads.
- Kommt dieselbe ID mit identischer Datei, gleichem Dateinamen und gleichem Feld erneut, liefert die API denselben Beleg zurück. Das gilt auch für parallele Anfragen. Die Wiederholung verbraucht kein weiteres Kontingent und startet keine zweite Verarbeitung.
- Kommt dieselbe ID mit anderem Inhalt, Dateinamen oder Feld, antwortet die API mit
409und dem CodeUploadRequestConflict. Das ist kein vorübergehender Fehler. - Wurde der ursprüngliche Beleg inzwischen gelöscht, legt eine Wiederholung ihn nicht neu an, sondern antwortet ebenfalls mit
409. Für einen neuen Upload brauchst du eine neue ID. - Ein anderer Schlüssel bildet einen eigenen Bereich: Dieselbe ID mit einem neuen Schlüssel ist ein neuer Upload.
Wiederhole bei Zeitüberschreitung, Verbindungsabbruch, 5xx und 429 (nach Retry-After) immer mit derselben ID.
Antwort
Die Antwort ist ein Array mit genau einem Beleg (gekürzt):
[
{
"id": "0b5c…",
"uploadDocument": { "ocrStatus": "pending" }
}
]Liegt dieselbe Datei in der Firma schon vor, legt bimetrics keinen zweiten Beleg an. Die Antwort enthält dann den vorhandenen Beleg und "duplicate": true.
Verarbeitung abfragen
Nach dem Upload erkennt bimetrics die Belegdaten im Hintergrund. Den Stand fragst du mit GET /api/document/{id} ab, im Feld uploadDocument.ocrStatus:
| Status | Bedeutung |
|---|---|
pending | Beleg gespeichert, Verarbeitung noch nicht gestartet |
processing | Verarbeitung läuft |
success | Verarbeitung abgeschlossen, die erkannten Werte stehen im Beleg |
failed | Verarbeitung fehlgeschlagen, der Beleg bleibt gespeichert |
quota_paused | Beleg gespeichert, Verarbeitung pausiert, weil das Belegkontingent ausgeschöpft ist |
Frage den Status in Abständen von einigen Sekunden ab und beachte die Limits. Bei quota_paused war der Upload erfolgreich: Lade den Beleg nicht mit einer neuen ID erneut hoch.
Nachvollziehbarkeit
Jeder Upload wird im Protokoll des Belegs als Upload über einen API-Schlüssel vermerkt und dem verwendeten Schlüssel zugeordnet. Die Originaldatei rufst du mit GET /api/document/{id}/content ab.