# Firmendaten ändern (https://developer.bimetrics.de/reference/company/update-company)

`PATCH https://app.bimetrics.de/api/company/`

operationId: `updateCompany` · Berechtigung (Scope): `company:write` · Bereich: Firma

Ändert die Firmendaten wie die Einstellungen der App, nur die genannten Felder, auch einzeln in `address`, `contactInfo`, `accounting`, `invoiceDefaults` und `documentTexts`. Sie gelten für neue Entwürfe und ab jetzt ausgestellte Belege; ausgestellte Belege behalten ihre Angaben. `expectedVersion` ist die `version` aus `GET /api/company/`; haben sich die Firmendaten seitdem geändert, antwortet die Route mit `409 CompanyVersionConflict` und ändert nichts. Kontenrahmen, Versteuerung samt Befreiungsgrund und Bankverbindung änderst du nur in der App: Nennt der Anfrageinhalt ein solches oder ein unbekanntes Feld, antwortet die Route mit `400 CompanyFieldNotChangeable` und dem Feld in `context.field`. Feste Texte (`documentTexts`) und der Fußtext der Rechnung (`invoiceDefaults.closingText`) nehmen nur druckbare Zeichen auf: Ein Emoji oder ein anderes Zeichen, das das PDF nicht drucken kann, ergibt `400 CompanyTextCharacters`, `context.character` nennt es. Deshalb nehmen Firmentexte, die auf Rechnungen stehen, keine Bankdaten auf, weder eine IBAN noch Wörter wie BIC, Kontonummer oder Bankverbindung: Ein geänderter Text damit ergibt `400 CompanyTextBankDetails` mit dem Feld in `context.field`; ein unveränderter gespeicherter Text bleibt. Es gelten dieselben Prüfungen wie in der App, etwa für den Start eines Nummernkreises (`400 NumberStartTaken`), die DATEV-Nummern (`400 DatevNumberInvalid`) und das Zahlungsziel von 0 bis 365 Tagen. Die Antwort ist die Firma wie bei `GET`, mit neuer `version`.

Benötigt einen Schlüssel mit der Berechtigung `company: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 |
| --- | --- | --- | --- | --- |
| `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`)

 

Schema `CompanyPatch`.

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `accounting` | CompanySettingsAccounting | Rechtliche Angaben, Nummernkreise, Skonto-Vorgabe, DATEV-Nummern, Art der Umsätze und Rechnungsabgrenzung. |
| `address` | CompanySettingsAddress | Anschrift der Firma. |
| `contactInfo` | CompanySettingsContact | Kontaktangaben auf der Rechnung. |
| `documentTexts` | CompanyDocumentTexts | Feste Texte neuer Belege, je Belegart; einzeln änderbar. |
| `expectedVersion` | string (date-time), kann null sein | `version` aus `GET /api/company/`, unverändert. |
| `invoiceDefaults` | CompanySettingsInvoiceDefaults | Vorgaben für neue Rechnungen. |
| `legalForm` | string | Rechtsform als Code nach ISO 20275, z. B. `350` GmbH, `351` UG, `170` und `180` Einzelunternehmen; nur Codes aus der Liste der App. |
| `name` | string | Firmenname, höchstens 200 Byte. |

### Beispiel

```sh
curl --fail-with-body "https://app.bimetrics.de/api/company/" \
  -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`: CompanyProfile |
| 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 |
| 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 |
| 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 (`CompanyProfile`)

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `accountingSystem` | string | Kontenrahmen, `SKR03` oder `SKR04`; leer, solange keiner gewählt ist. |
| `address` | CompanyAddress | Anschrift der Firma wie auf der Rechnung. |
| `companyId` | string | ID der Firma. |
| `currency` | string | Buchführungswährung, immer `EUR`. |
| `documentTexts` | CompanyDocumentTexts | Feste Texte neuer Belege, je Belegart; einzeln änderbar. |
| `freeOfVatLiability` | boolean | Nicht umsatzsteuerpflichtig; bei Kleinunternehmern ebenfalls `true`. |
| `invoiceNumbers` | NumberRange | Nummernkreis der Rechnungen; beim Ausstellen vergibt bimetrics die nächste freie Nummer. |
| `legalForm` | string | Rechtsform als Code nach ISO 20275, z. B. `350` GmbH, `351` UG, `170` und `180` Einzelunternehmen; fehlt, solange keine eingetragen ist. |
| `legalFormName` | string | Name der Rechtsform wie in der App, z. B. `GmbH` oder `Einzelunternehmen`. |
| `managingDirectors` | Array<string> | Geschäftsführung, Inhaber oder Vorstand, wie auf der Rechnung; fehlt, wenn die Rechnung keine nennt. |
| `name` | string | Name der Firma. |
| `proposalNumbers` | NumberRange | Nummernkreis der Angebote. |
| `register` | CompanyRegister | Handelsregister wie auf der Rechnung. |
| `salesKind` | string: `services`, `goods`, `both` | Art der Umsätze: `services` Dienstleistungen, `goods` Waren, `both` beides. |
| `settings` | CompanySettings | Die Firmendaten, wie die Einstellungen der App sie ändern, in der Form von `PATCH /api/company/`. |
| `smallBusiness` | boolean | Kleinunternehmer nach § 19 UStG: Rechnungen ohne Umsatzsteuer, kein Vorsteuerabzug. |
| `taxNumber` | string | Steuernummer wie auf der Rechnung. |
| `taxStatusHistory` | Array<TaxStatusPeriod> | Versteuerung je Zeitraum nach einem Wechsel, älteste zuerst. Jede Buchung und Rechnung behält den Status ihres Leistungsdatums. Fehlt die Liste, gilt die heutige Versteuerung von Anfang an. |
| `vatCashBasis` | boolean | `true` bei Ist-Versteuerung (nach vereinnahmten Entgelten, § 20 UStG). Fehlt bei der Soll-Versteuerung, dem Standard. Gilt nur mit Umsatzsteuer und lässt sich nur in der App ändern. |
| `vatId` | string | USt-IdNr. wie auf der Rechnung. |
| `version` | string | Version der Firmendaten; `PATCH /api/company/` nimmt sie unverändert als `expectedVersion`. |

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