Creative overrides API

Creative overrides endpoints in the Brix REST API: 3 operations (GET, PUT, PATCH). Each lists its path, auth, required permission and a curl example.

View as Markdown · For AI agents: the full docs index is at /llms.txt

Base URL https://api.brixsignage.com. Send Authorization: Bearer $BRIX_API_KEY unless an operation says Auth: none or Auth: no API key. The Permission line names what the key must hold. See Authentication and scopes, Errors and rate limits and Pagination.

Every 4xx and 5xx response below returns this body:

FieldTypeDescription
errorstringMachine-readable code: unauthorized, forbidden, not_found, validation_error, conflict, rate_limited, internal_error, …
messagestringHuman-readable explanation. Safe to show an operator.
requestIdstringPresent on 5xx: quote it to support.

GET /v1/creative-overrides/{creativeId}

Auth: Bearer token. Permission: creative.view.

Return the edits a location has made to a creative that was shared with it, the merged result of applying those edits, and any edits that have stopped applying.

ParameterInTypeRequiredDescription
creativeIdpathstringyesCreative id: one of yours, or one shared into this workspace.
nodequerystringnoLocation id. Default: the workspace root.
viewquery"values"novalues: leave out creative and base (the two full designs) and add editable. For setting prices from a script or an AI tool.
curl "https://api.brixsignage.com/v1/creative-overrides/{creativeId}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200: Success.

FieldTypeDescription
dataobject
data.creativeIdstring
data.nodeIdstringThe location the edits apply at.
data.valuesobjectThe location's edits: box id → the box fields it changes (for example { "price": { "text": "13.00" } }).
data.overrideIdstring | nullId of the stored edits (what an approval request is opened against); null before the first save.
data.approvalState"draft" | "pending" | "approved" | "rejected"Review state of the edits (not of the design).
data.requiresApprovalbooleanThe location requires approval before the edits air.
data.skipsApprovalbooleanThe author waived that review for this design.
data.creativeOverrideCreativeA creative's design: the boxes and scenes with their settings.
data.creative.idstring
data.creative.nodeIdstring | null
data.creative.namestring
data.creative.backgroundUrlstring | null
data.creative.boxesarray of object
data.creative.scenesarray of object
data.creative.dataSourceIdstring | null
data.creative.stagestringAbsent when not set.
data.creative.shareLockDefaultany | null
data.creative.shareEditsSkipApprovalboolean
data.creative.stageWidthinteger
data.creative.stageHeightinteger
data.creative.touchEnabledboolean
data.creative.approvalState"draft" | "pending" | "approved" | "rejected"Review state. Editing an approved row returns it to draft.
data.creative.updatedAtstringISO-8601 timestamp (UTC).
data.orphanedBoxIdsarray of stringEdited box ids the design no longer has.
data.sharedFromstring | nullThe workspace that owns the design, when it was shared in from another workspace.
data.baseOverrideCreativeA creative's design: the boxes and scenes with their settings.
data.base.idstring
data.base.nodeIdstring | null
data.base.namestring
data.base.backgroundUrlstring | null
data.base.boxesarray of object
data.base.scenesarray of object
data.base.dataSourceIdstring | null
data.base.stagestringAbsent when not set.
data.base.shareLockDefaultany | null
data.base.shareEditsSkipApprovalboolean
data.base.stageWidthinteger
data.base.stageHeightinteger
data.base.touchEnabledboolean
data.base.approvalState"draft" | "pending" | "approved" | "rejected"Review state. Editing an approved row returns it to draft.
data.base.updatedAtstringISO-8601 timestamp (UTC).
data.editablearray of objectWith view=values: every text box the author left editable, with the text it shows now.
data.editable[].boxIdstring
data.editable[].namestring | null
data.editable[].textstring
data.rejectedFieldsarray of stringboxId.field edits that no longer apply because the author locked the field.
data.updatedAtstring | nullWhen the edits were last saved; null before the first save.

Response 401: Missing, expired or revoked bearer token.

Response 403: The token lacks the permission this operation needs (see x-brix-permission).

Response 404: Unknown location, no such creative, or the creative is not usable at that location.

Response 5XX: Server error. The body carries a requestId to quote to support.

PUT /v1/creative-overrides/{creativeId}

Auth: Bearer token. Permission: creative.edit.

Replace a location's edits to a shared creative. If the creative's author has locked a field against editing, the request is rejected with a 422 error for that field. Notes. - The response has no sharedFrom, base or rejectedFields (GET has them). A save returns approved edits to draft.

ParameterInTypeRequiredDescription
creativeIdpathstringyesCreative id: one of yours, or one shared into this workspace.
nodequerystringnoLocation id. Default: the workspace root.

Request body: application/json

