Data
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
GET /api/data/{module}
X-API-Token: {token}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.
The same payloads are pushed over the WebSocket API as DATA_UPDATE 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, 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 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.
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. |
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. |
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. |
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. |
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 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 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. 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. |
{
"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
}