---
title: "Add a zone to a layout"
method: POST
path: "/v1/layouts/{id}/zones"
tags: ["layouts"]
---

# Add a zone to a layout

`POST /v1/layouts/{id}/zones`

## Request

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

Add one zone to a layout, specifying its geometry, the content attached to it, and, on a themed layout, its frame (bare, card, accent, or glass), radius, and role. A zone with role "logo" does not need content of its own.

**Notes.**
- Editing zones returns an approved layout to `draft` where approval is required.

## Path parameters

- `id` string, required

## Request body

- object
  - `name` string: Default `Zone <n>`.
  - `x` number: Default 0.
  - `y` number: Default 0.
  - `w` number: Default 480.
  - `h` number: Default 270.
  - `locked` boolean
  - `contentName` string
  - `content` object, nullable: What the zone plays. It must exist in this workspace, be usable at the layout's location, and not contain this layout.
    - `kind` 'media' | 'playlist' | 'schedule' | 'app' | 'link' | 'canvas', required
    - `id` string, required
    - `name` string
  - `ownerScope` 'workspace' | 'org_unit' | 'location'
  - `ownerNodeId` string, nullable
  - `frame` 'bare' | 'card' | 'accent' | 'glass'
  - `radius` number
  - `role` 'logo'

## Response `201`

Success.

- object
  - `data` object, required
    - `id` string, required: Layout id.
    - `zones` LayoutZone[], required: Every zone, in paint order.
      - `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.
    - `zone` LayoutZone, required: A zone. Open: a whole-array write (`PUT /v1/layouts/{id}/zones` with `zones`, or `PATCH /v1/layouts/{id}`) stores each zone as sent, so other keys come back too.
      - `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.

## Other responses

- `401`: Missing, expired or revoked bearer token.
- `403`: `not_shared`: the content is not usable at the layout's location.
- `404`: No such layout (or zone) in this workspace.
- `409`: `conflict`: the layout changed during the write three times running; retry.
- `422`: A bad frame, radius or role, content that does not exist, or zone content that plays this layout again (a loop).
- `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)
