Screens API

Screens endpoints in the Brix REST API: 47 operations (GET, POST, PATCH, DELETE), 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/screens

Bearer token screen.view

List the screens in your workspace, including each screen's organization node, assigned content, online status, and player settings. Pass limit (and optionally cursor) to page through results; without limit, the full list is returned. Results are limited to the organization nodes you can see. **Notes.** - The state object is a lean subset here (connection, currentContent, cache, proof, sync, telemetry.identity/display); GET /v1/screens/{id} returns the full snapshot. - nextCursor is a screen id (keyset by id), not the base64 cursor the shared resource routes use.

ParameterInTypeRequiredDescription
limitqueryintegernoPage size (max 500). Omit to get every screen.
cursorquerystringnoThe `nextCursor` of the previous page (a screen id).
curl "https://api.brixsignage.com/v1/screens" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataarray of Screen
data[].idstringScreen id.
data[].spaceIdstringWorkspace id.
data[].nodeIdstring | nullLocation (org node) the screen belongs to; null = workspace root.
data[].namestring
data[].status"online" | "offline" | "pairing"`pairing` = no device has checked in yet.
data[].lastSeenAtstring | nullLast heartbeat or socket ping reply, whichever is later.
data[].coreUpdateOfferedAtstring | null
data[].contentKind"playlist" | "schedule" | "layout" | "creative" | "app" | "media" | "signage" | nullWhat is assigned. Null = nothing assigned.
data[].contentIdstring | null
data[].contentFitnullRetired; always null. Fit is set on the content.
data[].deactivatedAtstring | nullSet while an operator has deactivated the screen.
data[].tagsarray of string
data[].rotationinteger0, 90, 180 or 270 degrees.
data[].rotationCommandedAtstring | null
data[].timezonestring | nullIANA time zone; null = inherited.
data[].timezoneSource"operator" | "device" | null
data[].operatingHoursstring`default`, or a JSON-encoded weekly window.
data[].lastPanelCommandstring | null
data[].scheduleScreensOffboolean
data[].displayPowerMode"always-on" | "follow-schedule" | "os-default"
data[].playbackMode"sync" | "unsync" | "device-time"
data[].locationLabelstring | null
data[].locationLatnumber | null
data[].locationLngnumber | null
data[].ipCitystring | null
data[].ipRegionstring | null
data[].ipCountrystring | null
data[].ipLatnumber | null
data[].ipLngnumber | null
data[].ipTimezonestring | null
data[].ipGeoAtstring | null
data[].playerSettingsstring | nullPlayer settings as a JSON-ENCODED string (not an object).
data[].kioskEnabledboolean
data[].kioskPinMode"workspace" | "custom"
data[].kioskGraceSecondsinteger
data[].activeEmergencyIdstring | nullThe live emergency overriding this screen, if any.
data[].activeCastIdstring | nullThe live cast overriding this screen, if any.
data[].playerVersionHoldstring | null
data[].sealedboolean
data[].sealedAtstring | null
data[].powerPolicyIdstring | null
data[].importSourceIdstring | null
data[].billingGroupIdstring | null
data[].customFieldsstring | nullCustom fields as a JSON-ENCODED string.
data[].lanSecretAtstring | nullWhen the local-trigger key was last set or rotated. The key itself is never returned.
data[].createdAtstringISO-8601 timestamp (UTC).
data[].updatedAtstringISO-8601 timestamp (UTC).
data[].deletedAtstring | null
data[].locationobject | null
data[].deviceClaimedbooleanStatus is `pairing` but a device has claimed it and not yet checked in.
data[].nodeNamestring | null
data[].groupIdsarray of stringScreen groups this screen is in.
data[].contentNamestring | null
data[].contentSharedFromstring | nullName of the workspace that shared the assigned content in; null when it is this workspace's own.
data[].thumbnailUrlstring | nullPreview of the assigned content.
data[].contentAppKeystring | null
data[].contentMediaKindstring | null
data[].contentStateobject | nullAssigned media that is not playable yet (processing, failed, needs_action); null otherwise.
data[].contentOrientation"portrait" | "landscape" | "adaptive" | null
data[].liveThumbnailAtstring | nullCapture time of the latest live frame (GET /v1/screens/{id}/live-thumbnail).
data[].liveThumbnailFreshAtstring | null
data[].currentContentKind"image" | "video" | "stream" | null
data[].currentContentPosterUrlstring | null
data[].emergencyHeadlinestring | null
data[].castHeadlinestring | null
data[].castStartedAtstring | null
data[].castExpiresAtstring | null
data[].castContentKindstring | null
data[].castContentIdstring | null
data[].kioskHasCustomPinboolean
data[].kioskHasRecoveryboolean
data[].obscuredSincestring | nullA system dialog is covering the screen since this time.
data[].pixelHealth"ok" | "frozen" | "blank" | null
data[].displayOffSincestring | null
data[].displayOffReason"standby" | "wrong-input" | "disconnected" | null
data[].expectedDarkobject
data[].expectedDark.darkbooleanTrue when the rules say the panel should be off now.
data[].expectedDark.reason"schedule-block" | "power-policy" | "operating-hours" | null
data[].expectedDark.nextOpenobject | null
data[].expectedDark.minutesSinceOpennumber | null
data[].expectedDark.minutesSinceClosenumber | null
data[].accountHoldobject | null
data[].outageSummary30dobject | null
data[].linkFlaps10mintegerSocket link flips in the last ten minutes; present only when > 0 (list and get).
data[].stateobject | nullThe device's last reported state (`updatedAt` plus the heartbeat snapshot). The list returns a lean subset; get and PATCH return it all. Null before the first heartbeat.
nextCursorstring | nullPresent only when `limit` was passed; null on the last page.
{
  "data": [
    {
      "id": "scr_1a2b3c4d5e6f7a8b",
      "spaceId": "space_1a2b3c4d5e6f7a8b",
      "nodeId": "node_4c5d6e7f8a9b0c1d",
      "name": "Lobby",
      "status": "online",
      "lastSeenAt": "2026-09-28T11:58:00.000Z",
      "coreUpdateOfferedAt": null,
      "contentKind": "playlist",
      "contentId": "pl_9a8b7c6d5e4f3a2b",
      "contentFit": null,
      "deactivatedAt": null,
      "tags": [
        "lobby"
      ],
      "rotation": 0,
      "rotationCommandedAt": null,
      "timezone": "Europe/London",
      "timezoneSource": "operator",
      "operatingHours": "default",
      "lastPanelCommand": null,
      "scheduleScreensOff": false,
      "displayPowerMode": "always-on",
      "playbackMode": "unsync",
      "locationLabel": null,
      "locationLat": null,
      "locationLng": null,
      "ipCity": "London",
      "ipRegion": "England",
      "ipCountry": "GB",
      "ipLat": 51.5,
      "ipLng": -0.12,
      "ipTimezone": "Europe/London",
      "ipGeoAt": "2026-09-01T09:00:00.000Z",
      "playerSettings": null,
      "kioskEnabled": false,
      "kioskPinMode": "workspace",
      "kioskGraceSeconds": 30,
      "activeEmergencyId": null,
      "activeCastId": null,
      "playerVersionHold": null,
      "sealed": false,
      "sealedAt": null,
      "powerPolicyId": null,
      "importSourceId": null,
      "billingGroupId": null,
      "customFields": null,
      "lanSecretAt": null,
      "createdAt": "2026-09-01T09:00:00.000Z",
      "updatedAt": "2026-09-28T11:58:00.000Z",
      "deletedAt": null,
      "location": null,
      "deviceClaimed": false,
      "nodeName": "Head office",
      "groupIds": [],
      "contentName": "Lobby loop",
      "contentSharedFrom": null,
      "thumbnailUrl": null,
      "contentAppKey": null,
      "contentMediaKind": null,
      "contentState": null,
      "contentOrientation": "landscape",
      "liveThumbnailAt": "2026-09-28T11:45:00.000Z",
      "liveThumbnailFreshAt": "2026-09-28T11:57:00.000Z",
      "currentContentKind": "image",
      "currentContentPosterUrl": null,
      "emergencyHeadline": null,
      "castHeadline": null,
      "castStartedAt": null,
      "castExpiresAt": null,
      "castContentKind": null,
      "castContentId": null,
      "kioskHasCustomPin": false,
      "kioskHasRecovery": false,
      "obscuredSince": null,
      "pixelHealth": "ok",
      "displayOffSince": null,
      "displayOffReason": null,
      "expectedDark": {
        "dark": false,
        "reason": null,
        "nextOpen": null,
        "minutesSinceOpen": null,
        "minutesSinceClose": null
      },
      "accountHold": null,
      "outageSummary30d": null,
      "state": {
        "updatedAt": "2026-09-28T11:58:00.000Z",
        "connection": "online",
        "currentContent": {
          "kind": "playlist",
          "id": "pl_9a8b7c6d5e4f3a2b"
        }
      }
    }
  ]
}

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

