# Screen status and health


> What a screen's status values mean, how to read last_ping, and the hardware and software fields in screen reports.

A screen record is what you configured. What the device reports about itself lives next to it: its status, when it last checked in, and its health report. On v4.1 each has its own path. On v4, `status`, `in_sync`, and `last_ping` are fields on `/v4/screens`. See [Versions](/docs/developers/api/reference/versions/).

## Status

`/v4.1/screens/statuses` returns 1 row per screen, keyed by `screen_id`.

```bash
curl -s -H "Authorization: Token $API_TOKEN" \
  "https://api.screenlyapp.com/api/v4.1/screens/statuses?status=eq.Offline"
```

`status` takes 1 of 4 values:

| Value | Meaning |
| --- | --- |
| `Online` | The screen is reachable and has what it should be playing |
| `Out of sync` | The screen is reachable but doesn't yet have what it should be playing |
| `Offline` | The screen hasn't been in touch recently |
| `Inactive` | The screen is disabled |

`Online` includes a screen with nothing scheduled. An empty playlist doesn't change the status, so to find screens with nothing to play, check their playlists rather than their status.

`in_sync` is the content half on its own, as a boolean. On v4.1, `is_online` is the reachability half on its own.

## When a screen last checked in

On v4 this is `last_ping` on the screen. On v4.1 it is `updated_at` on `/v4.1/screens/pings`.

It is always a timestamp, never null. A screen starts with its creation time, so a null value doesn't mean "never connected". To find a screen that has never checked in, compare `last_ping` with the screen's `created_at`: a screen that has never checked in still carries the time it was created.

> [!NOTE]
> Because that starting timestamp is recent, a screen created in the last 4 hours can report `Online` before the device has ever reached Screenly.

## Screen reports

`GET /v4.1/screens/reports` returns what each player reports about itself, keyed by `screen_id`. Fields fill in from each player's next report. Some apply only to certain hardware, and a field a player doesn't report is empty.

### Storage

| Field | What it holds |
| --- | --- |
| `sd_card_health` | Errors on a Raspberry Pi's SD card, and whether the card has turned read-only |
| `smart_disk_data` | A S.M.A.R.T. summary of the SSD or NVMe drive on an x86 player, including temperature, power-on hours, and how much of its life is used |
| `storage_info` | The identity of a Raspberry Pi's SD card: name, manufacturer, and date |
| `disk_usage` | Total, used, and free space on the player's data storage, in bytes |
| `disk_stats` | Read and write counters for each disk since the player started |

### Hardware

| Field | What it holds |
| --- | --- |
| `sensors` | Temperature and other sensor readings, such as a Raspberry Pi's chip temperature |
| `x86_stats` | Hardware temperatures on Screenly Player and Screenly Player Max |
| `mem_info` | Total, free, and available memory, in kB |
| `raspi_rev`, `raspi_serial` | A Raspberry Pi's board revision and serial number |

### Software and security

| Field | What it holds |
| --- | --- |
| `installed_snaps` | Every software package on the player, with its version |
| `device_model`, `validation_sets` | The ScreenlyOS image a player runs, and the exact package versions it's held to |
| `secure_boot`, `full_disk_encryption`, `mtls_enabled` | Whether the player uses secure boot, an encrypted data partition, and a client certificate for its connection to Screenly |
| `is_wayland` | Whether the player draws through the newer display stack |

### Display, network, and running state

| Field | What it holds |
| --- | --- |
| `display_data` | Each connected display's make, model, size, and supported resolutions |
| `screen_resolution` | The resolution content is shown at |
| `bluetooth` | `on`, `off`, or `unknown`. `off` also covers a player with no Bluetooth at all |
| `probe_diagnostics` | The results of the player's own network checks, refreshed about once a day |
| `player_uptime` | Seconds since the player's content started, which restarts once a day |
| `local_time` | The player's clock when it sent the report |

The report also carries the fields it has had longer, such as `local_ip`, `mac`, `uptime`, `load`, and `client_version`. Every field is in the [v4.1 API reference](https://developer.screenly.io/api_v4_1/).