bimetricsEntwickler
Belege

Duplikate lesen

Als Markdown ansehen

Benötigte Berechtigung:read(Daten lesen)

GET
/api/document/duplicates

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.

Authentifizierung

headerAuthentifizierungBearer <bm_…>

Empfohlen: Authorization: Bearer bm_…. Der Schlüssel wird nur einmal angezeigt; nie in URLs, Logs oder Frontend-Code ablegen.

Query-Parameter

documentId?string

Nur die Kopien dieses Belegs.

limit?integer

Einträge je Seite, höchstens 200, ohne Angabe 50.

offset?integer

Zu überspringende Einträge.

Antworten

Erfolg.

application/json
  1. response

Duplikat-Einträge der Firma.

items?array<>|

Einträge dieser Seite.

total?integer

Einträge insgesamt.

Beispielanfrage
curl --fail-with-body "https://app.bimetrics.de/api/document/duplicates" \  -H "Authorization: Bearer $BIMETRICS_API_KEY"
Beispielantwort
{  "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`.