Duplikate lesen
Benötigte Berechtigung:read(Daten lesen)
Listet die Duplikat-Einträge der Firma, neueste zuerst: Eine Datei wurde erneut hochgeladen, die die Firma schon hat, und es entstand kein zweiter Beleg. Das sind die Zeilen, die die Belegliste der App als Duplikat zeigt.
Benötigt einen Schlüssel mit der Berechtigung read.
AuthentifizierungBearer <bm_…>Empfohlen: Authorization: Bearer bm_…. Der Schlüssel wird nur einmal angezeigt; nie in URLs, Logs oder Frontend-Code ablegen.
documentId?stringNur die Kopien dieses Belegs.
limit?integerEinträge je Seite, höchstens 200, ohne Angabe 50.
offset?integerZu überspringende Einträge.
Erfolg.
application/json- response
Duplikat-Einträge der Firma.
items?array<>|Einträge dieser Seite.
total?integerEinträge insgesamt.
curl --fail-with-body "https://app.bimetrics.de/api/document/duplicates" \ -H "Authorization: Bearer $BIMETRICS_API_KEY"{ "items": [ { "createdAt": "2026-11-02T09:15:00Z", "documentFilename": "rechnung.pdf", "documentId": "3f6c2a10-7b1e-4c55-9a70-0d2b8e41c9f1", "id": "8a1d4e77-2c9b-4f03-b6e2-5c7f10ae34d2", "importOrigin": "upload", "invoiceNumber": "RE-2026-0042", "originalFilename": "rechnung-kopie.pdf" } ], "total": 1}Belegtyp für mehrere Belege setzen POST
Setzt den Belegtyp jedes Belegs, `invoice` (Ausgangsrechnung, Einnahme) oder `receipt` (Eingangsbeleg, Ausgabe), wie die Mehrfachauswahl der App und wie `kind` in `PATCH /api/document/{id}`. Das ist eine Entscheidung: Sie beendet „Belegtyp prüfen“ (`kindReview`), auch wenn der Typ gleich bleibt. bimetrics bucht jeden geänderten Beleg sofort neu. Kategorien bleiben; passt eine nicht zum neuen Typ, zeigt der Beleg einen Buchungsfehler. Nur ein Beleg mit „Belegtyp prüfen“, den seit der Erkennung niemand bearbeitet hat, bekommt bei einem Wechsel neue Kategorien. Übersprungen werden festgeschriebene Belege und ausgestellte Rechnungen (`finalized`), an DATEV exportierte (`exported`), Belege aus Dauerbuchungen oder Vorlagen (`linked`), stornierte (`deleted`), mit erfasster Zahlung (`paid`), noch nicht gelesene (`unread`) und Belege, die den Typ schon haben und nicht auf „Belegtyp prüfen“ warten (`unchanged`). Dazu `notFound` und `notPreviewed`. Ein Beleg kommt in `failed`, wenn `PATCH /api/document/{id}` ihn ablehnen würde. Höchstens 50 Belege je Aufruf (`400 BulkLimitExceeded`). Die Antwort nennt je Beleg, was geschah: `change` geändert, `skipped` mit Grund übersprungen, `failed` mit Code abgelehnt. Das ist ein Teilerfolg wie in der App: Ein abgelehnter Beleg hält die anderen nicht auf, und die Route antwortet mit `200`. Mit `dryRun` ändert sie nichts und zeigt, was geschähe, mit einer `version` je Beleg. Zum Ausführen gibst du diese als `expectedVersions` zurück, sonst antwortet die Route mit `400 ExpectedVersionRequired`. Es ändert sich nur, was unter `change` stand und seitdem unverändert ist: Ein geänderter Beleg kommt mit `VersionConflict` in `failed`, die übrigen laufen, und ein Beleg ohne Eintrag bleibt mit `notPreviewed` in `skipped`. Jeder Beleg läuft als eigener Befehl mit eigenem Eintrag im Protokoll und zählt einzeln auf die Tagesgrenzen der Firma und der Testphase. Der ganze Aufruf zählt einmal auf die Grenzen je Minute. Eine Wiederholung mit gleichem Idempotency-Key ändert nichts doppelt und erledigt, was noch offen ist. Sie klärt auch den Stand, wenn ein Aufruf abbricht: `OutcomeUnknown` heißt, der Beleg kann schon gebucht sein. Benötigt einen Schlüssel mit der Berechtigung `documents:write`.
Duplikate entfernen POST
Entfernt ausgewählte Duplikat-Einträge, wie „Duplikat löschen“ in der App, höchstens 1000 auf einmal. Beleg, Datei, Buchungen und Zuordnung bleiben. Danach hält keine Kopie mehr den Beleg, wenn das Original gelöscht wird. Ist eine ID unbekannt, antwortet die Route mit `404` und entfernt nichts. Eine Wiederholung mit gleichem Idempotency-Key entfernt nichts doppelt und meldet `replayed`. Benötigt einen Schlüssel mit der Berechtigung `documents:delete`.