# Zuordnung erweitern (https://developer.bimetrics.de/reference/matches/extend-match)

`POST https://app.bimetrics.de/api/match/{id}/extend`

operationId: `extendMatch` · Berechtigung (Scope): `matching:write` · Bereich: Zuordnungen

Fügt einer Zuordnung Belege oder Umsätze hinzu, etwa eine zweite Teilzahlung, wie „Zuordnung erweitern“ in der App. `documentIds` und `transactionIds` nennen die vollständige neue Auswahl: alle bisherigen Einträge und mindestens einen neuen. bimetrics ersetzt die Zuordnung in einem Schritt durch eine neue mit derselben Kategorie und bucht neu; `replacedMatchId` nennt die alte. `expectedVersions` kommt unverändert aus `previewDeleteMatch`. Nicht möglich mit bestätigtem Skonto (`400 CashDiscountNotEligible`), mit gebuchten Mahnkosten (`422 ReminderChargesNotEligible`), mit einem Beleg aus einer Buchungsvorlage (`409 MatchNotExtendable`) und, wie beim Aufheben, wenn Buchungen schon an DATEV exportiert sind (`409 FinalizedBookingsLocked`). Andere festgeschriebene Buchungen bleiben stehen; storniert und neu gebucht werden sie nur, wenn sich für DATEV etwas ändert, etwa bei einer Sammelzahlung.

Benötigt einen Schlüssel mit der Berechtigung `matching:write`.

> **Achtung:** Ändert Daten der Firma; wird atomar mit Idempotenzbeleg und Herkunft protokolliert.
>
> KI-Agenten fragen vor diesem Aufruf beim Nutzer nach.

### Authentifizierung

`Authorization: Bearer bm_…` (alternativ `X-API-KEY: bm_…`, nie beide zugleich).

### Parameter

| Name | Ort | Pflicht | Typ | Beschreibung |
| --- | --- | --- | --- | --- |
| `id` | path | ja | string (uuid) | ID des Objekts in dieser Firma (UUID). |
| `Idempotency-Key` | header | ja | string | Stabiler Schlüssel für genau diese Änderung: 1–128 druckbare ASCII-Zeichen ohne Leerzeichen. Bei Wiederholungen denselben Schlüssel und unveränderten Inhalt senden; das Ergebnis wird nicht nochmals erzeugt. |

### Request-Body (`application/json`)

Die vollständige neue Auswahl und die Versionen der Aufhebungsvorschau

Schema `ExtendMatchRequest`.

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `documentIds` | Array<string (uuid)>, kann null sein | Alle Belege der neuen Zuordnung, die bisherigen und die neuen. |
| `expectedVersions` | object | Vollständige Versionsmap aus `previewDeleteMatch`, unverändert. |
| `transactionIds` | Array<string (uuid)>, kann null sein | Alle Umsätze der neuen Zuordnung, die bisherigen und die neuen. |

### Beispiel

```sh
curl --fail-with-body "https://app.bimetrics.de/api/match/{id}/extend" \
  -H "Authorization: Bearer $BIMETRICS_API_KEY" \
  -H "Idempotency-Key: rechnung-2026-001" \
  -H "Content-Type: application/json" \
  -d '{"kind":"and","children":[],"limit":50,"offset":0}'
```

### Antworten

| Status | Beschreibung | Inhalt |
| --- | --- | --- |
| 200 | Erfolg. | `application/json`: ExtendMatchResult |
| 400 | Ungültige Anfrage, z. B. ein Parameter mit ungültigem Wert wie eine ID, die keine UUID ist; korrigieren statt wiederholen. Mehr unter [Fehler](https://developer.bimetrics.de/errors). | `application/json`: Error |
| 401 | Kein gültiger Schlüssel: fehlt (`Unauthorized`), ist unbekannt, abgelaufen oder widerrufen oder wurde nicht in genau einem Header gesendet (`InvalidAPIKey`). Schlüssel prüfen, nicht wiederholen. Auch eine ID, die zu einer anderen Firma gehört, ergibt `401 Unauthorized`. | `application/json`: Error |
| 403 | Dem Schlüssel fehlt die Berechtigung für diese Route (`APIKeyPermissionDenied`), oder die Firma hat keinen API-Zugang (mehr), etwa nach Ende der Testphase oder des Abos (`APIUnavailable`). | `application/json`: Error |
| 404 | Nicht gefunden (`NotFound`). | `application/json`: Error |
| 409 | Versionskonflikt (`VersionConflict`), abweichender Inhalt für denselben Idempotency-Key (`IdempotencyConflict`), Dublette (`ContactDuplicate`) oder fachlich gesperrte Änderung. Aktuellen Zustand laden und prüfen; keinen anderen Schlüssel verwenden, um einen Konflikt zu umgehen. | `application/json`: Error |
| 413 | Die Anfrage ist zu groß (`APIRequestTooLarge`), siehe `x-bimetrics-limits`. | `application/json`: Error |
| 422 | Der Mehrbetrag lässt sich nicht als Mahnkosten und Zinsen buchen, oder die Zuordnung hat sie schon gebucht (`ReminderChargesNotEligible`). Die Zuordnung bleibt unverändert. | `application/json`: Error |
| 429 | Zu viele Anfragen; nach `Retry-After` Sekunden erneut senden. Mehr unter [Fehler](https://developer.bimetrics.de/errors). (Header: Retry-After) | `application/json`: Error |
| 500 | Serverfehler; die Anfrage später wiederholen. Mehr unter [Fehler](https://developer.bimetrics.de/errors). | `application/json`: Error |

#### Felder der Antwort 200 (`ExtendMatchResult`)

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `match` | Match | Die neue Zuordnung. |
| `replacedMatchId` | string (uuid) | ID der ersetzten Zuordnung; sie gibt es danach nicht mehr. |
| `replayed` | boolean | True bei sicherer Wiederholung eines bereits erfolgreichen Aufrufs. |
| `reversedFinalizedMonths` | Array<string> | Monate (YYYY-MM), in denen bimetrics festgeschriebene Buchungen storniert und mit geändertem Datum, Leistungszeitraum, Konto, Steuerkennzeichen oder Betrag neu gebucht hat. Ändert sich nur der Buchungstext oder die Zuordnung, fehlt der Monat. Hast du die Umsatzsteuer-Voranmeldung für einen dieser Monate oder, bei geändertem Datum, für den neuen Monat schon abgegeben, musst du sie womöglich berichtigen. Fehlt, wenn nichts storniert wurde, und bei einer Wiederholung mit demselben Idempotency-Key. |

Verschachtelte Schemas stehen vollständig in der OpenAPI-Beschreibung: https://app.bimetrics.de/api/openapi.json