Bearer token screen.create

Create a screen. name is required; nodeId, location, and tags are optional. This operation is safe to retry with an idempotency key. Each screen created increases your billed screen count, so this request is refused if your account is suspended or cancelled. **Notes.** - Returns the stored row, not the composed Screen that GET /v1/screens/{id} returns: tags is the JSON-encoded string, and the composed fields (contentName, state, …) are absent. - The screen waits in pairing status until a device claims it (POST /v1/screens/{id}/claim-replacement) — or use POST /v1/screens/claim or /v1/screens/enroll, which create and pair in one step.

Request body application/json

FieldTypeRequiredDescription
namestringyes
nodeIdstringnoLocation to create it in; default: the API key's own location, else the workspace root.
billingGroupIdstring | nullnoBilling group that pays for the screen.
curl -X POST "https://api.brixsignage.com/v1/screens" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 201 Success.

FieldTypeDescription
dataScreenRowA screen as stored, before composition.
data.idstringScreen id.
data.spaceIdstringWorkspace id.
data.nodeIdstring | nullLocation (org node) the screen belongs to; null = workspace root.
data.namestring
data.status"online" | "offline" | "pairing"`pairing` = no device has checked in yet.
data.lastSeenAtstring | nullLast heartbeat or socket ping reply, whichever is later.
data.coreUpdateOfferedAtstring | null
data.contentKind"playlist" | "schedule" | "layout" | "creative" | "app" | "media" | "signage" | nullWhat is assigned. Null = nothing assigned.
data.contentIdstring | null
data.contentFitnullRetired; always null. Fit is set on the content.
data.deactivatedAtstring | nullSet while an operator has deactivated the screen.
data.rotationinteger0, 90, 180 or 270 degrees.
data.rotationCommandedAtstring | null
data.timezonestring | nullIANA time zone; null = inherited.
data.timezoneSource"operator" | "device" | null
data.operatingHoursstring`default`, or a JSON-encoded weekly window.
data.lastPanelCommandstring | null
data.scheduleScreensOffboolean
data.displayPowerMode"always-on" | "follow-schedule" | "os-default"
data.playbackMode"sync" | "unsync" | "device-time"
data.locationLabelstring | null
data.locationLatnumber | null
data.locationLngnumber | null
data.ipCitystring | null
data.ipRegionstring | null
data.ipCountrystring | null
data.ipLatnumber | null
data.ipLngnumber | null
data.ipTimezonestring | null
data.ipGeoAtstring | null
data.playerSettingsstring | nullPlayer settings as a JSON-ENCODED string (not an object).
data.kioskEnabledboolean
data.kioskPinMode"workspace" | "custom"
data.kioskGraceSecondsinteger
data.activeEmergencyIdstring | nullThe live emergency overriding this screen, if any.
data.activeCastIdstring | nullThe live cast overriding this screen, if any.
data.playerVersionHoldstring | null
data.sealedboolean
data.sealedAtstring | null
data.powerPolicyIdstring | null
data.importSourceIdstring | null
data.billingGroupIdstring | null
data.customFieldsstring | nullCustom fields as a JSON-ENCODED string.
data.lanSecretAtstring | nullWhen the local-trigger key was last set or rotated. The key itself is never returned.
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.deletedAtstring | null
data.tagsstringTags as a JSON-ENCODED array string (the stored column), not an array.

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 The location does not exist.

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 The account is suspended or cancelled.

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 `name` is missing.

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/screens/{id}

Bearer token screen.view

Get one screen, with the same detail included in the screen list. A screen outside your organization scope returns a not-found error rather than a permission error.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataScreenA screen, composed with its content, live state and health facts.
data.idstringScreen id.
data.spaceIdstringWorkspace id.
data.nodeIdstring | nullLocation (org node) the screen belongs to; null = workspace root.
data.namestring
data.status"online" | "offline" | "pairing"`pairing` = no device has checked in yet.
data.lastSeenAtstring | nullLast heartbeat or socket ping reply, whichever is later.
data.coreUpdateOfferedAtstring | null
data.contentKind"playlist" | "schedule" | "layout" | "creative" | "app" | "media" | "signage" | nullWhat is assigned. Null = nothing assigned.
data.contentIdstring | null
data.contentFitnullRetired; always null. Fit is set on the content.
data.deactivatedAtstring | nullSet while an operator has deactivated the screen.
data.tagsarray of string
data.rotationinteger0, 90, 180 or 270 degrees.
data.rotationCommandedAtstring | null
data.timezonestring | nullIANA time zone; null = inherited.
data.timezoneSource"operator" | "device" | null
data.operatingHoursstring`default`, or a JSON-encoded weekly window.
data.lastPanelCommandstring | null
data.scheduleScreensOffboolean
data.displayPowerMode"always-on" | "follow-schedule" | "os-default"
data.playbackMode"sync" | "unsync" | "device-time"
data.locationLabelstring | null
data.locationLatnumber | null
data.locationLngnumber | null
data.ipCitystring | null
data.ipRegionstring | null
data.ipCountrystring | null
data.ipLatnumber | null
data.ipLngnumber | null
data.ipTimezonestring | null
data.ipGeoAtstring | null
data.playerSettingsstring | nullPlayer settings as a JSON-ENCODED string (not an object).
data.kioskEnabledboolean
data.kioskPinMode"workspace" | "custom"
data.kioskGraceSecondsinteger
data.activeEmergencyIdstring | nullThe live emergency overriding this screen, if any.
data.activeCastIdstring | nullThe live cast overriding this screen, if any.
data.playerVersionHoldstring | null
data.sealedboolean
data.sealedAtstring | null
data.powerPolicyIdstring | null
data.importSourceIdstring | null
data.billingGroupIdstring | null
data.customFieldsstring | nullCustom fields as a JSON-ENCODED string.
data.lanSecretAtstring | nullWhen the local-trigger key was last set or rotated. The key itself is never returned.
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.deletedAtstring | null
data.locationobject | null
data.deviceClaimedbooleanStatus is `pairing` but a device has claimed it and not yet checked in.
data.nodeNamestring | null
data.groupIdsarray of stringScreen groups this screen is in.
data.contentNamestring | null
data.contentSharedFromstring | nullName of the workspace that shared the assigned content in; null when it is this workspace's own.
data.thumbnailUrlstring | nullPreview of the assigned content.
data.contentAppKeystring | null
data.contentMediaKindstring | null
data.contentStateobject | nullAssigned media that is not playable yet (processing, failed, needs_action); null otherwise.
data.contentOrientation"portrait" | "landscape" | "adaptive" | null
data.liveThumbnailAtstring | nullCapture time of the latest live frame (GET /v1/screens/{id}/live-thumbnail).
data.liveThumbnailFreshAtstring | null
data.currentContentKind"image" | "video" | "stream" | null
data.currentContentPosterUrlstring | null
data.emergencyHeadlinestring | null
data.castHeadlinestring | null
data.castStartedAtstring | null
data.castExpiresAtstring | null
data.castContentKindstring | null
data.castContentIdstring | null
data.kioskHasCustomPinboolean
data.kioskHasRecoveryboolean
data.obscuredSincestring | nullA system dialog is covering the screen since this time.
data.pixelHealth"ok" | "frozen" | "blank" | null
data.displayOffSincestring | null
data.displayOffReason"standby" | "wrong-input" | "disconnected" | null
data.expectedDarkobject
data.expectedDark.darkbooleanTrue when the rules say the panel should be off now.
data.expectedDark.reason"schedule-block" | "power-policy" | "operating-hours" | null
data.expectedDark.nextOpenobject | null
data.expectedDark.minutesSinceOpennumber | null
data.expectedDark.minutesSinceClosenumber | null
data.accountHoldobject | null
data.outageSummary30dobject | null
data.linkFlaps10mintegerSocket link flips in the last ten minutes; present only when > 0 (list and get).
data.stateobject | nullThe device's last reported state (`updatedAt` plus the heartbeat snapshot). The list returns a lean subset; get and PATCH return it all. Null before the first heartbeat.

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 screen 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 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.