FieldTypeRequiredDescription
valuesobjectyesEvery edit to keep, at most 300 boxes. Edits left out are removed.
curl -X PUT "https://api.brixsignage.com/v1/creative-overrides/{creativeId}" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200: Success.

FieldTypeDescription
dataobject
data.creativeIdstring
data.nodeIdstringThe location the edits apply at.
data.valuesobjectThe location's edits: box id → the box fields it changes (for example { "price": { "text": "13.00" } }).
data.overrideIdstring | nullId of the stored edits (what an approval request is opened against); null before the first save.
data.approvalState"draft" | "pending" | "approved" | "rejected"Review state of the edits (not of the design).
data.requiresApprovalbooleanThe location requires approval before the edits air.
data.skipsApprovalbooleanThe author waived that review for this design.
data.creativeOverrideCreativeA creative's design: the boxes and scenes with their settings.
data.creative.idstring
data.creative.nodeIdstring | null
data.creative.namestring
data.creative.backgroundUrlstring | null
data.creative.boxesarray of object
data.creative.scenesarray of object
data.creative.dataSourceIdstring | null
data.creative.stagestringAbsent when not set.
data.creative.shareLockDefaultany | null
data.creative.shareEditsSkipApprovalboolean
data.creative.stageWidthinteger
data.creative.stageHeightinteger
data.creative.touchEnabledboolean
data.creative.approvalState"draft" | "pending" | "approved" | "rejected"Review state. Editing an approved row returns it to draft.
data.creative.updatedAtstringISO-8601 timestamp (UTC).
data.orphanedBoxIdsarray of stringEdited box ids the design no longer has.
data.updatedAtstringISO-8601 timestamp (UTC).

Response 401: Missing, expired or revoked bearer token.

Response 403: You lack creative.edit at that location.

Response 404: Unknown location, no such creative, or the creative is not usable at that location.

Response 422: validation_error (bad values, more than 300 boxes, unknown box ids in unknownBoxes) or locked (fields the author locked, in violations).

Response 5XX: Server error. The body carries a requestId to quote to support.

PATCH /v1/creative-overrides/{creativeId}

Auth: Bearer token. Permission: creative.edit.

Change only the edits you name on a creative shared with a location, keeping every other edit. Send null for a box to remove its edits. Fields the creative's author locked are rejected with a 422 error. Notes. - Use this to set one price without resending the others. values in the response is every stored edit after the change. A save returns approved edits to draft.

ParameterInTypeRequiredDescription
creativeIdpathstringyesCreative id: one of yours, or one shared into this workspace.
nodequerystringnoLocation id. Default: the workspace root.

Request body: application/json

FieldTypeRequiredDescription
valuesobjectyesOnly the boxes to change, keyed by box id. A box's fields are layered over its stored edits; null removes that box's edits. Boxes left out keep their edits.
curl -X PATCH "https://api.brixsignage.com/v1/creative-overrides/{creativeId}" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200: Success.

FieldTypeDescription
dataobject
data.creativeIdstring
data.nodeIdstringThe location the edits apply at.
data.valuesobjectThe location's edits: box id → the box fields it changes (for example { "price": { "text": "13.00" } }).
data.overrideIdstring | nullId of the stored edits (what an approval request is opened against); null before the first save.
data.approvalState"draft" | "pending" | "approved" | "rejected"Review state of the edits (not of the design).
data.requiresApprovalbooleanThe location requires approval before the edits air.
data.skipsApprovalbooleanThe author waived that review for this design.
data.creativeOverrideCreativeA creative's design: the boxes and scenes with their settings.
data.creative.idstring
data.creative.nodeIdstring | null
data.creative.namestring
data.creative.backgroundUrlstring | null
data.creative.boxesarray of object
data.creative.scenesarray of object
data.creative.dataSourceIdstring | null
data.creative.stagestringAbsent when not set.
data.creative.shareLockDefaultany | null
data.creative.shareEditsSkipApprovalboolean
data.creative.stageWidthinteger
data.creative.stageHeightinteger
data.creative.touchEnabledboolean
data.creative.approvalState"draft" | "pending" | "approved" | "rejected"Review state. Editing an approved row returns it to draft.
data.creative.updatedAtstringISO-8601 timestamp (UTC).
data.orphanedBoxIdsarray of stringEdited box ids the design no longer has.
data.updatedAtstringISO-8601 timestamp (UTC).

Response 401: Missing, expired or revoked bearer token.

Response 403: You lack creative.edit at that location.

Response 404: Unknown location, no such creative, or the creative is not usable at that location.

Response 422: validation_error (bad values, more than 300 boxes in total, unknown box ids in unknownBoxes) or locked (fields the author locked, in violations).

Response 5XX: Server error. The body carries a requestId to quote to support.