---
title: "Update a layout"
method: PATCH
path: "/v1/layouts/{id}"
tags: ["layouts"]
---

# Update a layout

`PATCH /v1/layouts/{id}`

## Request

- Base URL: `https://api.brixsignage.com`
- URL: `https://api.brixsignage.com/v1/layouts/{id}`
- Auth: HTTP bearer

Edit a layout's name, resolution, zones, `autoFullscreenForVideo`, node, or theme. Setting `theme` to `{ source: "brand", mode?, radius? }` turns the Brand Kit look on, and `null` turns it off. Zones accept a frame style (bare, card, accent, or glass), a radius, and a role of "logo". An invalid theme, or an unrecognized frame or role, returns 422.

**Notes.**
- The response is the stored row: it has no `usedByScreenCount` or `requiresApproval` (GET has them).

## Path parameters

- `id` string, required

## Request body

- object
  - `name` string
  - `resolution` object: Canvas size in pixels. Default 1920 x 1080.
    - `w` number, required
    - `h` number, required
  - `zones` LayoutZone[]: The whole zone list. Default: one full-canvas zone named Main.
    - `id` string, required
    - `name` string, required
    - `x` number, required: Left edge, in layout pixels.
    - `y` number, required
    - `w` number, required
    - `h` number, required
    - `locked` boolean, required
    - `contentName` string: Label of the bound content. Absent on the zone a new layout starts with.
    - `content` object, nullable: What the zone plays: a media file, playlist, schedule, app, web link or creative (`canvas`).
      - `kind` 'media' | 'playlist' | 'schedule' | 'app' | 'link' | 'canvas', required
      - `id` string, required
      - `name` string, required
    - `zIndex` number
    - `ownerScope` 'workspace' | 'org_unit' | 'location'
    - `ownerNodeId` string, nullable
    - `frame` 'bare' | 'card' | 'accent' | 'glass': Paint style on a themed layout.
    - `radius` number: Corner radius in layout pixels.
    - `role` 'logo': `logo`: the zone shows the Brand Kit logo instead of content.
  - `autoFullscreenForVideo` boolean, nullable
  - `nodeId` string, nullable: Home location. Default: the caller's own location.
  - `theme` object, nullable: Paint the layout in the workspace Brand Kit. `null` = a plain canvas.
    - `source` 'brand', required
    - `mode` 'dark' | 'light'
    - `radius` number
    - `wash` 'corner' | 'none'
  - `baseUpdatedAt` string: Optimistic concurrency: the `updatedAt` you read. A stale value is refused with 409 `conflict` and the `current` row.

## Response `200`

Success.

- object
  - `data` object, required
    - `id` string, required: Layout id.
    - `spaceId` string, required
    - `name` string, required
    - `resolution` object, required: Design canvas size in pixels.
      - `w` number, required
      - `h` number, required
    - `zones` object[], required: Zones: geometry, bound content, frame, radius and role. `GET /v1/layouts/{id}/zones` returns the same list.
    - `autoFullscreenForVideo` boolean, nullable, required
    - `approvalState` 'draft' | 'pending' | 'approved' | 'rejected', required: Review state. Editing an approved row returns it to `draft`.
    - `approvedSnapshot` string, nullable, required: JSON TEXT of the last approved version (not parsed).
    - `nodeId` string, nullable, required
    - `importSourceId` string, nullable, required
    - `theme` unknown, required
    - `createdAt` string, required: ISO-8601 timestamp (UTC).
    - `updatedAt` string, required: ISO-8601 timestamp (UTC).
    - `deletedAt` string, nullable, required: ISO-8601 timestamp (UTC).

## Other responses

- `401`: Missing, expired or revoked bearer token.
- `403`: Moving it to a location where you lack layout.edit, or zone content that is not usable there (`not_shared`).
- `404`: No such layout in this workspace.
- `409`: `conflict`: the row changed since `baseUpdatedAt`; the body carries `current`.
- `422`: Invalid JSON, a bad theme or zone paint, zone content that does not exist or loops back into this layout.
- `5XX`: Server error. The body carries a `requestId` to quote to support.

---

[API](https://skmtc.dev/brixsignage/apis/brix-api.md) · [All operations](https://skmtc.dev/brixsignage/apis/brix-api/llms.txt) · [OpenAPI document](https://skmtc.dev/brixsignage/apis/brix-api/revisions/02fd3665dc7d?raw)