PATCH/v1/screens/{id}

Bearer token screen.edit

Update a screen's own fields, including name, location, tags, orientation, organization node, and player settings. This endpoint does not assign content; use POST /v1/screens/:id/assign to change what a screen plays. Partial update. To change what a screen plays use POST /v1/screens/{id}/assign — this route refuses contentKind/contentId with a 400. **Notes.** - The PATCH response does not merge the live socket facts (linkFlaps10m, a socket-fresh lastSeenAt) that GET adds.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.

Request body application/json

FieldTypeRequiredDescription
namestringno
nodeIdstring | nullnoMove to another location (you need screen.edit there too).
billingGroupIdstring | nullnoNeeds billing.edit.
status"online" | "offline" | "pairing"no
tagsarray of stringno
rotation0 | 90 | 180 | 270no
timezonestring | nullnoIANA time zone; null to inherit.
operatingHoursstringno
displayPowerMode"always-on" | "follow-schedule" | "os-default"no
powerPolicyIdstring | nullno
playbackMode"sync" | "unsync" | "device-time"no
locationobject | nullno
deactivatedbooleannoTrue deactivates the screen (nothing plays); false reactivates it.
playerVersionHoldboolean | string | nullno
playerSettingsobject | nullnoMerged into the current settings; null resets them.
customFieldsobject | nullno
kioskPinMode"workspace" | "custom"no
kioskGraceSecondsnumberno
kioskPinstring | nullno4-8 digits; null clears the custom PIN.
kioskEnabledbooleanno
curl -X PATCH "https://api.brixsignage.com/v1/screens/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200 Success.

FieldTypeDescription
dataScreenA screen, composed with its content, live state and health facts.
data.idstringScreen id.
data.spaceIdstringWorkspace id.
data.nodeIdstring | nullLocation (org node) the screen belongs to; null = workspace root.
data.namestring
data.status"online" | "offline" | "pairing"`pairing` = no device has checked in yet.
data.lastSeenAtstring | nullLast heartbeat or socket ping reply, whichever is later.
data.coreUpdateOfferedAtstring | null
data.contentKind"playlist" | "schedule" | "layout" | "creative" | "app" | "media" | "signage" | nullWhat is assigned. Null = nothing assigned.
data.contentIdstring | null
data.contentFitnullRetired; always null. Fit is set on the content.
data.deactivatedAtstring | nullSet while an operator has deactivated the screen.
data.tagsarray of string
data.rotationinteger0, 90, 180 or 270 degrees.
data.rotationCommandedAtstring | null
data.timezonestring | nullIANA time zone; null = inherited.
data.timezoneSource"operator" | "device" | null
data.operatingHoursstring`default`, or a JSON-encoded weekly window.
data.lastPanelCommandstring | null
data.scheduleScreensOffboolean
data.displayPowerMode"always-on" | "follow-schedule" | "os-default"
data.playbackMode"sync" | "unsync" | "device-time"
data.locationLabelstring | null
data.locationLatnumber | null
data.locationLngnumber | null
data.ipCitystring | null
data.ipRegionstring | null
data.ipCountrystring | null
data.ipLatnumber | null
data.ipLngnumber | null
data.ipTimezonestring | null
data.ipGeoAtstring | null
data.playerSettingsstring | nullPlayer settings as a JSON-ENCODED string (not an object).
data.kioskEnabledboolean
data.kioskPinMode"workspace" | "custom"
data.kioskGraceSecondsinteger
data.activeEmergencyIdstring | nullThe live emergency overriding this screen, if any.
data.activeCastIdstring | nullThe live cast overriding this screen, if any.
data.playerVersionHoldstring | null
data.sealedboolean
data.sealedAtstring | null
data.powerPolicyIdstring | null
data.importSourceIdstring | null
data.billingGroupIdstring | null
data.customFieldsstring | nullCustom fields as a JSON-ENCODED string.
data.lanSecretAtstring | nullWhen the local-trigger key was last set or rotated. The key itself is never returned.
data.createdAtstringISO-8601 timestamp (UTC).
data.updatedAtstringISO-8601 timestamp (UTC).
data.deletedAtstring | null
data.locationobject | null
data.deviceClaimedbooleanStatus is `pairing` but a device has claimed it and not yet checked in.
data.nodeNamestring | null
data.groupIdsarray of stringScreen groups this screen is in.
data.contentNamestring | null
data.contentSharedFromstring | nullName of the workspace that shared the assigned content in; null when it is this workspace's own.
data.thumbnailUrlstring | nullPreview of the assigned content.
data.contentAppKeystring | null
data.contentMediaKindstring | null
data.contentStateobject | nullAssigned media that is not playable yet (processing, failed, needs_action); null otherwise.
data.contentOrientation"portrait" | "landscape" | "adaptive" | null
data.liveThumbnailAtstring | nullCapture time of the latest live frame (GET /v1/screens/{id}/live-thumbnail).
data.liveThumbnailFreshAtstring | null
data.currentContentKind"image" | "video" | "stream" | null
data.currentContentPosterUrlstring | null
data.emergencyHeadlinestring | null
data.castHeadlinestring | null
data.castStartedAtstring | null
data.castExpiresAtstring | null
data.castContentKindstring | null
data.castContentIdstring | null
data.kioskHasCustomPinboolean
data.kioskHasRecoveryboolean
data.obscuredSincestring | nullA system dialog is covering the screen since this time.
data.pixelHealth"ok" | "frozen" | "blank" | null
data.displayOffSincestring | null
data.displayOffReason"standby" | "wrong-input" | "disconnected" | null
data.expectedDarkobject
data.expectedDark.darkbooleanTrue when the rules say the panel should be off now.
data.expectedDark.reason"schedule-block" | "power-policy" | "operating-hours" | null
data.expectedDark.nextOpenobject | null
data.expectedDark.minutesSinceOpennumber | null
data.expectedDark.minutesSinceClosenumber | null
data.accountHoldobject | null
data.outageSummary30dobject | null
data.linkFlaps10mintegerSocket link flips in the last ten minutes; present only when > 0 (list and get).
data.stateobject | nullThe device's last reported state (`updatedAt` plus the heartbeat snapshot). The list returns a lean subset; get and PATCH return it all. Null before the first heartbeat.

Response 400 The body tried to set content (use POST /v1/screens/{id}/assign).

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 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 screen (or destination location/billing group) 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 status, rotation, time zone or PIN.

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.

DELETE/v1/screens/{id}

Bearer token screen.delete

Delete a screen. It moves to the 30-day recovery window, and its paired device is unpaired so the player shows its pairing screen. An optional reason field is recorded in the activity log. Soft-deletes the screen to the recycle bin (restorable for 30 days) and releases its device, which returns to the pairing screen.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl -X DELETE "https://api.brixsignage.com/v1/screens/{id}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.idstring
data.deletedtrue

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 screen 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 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/screens/{id}/assign

Bearer token screen.cast

Assign content to a screen using contentKind and contentId. Pass null to clear the current assignment. The content is validated to confirm it exists, can be used at the screen's organization node, and has no unfilled layout zones, before the screen is updated to play it. Assigns content to one screen (null clears it). The screen is told to reload immediately.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.

Request body application/json

FieldTypeRequiredDescription
contentKind"playlist" | "schedule" | "layout" | "creative" | "app" | "media" | "signage" | nullyesWhat to assign; null clears the assignment.
contentIdstringnoRequired unless `contentKind` is null.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/assign" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contentKind":"playlist","contentId":"pl_9a8b7c6d5e4f3a2b"}'

