Screens API (part 2 of 4)

Screens endpoints in the Brix REST API, part 2 of 4: 17 operations from /v1/screens/{id}, each with auth, permission and curl.

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

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

Screens is split into 4 pages: part 1 (/v1/screens to /v1/screens/{id}), part 2 (/v1/screens/{id} to /v1/screens/{id}/mirror), part 3 (/v1/screens/{id}/outages to /v1/screens/{id}/unpower-and-delete), part 4 (/v1/screens/{id}/up-next to /v1/screens/touch-content).

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

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

DELETE /v1/screens/{id}

Auth: Bearer token. Permission: 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.

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

Response 404: No such screen in this workspace.

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

POST /v1/screens/{id}/assign

Auth: Bearer token. Permission: 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.

Response 403: not_shared: the content is not shared to this screen's location.

Response 404: No such screen or content in this workspace.

Response 422: Invalid kind, a layout with unbound zones, or content that cannot play (empty playlist, unprocessed media).

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

POST /v1/screens/{id}/claim-replacement

Auth: Bearer token. Permission: 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.

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

Response 404: No screen with this id, or no device shows that code.

Response 409: ambiguous_code (two devices show it) or already_claimed.

Response 410: The code has expired.

Response 422: code is missing.

Response 429: Too many wrong codes; wait and try again.

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

POST /v1/screens/{id}/commands

Auth: Bearer token. Permission: 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.

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

Response 404: No such screen in this workspace.

Response 409: wifi_already_saved: an add-wifi or set-fallback-wifi names a network the screen already has saved. A wrong password for a saved network takes the screen offline, so only new networks are sent.

Response 422: Unknown kind or invalid payload.

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

GET /v1/screens/{id}/commands/{commandId}

Auth: Bearer token. Permission: 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.

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

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

GET /v1/screens/{id}/diagnose

Auth: Bearer token. Permission: 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.

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

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

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

Auth: Bearer token. Permission: 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[].viewablebooleanTrue when ?view=1 on the download route answers for this workspace (the in-CMS reader is on).
data[].playerVersionstring | null
data[].platformstring | null
data[].clockSkewMsnumber | null
data[].createdAtstringISO-8601 timestamp (UTC).

Response 401: Missing, expired or revoked bearer token.

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

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

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

Auth: Bearer token. Permission: screen.view.

Download one detailed diagnostic bundle as JSON, exactly as it was uploaded by the device. Notes. - The body is the stored bundle (v2: summary, gaps = missing parts with the reason, parts), served as an attachment. Bundles are kept 30 days.

ParameterInTypeRequiredDescription
idpathstringyesScreen id.
bundleIdpathstringyesBundle id.
viewquerystringno1 returns the bundle inside the { data } envelope instead of as a file (only where viewable is true).
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.

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

Response 404: No such bundle, or it was not stored.

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

GET /v1/screens/{id}/diagnostics

Auth: Bearer token. Permission: 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[].cpuTempCnumber | null
data.vitals[].gpuTempCnumber | null
data.vitals[].maxTempCnumber | nullHottest reading since the previous heartbeat (°C).
data.vitals[].starvedAdvanceCountinteger | null
data.vitals[].longTasksinteger | null
data.vitals[].videoSeamWorstMsnumber | null
data.vitals[].videoHoleMaxMsnumber | null
data.vitals[].videoStartMaxMsnumber | nullSlowest video start since the previous heartbeat: play() to the first moving frame (ms).
data.vitals[].videoCallbackStallMsnumber | nullLongest late frame callback while frames were still shown (ms) — a busy player, not a blank screen.
data.vitals[].videoMidStallMaxMsnumber | nullLongest run since the previous heartbeat in which a playing clip's picture stood still (≥300 ms, ms; migration 0306).
data.vitals[].decodeErrorsinteger | null
data.vitals[].zonesSuppressedinteger | null
data.vitals[].videoBudgetHitsinteger | null
data.vitals[].hdmiConnectedinteger | null1 = an HDMI sink answers, 0 = none, null = unknown.
data.vitals[].frameGapCountinteger | null
data.vitals[].frameGapMaxMsnumber | null
data.vitals[].anrCountinteger | null
data.vitals[].memoryDegradeStepinteger | null
data.vitals[].decoderInitFailuresinteger | null
data.vitals[].cacheWipeCountinteger | null
data.vitals[].liveVideoElsinteger | null
data.vitals[].liveIframesinteger | null
data.vitals[].maxLiveVideoElsinteger | null
data.vitals[].liveDecodersinteger | nullVideos holding a hardware decoder at heartbeat time (migration 0306).
data.vitals[].decoderBudgetinteger | nullVideo decoders the player allowed itself at heartbeat time (RAM band, memory ladder, heat, override). Null = no limit or an older player (migration 0325).
data.vitals[].decoderBudgetAgeSecinteger | nullSeconds that decoder budget had been in force (migration 0325).
data.vitals[].decoderOverrideFellBackFrominteger | nullThe videoDecoderMax override the screen gave up because its extra decoder would not start (migration 0325).
data.vitals[].launchReasonstring | null
data.vitals[].launchAtnumber | nullWhen this player run started (epoch ms).
data.vitals[].coreVersionstring | nullThe player core version that sent this sample (migration 0305).
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.

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

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

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

Auth: Bearer token. Permission: 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" | "input-unconfirmed" | "lit"
data.changes[].to"standby" | "wrong-input" | "disconnected" | "input-unconfirmed" | "lit"
data.changes[].forSecnumber | null
data.changes[].basis"probe" | "seen-switch" | "stored-guess"What the TV input reading stood on: a probe the player ran, an input change it saw, or its last stored value.
data.changes[].basisLabelstringbasis in plain words.
data.truncatedboolean
data.dailySummariesarray of stringThe device's daily TV input summaries in the window, newest first, one line each.

Response 401: Missing, expired or revoked bearer token.

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

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

GET /v1/screens/{id}/frames

Auth: Bearer token. Permission: 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.

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

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

POST /v1/screens/{id}/kiosk-recovery/reveal

Auth: Bearer token. Permission: 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.

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

Response 404: No screen with this id, or it has no recovery code.

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

POST /v1/screens/{id}/kiosk-recovery/rotate

Auth: Bearer token. Permission: 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.

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

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

POST /v1/screens/{id}/lan-secret/rotate

Auth: Bearer token. Permission: 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.

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

Response 404: No screen with this id, or Local trigger is off for it.

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

GET /v1/screens/{id}/live-thumbnail

Auth: Bearer token. Permission: 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.
atquerystringnocapturedAt 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.

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

Response 404: No screen with this id, or it has no capture yet (no_screenshot).

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

GET /v1/screens/{id}/logs

Auth: Bearer token. Permission: 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.

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

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

POST /v1/screens/{id}/mirror

Auth: Bearer token. Permission: 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.

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

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