Layout archivieren
Benötigte Berechtigung:layout:write(Layouts und Logo ändern)
Echte Wirkung
/api/layouts/{id}/archiveKein Testversand aus der Dokumentation: Dieser Aufruf ist nicht als rein lesend gekennzeichnet. Nutze das Codebeispiel.
Archiviert ein Layout, für das keine Belegart gilt, sonst 409 LayoutAssigned. Layouts werden nie gelöscht, ausgestellte Belege behalten ihre Version.
Benötigt einen Schlüssel mit der Berechtigung layout:write.
AuthentifizierungBearer <bm_…>Empfohlen: Authorization: Bearer bm_…. Der Schlüssel wird nur einmal angezeigt; nie in URLs, Logs oder Frontend-Code ablegen.
id*stringID des Layouts (UUID).
uuidIdempotency-Key*stringStabiler 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.
^[!-~]+$1 <= length <= 128Erfolg.
application/json- response
Ein Rechnungslayout.
appliesTo?array<string>|Belegarten, für die das Layout gilt; * für alle ohne eigenes. Leer, wenn es für keine gilt.
archivedAt?|Archiviert seit; null, solange nicht archiviert.
date-timeeditable?booleanFalse für das bisherige Layout classic: Es lässt sich nicht ändern.
id?stringID des Layouts (UUID); standard für das Layout einer Firma ohne eigenes.
module?stringModul mit Version, etwa modern@2. classic@1 ist das bisherige Layout ohne Einstellungen.
name?stringName, etwa „Angebote“.
own?booleanFalse, solange die Firma kein eigenes Layout hat; die erste Änderung legt es an.
spec?Die Gestaltung.
version?|Aktuelle Version; null ohne eigenes Layout.
curl --fail-with-body "https://app.bimetrics.de/api/layouts/497f6eca-6276-4993-bfeb-53cbbbba6f08/archive" -X POST \ -H "Authorization: Bearer $BIMETRICS_API_KEY" \ -H "Idempotency-Key: rechnung-2026-001"{ "appliesTo": [], "archivedAt": "2026-11-04T10:00:00Z", "editable": true, "id": "80beabd8-a0ea-4304-b6b3-6a7e9fa709c2", "module": "modern@2", "name": "Angebote (Kopie)", "own": true, "spec": { "blocks": {}, "brandColor": null, "module": "modern", "preset": "modern", "recipe": "friendly", "schema": 2, "values": { "footer.pageNumber": "auto", "footer.titles": false, "header.rule": false, "items.head.style": "brand", "page.margin.left": 25, "title.brand": true } }, "version": { "actor": { "membershipId": "53cd10a9-c864-4dc3-a777-9860d59efe6c", "name": "Jana Hansen" }, "check": "passed", "createdAt": "2026-11-04T10:15:00Z", "id": "3d9e1f4a-7b2c-4c8d-9e0f-1a2b3c4d5e6f", "number": 1, "origin": "api", "originRef": "e1c5d5b2-3f0e-4f43-9a7c-2b7f0d5c8a11", "parentId": null, "summary": "Dupliziert aus „Angebote“" }}Layout ändern PATCH
Ändert ein Layout wie der Editor: Alle Operationen zusammen ergeben eine neue Version. Sie gilt sofort für neue Belege und offene Entwürfe, ausgestellte Belege behalten ihre. Werte nur aus dem Katalog. Operationen: `set` (Eigenschaft `path` auf `value`, `null` setzt den Standard), `preset` und `recipe` (`id` aus dem Katalog), `brandColor` (Hausfarbe `#RRGGBB` oder `null`), `addBlock` (`kind`, `slot`, `position`), `moveBlock` (`id`, `slot`, `position`), `removeBlock` (`id`), `setBlockValue` (`id`, `path`, `value`), `setNote` (`id`, `text`), dazu jeweils allein `rename` (`name`, ohne neue Version) und `restore` (`version`). `baseVersionId` ist optional und empfohlen: Hat sich das Layout seit dem Lesen geändert, antwortet die Route mit `409 LayoutVersionConflict`. Ändern die Operationen nichts, entsteht keine Version. Höchstens 200 neue Versionen je Firma und Stunde, über App, API und MCP zusammen (`429 LayoutVersionLimit`). Idempotency-Key bei Wiederholung unverändert senden. Benötigt einen Schlüssel mit der Berechtigung `layout:write`.
Layout kopieren POST
Kopiert den aktuellen Stand eines Layouts in ein neues Layout „… (Kopie)“, das für keine Belegart gilt; zuweisen mit `assignLayouts`. Ein archiviertes Layout ergibt `404`. Benötigt einen Schlüssel mit der Berechtigung `layout:write`.