Response 200 Success.

FieldTypeDescription
dataobject
data.idstring
data.contentKind"playlist" | "schedule" | "layout" | "creative" | "app" | "media" | "signage" | null
data.contentIdstring | null
{
  "data": {
    "id": "scr_1a2b3c4d5e6f7a8b",
    "contentKind": "playlist",
    "contentId": "pl_9a8b7c6d5e4f3a2b"
  }
}

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 this screen's location.

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 screen or content 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 kind, a layout with unbound zones, or content that 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/screens/{id}/claim-replacement

Bearer token screen.edit

Bind a new device, identified by the 6-digit pairing code it is displaying, to an existing screen. The screen keeps its identity, assigned content, and history. This endpoint is rate-limited because the pairing code is a small, guessable value.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.

Request body application/json

FieldTypeRequiredDescription
codestringyesThe 6-digit code the new device shows.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/claim-replacement" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200 Success.

FieldTypeDescription
dataobject
data.idstring
data.pairedtrue

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 screen with this id, or no device shows that code.

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 `ambiguous_code` (two devices show it) or `already_claimed`.

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 410 The code has 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 422 `code` is missing.

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 429 Too many wrong codes; wait and try again.

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/screens/{id}/commands

Bearer token screen.edit

Queue a command for a screen's device, such as reboot, turning the display on or off, taking a screenshot, or clearing the cache. The device runs the command the next time it checks in. Queues a device command (reboot, refresh, screenshot, volume, …). Poll GET /v1/screens/{id}/commands/{commandId} for the device's answer. **Notes.** - A screenshot that coalesces onto an older pending one answers 200 (not 201) with coalesced: true.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.

Request body application/json

FieldTypeRequiredDescription
kindstringyes
payloadobjectnoPer-kind payload: `set-volume` {level 0-100}, `set-brightness` {level}, `set-mute` {muted}, `set-input` {input}, … Most kinds take none.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/commands" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 201 Success.

FieldTypeDescription
dataobject
data.idstringCommand id.
data.kindstring
data.status"pending"
data.coalescedbooleanTrue when a stale pending screenshot command was reused instead.

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 screen 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 Unknown kind or invalid payload.

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/screens/{id}/commands/{commandId}

Bearer token screen.view

Get the outcome of one previously queued device command, including its status (acknowledged, failed, or pending) and any note reported by the device.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
commandIdpathstringyesCommand id from POST /v1/screens/{id}/commands.
curl "https://api.brixsignage.com/v1/screens/{id}/commands/{commandId}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.idstring
data.kindstringThe command kind (see POST /v1/screens/{id}/commands).
data.status"pending" | "delivered" | "acked" | "failed" | "unconfirmed" | "held"
data.resultstring | null
data.issuedAtstringISO-8601 timestamp (UTC).
data.deliveredAtstring | null
data.ackedAtstring | 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.

GET/v1/screens/{id}/diagnose

Bearer token screen.view

Get a likely-cause troubleshooting verdict for a screen, based on signals such as online or offline status, what is actually rendering, resource pressure, and early hardware warnings. The response also includes a guided checklist for checking the TV, input, and cable, which the screen itself cannot detect.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}/diagnose" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataScreenDiagnosisWhy a screen is (or is not) showing what it should.
data.layer"offline" | "deactivated" | "unassigned" | "stick" | "resource" | "display" | "downstream" | "healthy"The first layer that explains the problem, checked from the device outward.
data.severity"none" | "info" | "warning" | "critical"
data.likelyCausestringOne sentence an operator can act on.
data.detailstring | null
data.fault"platform" | "user" | "environment" | nullWhose problem it is; null when healthy.
data.guidedbooleanTrue when `checklist` is a guided fix.
data.checklistarray of object
data.checklist[].codestring
data.checklist[].labelstring
data.checklist[].detailstring
data.remediesarray of objectOne-click fixes, when one applies.
data.remedies[].kind"reboot" | "wake-screen" | "restart-app"The command to send with POST /v1/screens/{id}/commands.
data.remedies[].labelstring
data.remedies[].coststringWhat the remedy interrupts, in words.
data.remedies[].confirmboolean
data.prominentbooleanTrue when the console shows this as a banner.

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.

GET/v1/screens/{id}/diagnostic-bundles

Bearer token screen.view

List the detailed diagnostic bundles a screen has uploaded, such as system logs, thread dumps, and exit reasons, newest first. This returns only the index; download an individual bundle separately.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}/diagnostic-bundles" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataarray of object
data[].idstring
data[].reasonstring
data[].sectionsarray of string
data[].bytesinteger
data[].downloadablebooleanFalse when the bundle was recorded but not stored.
data[].playerVersionstring | null
data[].platformstring | null
data[].clockSkewMsnumber | null
data[].createdAtstringISO-8601 timestamp (UTC).

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.

GET/v1/screens/{id}/diagnostic-bundles/{bundleId}

Bearer token screen.view

Download one detailed diagnostic bundle as JSON, exactly as it was uploaded by the device. **Notes.** - The body is the bundle exactly as the device uploaded it, served as an attachment.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
bundleIdpathstringyesBundle id.
curl "https://api.brixsignage.com/v1/screens/{id}/diagnostic-bundles/{bundleId}" \
  -H "Authorization: Bearer $BRIX_API_KEY"

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 bundle, or it was not stored.

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/screens/{id}/diagnostics

Bearer token screen.view

Get a consolidated diagnostic report for a screen: the likely-cause verdict from GET /v1/screens/:id/diagnose plus the underlying signals, including open alerts, recent health trends, crashes and self-heals, a recent log tail, and the latest reported state. Pass format=text for a plain-text report, or omit it for structured JSON. **Notes.** - ?format=text returns the same report as plain text (text/plain) instead of JSON.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}/diagnostics" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.screenobject
data.screen.idstring
data.screen.namestring
data.screen.status"online" | "offline" | "pairing"
data.screen.lastSeenAtstring | null
data.diagnosisScreenDiagnosisWhy a screen is (or is not) showing what it should.
data.diagnosis.layer"offline" | "deactivated" | "unassigned" | "stick" | "resource" | "display" | "downstream" | "healthy"The first layer that explains the problem, checked from the device outward.
data.diagnosis.severity"none" | "info" | "warning" | "critical"
data.diagnosis.likelyCausestringOne sentence an operator can act on.
data.diagnosis.detailstring | null
data.diagnosis.fault"platform" | "user" | "environment" | nullWhose problem it is; null when healthy.
data.diagnosis.guidedbooleanTrue when `checklist` is a guided fix.
data.diagnosis.checklistarray of object
data.diagnosis.checklist[].codestring
data.diagnosis.checklist[].labelstring
data.diagnosis.checklist[].detailstring
data.diagnosis.remediesarray of objectOne-click fixes, when one applies.
data.diagnosis.remedies[].kind"reboot" | "wake-screen" | "restart-app"The command to send with POST /v1/screens/{id}/commands.
data.diagnosis.remedies[].labelstring
data.diagnosis.remedies[].coststringWhat the remedy interrupts, in words.
data.diagnosis.remedies[].confirmboolean
data.diagnosis.prominentbooleanTrue when the console shows this as a banner.
data.alertsarray of objectOpen alerts on this screen.
data.alerts[].codestring
data.alerts[].severitystring
data.alerts[].messagestring
data.alerts[].openedAtstringISO-8601 timestamp (UTC).
data.vitalsarray of objectRecent device vitals, newest first.
data.vitals[].idstring
data.vitals[].spaceIdstring
data.vitals[].screenIdstring
data.vitals[].storageFreeMbnumber | null
data.vitals[].storageTotalMbnumber | null
data.vitals[].memoryFreeMbnumber | null
data.vitals[].memoryTotalMbnumber | null
data.vitals[].heapUsedMbnumber | null
data.vitals[].heapLimitMbnumber | null
data.vitals[].networkLossRationumber | null
data.vitals[].networkRttMsnumber | null
data.vitals[].thermalStatusstring | null
data.vitals[].reloadCountinteger | null
data.vitals[].rebootCountinteger | null
data.vitals[].uptimeSecnumber | null
data.vitals[].fpsnumber | null
data.vitals[].videoDropPctnumber | null
data.vitals[].webViewKillCountinteger | null
data.vitals[].renderFreezeCountinteger | null
data.vitals[].maxRenderFreezeMsnumber | null
data.vitals[].childFreezeCountinteger | null
data.vitals[].occurredAtstringISO-8601 timestamp (UTC).
data.crashesarray of object
data.crashes[].reasonstring
data.crashes[].reportedAtstringISO-8601 timestamp (UTC).
data.logsarray of object
data.logs[].entriesanyThe uploaded log lines (decoded JSON).
data.logs[].reasonstring
data.logs[].errorCountinteger
data.logs[].warnCountinteger
data.logs[].createdAtstringISO-8601 timestamp (UTC).
data.stateobject | nullThe last heartbeat snapshot; null before the first heartbeat.
data.generatedAtstringISO-8601 timestamp (UTC).

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.

