---
title: "Get consolidated screen diagnostics"
method: GET
path: "/v1/screens/{id}/diagnostics"
tags: ["screens"]
---

# Get consolidated screen diagnostics

`GET /v1/screens/{id}/diagnostics`

## Request

- Base URL: `https://api.brixsignage.com`
- URL: `https://api.brixsignage.com/v1/screens/{id}/diagnostics`
- Auth: HTTP bearer

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.

## Path parameters

- `id` string, required

## Response `200`

Success.

- object
  - `data` object, required
    - `screen` object, required
      - `id` string, required
      - `name` string, required
      - `status` 'online' | 'offline' | 'pairing', required
      - `lastSeenAt` string, nullable, required: ISO-8601 timestamp (UTC).
    - `diagnosis` ScreenDiagnosis, required: Why a screen is (or is not) showing what it should.
      - `layer` 'offline' | 'deactivated' | 'unassigned' | 'stick' | 'resource' | 'display' | 'downstream' | 'healthy', required: The first layer that explains the problem, checked from the device outward.
      - `severity` 'none' | 'info' | 'warning' | 'critical', required
      - `likelyCause` string, required: One sentence an operator can act on.
      - `detail` string, nullable, required
      - `fault` 'platform' | 'user' | 'environment', nullable, required: Whose problem it is; null when healthy.
      - `guided` boolean, required: True when `checklist` is a guided fix.
      - `checklist` object[], required
        - `code` string, required
        - `label` string, required
        - `detail` string
      - `remedies` object[]: One-click fixes, when one applies.
        - `kind` 'reboot' | 'wake-screen' | 'restart-app', required: The command to send with POST /v1/screens/{id}/commands.
        - `label` string, required
        - `cost` string, required: What the remedy interrupts, in words.
        - `confirm` boolean, required
      - `prominent` boolean, required: True when the console shows this as a banner.
    - `alerts` object[], required: Open alerts on this screen.
      - `code` string, required
      - `severity` string, required
      - `message` string, required
      - `openedAt` string, required: ISO-8601 timestamp (UTC).
    - `vitals` object[], required: Recent device vitals, newest first.
      - `id` string, required
      - `spaceId` string, required
      - `screenId` string, required
      - `storageFreeMb` number, nullable, required
      - `storageTotalMb` number, nullable, required
      - `memoryFreeMb` number, nullable, required
      - `memoryTotalMb` number, nullable, required
      - `heapUsedMb` number, nullable, required
      - `heapLimitMb` number, nullable, required
      - `networkLossRatio` number, nullable, required
      - `networkRttMs` number, nullable, required
      - `thermalStatus` string, nullable, required
      - `reloadCount` integer, nullable, required
      - `rebootCount` integer, nullable, required
      - `uptimeSec` number, nullable, required
      - `fps` number, nullable, required
      - `videoDropPct` number, nullable, required
      - `webViewKillCount` integer, nullable, required
      - `renderFreezeCount` integer, nullable, required
      - `maxRenderFreezeMs` number, nullable, required
      - `childFreezeCount` integer, nullable, required
      - `cpuTempC` number, nullable, required
      - `gpuTempC` number, nullable, required
      - `maxTempC` number, nullable, required: Hottest reading since the previous heartbeat (°C).
      - `starvedAdvanceCount` integer, nullable, required
      - `longTasks` integer, nullable, required
      - `videoSeamWorstMs` number, nullable, required
      - `videoHoleMaxMs` number, nullable, required
      - `videoStartMaxMs` number, nullable, required: Slowest video start since the previous heartbeat: play() to the first moving frame (ms).
      - `videoCallbackStallMs` number, nullable, required: Longest late frame callback while frames were still shown (ms) — a busy player, not a blank screen.
      - `videoMidStallMaxMs` number, nullable: Longest run since the previous heartbeat in which a playing clip's picture stood still (≥300 ms, ms; migration 0306).
      - `decodeErrors` integer, nullable, required
      - `zonesSuppressed` integer, nullable, required
      - `videoBudgetHits` integer, nullable, required
      - `hdmiConnected` integer, nullable, required: 1 = an HDMI sink answers, 0 = none, null = unknown.
      - `frameGapCount` integer, nullable, required
      - `frameGapMaxMs` number, nullable, required
      - `anrCount` integer, nullable, required
      - `memoryDegradeStep` integer, nullable, required
      - `decoderInitFailures` integer, nullable, required
      - `cacheWipeCount` integer, nullable, required
      - `liveVideoEls` integer, nullable, required
      - `liveIframes` integer, nullable, required
      - `maxLiveVideoEls` integer, nullable, required
      - `liveDecoders` integer, nullable: Videos holding a hardware decoder at heartbeat time (migration 0306).
      - `decoderBudget` integer, nullable: Video decoders the player allowed itself at heartbeat time (RAM band, memory ladder, heat, override). Null = no limit or an older player (migration 0325).
      - `decoderBudgetAgeSec` integer, nullable: Seconds that decoder budget had been in force (migration 0325).
      - `decoderOverrideFellBackFrom` integer, nullable: The videoDecoderMax override the screen gave up because its extra decoder would not start (migration 0325).
      - `launchReason` string, nullable, required
      - `launchAt` number, nullable, required: When this player run started (epoch ms).
      - `coreVersion` string, nullable: The player core version that sent this sample (migration 0305).
      - `occurredAt` string, required: ISO-8601 timestamp (UTC).
    - `crashes` object[], required
      - `reason` string, required
      - `reportedAt` string, required: ISO-8601 timestamp (UTC).
    - `logs` object[], required
      - `entries` unknown, required
      - `reason` string, required
      - `errorCount` integer, required
      - `warnCount` integer, required
      - `createdAt` string, required: ISO-8601 timestamp (UTC).
    - `state` object, nullable, required: The last heartbeat snapshot; null before the first heartbeat.
    - `generatedAt` string, required: ISO-8601 timestamp (UTC).

## Other responses

- `401`: Missing, expired or revoked bearer token.
- `403`: The token lacks the permission this operation needs (see `x-brix-permission`).
- `5XX`: Server error. The body carries a `requestId` to quote to support.

---

[API](https://skmtc.dev/brixsignage/apis/brix-api.md) · [All operations](https://skmtc.dev/brixsignage/apis/brix-api/llms.txt) · [OpenAPI document](https://skmtc.dev/brixsignage/apis/brix-api/revisions/02fd3665dc7d?raw)
