# Vorschau rendern (https://developer.bimetrics.de/reference/layouts/preview-layout)

`POST https://app.bimetrics.de/api/layouts/preview`

operationId: `previewLayout` · Berechtigung (Scope): `sales:read` · Bereich: Layouts

Rendert ein Layout als SVG-Seiten und speichert nichts: das aktuelle Layout einer Belegart, eine Version (`versionId`) oder eine Gestaltung (`spec`), jeweils mit ungespeicherten Operationen (`operations`, wie bei `changeLayout`). Gezeigt wird ein Musterbeleg mit den Daten der Firma (`source.kind` `sample` mit `documentType` und `case` aus dem Katalog), ein eigener Entwurf (`draft` mit `documentType` und `id`) oder ein ausgestellter Beleg (`issued` mit `id`). Je Firma läuft eine Vorschau: Eine neuere, auch im Editor, beendet die ältere mit `409 PreviewSuperseded`. Eine ID einer anderen Firma ergibt `404 LayoutNotFound`. Es gelten dieselben Grenzen wie in der App, dazu 60 Aufrufe je Minute und Schlüssel.

Benötigt einen Schlüssel mit der Berechtigung `sales:read` oder `read`.

### Authentifizierung

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

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

Optional `versionId` oder `spec`, nicht beides; ohne beide das aktuelle Layout der Belegart. Optional `operations` (höchstens 20) und `source`, ohne `source` ein Muster der Rechnung.



### Beispiel

```sh
curl --fail-with-body "https://app.bimetrics.de/api/layouts/preview" \
  -H "Authorization: Bearer $BIMETRICS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"operations":[{"op":"set","path":"header.logo.size","value":"L"},{"op":"brandColor","value":"#1F5F5B"}],"source":{"case":"standard","documentType":"invoice","kind":"sample"}}'
```

### Antworten

| Status | Beschreibung | Inhalt |
| --- | --- | --- |
| 200 | Erfolg. | `application/json`: LayoutPreview |
| 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 | Eine neuere Vorschau der Firma, auch im Editor der App, hat diese beendet (`PreviewSuperseded`). Bei Bedarf erneut senden. | `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 (`LayoutPreview`)

| Feld | Typ | Beschreibung |
| --- | --- | --- |
| `notice` | string: `amounts_differ` | `amounts_differ`: Ein ausgestellter Beleg zeigt eine andere Summe als gespeichert, etwa bei alten Angeboten. Der Beleg selbst bleibt, wie er ist. |
| `pages` | Array<string>, kann null sein | Die Seiten als SVG. |
| `version` | LayoutPreviewVersion | Die gezeigte gespeicherte Version; `null` mit `spec`, mit ungespeicherten Operationen oder ohne eigenes Layout. |

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