GET/v1/screens/{id}/display-history

Bearer token screen.view

Get the history of what the physical display itself did, such as being switched off, switched to another HDMI input, losing its HDMI connection, or coming back, separate from whether the player software was online. Entries are newest first, each showing how long the previous state lasted, along with the current state. This data is only available for displays that support CEC, and history is limited to the last 14 days.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
daysquerystringnoWindow in days; default and maximum: the telemetry retention.
limitquerystringnoMost changes to list (default 50, max 500).
curl "https://api.brixsignage.com/v1/screens/{id}/display-history" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.screenIdstring
data.windowDaysinteger
data.retentionDaysinteger
data.currentobject | nullWhat the panel is doing now; null when the device cannot read the panel.
data.changesarray of object
data.changes[].idstring
data.changes[].atstringISO-8601 timestamp (UTC).
data.changes[].from"standby" | "wrong-input" | "disconnected" | "lit"
data.changes[].to"standby" | "wrong-input" | "disconnected" | "lit"
data.changes[].forSecnumber | null
data.truncatedboolean

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.

GET/v1/screens/{id}/frames

Bearer token screen.view

Get a log of visual fingerprints captured from a screen over a time range, using the since and until query parameters. This log is a visual audit trail and is kept even after the screen is deleted. **Notes.** - The newest 500 frames in the window.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
sincequerystringnoISO timestamp; only frames at or after it.
untilquerystringnoISO timestamp; only frames at or before it.
curl "https://api.brixsignage.com/v1/screens/{id}/frames" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataarray of object
data[].hashstringPerceptual hash of the frame on the glass.
data[].contentKindstring | null
data[].contentIdstring | null
data[].capturedAtstringISO-8601 timestamp (UTC).

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/screens/{id}/kiosk-recovery/reveal

Bearer token screen.edit

Reveal the offline recovery code for a screen with Screen Lock enabled. This action is recorded in the activity log.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/kiosk-recovery/reveal" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.codestringThe Screen Lock recovery code. Each reveal is recorded in the audit log.

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 screen with this id, or it has no recovery code.

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/screens/{id}/kiosk-recovery/rotate

Bearer token screen.edit

Generate a new offline recovery code for a screen with Screen Lock enabled. The previous code stops working immediately. This action is recorded in the activity log.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/kiosk-recovery/rotate" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.codestringThe new Screen Lock recovery code.

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/screens/{id}/lan-secret/rotate

Bearer token screen.edit

Replace the key used to authenticate local-network requests to this screen. The new key is not returned in the response; only the device receives it. Any third-party integration that signs its own requests to the screen must be updated with the new key. **Notes.** - The key itself is never returned; the device collects it.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/lan-secret/rotate" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.rotatedAtstringISO-8601 timestamp (UTC).

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 screen with this id, or Local trigger is off for it.

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/screens/{id}/live-thumbnail

Bearer token screen.view

Get the most recently captured still image for a screen, returned as image bytes. This accepts standard API authentication, including an API key, or a short-lived asset query parameter token so the image can be loaded directly in an image tag. A screen outside your access scope returns a not-found error rather than a permission error. **Notes.** - The response header x-captured-at carries the capture time.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
atquerystringno`capturedAt` of a specific capture; default the newest.
curl "https://api.brixsignage.com/v1/screens/{id}/live-thumbnail" \
  -H "Authorization: Bearer $BRIX_API_KEY"

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 screen with this id, or it has no capture yet (`no_screenshot`).

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/screens/{id}/logs

Bearer token screen.view

Get a combined, newest-first feed of a screen's recent activity from the last 24 hours, including telemetry events, crash reports, command acknowledgements, and screenshot uploads.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}/logs" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.linesarray of objectNewest first, at most 200.
data.lines[].atstringISO-8601 timestamp (UTC).
data.lines[].level"error" | "info" | "warn"
data.lines[].textstring
data.windowHoursinteger

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/screens/{id}/mirror

Bearer token screen.edit

Start a live mirroring session for a screen. The response includes a signaling URL that a viewer connects to over WebRTC; the screen's device connects when it receives the corresponding command. End the session with POST /v1/mirror/:sessionId/end.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/mirror" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.sessionIdstring
data.signalingUrlstring
data.signalingTokenstringViewer token for `signalingUrl`; valid for 5 minutes, for this session only.
data.turnHintstring

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.

GET/v1/screens/{id}/outages

Bearer token screen.view

Get the outage history for a screen over the last N days (default 30, capped at the retention window). Each outage includes when it happened, how long it lasted, a plain-language cause such as a Wi-Fi drop or a power cut, and supporting evidence, along with a summary sentence such as "went down 6 times in the last 30 days, all Wi-Fi drops". Planned downtime is listed but excluded from the outage count.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
daysquerystringnoWindow in days (default 30), capped at the workspace's retention.
limitquerystringnoMost outages to list (default 50).
curl "https://api.brixsignage.com/v1/screens/{id}/outages" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.screenIdstring
data.windowDaysinteger
data.retentionDaysinteger
data.summaryobject
data.summary.windowDaysinteger
data.summary.countintegerUnplanned outages in the window.
data.summary.byCauseobjectOutage count per cause; a cause with none is absent.
data.summary.byCause.power-lossinteger
data.summary.byCause.powered-offinteger
data.summary.byCause.os-rebootinteger
data.summary.byCause.app-crashinteger
data.summary.byCause.app-killed-low-memoryinteger
data.summary.byCause.app-anrinteger
data.summary.byCause.app-restartinteger
data.summary.byCause.wifi-droppedinteger
data.summary.byCause.wifi-weakinteger
data.summary.byCause.wifi-no-internetinteger
data.summary.byCause.ethernet-droppedinteger
data.summary.byCause.brix-unreachableinteger
data.summary.byCause.display-offinteger
data.summary.byCause.sleepinteger
data.summary.byCause.scheduled-offinteger
data.summary.byCause.unknowninteger
data.summary.byCause.power-cycleinteger
data.summary.byCause.network-onlyinteger
data.summary.byBucketobject
data.summary.byBucket.appinteger
data.summary.byBucket.displayinteger
data.summary.byBucket.unknowninteger
data.summary.byBucket.networkinteger
data.summary.byBucket.powerinteger
data.summary.byBucket.brixinteger
data.summary.byBucket.plannedinteger
data.summary.topCausestring | null
data.summary.topCauseSharenumber
data.summary.hedgedSharenumber
data.summary.lastCauseobject | null
data.summary.lastAtstring | null
data.summary.lastKnownCauseobject | null
data.summary.avgRssiDbmnumber | null
data.summary.insightstring | nullThe rollup sentence, e.g. `All 6 were Wi-Fi drops.`
data.outagesarray of object
data.outages[].idstring
data.outages[].fromstringISO-8601 timestamp (UTC).
data.outages[].tostring | nullNull while the screen is still down.
data.outages[].durationSecinteger | null
data.outages[].openboolean
data.outages[].detectionPathstring
data.outages[].causeobject | null
data.outages[].labelstring | null
data.outages[].sentencestring | null
data.outages[].evidenceobject | null
data.outages[].expectedDarkboolean | nullTrue for planned darkness (operating hours): listed, never counted.
data.outages[].expectedReasonstring | null
data.outages[].selfReportedReasonstring | null
data.outages[].playerVersionstring | null
data.truncatedboolean

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.

