Casts API

Casts endpoints in the Brix REST API: 3 operations (GET, POST), with auth, permissions and curl examples.

View as Markdown

Base URL https://api.brixsignage.com. Send Authorization: Bearer $BRIX_API_KEY unless an operation says No auth. The permission chip names what the key must hold. See Authentication and scopes, Errors and rate limits and Pagination.

GET/v1/casts

Bearer token screen.cast

List casts, which are timed content takeovers, newest first. Use ?status=active to filter to casts currently on air, and ?limit (up to 500, default 200) to bound the number of results. Cast history is kept indefinitely.

ParameterInTypeRequiredDescription
statusquery"active" | "cleared" | "expired"noOnly casts in this state.
limitqueryintegernoAt most this many, newest first (default 200, max 500).
curl "https://api.brixsignage.com/v1/casts" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataarray of Override
data[].idstringOverride (cast_… or emg_…) id.
data[].spaceIdstringWorkspace id.
data[].kind"emergency" | "cast"
data[].status"active" | "cleared" | "expired"
data[].severity"info" | "warning" | "critical"Always `info` for a cast.
data[].headlinestringAn emergency's message; for a cast, the content's name (or "Cast").
data[].bodystring | null
data[].contentKind"media" | "creative" | "playlist" | "app" | "schedule" | null
data[].contentIdstring | null
data[].scopeKind"all" | "node" | "screens"
data[].scopeNodeIdstring | nullThe location, when `scopeKind` is `node`.
data[].nodeIdstring | nullLocation the override is attributed to (null = workspace root).
data[].screenCountintegerScreens targeted, snapshotted when it started.
data[].triggeredBystringUser id, or `system`.
data[].triggeredAtstringISO-8601 timestamp (UTC).
data[].expiresAtstring | nullAuto-clear time; null = until cleared.
data[].clearedBystring | null
data[].clearedAtstring | null
data[].triggeredByNamestringDisplay name of `triggeredBy`.
data[].clearedByNamestring | null
data[].scopeNamestring | nullLocation name, `All screens`, or null for a screen list.
data[].confirmedCountinteger | nullActive emergencies only: screens confirmed showing it now. Null otherwise.
{
  "data": [
    {
      "id": "cast_9f2c4a1b7d3e5f60",
      "spaceId": "space_1a2b3c4d5e6f7a8b",
      "kind": "cast",
      "status": "active",
      "severity": "info",
      "headline": "Friday lunch special",
      "body": null,
      "contentKind": "media",
      "contentId": "med_0c1d2e3f4a5b6c7d",
      "scopeKind": "screens",
      "scopeNodeId": null,
      "nodeId": null,
      "screenCount": 2,
      "triggeredBy": "usr_5e6f7a8b9c0d1e2f",
      "triggeredAt": "2026-09-28T11:30:00.000Z",
      "expiresAt": "2026-09-28T13:30:00.000Z",
      "clearedBy": null,
      "clearedAt": null,
      "triggeredByName": "Sam Rivera",
      "clearedByName": null,
      "scopeName": null,
      "confirmedCount": null
    }
  ]
}

Response 401 Missing, expired or revoked bearer token.

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.

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

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.

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

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.

POST/v1/casts

Bearer token screen.cast

Put content on air across a set of screens for a period of time, after which the screens automatically revert to their normal content. Send contentKind (media, playlist, app, creative, or schedule), contentId, scopeKind, and optionally scopeNodeId, screenIds, and expiresAt. scopeKind accepts all, node, or screens and defaults to all: a request sent with no scope casts to every screen the caller can reach. An active emergency override takes priority over a cast, and the cast resumes automatically once the emergency is cleared. Puts one piece of content on the chosen screens now, above their schedule, until it expires or is cleared. An emergency still pre-empts a cast.

Request body application/json

FieldTypeRequiredDescription
contentKind"media" | "playlist" | "app" | "creative" | "schedule"yesWhat kind of thing `contentId` names.
contentIdstringyesThe media, playlist, app instance, creative or schedule to put on air.
contentNamestringnoLabel for the cast (shown in the console). Defaults to "Cast".
scopeKind"all" | "node" | "screens"noWhich screens: every screen you can reach (`all`), one location's subtree (`node`), or a list (`screens`). **Defaults to `all`: omit it and the cast goes to EVERY screen you can reach.**
scopeNodeIdstringnoLocation id, with `scopeKind: node`.
screenIdsarray of stringnoScreen ids, with `scopeKind: screens`.
expiresAtstring | number | nullnoWhen the cast ends by itself: ISO-8601 or epoch milliseconds. Omit or null to run until cleared.
curl -X POST "https://api.brixsignage.com/v1/casts" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contentKind":"media","contentId":"med_0c1d2e3f4a5b6c7d","contentName":"Friday lunch special","scopeKind":"screens","screenIds":["scr_1a2b3c4d5e6f7a8b","scr_2b3c4d5e6f7a8b9c"],"expiresAt":"2026-09-28T13:30:00.000Z"}'

