Skip to content
System BridgeSystem Bridge
Esc
↑↓navigate↵open⌘Jpreview
On this page

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
}

Last updated on