GET/v1/screens/{id}/playback-quality

Bearer token screen.view

Check whether this screen's device is limiting playback quality. The response reports, for each 4K-capable video, whether it plays at full quality or has been reduced because of device limitations or stuttering, along with any hardware upgrade recommendation.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}/playback-quality" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.modelstring | null
data.tierstring | null
data.serves4kbooleanTrue when the device is sent 4K renditions.
data.videos4karray of object
data.videos4k[].idstring
data.videos4k[].namestring
data.videos4k[].demotedboolean
data.videos4k[].servedboolean
data.recommendationstring | 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.

GET/v1/screens/{id}/preview

Bearer token screen.view

Preview what a screen would play at a given time, without affecting the actual device. Pass at as an ISO timestamp to preview a different time; it defaults to now. **Notes.** - data is the player manifest. Content blocks are open objects in the player's own format; v versions it.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
atquerystringnoISO timestamp to build the preview for; default now.
curl "https://api.brixsignage.com/v1/screens/{id}/preview" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataManifestPreviewWhat the screen would play: the player manifest, built as the device would receive it.
data.vintegerManifest format version.
data.screenobject
data.screen.idstring
data.screen.namestring
data.screen.rotationinteger
data.screen.tagsarray of string
data.generatedAtstringISO-8601 timestamp (UTC).
data.minPlayerVersionstring
data.contentManifestContentBlockResolved content: `kind` plus the fields for that kind (`media`, `playlist` + `items`, `app`, `layout` + `zones`, `creative`, `signage`). The inner shape is the player's format and grows with it.
data.content.kind"none" | "creative" | "signage" | "playlist" | "app" | "media" | "layout"
data.standbyContentManifestContentBlockResolved content: `kind` plus the fields for that kind (`media`, `playlist` + `items`, `app`, `layout` + `zones`, `creative`, `signage`). The inner shape is the player's format and grows with it.
data.standbyContent.kind"none" | "creative" | "signage" | "playlist" | "app" | "media" | "layout"
data.screensOffbooleanTrue when the rules say the panel should be off now.
data.operatingWindowobject | nullWeekly on-hours by weekday key (`mon`…`sun`), or null for always on.
data.proofOfPlayboolean
data.playbackMode"sync" | "unsync" | "device-time"
data.clockobject
data.clock.timeZonestring
data.languagestring
data.locationobject | null
data.playerSettingsobjectEffective player settings (volume, watermark, download policy, …).
data.watermarkTextstring | null
data.accountHoldobjectPresent when the account is on hold: the screen shows a hold card, not content.
data.accountHold.statusstring
data.accountHold.reasonstring
data.kioskobjectScreen Lock. The device's PIN material is never returned here — only whether it is set.
data.kiosk.enabledboolean
data.kiosk.graceSecondsinteger
data.kiosk.hasPinboolean
data.kiosk.hasRecoveryboolean
data.apkUpdatePolicyobject
data.apkUpdatePolicy.windowboolean
data.apkUpdatePolicy.hourLocalinteger
data.apkUpdatePolicy.forceAfterDaysinteger
data.apkUpdatePolicy.windowMinutesinteger
data.apkUpdatePolicy.forceboolean
data.apkUpdateobject
data.apkUpdate.versionstring
data.apkUpdate.urlstring
data.apkUpdate.sha256string
data.apkUpdate.signaturestring | null
data.testModetrue
data.testEligibletrue
data.fontsarray of object
data.fonts[].familystring
data.fonts[].urlstring
data.fonts[].weightsarray of integer
data.upcomingBlocksarray of objectThe next scheduled changes, so an offline device can pre-load them.
data.upcomingBlocks[].activatesAtstringISO-8601 timestamp (UTC).
data.upcomingBlocks[].contentManifestContentBlockResolved content: `kind` plus the fields for that kind (`media`, `playlist` + `items`, `app`, `layout` + `zones`, `creative`, `signage`). The inner shape is the player's format and grows with it.
data.upcomingBlocks[].content.kind"none" | "creative" | "signage" | "playlist" | "app" | "media" | "layout"
data.upcomingBlocks[].screensOffboolean
data.nextRefreshAtstringISO-8601 timestamp (UTC).
data.prestagedOverridesarray of objectEmergency templates pre-loaded on the device.
data.prestagedOverrides[].idstring
data.prestagedOverrides[].kind"emergency" | "cast"
data.prestagedOverrides[].severity"info" | "warning" | "critical"
data.prestagedOverrides[].headlinestring
data.prestagedOverrides[].bodystring | null
data.prestagedOverrides[].contentManifestContentBlockResolved content: `kind` plus the fields for that kind (`media`, `playlist` + `items`, `app`, `layout` + `zones`, `creative`, `signage`). The inner shape is the player's format and grows with it.
data.prestagedOverrides[].content.kind"none" | "creative" | "signage" | "playlist" | "app" | "media" | "layout"
data.prestagedOverrides[].triggeredAtstring | null
data.prestagedOverrides[].expiresAtstring | null
data.castobject
data.cast.idstring
data.cast.kind"emergency" | "cast"
data.cast.severity"info" | "warning" | "critical"
data.cast.headlinestring
data.cast.bodystring | null
data.cast.contentManifestContentBlockResolved content: `kind` plus the fields for that kind (`media`, `playlist` + `items`, `app`, `layout` + `zones`, `creative`, `signage`). The inner shape is the player's format and grows with it.
data.cast.content.kind"none" | "creative" | "signage" | "playlist" | "app" | "media" | "layout"
data.cast.triggeredAtstring | null
data.cast.expiresAtstring | null
data.emergencyobject
data.emergency.idstring
data.emergency.kind"emergency" | "cast"
data.emergency.severity"info" | "warning" | "critical"
data.emergency.headlinestring
data.emergency.bodystring | null
data.emergency.contentManifestContentBlockResolved content: `kind` plus the fields for that kind (`media`, `playlist` + `items`, `app`, `layout` + `zones`, `creative`, `signage`). The inner shape is the player's format and grows with it.
data.emergency.content.kind"none" | "creative" | "signage" | "playlist" | "app" | "media" | "layout"
data.emergency.triggeredAtstring | null
data.emergency.expiresAtstring | null
data.sealedtrue
data.brandobject
data.brand.partnerIdstring | null
data.brand.productNamestring
data.brand.logoUrlstring | null
data.brand.brandColorstring
data.brand.cmsHoststring
data.brand.supportEmailstring
data.brand.termsUrlstring | null
data.brand.privacyUrlstring | null
data.brand.isWhiteLabelboolean

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/screens/{id}/replace-device

Bearer token screen.edit

Release the device currently paired with a screen, without deleting the screen itself. The screen's name, content, location, and history are kept. Follow up with POST /v1/screens/:id/claim-replacement to pair a new device.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/replace-device" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.idstring
data.awaitingReplacementtrue

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.

GET/v1/screens/{id}/resource-pressure

Bearer token screen.view

