---
title: Data
description: Get a data module's current data over the HTTP API, and every field each module reports.
---

Get a module's current data over HTTP.

## Authentication

This endpoint requires authentication via the `X-API-Token` header or the `token` header.

## Request

**X-API-Token header**

```http
GET /api/data/{module}
X-API-Token: {token}
```

**token header**

```http
GET /api/data/{module}
token: {token}
```

`{module}` is one of: `audio`, `battery`, `bluetooth`, `cameras`, `cpu`, `disks`, `discord`, `displays`, `gpus`, `media`, `memory`, `networks`, `processes`, `sensors`, `system`.

## Response

The response is the raw data for the requested module. The shape depends on the module. Most modules return a JSON object; `displays`, `gpus`, and `processes` return a JSON array of objects.

:::note
Most fields serialise as `null` when the value is unavailable on your platform or hardware, rather than being omitted. Some fields are only populated on certain operating systems, noted below where it matters.
:::

The same payloads are pushed over the WebSocket API as [`DATA_UPDATE`](/api/websocket/data/#receiving-data) messages.

### `audio`

| Field | Type | Description |
| --- | --- | --- |
| `outputs` | array | Output devices, such as speakers and headphones. |
| `inputs` | array | Input devices, such as microphones. |
| `apps` | array | Apps playing sound, each of which can be turned up, down or muted on its own. Linux only, and empty elsewhere. |

Each device has:

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | The device's id: its PulseAudio or PipeWire name on Linux, or its endpoint id on Windows. |
| `name` | string | The device's description. |
| `volume` | number | Volume as a percentage, averaged over its channels. It can go over 100 when the volume is boosted. |
| `muted` | boolean | Whether the device is muted. |
| `default` | boolean | Whether it's the default output or input. |

Each app has:

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | The app's id, such as `app:120`. It changes when the app stops and starts playing again. |
| `name` | string | The app's name, such as `Firefox`. |
| `title` | string | What the app says it's playing, such as a track, or `null`. |
| `volume` | number | The app's own volume as a percentage, averaged over its channels. |
| `muted` | boolean | Whether the app is muted. |
| `playing` | boolean | `false` while the app has paused its sound. |
| `output` | string | The `id` of the output it plays to. |

On Linux, the devices come from `pactl`, which needs PulseAudio 16 or later, or PipeWire with `pipewire-pulse`. Monitor sources, which capture an output, aren't listed as inputs, and filters such as an equaliser aren't listed as apps. On macOS all three lists are empty.

### `battery`

| Field | Type | Description |
| --- | --- | --- |
| `is_charging` | boolean | Whether the battery is charging. |
| `percentage` | number | Charge level, 0-100. |
| `time_remaining` | number | Estimated time until full when charging, or until empty when discharging, in seconds. |
| `state` | string | `charging`, `discharging`, `full`, `not_charging`, `empty`, or `unknown`. |
| `power` | number | Power going into or out of the battery, in watts. |
| `voltage` | number | Battery voltage, in volts. |
| `ac_connected` | boolean | Whether mains or USB power is connected. |
| `batteries` | array | Every battery, including connected devices such as a wireless mouse. |

The top-level battery fields are for the first system battery, and are `null` when there isn't one. `ac_connected` is `null` when the system doesn't report a power supply, as on most desktops, and on macOS.

Each item in `batteries` has `name`, `model`, `serial`, `scope` (`system` or `device`), `state`, `percentage`, `time_remaining`, `power`, and `voltage`. On Windows and macOS, batteries are named `BAT0`, `BAT1` and so on, and connected devices usually aren't listed.

On Linux, a connected device's `name` can change when it reconnects, such as `hidpp_battery_1` becoming `hidpp_battery_2`. Its `serial` stays the same, so use it to tell device batteries apart. `serial` is `null` when the driver doesn't report one, and always on Windows and macOS.

### `bluetooth`

| Field | Type | Description |
| --- | --- | --- |
| `devices` | array | Paired devices, sorted by name. |
| `powered` | boolean | Whether Bluetooth is on: `true` when any adapter is on. `null` when there's no adapter, and on Windows and macOS. |

Each device has:

| Field | Type | Description |
| --- | --- | --- |
| `address` | string | The device's Bluetooth address, such as `80:C3:BA:7B:93:4E`. |
| `name` | string | The device's name, or its address when it has none. |
| `type` | string | A freedesktop icon name for the kind of device, such as `audio-headset`, `input-keyboard` or `phone`. `null` when it's unknown. |
| `connected` | boolean | Whether the device is connected. |

On Linux, the devices come from BlueZ. On Windows, only classic Bluetooth devices are listed, so Bluetooth LE devices such as some keyboards and mice are left out. On macOS the list is empty.

### `cameras`

| Field | Type | Description |
| --- | --- | --- |
| `cameras` | array | Video capture devices, such as webcams, sorted by name. |

Each camera has:

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | The camera's `/dev/v4l/by-id` name, such as `usb-Insta360_Insta360_Link_2C-video-index0`, which stays the same when it's plugged in again. The device name, such as `video0`, when there's no such link. |
| `name` | string | The name the driver gives the camera. |
| `device` | string | The device node, such as `/dev/video0`. |
| `driver` | string | The kernel driver, such as `uvcvideo`. `null` when it isn't reported. |
| `format` | object | The format and size it captures in now, such as `MJPG` at 1280 by 720. `null` when it can't be read. |
| `formats` | array | Each format it supports, at its largest size. |
| `sizes` | array | Each size it captures at in any format, as `width` and `height`, largest first. Pictures can be taken at any of them. |
| `controls` | array | The camera's settings, such as brightness, zoom and white balance. |

Each format has:

| Field | Type | Description |
| --- | --- | --- |
| `format` | string | The format's four character code, such as `MJPG` or `YUYV`. |
| `name` | string | The format's name, such as `Motion-JPEG`. Empty in `format` when the camera doesn't list it. |
| `width`, `height` | number | The size in pixels. |

Each control has:

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | The control's name as `v4l2-ctl` writes it, such as `brightness` or `focus_automatic_continuous`. |
| `name` | string | The control's name, such as `Focus, Automatic Continuous`. |
| `group` | string | The set the control is in, such as `User Controls` or `Camera Controls`, as `v4l2-ctl` lists them. |
| `type` | string | `integer`, `boolean` or `menu`. |
| `value` | number | The current value. A boolean is `0` or `1`, and a menu's is the `value` of one of its `options`. |
| `minimum`, `maximum`, `step`, `default` | number | The range the value can take, and its default. |
| `options` | array | A menu's choices, each with a `value` and `name`. Empty for other controls. |
| `inactive` | boolean | Whether another control overrides it for now, such as focus while autofocus is on. |
| `read_only` | boolean | Whether the control can only be read. |

Metadata nodes are left out, so a webcam is listed once. The cameras are read without streaming from them, so they're still listed while an app is using them. On Windows and macOS the list is empty.

### `cpu`

| Field | Type | Description |
| --- | --- | --- |
| `count` | number | Number of logical cores. |
| `frequency` | object | Current, min, and max frequency in MHz (`current`, `min`, `max`). |
| `load_average` | number | System load average over 1 minute. Windows has no load average, so there it's an estimate from the processor queue length. |
| `load_average_5` | number | System load average over 5 minutes, estimated the same way on Windows. |
| `load_average_15` | number | System load average over 15 minutes, estimated the same way on Windows. |
| `per_cpu` | array | Per-core entries with `id`, `frequency`, `power`, `times`, `times_percent`, `usage`, and `voltage`. |
| `power` | number | Package power draw, in watts. |
| `stats` | object | Counters: `ctx_switches`, `interrupts`, `soft_interrupts`, `syscalls`. |
| `temperature` | number | CPU temperature, in degrees Celsius. |
| `times` | object | Cumulative CPU time in seconds (`user`, `system`, `idle`, `interrupt`, `dpc`). `dpc` is Windows only. |
| `times_percent` | object | The same breakdown as percentages. |
| `usage` | number | Overall CPU usage percentage. |
| `voltage` | number | Core voltage. |

### `disks`

| Field | Type | Description |
| --- | --- | --- |
| `devices` | array | Disks, each with `name`, `partitions`, and `io_counters`. |
| `io_counters` | object | Aggregate I/O: `read_count`, `write_count`, `read_bytes`, `write_bytes`, `read_time`, `write_time`, `read_bytes_rate`, `write_bytes_rate`. On Linux it counts physical disks only, so partitions, LUKS and LVM devices aren't counted twice. |

`read_bytes_rate` and `write_bytes_rate` are in bytes per second since the previous reading, in the total and on each disk. They are `null` on the first reading, and when a counter resets.

Each partition has `device`, `mount_point`, `filesystem_type`, `options`, `category` (`primary`, `bind`, or `squashfs`), and `usage` (`total`, `used`, `free`, `percent`).

### `discord`

The state of the local Discord app. This module only exists once Discord is [set up](/features/discord/), and appears without a restart.

| Field | Type | Description |
| --- | --- | --- |
| `connected` | boolean | Whether System Bridge is connected to the Discord app. |
| `authenticated` | boolean | Whether Discord accepted the authorization. |
| `user` | object | The Discord account: `id`, `username`, `global_name` (display name), and `avatar_url`. |
| `call` | object | The voice channel you're in, or `null` when you're not in one. See below. |
| `mute` | boolean | Whether you are muted. |
| `deaf` | boolean | Whether you are deafened. |
| `input` | object | The microphone setup. See below. |
| `output` | object | The output setup. See below. |
| `mode` | object | `type` (`VOICE_ACTIVITY` or `PUSH_TO_TALK`), `auto_threshold` (whether Discord sets the voice activity sensitivity), `threshold` (voice activity sensitivity in dB, -100 to 0), and `delay` (push to talk release delay in milliseconds). |
| `processing` | object | Whether `noise_suppression`, `echo_cancellation`, and `automatic_gain_control` are on. |
| `qos` | boolean | Whether Discord's quality of service for voice packets is on. |
| `silence_warning` | boolean | Whether Discord warns you when your microphone picks up nothing. |
| `video` | boolean | Whether your camera is on. `null` until it changes, as Discord only reports changes. |
| `screenshare` | boolean | Whether you are sharing your screen. `null` until it changes. |
| `notification` | object | The latest Discord notification: `message_id`, `channel_id`, `title`, `body` and `icon_url`. `null` until one arrives. To open its channel, send `OPEN_TEXT_CHANNEL` with its `channel_id`. |
| `sounds` | array | The soundboard sounds you can play: `id`, `name`, `server_id` (`null` for Discord's default sounds), `emoji`, and `emoji_url` for custom emoji. |
| `error` | string | Why the last attempt to connect or sign in failed, such as Discord rejecting the client ID. Left out when there's no problem, and by older versions of System Bridge. |

`call` has:

| Field | Type | Description |
| --- | --- | --- |
| `channel` | object | The voice channel: `id`, `name`, `type` (`GUILD_VOICE`, `GUILD_STAGE_VOICE`, `DM` or `GROUP_DM`), `bitrate` in bits per second, and `user_limit` (0 for no limit). |
| `server` | object | The server's `id`, `name` and `icon_url`, also known as a guild in Discord's API. `null` for direct message calls. |
| `connection` | object | Your voice connection: `state` (such as `VOICE_CONNECTED`, `CONNECTING` or `NO_ROUTE`), and `last_ping` and `average_ping` in milliseconds. `null` until Discord reports it. |
| `me` | object | Your entry in `members`. |
| `members` | array | Everyone in the call, including you: `user` (`id`, `username`, `global_name` and `avatar_url`), `nick` (their name in the call), `server_mute` and `server_deaf` (whether a moderator has muted or deafened them), `self_mute` and `self_deaf`, `suppress` (whether they can't talk, such as in an AFK channel or as a Stage listener), `speaking`, and your settings for them: `local_mute` and `volume` (0-200, as Discord's slider shows it). `local_mute` and `volume` are `null` for you. |

`input` and `output` each have:

| Field | Type | Description |
| --- | --- | --- |
| `volume` | number | The volume as Discord's slider shows it: 0-100 for input, 0-200 for output. |
| `device_id` | string | The selected device. `default` follows the system default. |
| `devices` | array | Devices Discord can use, each with `id` and `name`. |

Every field other than `connected`, `authenticated` and `error` is `null` until System Bridge is authenticated. Changes are pushed when they happen in Discord.

### `desktop`

The open windows, workspaces and keyboard layout, from Hyprland, another Wayland desktop, or Windows. Changes are pushed when they happen, except on Windows, which is checked every second. It's left out on macOS and X11.

| Field | Type | Description |
| --- | --- | --- |
| `compositor` | string | `hyprland`, `wayland` for other Wayland desktops, or `windows`. |
| `focused_window` | string | The focused window's `id`, or `null`. |
| `focused_workspace` | string | The focused workspace's `id`, or `null`. |
| `focused_display` | string | The focused display's id from the [`displays`](#displays) module, or `null`. Hyprland only. |
| `keyboard` | object | `layout` (the active layout, such as `gb`), `name` (such as `English (UK)`) and `layouts` (every installed layout). On Sway and niri, the layouts are named rather than coded, so `layout` and `name` are both the name, such as `English (UK)`. Empty on other Wayland desktops. |
| `windows` | array | The open windows. See below. |
| `workspaces` | array | The workspaces. Empty on Windows. See below. |
| `hyprland` | object | What only Hyprland reports, or `null` elsewhere. See below. |
| `omarchy` | object | What the Omarchy shell can open, or `null` while it isn't running. See below. |

Each window has `id`, `app`, `title`, `pid`, `workspace` (a workspace `id`), `display`, `x`, `y`, `width`, `height`, and whether it's `focused`, `fullscreen`, `maximised`, `minimised`, `floating`, `urgent` and `inhibiting_idle` (keeping the screen awake). `content_type` is what the window says it shows, such as `video` or `game`. Fields a desktop doesn't report are `null`. `title` is `null` unless you turn on **Window titles** on the web client's **Desktop** page.

Window ids are Hyprland's window addresses, Windows' window handles, or numbers System Bridge gives windows on other Wayland desktops. Use them with [desktop control](/api/websocket/control/#desktop-control).

Each workspace has `id`, `name`, `display`, `windows` (how many), and whether it's `active` (shown on its display), `focused`, `special` (a Hyprland scratchpad) and `fullscreen`.

`hyprland` has:

| Field | Type | Description |
| --- | --- | --- |
| `version` | object | `version`, `tag`, `commit`, `branch`, `config_provider` (`lua` or `hyprlang`) and `backend`. |
| `windows` | object | More about each window, by `id`: `fullscreen_mode`, `pinned`, `xwayland`, `hidden`, `visible`, `group`, `swallowing`, `tags`, `focus_history`, `stable_id` (never reused, unlike the `id`), `initial_app`, `initial_title` (only with window titles on), `xdg_tag`, `xdg_description` and `tearing_hint`. |
| `workspaces` | object | More about each workspace, by `id`: `layout`, `persistent` and `last_window`, the window last focused on it. |
| `options` | array | Common config options, each with its `name`, its `type`, `bool` or `int`, and its value in the field of that name. Gaps that differ by side are left out. Any option can be [read and set](/api/websocket/control/#options). |
| `displays` | object | More about each display, by name: `scale`, `transform`, `format`, `colour_preset`, `reserved`, `layers`, `dpms`, `vrr`, `tearing`, `direct_scanout`, `mirror_of` and `special_workspace`. |
| `keyboards`, `mice`, `switches`, `tablets`, `touch` | array | The input devices Hyprland sees. |
| `binds` | array | The config's key bindings, in order. |
| `global_shortcuts` | array | The shortcuts apps registered, each with `name` and `description`. Run one with [`HYPRLAND_RUN_GLOBAL_SHORTCUT`](/api/websocket/control/#hyprland-control). |
| `screencasts` | array | What's being shared, if anything. |
| `submap` | string | The active submap, or `null`. |
| `group_lock` | boolean | Whether window groups are locked. |
| `config_errors` | array | Errors in Hyprland's config. |
| `config_notices` | array | Deprecated options and dispatchers the config uses, from Hyprland 0.57. |

`omarchy` has:

| Field | Type | Description |
| --- | --- | --- |
| `menus` | array | The Omarchy menu's routes, each with `id` (such as `root` or `trigger.capture`), `name` and `aliases` (other names that open it, such as `capture`). Open one with [`OMARCHY_MENU`](/api/websocket/control/#omarchy-control). |
| `panels` | array | The panels and overlays of the shell's enabled plugins, each with `id` (such as `omarchy.audio`) and `name`. Open one with [`OMARCHY_PANEL`](/api/websocket/control/#omarchy-control). |
| `targets` | array | The shell's IPC targets, each with `name` and `functions`. Each function has `name`, `arguments` (each with `name` and `type`) and `returns`. Types are `string`, `int`, `bool`, `real` or, for `returns`, `void`. |

### `displays`

Returns an array of objects, one per display.

On Linux without an X server, such as under Wayland, the displays come from the kernel's DRM connectors instead. Then `name` is the monitor's model from its EDID, and `is_primary` and `pixel_clock` are `null`. Under Hyprland, the resolution, `refresh_rate` and position are the mode Hyprland set. On other Wayland compositors, the resolution is the monitor's preferred one, and the position and `refresh_rate` are `null`.

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | Display identifier. On Linux, the connector, such as `HDMI-A-2`. |
| `name` | string | Display name. |
| `resolution_horizontal` | number | Horizontal resolution in pixels. |
| `resolution_vertical` | number | Vertical resolution in pixels. |
| `x` | number \| null | X position in the virtual desktop. |
| `y` | number \| null | Y position in the virtual desktop. |
| `width` | number | Physical width in millimetres. Linux only. |
| `height` | number | Physical height in millimetres. Linux only. |
| `is_primary` | boolean | Whether this is the primary display. |
| `pixel_clock` | number | Pixel clock. |
| `refresh_rate` | number | Refresh rate in Hz. |
| `brightness` | number \| null | Brightness in percent, over DDC/CI or from a built-in panel's backlight. `null` when it can't be read. |
| `power_state` | string \| null | `on`, `standby`, `suspend` or `off`, over DDC/CI. On Hyprland, `on` or `off` from its DPMS for a display without DDC/CI. `null` when it can't be read. |

### `gpus`

Returns an array of objects, one per GPU. Full metrics require an NVIDIA GPU; other GPUs report a subset (typically `id`, `name`, and memory).

| Field | Type | Description |
| --- | --- | --- |
| `id` | string | GPU identifier. |
| `name` | string | GPU name. |
| `core_clock` | number | Core clock in MHz. |
| `core_load` | number | Core load percentage. |
| `memory_clock` | number | Memory clock in MHz. |
| `memory_load` | number | Memory load percentage. |
| `memory_free` | number | Free memory. |
| `memory_used` | number | Used memory. |
| `memory_total` | number | Total memory. |
| `power_usage` | number | Power draw in watts. |
| `power_limit` | number | The power limit in watts, from `nvidia-smi` or amdgpu's power cap. |
| `temperature` | number | Temperature in degrees Celsius. |
| `fan_speed` | number | Fan speed in RPM. On Linux, from AMD cards' hwmon. |
| `fan_speed_percent` | number | Fan speed as a percentage of its maximum. On Linux, from `nvidia-smi` or AMD cards' hwmon. |
| `encoder_load` | number | Video encoder use as a percentage. NVIDIA on Linux only. |
| `decoder_load` | number | Video decoder use as a percentage. NVIDIA on Linux only. |
| `performance_state` | string | The performance state, from `P0` (fastest) to `P12`. NVIDIA on Linux only. |

### `media`

Details of the current media session: `title`, `artist`, `album_title`, `album_artist`, `subtitle`, `type`, and `status`; playback state `position`, `duration`, `playback_rate`, `volume`, `shuffle`, `repeat`, and `track_number`; capability flags `is_play_enabled`, `is_pause_enabled`, `is_stop_enabled`, `is_next_enabled`, `is_previous_enabled`, `is_seek_enabled`, `is_fast_forward_enabled`, and `is_rewind_enabled`; a `thumbnail`; and `updated_at`. Available fields vary by operating system and media player.

On Linux, `players` lists every media player, each with an `id`, `name`, `status` (`PLAYING`, `PAUSED` or `STOPPED`), `title` and `artist`, plus the same track, playback, capability and `thumbnail` fields as above, so a client can show any of them. `player` is the `id` of the one the other fields describe, and [`MEDIA_CONTROL`](/api/websocket/control/#media-control) takes an `id` to control another. On Windows, `players` is empty and `player` is `null`.

### `memory`

| Field | Type | Description |
| --- | --- | --- |
| `virtual` | object | Physical memory: `total`, `available`, `percent`, `used`, `free`, `active`, `inactive`, `buffers`, `cached`, `wired`, `shared`. |
| `swap` | object | Swap: `total`, `used`, `free`, `percent`, `sin`, `sout`. |

### `networks`

| Field | Type | Description |
| --- | --- | --- |
| `networks` | array | Interfaces, each with `name`, `addresses`, `stats`, `io`, and `wifi`. |
| `connections` | array | Active connections with `fd`, `family`, `type`, `laddr`, `raddr`, `status`, and `pid`. |
| `io` | object | I/O for all interfaces combined, leaving out loopback: `bytes_sent`, `bytes_recv`, `packets_sent`, `packets_recv`, `errin`, `errout`, `dropin`, `dropout`, `bytes_sent_rate`, `bytes_recv_rate`. |

Each interface address has `address`, `family`, `netmask`, `broadcast`, and `ptp`; interface `stats` has `isup`, `duplex`, `speed`, `mtu`, and `flags`. `speed` is the link speed in Mb/s, read on Linux only. It is `null` where the system doesn't report one, such as wireless, virtual or disconnected interfaces. Interface `io` has the same fields as the combined `io`, for that interface only.

Interface `wifi` is `null` on wired and virtual interfaces. On wireless interfaces it has `ssid` (the network name), `signal` (signal strength in dBm), `signal_percent` (0 to 100, where -50 dBm or stronger is 100) and `link_rate` (the transmit rate in Mb/s). These are `null` while the interface isn't connected. It's read through nl80211 on Linux, so it works with NetworkManager, iwd and wpa_supplicant, and through the WLAN API on Windows. It's always `null` on macOS.

`bytes_sent_rate` and `bytes_recv_rate` are in bytes per second since the previous reading. They are `null` on the first reading, and when a counter resets.

### `processes`

Returns an array of objects, one per process.

| Field | Type | Description |
| --- | --- | --- |
| `id` | number | Process ID. |
| `name` | string | Process name. |
| `cpu_usage` | number | CPU usage percentage. |
| `memory_usage` | number | Memory usage percentage. |
| `created` | number | Creation time. |
| `path` | string | Executable path. |
| `status` | string | Process status. |
| `username` | string | Owning user. |
| `working_directory` | string | Working directory. |

### `sensors`

| Field | Type | Description |
| --- | --- | --- |
| `temperatures` | array | Temperature readings with `key`, `temperature`, `high`, and `critical`. When several chips share a driver, such as NVMe drives or memory modules, the later ones' keys end in a number, such as `nvme_composite_2`. |
| `fans` | array | Fan readings with `key`, `name`, `label`, `speed_rpm`, `speed_min`, and `speed_max`. On Linux this includes hwmon fans and supported Lian Li UNI HID fan controllers when the process can read `/dev/hidraw*`. |
| `windows_sensors` | object | Windows-only hardware and NVIDIA sensor tree. |

### `system`

| Field | Type | Description |
| --- | --- | --- |
| `hostname` | string | Machine hostname. |
| `fqdn` | string | Fully qualified domain name. |
| `platform` | string | Operating system. |
| `platform_version` | string | OS version. |
| `kernel_version` | string | Kernel version. |
| `boot_time` | number | Boot time as a Unix timestamp. |
| `uptime` | number | Uptime in seconds. |
| `ip_address_4` | string | IPv4 address. |
| `ip_address_6` | string | IPv6 address. |
| `mac_address` | string | MAC address. |
| `uuid` | string | Stable machine identifier. |
| `users` | array | Logged-in users with `name`, `active`, `terminal`, `host`, `started`, and `pid`. |
| `version` | string | Installed System Bridge version. |
| `version_latest` | string | Latest available version. Development builds track the `dev` branch, so this is the version a build of its latest commit would have, in the same format as `version`, when there's a newer one. |
| `version_latest_url` | string | URL for the latest release, or the commits since the build for development builds. |
| `version_newer_available` | boolean | Whether a newer version, or a newer commit for development builds, is available. |
| `camera_usage` | array | Apps using the camera. Linux only. |
| `microphone_usage` | array | Apps using the microphone. Linux only. |
| `pending_reboot` | boolean | Whether a reboot is pending. Linux only. |
| `package_updates` | integer | How many package updates are waiting, from `checkupdates` on Arch, apt on Debian and Ubuntu, dnf on Fedora, or winget on Windows. Checked in the background about once an hour, so it's null until the first check finishes or when no supported package manager is found. Linux and Windows only. |
| `package_update_list` | array | Each update `package_updates` counts, with its `name`, the `version` waiting and the `current_version` installed. dnf doesn't say the installed version, so it's `null` there. `null` when `package_updates` is. |
| `failed_units` | array | The systemd units that failed, from the system manager and, when System Bridge runs in your session, your user manager. Each has `name`, `description`, `scope` (`system` or `user`), `load_state`, `result` (why it failed, such as `exit-code`, `signal`, `timeout` or `oom-kill`) and `since` (when it failed, in Unix seconds). Empty when nothing has failed, and `null` without systemd. Linux only. |
| `power_usage` | number | System power draw in watts. Linux only. |
| `power_profile` | string | The active power profile, such as `power-saver`, `balanced` or `performance`, from power-profiles-daemon or tuned-ppd. `null` without either. Linux only. |
| `power_profiles` | array | The profiles [`SYSTEM_SET_POWER_PROFILE`](/api/websocket/control/#system-control) can switch to. Empty without power-profiles-daemon. Linux only. |
| `keep_awake` | boolean | Whether the system is kept from idling, with [`SYSTEM_SET_KEEP_AWAKE`](/api/websocket/control/#system-control). On Omarchy this is the bar's stay awake switch, so it's also `true` when you turned that on. `null` on Windows and macOS. |
| `keep_awake_until` | number | When keeping awake ends, as a Unix timestamp, if it was given a `duration`. Otherwise `null`. |
| `run_mode` | string | How the backend is running. |
| `idle_time` | number | Seconds since the user's last keyboard or mouse input. On Linux this comes from the Wayland compositor where it supports `ext-idle-notify-v1` (such as Hyprland, sway, niri and KDE), otherwise from logind's idle hint. `null` when neither is available. |
| `locked` | boolean | Whether the user's session is locked. On Linux this is logind's `LockedHint`, which GNOME and KDE set but some desktops, such as Omarchy, don't. `null` on macOS. |

```json title="Example: system"
{
    "boot_time": 1651433957.3015134,
    "fqdn": "Desktop",
    "hostname": "Desktop",
    "ip_address_4": "1.1.1.1",
    "mac_address": "aa:bb:cc:dd:ee:ff",
    "platform": "Windows",
    "platform_version": "10.0.22000",
    "uptime": 7.015625,
    "uuid": "abcd-efgh-abcd-efgh-abcd",
    "version": "5.0.2",
    "version_latest": "5.0.7",
    "version_newer_available": false
}
```
