---
title: "Create a creative"
method: POST
path: "/v1/creatives"
tags: ["creatives"]
---

# Create a creative

`POST /v1/creatives`

## Request

- Base URL: `https://api.brixsignage.com`
- URL: `https://api.brixsignage.com/v1/creatives`
- Auth: HTTP bearer

Create a canvas creative. Accepts name and optional boxes, scenes, stageWidth, stageHeight, backgroundUrl, dataSourceId, touchEnabled, nodeId, and masterId. Safe to retry with the same Idempotency-Key header without creating duplicates.

**Notes.**
- The 201 body is the row as written, not re-read from the database, so columns the create does not set (for example `lastSnapshotAt`) are absent rather than null. `GET` returns every column.
- Send an `Idempotency-Key` header to make a retry safe.

## Request body

- object
  - `name` string, required
  - `backgroundUrl` string, nullable: An unsafe URL scheme is stored as null.
  - `boxes` object[]: The whole box list; each box is checked and filled out with defaults. Default `[]`.
  - `dataSourceId` string, nullable: A data source in this workspace.
  - `stage` string, nullable
  - `stageWidth` integer, nullable
  - `stageHeight` integer, nullable
  - `scenes` object[]: Default `[]`.
  - `touchEnabled` boolean, nullable
  - `pauseWhileUsed` boolean, nullable: Hold the playlist while something a tap opened is up. Null = true.
  - `nodeId` string, nullable: Home location. Default: the caller's own location.
  - `sourceSignage` unknown
  - `masterId` string, nullable: The master template it was made from (`GET /v1/signage-master-templates`).
  - `shareLockDefault` unknown
  - `shareEditsSkipApproval` boolean: Recipients' edits air without review. Needs `creative.approve`.
  - `look` object, nullable: Look of a Brix Template design. `null` clears it.
    - `design` 'brix-sidebar' | 'brix-header' | 'brix-cinema' | 'brix-welcome', required
    - `source` 'brand' | 'custom', required
    - `style` 'flat' | 'panels' | 'deep', required
    - `accent` string: `#rrggbb`.
    - `accent2` string: `#rrggbb`.
    - `mode` 'dark' | 'light'
  - `templateSource` object, nullable: The fill-in form behind a design made from a new template (template id, data, look). Editor state only. `null` clears it.

## Response `201`

Success.

- object
  - `data` object, required
    - `id` string, required: Creative id.
    - `spaceId` string, required
    - `name` string, required
    - `backgroundUrl` string, nullable
    - `boxes` object[], required: The design's boxes (text, image, data-bound fields…), in paint order.
    - `dataSourceId` string, nullable: The data source the boxes bind to, if any.
    - `stage` string, nullable: Stage preset name.
    - `stageWidth` integer, nullable
    - `stageHeight` integer, nullable
    - `scenes` object[], required: Scenes, for a multi-scene design; often empty.
    - `touchEnabled` boolean, nullable
    - `pauseWhileUsed` boolean, nullable: Hold the playlist while something a tap opened is up. Null = true.
    - `nodeId` string, nullable
    - `approvalState` 'draft' | 'pending' | 'approved' | 'rejected': Review state. Editing an approved row returns it to `draft`.
    - `approvedSnapshot` string, nullable: JSON TEXT of the last approved version (not parsed).
    - `sourceSignage` unknown
    - `look` unknown
    - `masterId` string, nullable: The master template id, for a design made from one.
    - `shareLockDefault` unknown
    - `shareEditsSkipApproval` boolean
    - `templateSource` unknown
    - `recalledAt` string, nullable: ISO-8601 timestamp (UTC).
    - `recalledBy` string, nullable
    - `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`: Setting `shareEditsSkipApproval` without `creative.approve`, or a `dataSourceId` homed where you lack integration.view.
- `404`: `dataSourceId` names no data source in this workspace.
- `422`: Missing name, invalid JSON, malformed boxes, scenes or look, or a location outside this workspace.
- `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)
