Skip to content

Generated REST API Reference

This reference is generated directly from the Rust OpenAPI registry in the SnapDog repository. For authentication, usage guidance, and complete examples, read the REST API guide.

Contract: SnapDog REST API 1.0.0 · OpenAPI 3.1.0

System and platform administration endpoints

Method Endpoint Summary Request Success response
GET /api/v1/system/status Retrieve basic system status statistics. SystemStatus
GET /api/v1/system/version Retrieve application and platform version details. VersionInfo

Multi-zone control, playback, and presence management

Method Endpoint Summary Request Success response
GET /api/v1/zones Get all zones details array<ZoneInfo>
GET /api/v1/zones/count Get total number of zones integer
GET /api/v1/zones/{zone_index} Get zone details by index ZoneInfo
GET /api/v1/zones/{zone_index}/clients Get zone clients index list array<integer>
GET /api/v1/zones/{zone_index}/cover Get zone cover art image
GET /api/v1/zones/{zone_index}/icon Get zone emoji icon string
GET /api/v1/zones/{zone_index}/mute Get zone mute status boolean
PUT /api/v1/zones/{zone_index}/mute Set zone mute status boolean
POST /api/v1/zones/{zone_index}/mute/toggle Toggle zone mute status
GET /api/v1/zones/{zone_index}/name Get zone name string
POST /api/v1/zones/{zone_index}/next Skip to next track
POST /api/v1/zones/{zone_index}/next/playlist Switch to next playlist
POST /api/v1/zones/{zone_index}/pause Pause zone playback
POST /api/v1/zones/{zone_index}/play Resume zone playback
POST /api/v1/zones/{zone_index}/play/playlist Play unified playlist PlaylistPayload
POST /api/v1/zones/{zone_index}/play/playlist/{playlist_index}/track Play track in a playlist integer
POST /api/v1/zones/{zone_index}/play/subsonic/{track_id} Play Subsonic track by ID
POST /api/v1/zones/{zone_index}/play/track Play specific track index integer
POST /api/v1/zones/{zone_index}/play/url Play arbitrary audio stream URL string
GET /api/v1/zones/{zone_index}/playback Get zone playback status string
GET /api/v1/zones/{zone_index}/playlist Get zone playlist index integer
PUT /api/v1/zones/{zone_index}/playlist Set zone playlist integer
GET /api/v1/zones/{zone_index}/playlist/count Get playlist track count integer
GET /api/v1/zones/{zone_index}/playlist/info Get active playlist summary info ZonePlaylistInfo
GET /api/v1/zones/{zone_index}/playlist/name Get active playlist name string
GET /api/v1/zones/{zone_index}/presence Get presence occupancy status boolean
PUT /api/v1/zones/{zone_index}/presence Set presence occupancy status boolean
GET /api/v1/zones/{zone_index}/presence/enable Get presence detection enable status boolean
PUT /api/v1/zones/{zone_index}/presence/enable Set presence detection enable status boolean
GET /api/v1/zones/{zone_index}/presence/timeout Get presence timeout delay integer
PUT /api/v1/zones/{zone_index}/presence/timeout Set presence timeout delay integer
GET /api/v1/zones/{zone_index}/presence/timer Get presence timer active status boolean
POST /api/v1/zones/{zone_index}/previous Skip to previous track
POST /api/v1/zones/{zone_index}/previous/playlist Switch to previous playlist
GET /api/v1/zones/{zone_index}/repeat Get zone repeat mode RepeatMode
PUT /api/v1/zones/{zone_index}/repeat Set zone repeat mode RepeatMode
POST /api/v1/zones/{zone_index}/repeat/toggle Toggle zone repeat mode
GET /api/v1/zones/{zone_index}/shuffle Get zone shuffle status boolean
PUT /api/v1/zones/{zone_index}/shuffle Set zone shuffle status boolean
POST /api/v1/zones/{zone_index}/shuffle/toggle Toggle zone shuffle status
POST /api/v1/zones/{zone_index}/stop Stop zone playback
GET /api/v1/zones/{zone_index}/track Get active track index integer
GET /api/v1/zones/{zone_index}/track/album Get active track album string
GET /api/v1/zones/{zone_index}/track/artist Get active track artist string
GET /api/v1/zones/{zone_index}/track/duration Get active track duration integer
GET /api/v1/zones/{zone_index}/track/metadata Get track metadata ZoneTrackMetadata
GET /api/v1/zones/{zone_index}/track/playing Get track playing state boolean
GET /api/v1/zones/{zone_index}/track/position Get active track playback position integer
PUT /api/v1/zones/{zone_index}/track/position Seek track position SeekPayload
GET /api/v1/zones/{zone_index}/track/progress Get track progress percentage number
PUT /api/v1/zones/{zone_index}/track/progress Seek track progress percentage number
GET /api/v1/zones/{zone_index}/track/title Get active track title string
GET /api/v1/zones/{zone_index}/volume Get zone volume level integer
PUT /api/v1/zones/{zone_index}/volume Set zone volume level VolumeValue integer

