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

# Update a creative

`PATCH /v1/creatives/{id}`

## Request

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

Edit a creative. The boxes and scenes fields each replace the entire existing list, so retrieve the creative first and send back the complete array with changes included. If the location requires approval before content goes live, updating the creative resets that approval.

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

## Path parameters

- `id` string, required

## Request body

- object
  - `name` string
  - `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.
  - `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` Creative, required: A canvas design (data-bound boxes on a stage).
    - `id` string, required: Creative id.
    - `spaceId` string, required
    - `name` string, required
    - `backgroundUrl` string, nullable, required
    - `boxes` object[], required: The design's boxes (text, image, data-bound fields…), in paint order.
    - `dataSourceId` string, nullable, required: The data source the boxes bind to, if any.
    - `stage` string, nullable, required: Stage preset name.
    - `stageWidth` integer, nullable, required
    - `stageHeight` integer, nullable, required
    - `scenes` object[], required: Scenes, for a multi-scene design; often empty.
    - `touchEnabled` boolean, nullable, required
    - `pauseWhileUsed` boolean, nullable, required: Hold the playlist while something a tap opened is up. Null = true.
    - `nodeId` string, 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).
    - `sourceSignage` unknown, required
    - `look` unknown, required
    - `masterId` string, nullable, required: The master template id, for a design made from one.
    - `shareLockDefault` unknown, required
    - `shareEditsSkipApproval` boolean, required
    - `templateSource` unknown, required
    - `recalledAt` string, nullable, required: ISO-8601 timestamp (UTC).
    - `recalledBy` string, nullable, 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 creative.edit, changing `shareEditsSkipApproval` without `creative.approve`, or a new `dataSourceId` homed where you lack integration.view.
- `404`: No such creative (or `dataSourceId`) in this workspace.
- `409`: `conflict`: the row changed since `baseUpdatedAt`; the body carries `current`.
- `422`: Invalid JSON or malformed boxes, scenes or look.
- `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)