Response 201 Success.

FieldTypeDescription
dataOverrideA cast or an emergency override.
data.idstringOverride (cast_… or emg_…) id.
data.spaceIdstringWorkspace id.
data.kind"emergency" | "cast"
data.status"active" | "cleared" | "expired"
data.severity"info" | "warning" | "critical"Always `info` for a cast.
data.headlinestringAn emergency's message; for a cast, the content's name (or "Cast").
data.bodystring | null
data.contentKind"media" | "creative" | "playlist" | "app" | "schedule" | null
data.contentIdstring | null
data.scopeKind"all" | "node" | "screens"
data.scopeNodeIdstring | nullThe location, when `scopeKind` is `node`.
data.nodeIdstring | nullLocation the override is attributed to (null = workspace root).
data.screenCountintegerScreens targeted, snapshotted when it started.
data.triggeredBystringUser id, or `system`.
data.triggeredAtstringISO-8601 timestamp (UTC).
data.expiresAtstring | nullAuto-clear time; null = until cleared.
data.clearedBystring | null
data.clearedAtstring | null
data.triggeredByNamestringDisplay name of `triggeredBy`.
data.clearedByNamestring | null
data.scopeNamestring | nullLocation name, `All screens`, or null for a screen list.
data.confirmedCountinteger | nullActive emergencies only: screens confirmed showing it now. Null otherwise.
{
  "data": {
    "id": "cast_9f2c4a1b7d3e5f60",
    "spaceId": "space_1a2b3c4d5e6f7a8b",
    "kind": "cast",
    "status": "active",
    "severity": "info",
    "headline": "Friday lunch special",
    "body": null,
    "contentKind": "media",
    "contentId": "med_0c1d2e3f4a5b6c7d",
    "scopeKind": "screens",
    "scopeNodeId": null,
    "nodeId": null,
    "screenCount": 2,
    "triggeredBy": "usr_5e6f7a8b9c0d1e2f",
    "triggeredAt": "2026-09-28T11:30:00.000Z",
    "expiresAt": "2026-09-28T13:30:00.000Z",
    "clearedBy": null,
    "clearedAt": null,
    "triggeredByName": "Sam Rivera",
    "clearedByName": null,
    "scopeName": null,
    "confirmedCount": null
  }
}

Response 401 Missing, expired or revoked bearer token.

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.

Response 403 `not_shared`: the content is not shared to one or more target locations.

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.

Response 404 The content does not exist in this workspace.

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.

Response 422 Invalid body, the scope matched no screens you can reach (`no_screens`), or the content cannot play (empty playlist, unprocessed media).

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.

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

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.

POST/v1/casts/{id}/clear

Bearer token screen.cast

End a cast immediately and return its screens to their scheduled content. Ends an active cast; its screens return to their scheduled content immediately.

ParameterInTypeRequiredDescription
idpathstringyesCast id.
curl -X POST "https://api.brixsignage.com/v1/casts/{id}/clear" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataOverrideA cast or an emergency override.
data.idstringOverride (cast_… or emg_…) id.
data.spaceIdstringWorkspace id.
data.kind"emergency" | "cast"
data.status"active" | "cleared" | "expired"
data.severity"info" | "warning" | "critical"Always `info` for a cast.
data.headlinestringAn emergency's message; for a cast, the content's name (or "Cast").
data.bodystring | null
data.contentKind"media" | "creative" | "playlist" | "app" | "schedule" | null
data.contentIdstring | null
data.scopeKind"all" | "node" | "screens"
data.scopeNodeIdstring | nullThe location, when `scopeKind` is `node`.
data.nodeIdstring | nullLocation the override is attributed to (null = workspace root).
data.screenCountintegerScreens targeted, snapshotted when it started.
data.triggeredBystringUser id, or `system`.
data.triggeredAtstringISO-8601 timestamp (UTC).
data.expiresAtstring | nullAuto-clear time; null = until cleared.
data.clearedBystring | null
data.clearedAtstring | null
data.triggeredByNamestringDisplay name of `triggeredBy`.
data.clearedByNamestring | null
data.scopeNamestring | nullLocation name, `All screens`, or null for a screen list.
data.confirmedCountinteger | nullActive emergencies only: screens confirmed showing it now. Null otherwise.

Response 401 Missing, expired or revoked bearer token.

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.

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

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.

Response 404 No such cast in this workspace.

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.

Response 409 `already_inactive`: the cast is already cleared or expired.

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.

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

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.