Individual speaker volume, mute, latency, and zone assignment

Method Endpoint Summary Request Success response
GET /api/v1/clients Get all clients details array<ClientInfo>
GET /api/v1/clients/count Get total number of clients integer
GET /api/v1/clients/{client_index} Get client details by index ClientInfo
GET /api/v1/clients/{client_index}/connected Get client connection status boolean
GET /api/v1/clients/{client_index}/icon Get client icon name string
GET /api/v1/clients/{client_index}/latency Get client latency setting integer
PUT /api/v1/clients/{client_index}/latency Set client latency setting integer integer
GET /api/v1/clients/{client_index}/mute Get client mute status boolean
PUT /api/v1/clients/{client_index}/mute Set client mute status boolean boolean
POST /api/v1/clients/{client_index}/mute/toggle Toggle client mute status boolean
GET /api/v1/clients/{client_index}/name Get client friendly name string
PUT /api/v1/clients/{client_index}/name Set client friendly name string string
GET /api/v1/clients/{client_index}/volume Get client volume level integer
PUT /api/v1/clients/{client_index}/volume Set client volume level VolumeValue integer
GET /api/v1/clients/{client_index}/zone Get client zone assignment integer
PUT /api/v1/clients/{client_index}/zone Set client zone assignment integer integer

Parametric EQ curves, bands, and presets for zones and clients

Method Endpoint Summary Request Success response
GET /api/v1/clients/{client_index}/eq Get client Equalizer configuration EqConfig
PUT /api/v1/clients/{client_index}/eq Set client Equalizer configuration EqConfig EqConfig
POST /api/v1/clients/{client_index}/eq/preset Apply client Equalizer preset string EqConfig
PUT /api/v1/clients/{client_index}/eq/{band_index} Update specific client Equalizer band EqBand EqConfig
GET /api/v1/zones/{zone_index}/eq Get zone Equalizer configuration EqConfig
PUT /api/v1/zones/{zone_index}/eq Set zone Equalizer configuration EqConfig EqConfig
POST /api/v1/zones/{zone_index}/eq/preset Apply Equalizer preset string EqConfig
PUT /api/v1/zones/{zone_index}/eq/{band_index} Update specific Equalizer band EqBand EqConfig

Speaker profiles database and correction applications

Method Endpoint Summary Request Success response
GET /api/v1/clients/{client_index}/speaker Get client speaker correction EqConfig
PUT /api/v1/clients/{client_index}/speaker Apply speaker correction profile ApplySpeakerRequest EqConfig
GET /api/v1/speakers List available speaker profiles array<string>
GET /api/v1/speakers/{name}/profile Get speaker correction profile EqConfig

KNX home automation integration status and control

Method Endpoint Summary Request Success response
GET /api/v1/knx/knxprod Download the KNX ETS product database
GET /api/v1/knx/product-info Product identity (version / order number / hardware revision) of the embedded .knxprod. ProductInfo
GET /api/v1/knx/programming-mode Get KNX programming mode status boolean
PUT /api/v1/knx/programming-mode Set KNX programming mode status boolean boolean

Radio station lists, Subsonic playlists, track listings, and covers

Method Endpoint Summary Request Success response
GET /api/v1/media/playlists Get all media playlists array<PlaylistInfo>
GET /api/v1/media/playlists/{playlist_index} Get playlist details PlaylistDetails
GET /api/v1/media/playlists/{playlist_index}/cover Get playlist cover image
GET /api/v1/media/playlists/{playlist_index}/tracks Get playlist tracks array<MediaTrackInfo>
GET /api/v1/media/playlists/{playlist_index}/tracks/{track_index} Get track details MediaTrackInfo
GET /api/v1/media/playlists/{playlist_index}/tracks/{track_index}/cover Get track cover image

Request body for applying a speaker correction.

Field Type Required Description
custom null or EqConfig no
speaker string or null no Speaker name (from spinorama). Mutually exclusive with custom.
Field Type Required Description
connected boolean yes
icon string yes
index integer yes
is_snapdog boolean yes
mac string yes
max_volume integer yes
muted boolean yes
name string yes
volume integer yes
zone_index integer yes

