Emergencies API

Emergencies endpoints in the Brix REST API: 5 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/emergencies

Bearer token emergency-override.view

List emergency overrides, newest first. Use ?status=active to filter to overrides currently taking over screens.

ParameterInTypeRequiredDescription
statusquery"active" | "cleared" | "expired"noOnly overrides in this state.
limitqueryintegernoAt most this many, newest first (default 200, max 500).
curl "https://api.brixsignage.com/v1/emergencies" \
  -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": "emg_4d5e6f7a8b9c0d1e",
      "spaceId": "space_1a2b3c4d5e6f7a8b",
      "kind": "emergency",
      "status": "active",
      "severity": "critical",
      "headline": "Evacuate the building now",
      "body": "Use the nearest exit. Do not use the lifts.",
      "contentKind": null,
      "contentId": null,
      "scopeKind": "all",
      "scopeNodeId": null,
      "nodeId": null,
      "screenCount": 42,
      "triggeredBy": "usr_5e6f7a8b9c0d1e2f",
      "triggeredAt": "2026-09-28T11:30:00.000Z",
      "expiresAt": null,
      "clearedBy": null,
      "clearedAt": null,
      "triggeredByName": "Sam Rivera",
      "clearedByName": null,
      "scopeName": "All screens",
      "confirmedCount": 0
    }
  ]
}

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/emergencies

Bearer token emergency-override.create

Trigger an emergency takeover across a set of screens. An emergency takes the highest priority and layers over each screen's normal content, so clearing it restores exactly what was playing before. Takes over the chosen screens now, above every schedule and cast, until cleared or expired. Clearing restores exactly what was playing. **Notes.** - The route is gated by emergency-override.create; the route registry's description names emergency-override.trigger, which is not a permission the API checks.

Request body application/json

FieldTypeRequiredDescription
headlinestringyesThe message on every targeted screen. Required, non-blank.
bodystringnoOptional second line.
severity"info" | "warning" | "critical"noDefault `critical`.
contentKind"media" | "creative"noAttach content to show under the banner. Needs `contentId`.
contentIdstringnoThe media or creative id. Needs `contentKind`.
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 emergency goes to EVERY screen you can reach.**
scopeNodeIdstringnoLocation id, with `scopeKind: node`.
screenIdsarray of stringnoScreen ids, with `scopeKind: screens`.
expiresAtstring | number | nullnoWhen it clears by itself: ISO-8601 or epoch milliseconds. Omit or null to run until cleared.
curl -X POST "https://api.brixsignage.com/v1/emergencies" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"headline":"Evacuate the building now","body":"Use the nearest exit. Do not use the lifts.","severity":"critical","scopeKind":"all"}'

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": "emg_4d5e6f7a8b9c0d1e",
    "spaceId": "space_1a2b3c4d5e6f7a8b",
    "kind": "emergency",
    "status": "active",
    "severity": "critical",
    "headline": "Evacuate the building now",
    "body": "Use the nearest exit. Do not use the lifts.",
    "contentKind": null,
    "contentId": null,
    "scopeKind": "all",
    "scopeNodeId": null,
    "nodeId": null,
    "screenCount": 42,
    "triggeredBy": "usr_5e6f7a8b9c0d1e2f",
    "triggeredAt": "2026-09-28T11:30:00.000Z",
    "expiresAt": null,
    "clearedBy": null,
    "clearedAt": null,
    "triggeredByName": "Sam Rivera",
    "clearedByName": null,
    "scopeName": "All screens",
    "confirmedCount": 0
  }
}

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 Missing headline, a half content pointer, a bad `expiresAt`, no reachable screens (`no_screens`), or content that cannot play (`content_unplayable`).

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.

GET/v1/emergencies/{id}

Bearer token emergency-override.view

Retrieve one emergency override, including its scope, content, and expiry.

ParameterInTypeRequiredDescription
idpathstringyesEmergency id.
curl "https://api.brixsignage.com/v1/emergencies/{id}" \
  -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 emergency in this workspace (or outside your 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 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/emergencies/{id}/clear

Bearer token emergency-override.create

Clear an active emergency override. This releases its screens back to their normal content, and the action is recorded in the activity log.

ParameterInTypeRequiredDescription
idpathstringyesEmergency id.
curl -X POST "https://api.brixsignage.com/v1/emergencies/{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 emergency 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`: 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.

POST/v1/emergencies/from-template/{templateId}

Bearer token emergency-override.create

Trigger an emergency using a stored template. Any scope or expiry sent with the request overrides the template's defaults. Fires a stored template. Scope and expiry given here override the template's defaults. Send {} to use the template as stored.

ParameterInTypeRequiredDescription
templateIdpathstringyesEmergency template id.

Request body application/json

FieldTypeRequiredDescription
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 emergency goes to EVERY screen you can reach.**
scopeNodeIdstringnoLocation id, with `scopeKind: node`.
screenIdsarray of stringnoScreen ids, with `scopeKind: screens`.
expiresAtstring | number | nullnoWhen it clears by itself: ISO-8601 or epoch milliseconds. Omit or null to run until cleared.
curl -X POST "https://api.brixsignage.com/v1/emergencies/from-template/{templateId}" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

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.

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 template's 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 No such template, or its content is gone.

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 Bad `expiresAt`, no reachable screens (`no_screens`), or content that cannot play.

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.