Check a screen's storage, memory, and offline cache pressure. The response ranks the content contributing most to that pressure, with suggestions to remove or replace it, and includes hardware upgrade recommendations if relevant.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}/resource-pressure" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.severity"none" | "warning" | "critical"
data.resourcesarray of "storage" | "memory" | "cache"The resources under pressure.
data.storageobject
data.storage.severity"none" | "warning" | "critical"
data.storage.freeMbnumber | null
data.storage.totalMbnumber | null
data.storage.freeFracnumber | nullFree as a fraction of total (0–1).
data.storage.headlinestring | null
data.storage.daysLeftnumber | nullDays until full at the recent rate; null when not shrinking.
data.memoryobject
data.memory.severity"none" | "warning" | "critical"
data.memory.freeMbnumber | null
data.memory.totalMbnumber | null
data.memory.freeFracnumber | nullFree as a fraction of total (0–1).
data.memory.headlinestring | null
data.memory.daysLeftnumber | nullDays until full at the recent rate; null when not shrinking.
data.cacheobject
data.cache.severity"none" | "warning" | "critical"
data.cache.cacheableBytesinteger
data.cache.budgetBytesinteger | null
data.cache.ramTotalMbnumber | null
data.cache.videoCountinteger
data.cache.overBytesinteger
data.cache.headlinestring | null
data.heavyContentarray of objectAssigned content that costs the most, with what removing it frees.
data.heavyContent[].kind"layout" | "app" | "media"
data.heavyContent[].idstring
data.heavyContent[].namestring
data.heavyContent[].detailstring
data.heavyContent[].freesMbnumber
data.heavyContent[].estimatedboolean
data.heavyContent[].freesLabelstring
data.heavyContent[].reasonstring
data.hardwareobject | nullA hardware upgrade suggestion, when the device is the limit.
data.summarystring | 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/screens/{id}/restore

Bearer token screen.delete

Restore a screen deleted within the last 30 days, and restore its device pairing. A device that has kept its access token reconnects automatically, without needing to be re-paired on site.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/restore" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.idstring
data.restoredtrue

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 deleted screen with this id.

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 The screen is not deleted, or restoring it would exceed the plan.

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/screens/{id}/revoke-device

Bearer token screen.edit

Immediately invalidate the access token of the device currently paired with a screen, for example after a device is lost or stolen. The token can no longer be used, including to pair as a new screen. The screen itself is not deleted.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/revoke-device" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.idstring
data.revokedtrue
data.atstringISO-8601 timestamp (UTC).

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/screens/{id}/rotate-token

Bearer token screen.edit

Generate a new access token for a screen's paired device, invalidating the previous one immediately. The new token is returned once in the response and cannot be retrieved afterward. **Notes.** - The response carries the NEW device credential. The device holding the old token is disconnected and must be given this token (or re-paired) to keep playing.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/rotate-token" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.idstring
data.deviceTokenstringThe new device credential. Shown once; the old token stops working now.
data.rotatedAtstringISO-8601 timestamp (UTC).

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.

GET/v1/screens/{id}/state

Bearer token screen.view

Get the screen's most recently reported state, including what is currently displayed, the player software version, and its cache and resource status. The device's last heartbeat snapshot (telemetry, cache, current content, pending updates). Free-form: fields vary by player shell and version.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}/state" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject | nullNull before the first heartbeat.

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 screen 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 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/screens/{id}/telemetry

Bearer token screen.view

Get the 100 most recent raw telemetry events sent by a screen, newest first, with parsed payload data. **Notes.** - The newest 100 events.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}/telemetry" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataarray of object
data[].idstring
data[].spaceIdstring
data[].screenIdstring
data[].typestring
data[].payloadanyThe event payload (decoded JSON); its shape depends on `type`.
data[].occurredAtstringISO-8601 timestamp (UTC).
data[].receivedAtstringISO-8601 timestamp (UTC).

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/screens/{id}/trigger

Bearer token screen.edit

Send a real-time trigger to a screen: refresh, next, go-to-scene, or send-event. The screen receives it immediately.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.

Request body application/json

FieldTypeRequiredDescription
kind"refresh" | "next" | "prev" | "go-to-page" | "go-to-scene" | "send-event"yes
pageintegerno`go-to-page`: 1–100.
sceneIdstringno`go-to-scene`: the scene to show.
eventstringno`send-event`: the event name the content listens for.
payloadstringno`send-event`: an optional string payload.
overlayobjectnoA popup shown over what is playing for `seconds`, then removed. The content underneath does not restart.
overlay.contentKind"media" | "app" | "canvas"yes
overlay.contentIdstringyes
overlay.secondsnumberno1–600 (clamped); default 15.
overlay.position"center" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right"noDefault `center`.
overlay.paramsobjectnoValues passed to the content, e.g. `{ "table": "4" }`.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/trigger" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 201 Success.

FieldTypeDescription
dataobject
data.idstringThe command id.
data.kind"trigger"
data.triggerobjectThe trigger as stored (only the fields its kind uses).
data.trigger.kindstring
data.trigger.pageinteger
data.trigger.sceneIdstring
data.trigger.eventstring
data.trigger.payloadstring
data.overlayobject
data.overlay.contentKind"media" | "app" | "canvas"
data.overlay.contentIdstring
data.overlay.secondsinteger1–600; default 15.
data.overlay.position"center" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right"
data.overlay.paramsobjectValues passed to the content, e.g. `{ "table": "4" }`.

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 422 Not a valid trigger, or the overlay content is not 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 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/screens/{id}/unpower-and-delete

Bearer token screen.delete

Retire a screen in one action: turn off the physical display, unpair the device, and delete the screen. The screen can be recovered within 30 days.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl -X POST "https://api.brixsignage.com/v1/screens/{id}/unpower-and-delete" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.idstring
data.deletedtrue
data.commandIdstringThe `cec-off` command sent before the device was unpaired.

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.

GET/v1/screens/{id}/up-next

Bearer token screen.view

Get the current running order and the next scheduled change for a screen, based on exactly what the screen itself will play. This endpoint is relatively expensive to compute and should be called on demand rather than polled regularly.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}/up-next" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.nowobject | object | nullWhat is on the glass now; null when nothing is.
data.overriddenByobject | null
data.rotationarray of objectThe running order under any override, in play order.
data.rotation[].namestring
data.rotation[].kindstring
data.rotation[].secondsnumber | nullFixed dwell; null when the item plays for its own length.
data.loopsboolean
data.nextChangeobject | 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.

GET/v1/screens/{id}/why

Bearer token screen.view

Get a plain-language explanation of why a screen is currently showing what it is showing. The explanation follows the order of precedence: emergency content, then manually assigned content, then scheduled content, then the default, including reasons such as a missing asset or a revoked share. The resolution chain (deactivated → emergency → cast → assigned content), what the device reports on the glass, and warnings.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
curl "https://api.brixsignage.com/v1/screens/{id}/why" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.summarystring
data.currentContentobject
data.currentContent.kindstringThe winning layer, or `none`.
data.currentContent.idstring | null
data.currentContent.namestring | null
data.renderTruthobject
data.renderTruth.verdictstring
data.renderTruth.okboolean
data.renderTruth.problemboolean
data.renderTruth.fault"user" | "platform" | null
data.renderTruth.reasonstring | null
data.layersarray of object
data.layers[].layerstring
data.layers[].activeboolean
data.layers[].reasonstring
data.layers[].contentNamestring
data.layers[].startedAtstringISO-8601 timestamp (UTC).
data.layers[].expiresAtstringISO-8601 timestamp (UTC).
data.warningsarray of string

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 screen 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 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/screens/bulk-assign

Bearer token screen.cast

Assign one piece of content to many screens in a single request. The content is validated the same way as in the single-screen assign endpoint. Screen IDs outside your access scope or belonging to another workspace are dropped; screens at locations not shared with the content are skipped and counted in the response. This action is recorded as a single entry in the activity log. Assigns one piece of content to many screens. Unknown or out-of-reach screen ids are silently dropped; screens whose location the content is not shared to are skipped and counted in notShared.

Request body application/json

FieldTypeRequiredDescription
screenIdsarray of stringyes
contentKind"playlist" | "schedule" | "layout" | "creative" | "app" | "media" | "signage"yes
contentIdstringyes
curl -X POST "https://api.brixsignage.com/v1/screens/bulk-assign" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200 Success.

FieldTypeDescription
dataobject
data.updatedinteger
data.notSharedinteger
data.screenIdsarray of stringThe screens actually assigned.

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 content.

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 Empty/oversized `screenIds`, invalid kind, or unplayable content.

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/screens/bulk-settings

Bearer token screen.edit

Apply a Display Profile, a bundle of player settings, to many screens at once. You can also set placement fields such as nodeId, location, and tags for the screens in the same request. **Notes.** - A rotation, displayPowerMode or playbackMode value outside its set is ignored, not refused.

Request body application/json