Single EQ band configuration.

Field Type Required Description
freq number yes Center frequency in Hz.
gain number yes Gain in dB (positive = boost, negative = cut). Ignored for low/high pass.
q number yes Q factor controlling bandwidth. Higher values = narrower band.
type FilterType yes Filter type (low shelf, high shelf, peaking, low pass, high pass).

Full EQ configuration for a zone.

Field Type Required Description
bands array<EqBand> yes Ordered list of biquad filter bands applied in series.
enabled boolean yes Whether the EQ is active. When false, audio passes through unmodified.
preset string or null no Name of the preset this config was loaded from, if any.

Standard REST API error response body.

Field Type Required Description
error string yes High-level machine-readable error classification.
message string yes Detailed human-readable explanation of the error.

Filter type for an EQ band.

Type: low_shelf, high_shelf, peaking, low_pass, high_pass

Field Type Required Description
album string yes
artist string yes
cover_art string or null no
duration integer yes
id string yes
title string yes
track integer yes

Playback control command sent from client to server.

Type: object or object or object or object or object or object or object or object or object or object or object

Field Type Required Description
id integer yes
name string yes
tracks integer yes
Field Type Required Description
cover_art string or null no
duration integer yes
id integer yes
name string yes
song_count integer yes
Field Type Required Description
id integer yes
track integer no

ETS product identity of the embedded .knxprod, shown next to the WebUI download so an integrator can confirm it matches this device’s firmware.

Field Type Required Description
app_version integer yes ETS ApplicationVersion.
application_number string yes ApplicationNumber / order number, formatted 0xFF01.
hardware_version integer yes Hardware revision.

Repeat mode for zone playback.

Type: off, track, playlist

Field Type Required Description
offset_ms integer or null no
position_ms integer or null no
Field Type Required Description
clients integer yes
radios integer yes
version string yes
zones integer yes

Full zone state pushed from server to client via custom message.

Field Type Required Description
album string yes Album name.
album_artist string or null no Album artist (may differ from track artist).
artist string yes Track artist.
bitrate_kbps integer or null no Audio bitrate in kbps.
can_next boolean yes Whether next track is available.
can_playlist_next boolean yes Whether there’s a next playlist.
can_playlist_prev boolean yes Whether there’s a previous playlist.
can_prev boolean yes Whether previous track is available.
content_type string or null no MIME content type.
cover_url string or null no Absolute cover art URL.
disc_number integer or null no Disc number.
duration_ms integer yes Total track duration in milliseconds.
genre string or null no Genre tag.
muted boolean yes Whether the zone is muted.
playback string yes Playback state: “playing”, “paused”, “stopped”.
playlist integer or null no Current playlist index (0-based).
playlist_name string or null no Name of the active playlist.
playlist_total integer or null no Total number of playlists available.
position_ms integer yes Current playback position in milliseconds.
repeat RepeatMode yes Repeat mode.
seekable boolean yes Whether seeking is supported.
shuffle boolean yes Whether shuffle is enabled.
source string yes Active source type.
title string yes Track title.
track_count integer or null no Total tracks in playlist.
track_index integer or null no Current track index in playlist (0-based).
track_number integer or null no Track number within the album.
volume integer yes Zone volume (0–100).
year integer or null no Release year.
Field Type Required Description
name string yes
rust_version string yes
version string yes

Volume value: absolute (e.g. 75) or relative (e.g. "+5", "-3").

Type: integer or string

Field Type Required Description
icon string yes
index integer yes
muted boolean yes
name string yes
playback string yes
presence boolean yes
presence_enabled boolean yes
presence_timer_active boolean yes
repeat RepeatMode yes
shuffle boolean yes
source string yes
volume integer yes
Field Type Required Description
index integer or null no
name string or null no
total integer or null no
track_count integer or null no
track_index integer or null no
Field Type Required Description
album string yes
album_artist string or null no
artist string yes
bitrate_kbps integer or null no
can_next boolean yes
can_playlist_next boolean yes
can_playlist_prev boolean yes
can_prev boolean yes
content_type string or null no
cover_url string or null no
disc_number integer or null no
duration_ms integer yes
genre string or null no
playlist_index integer or null no
playlist_name string or null no
playlist_total integer or null no
playlist_track_count integer or null no
playlist_track_index integer or null no
position_ms integer yes
sample_rate integer or null no
seekable boolean yes
source string yes
title string yes
track_number integer or null no
year integer or null no