FieldTypeRequiredDescription
screenIdsarray of stringyesScreens to change. Ids you cannot edit are skipped.
settingsobjectyes
settings.rotation0 | 90 | 180 | 270no
settings.timezonestring | nullnoIANA time zone; null clears it.
settings.operatingHoursstringno
settings.displayPowerMode"always-on" | "follow-schedule" | "os-default"no
settings.playbackMode"sync" | "unsync" | "device-time"no
settings.powerPolicyIdstring | nullno
settings.nodeIdstring | nullnoMove the screens to this location (needs screen.edit there).
settings.locationobject | nullno
settings.tagsarray of stringnoReplaces each screen's tags.
settings.playerSettingsobjectnoMerged into each screen's player settings.
curl -X POST "https://api.brixsignage.com/v1/screens/bulk-settings" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200 Success.

FieldTypeDescription
dataobject
data.updatedinteger

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 The destination location does not exist.

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 time zone or screen list.

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/screens/claim

Bearer token screen.create

Pair a device using its 6-digit pairing code, creating a new screen. Provide code, name, and an optional nodeId. This endpoint is rate-limited because the pairing code space is small, and is refused if your account is suspended or cancelled. Claims the device showing a 6-digit pairing code into this workspace as a new screen.

Request body application/json

FieldTypeRequiredDescription
codestringyesThe 6-digit code the device shows.
namestringnoScreen name. Default "New screen".
nodeIdstringnoLocation to file the screen under.
billingGroupIdstringno
curl -X POST "https://api.brixsignage.com/v1/screens/claim" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 201 Success.

FieldTypeDescription
dataobject
data.screenIdstring
data.namestring
data.previousScreenobject | nullThe screen this same device was last paired to in this workspace, if any.

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 `invalid_code`: no device is waiting with that code.

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 `ambiguous_code` or `already_claimed`.

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 410 `code_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 422 `code` missing, or a foreign location.

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 429 Too many failed codes; honour `Retry-After`.

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/screens/commands

Bearer token screen.edit

Queue the same command across many screens in a single request, using screenIds, kind, and an optional payload. Screen IDs you do not have permission to edit are silently dropped from the request rather than causing an error. Use this instead of sending one request per screen. Queues one command on many screens. Unknown or out-of-reach ids are silently dropped. Risky kinds (set-proxy, set-input, rs232, add-wifi) on a large cohort go to a small canary batch first and the rest are staged. **Notes.** - When no requested screen is reachable the answer is 200 (not 201) with { issued: 0, commandIds: [] }.

Request body application/json

FieldTypeRequiredDescription
kindstringyes
payloadobjectnoPer-kind payload: `set-volume` {level 0-100}, `set-brightness` {level}, `set-mute` {muted}, `set-input` {input}, … Most kinds take none.
screenIdsarray of stringyes
curl -X POST "https://api.brixsignage.com/v1/screens/commands" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 201 Success.

FieldTypeDescription
dataobject
data.issuedinteger
data.commandIdsarray of string
data.stagedintegerCanary rollouts: commands held behind the canary.
data.rolloutIdstring
data.canarytrue

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 422 Unknown kind, invalid payload, or empty/oversized `screenIds`.

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/screens/count-by-status

Bearer token screen.view

Get a count of screens by status: online, offline, and unpaired. Counts are limited to the organization nodes you can see. **Notes.** - Returns the counts at the top level — NOT wrapped in { data } like other routes.

curl "https://api.brixsignage.com/v1/screens/count-by-status" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
onlineinteger
offlineinteger
degradedintegerAlways 0 today (reserved).
unpairedintegerScreens in `pairing` status.
obstructedintegerOnline screens with a system dialog covering them (also counted in `online`).

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/screens/enroll

Bearer token screen.create

Create a screen and pair it in a single call using a workspace API key, without a 6-digit pairing code. This is intended for automated device provisioning. The returned device token is shown once and cannot be retrieved again. The screen is created in the workspace the API key belongs to; an API key scoped to one organization node creates the screen under that node, while an account-wide key can target any node in the account.

Request body application/json

FieldTypeRequiredDescription
namestringnoDefault `New screen`.
nodeIdstringno
billingGroupIdstring | nullno
curl -X POST "https://api.brixsignage.com/v1/screens/enroll" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 201 Success.

FieldTypeDescription
dataobject
data.screenIdstring
data.namestring
data.statusstring
data.deviceTokenstringThe device credential. Shown ONCE: install it on the device; it cannot be read again.
data.spaceobject
data.space.idstring
data.space.namestring | null
data.nodeobject | 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 404 The location does not exist.

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 The account is suspended or cancelled.

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 429 More than 60 enrollments a minute.

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/screens/pending

Bearer token screen.create

List devices automatically discovered on the same network as your workspace's existing screens, newest first. Each entry includes its 6-digit pairing code. **Notes.** - Only devices on the caller's own network (same public IPv4, or the same IPv6 /64) are listed, so call it from the network the devices are on.

curl "https://api.brixsignage.com/v1/screens/pending" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataarray of object
data[].pairingIdstring
data[].codestringThe 6-digit code the device shows.
data[].ordinalinteger1 = newest; matches the number the device shows when identified.
data[].createdAtstringISO-8601 timestamp (UTC).
data[].expiresAtstringISO-8601 timestamp (UTC).
data[].deviceLabelstring | null
data[].zmScreenNamestring | nullThe screen name the device carried over from a previous signage system, when it has one.
data[].zmMachineIdstring | null
data[].previousScreenobject | nullA screen in this workspace this device was paired to before; null for a new device.

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/screens/pending/{id}/dismiss

Bearer token screen.create

Dismiss a discovered device that you do not want to claim. Its current pairing code expires and the device generates a new one. The dismissed entry is kept in the activity history.

ParameterInTypeRequiredDescription
idpathstringyesPending pairing id (`pairingId` from the pending list).
curl -X POST "https://api.brixsignage.com/v1/screens/pending/{id}/dismiss" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.oktrue

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 pending device with this id on the caller's network.

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/screens/pending/{id}/identify

Bearer token screen.create

Briefly flash a discovered device's display so you can tell which physical screen it is. This only works for devices discovered on your own network; an ID from another network returns a not-found error.

ParameterInTypeRequiredDescription
idpathstringyesPending pairing id (`pairingId` from the pending list).
curl -X POST "https://api.brixsignage.com/v1/screens/pending/{id}/identify" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.oktrue

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 pending device with this id on the caller's network.

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/screens/pending/claim

Bearer token screen.create

Claim multiple discovered devices as screens in one request, using items, an array of objects with pairingId, name, and an optional nodeId. To claim a device from a different network using its 6-digit code, use POST /v1/screens/claim instead. This request is refused if your account is suspended or cancelled. **Notes.** - Items that are not pending on the caller's network are skipped, not refused; claimed lists the ones that became screens.

Request body application/json

FieldTypeRequiredDescription
itemsarray of objectyes
items[].pairingIdstringyes
items[].namestringno
items[].nodeIdstringnoLocation for the new screen.
curl -X POST "https://api.brixsignage.com/v1/screens/pending/claim" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json"

Response 200 Success.

FieldTypeDescription
dataobject
data.claimedarray of object
data.claimed[].pairingIdstring
data.claimed[].screenIdstring
data.claimed[].namestring

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 409 The account is suspended or cancelled.

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 `items` is empty.

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/screens/pending/identify-all

Bearer token screen.create

Briefly flash the displays of every discovered device on your network at once. This is useful when several new devices appear at the same time.

curl -X POST "https://api.brixsignage.com/v1/screens/pending/identify-all" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataobject
data.countintegerDevices asked to show their number.

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.

GET/v1/screens/recycle-bin

Bearer token screen.view

List screens deleted within the last 30 days that can still be restored with POST /v1/screens/:id/restore. For deleted items across all types, use GET /v1/recycle-bin. **Notes.** - Screens deleted in the last 30 days; older ones are purged.

curl "https://api.brixsignage.com/v1/screens/recycle-bin" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Response 200 Success.

FieldTypeDescription
dataarray of object
data[].kind"screen"
data[].idstring
data[].namestring
data[].deletedAtstringISO-8601 timestamp (UTC).
data[].nodeIdstring | 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.