Bose SoundTouch Web API - Endpoints Overview
This document provides a comprehensive overview of the available API endpoints verified against the official Bose SoundTouch Web API v1.0 specification (January 7, 2026).
Note: This documents the speaker device Web API (port 8090). For the AfterTouch service’s own route layout (cloud emulation vs admin/control surface) and the planned refactoring, see API Route Layout and Refactoring Plan.
Acknowledgment: Additional endpoints beyond the official API were discovered through the comprehensive SoundTouch Plus Wiki maintained by the SoundTouch Plus community. Special thanks to @thlucas1 and contributors for documenting these working endpoints that enable full preset management and content navigation functionality.
Implementation Status Legend
- ✅ Implemented - Fully implemented with tests and real device validation
- 🔍 Extra - Implemented but not in official API v1.0 (may be newer version or undocumented)
- ⚠️ Different - Implemented with different approach than official API
- ℹ️ N/A - Documented but officially unsupported or non-functional on real hardware
API Basics
- Protocol: HTTP REST-like
- Data Format: XML Request/Response
- Standard Port: 8090
- Base URL:
http://<device-ip>:8090/ - Authentication: No complex authentication required
- Real-time Updates: WebSocket connection available
Device Information
GET /info ✅ Implemented
Retrieves basic device information.
Response XML Structure:
<info deviceID="..." type="..." name="..." ...>
<name>Device Name</name>
<type>Device Type</type>
<margeAccountUUID>UUID</margeAccountUUID>
<components>...</components>
</info>Playback Control
GET /now_playing ✅ Implemented
Retrieves information about the currently playing music.
Response XML Structure:
<nowPlaying deviceID="..." source="...">
<ContentItem source="..." type="..." location="..." sourceAccount="...">
<itemName>Track Name</itemName>
<containerArt>Album Art URL</containerArt>
</ContentItem>
<track>Track Name</track>
<artist>Artist Name</artist>
<album>Album Name</album>
<stationName>Station Name</stationName>
<art artImageStatus="...">Art URL</art>
<playStatus>PLAY_STATE</playStatus>
<shuffleSetting>...</shuffleSetting>
<repeatSetting>...</repeatSetting>
</nowPlaying>POST /key ✅ Implemented
Sends key commands to the device.
IMPORTANT - Key values, state, and sender attributes are CaSe-SeNsItIvE!
Important: Proper key simulation requires sending both press and release states:
Request XML (Press + Release):
<key state="press" sender="Gabbo">KEY_NAME</key>
<key state="release" sender="Gabbo">KEY_NAME</key>Response XML:
<status>/key</status>Available Keys:
Playback Controls:
PLAY- Start playbackPAUSE- Pause current playbackSTOP- Stop current playbackPREV_TRACK- Go to previous trackNEXT_TRACK- Go to next trackPLAY_PAUSE- Toggles between play and pause for currently playing media
Rating and Bookmark Controls:
THUMBS_UP- Rate current content positively (Pandora, Spotify, etc.)THUMBS_DOWN- Rate current content negatively (Pandora, Spotify, etc.)BOOKMARK- Bookmark current contentADD_FAVORITE- Adds currently playing media to device favorites (Pandora, Spotify, etc.)REMOVE_FAVORITE- Removes currently playing media from device favorites (Pandora, Spotify, etc.)
Power and System Controls:
POWER- Toggle device power stateMUTE- Toggle mute state
Volume Controls:
VOLUME_UP- Increase volumeVOLUME_DOWN- Decrease volume
Preset Controls:
PRESET_1toPRESET_6- Select preset 1-6
Input Controls:
AUX_INPUT- Switch to auxiliary input
Shuffle Controls:
SHUFFLE_OFF- Turn shuffle mode offSHUFFLE_ON- Turn shuffle mode on
Repeat Controls:
REPEAT_OFF- Turn repeat mode offREPEAT_ONE- Repeat current trackREPEAT_ALL- Repeat all tracks in playlist
State Values:
press- Indicates the key is pressedrelease- Indicates the key is releasedrepeat- Indicates the key is repeated
Sender Values:
Gabbo- Default value for standard SoundTouch remote control deviceIrRemote- IR remote control deviceConsole- Console deviceLightswitchRemote- Lightswitch remote deviceBoselinkRemote- Boselink remote deviceEtap- Etap device
Volume Control
GET /volume ✅ Implemented
Retrieves the current volume.
Response XML:
<volume deviceID="...">
<targetvolume>50</targetvolume>
<actualvolume>50</actualvolume>
<muteenabled>false</muteenabled>
</volume>POST /volume ✅ Implemented
Sets the volume.
Request XML:
<volume>50</volume>Bass Settings
GET /bass ✅ Implemented
Retrieves the current bass settings.
Response XML:
<bass deviceID="...">
<targetbass>0</targetbass>
<actualbass>0</actualbass>
</bass>POST /bass ✅ Implemented
Sets the bass settings. Range varies by device - check /bassCapabilities for supported range.
Request XML:
<bass>0</bass>Note: Value must be within the range specified by bassMin and bassMax from /bassCapabilities service.
Source Management
GET /sources ✅ Implemented
Retrieves the available audio sources.
Response XML:
<sources deviceID="...">
<sourceItem source="SPOTIFY" sourceAccount="..." status="READY" multiroomallowed="true">
<itemName>Spotify</itemName>
</sourceItem>
<sourceItem source="BLUETOOTH" status="READY" multiroomallowed="false">
<itemName>Bluetooth</itemName>
</sourceItem>
<!-- Additional sources -->
</sources>Typical Sources:
SPOTIFYAMAZONPANDORAIHEARTRADIOTUNEINBLUETOOTHAUXSTORED_MUSIC
POST /select ✅ Implemented
Selects an audio source.
Request XML:
<ContentItem source="SPOTIFY" sourceAccount="...">
<itemName>Spotify</itemName>
</ContentItem>Preset Management
GET /presets ✅ Implemented
Retrieves the configured presets.
Response XML:
<presets deviceID="...">
<preset id="1" createdOn="..." updatedOn="...">
<ContentItem source="..." sourceAccount="..." location="...">
<itemName>Preset Name</itemName>
<containerArt>Art URL</containerArt>
</ContentItem>
</preset>
<!-- Additional presets -->
</presets>POST /storePreset ✅ IMPLEMENTED
Creates or updates a preset.
Status: While the official Bose SoundTouch API documentation marks POST /presets as “N/A”, we discovered and implemented the actual working endpoint /storePreset through the comprehensive SoundTouch Plus Wiki. This enables full preset management functionality.
Implementation:
- Client method:
StorePreset(id, contentItem),StoreCurrentAsPreset(id) - CLI:
preset store,preset store-current - Supports all content sources: Spotify, TuneIn, local music, etc.
XML Request:
<preset id="1" createdOn="1640995200" updatedOn="1640995200">
<ContentItem source="SPOTIFY" type="uri" location="spotify:playlist:123" isPresetable="true">
<itemName>My Playlist</itemName>
</ContentItem>
</preset>Response: Updated preset configuration
POST /removePreset ✅ IMPLEMENTED
Removes/clears a preset slot.
Implementation:
- Client method:
RemovePreset(id) - CLI:
preset remove --slot <1-6> - WebSocket events: Triggers
presetsUpdatednotifications
XML Request:
<preset id="3"/>Alternative Methods:
- Use the official Bose SoundTouch mobile app
- Use physical preset buttons on the device (long-press while content is playing)
- Changes made via these methods will be visible through the GET endpoint
Advanced Features
GET /getZone ✅ Implemented
Retrieves multiroom zone information.
POST /setZone ✅ Implemented
Configures multiroom zones.
GET /balance ✅ Implemented
Retrieves balance settings (stereo devices). Only works if device is configured as part of a stereo pair.
Response XML:
<balance deviceID="...">
<balanceAvailable>true</balanceAvailable>
<balanceMin>-7</balanceMin>
<balanceMax>7</balanceMax>
<balanceDefault>0</balanceDefault>
<targetBalance>0</targetBalance>
<actualBalance>0</actualBalance>
</balance>POST /balance ✅ Implemented
Sets balance settings. Value must be within the range specified by balanceMin and balanceMax.
Request XML:
<balance>
<targetBalance>0</targetBalance>
</balance>Range Examples:
-7= left speaker0= centered7= right speaker
GET /clockTime ✅ Implemented
Retrieves the device time.
Response XML:
<clockTime utcTime="1701824606" cueMusic="0" timeFormat="TIME_FORMAT_12HOUR_ID" brightness="70" clockError="0" utcSyncTime="1701820350">
<localTime year="2023" month="11" dayOfMonth="5" dayOfWeek="2" hour="19" minute="3" second="26" />
</clockTime>POST /clockTime ✅ Implemented
Sets the device time.
GET /clockDisplay ✅ Implemented
Retrieves clock display settings.
Response XML:
<clockDisplay>
<clockConfig timezoneInfo="America/Chicago" userEnable="false" timeFormat="TIME_FORMAT_12HOUR_ID" userOffsetMinute="0" brightnessLevel="70" userUtcTime="0" />
</clockDisplay>POST /clockDisplay ✅ Implemented
Configures the clock display.
POST /speaker ✅ Implemented
Plays TTS messages or URL content for notifications (ST-10 Series only).
Requires DNS interception. Before playing a
play_infonotification the speaker validates theapp_keyby callingGET /v1/authagainst a hardcoded Bose host (audionotification.api.bosecm.com, on some firmware the...dev...variant). After the cloud shutdown that host no longer exists, so unless the speaker resolves Bose hostnames through AfterTouch (DNS server + the/etc/resolv.confhook, so*.api.bosecm.compoints at AfterTouch, which answers/v1/auth), the request hangs and returnsALLEGROWEBSERVER_TIMEOUT(error1046) after ~60s. If you cannot use DNS interception, play the clip via theLOCAL_INTERNET_RADIOpath instead (the “radio” method used by the web player’s TTS): it needs noapp_keyand no DNS redirection, but it replaces the current source rather than ducking and resuming it.
TTS Request XML:
<play_info>
<url>http://translate.google.com/translate_tts?ie=UTF-8&tl=EN&client=tw-ob&q=Hello%20World</url>
<app_key>YOUR_APPLICATION_KEY</app_key>
<service>TTS Notification</service>
<message>Google TTS</message>
<reason>Hello World</reason>
<volume>70</volume>
</play_info>URL Content Request XML:
<play_info>
<url>https://example.com/audio.mp3</url>
<app_key>YOUR_APPLICATION_KEY</app_key>
<service>Music Service</service>
<message>Song Title</message>
<reason>Artist Name</reason>
<volume>60</volume>
</play_info>Response XML:
<status>/speaker</status>Implementation Features:
- Multi-language TTS support (EN, DE, ES, FR, IT, NL, PT, RU, ZH, JA, etc.)
- Volume control with automatic restoration
- Custom metadata for NowPlaying display
- Pauses current content, plays notification, then resumes
Alternative: play a URL via UPnP / AVTransport (no app key, no DNS)
If the play_info DNS requirement above is a problem (for example a home
automation hub that just wants to push a TTS or notification clip), the speaker’s
UPnP AVTransport service can play a URL directly with no app key and no DNS
interception. POST a SOAP SetAVTransportURI to the MediaRenderer control
endpoint on port 8091 (not 8090), then Play:
POST http://<speaker-ip>:8091/AVTransport/Control
Content-Type: text/xml; charset="utf-8"
SOAPAction: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">
<InstanceID>0</InstanceID>
<CurrentURI>http://<host>/clip.mp3</CurrentURI>
<CurrentURIMetaData></CurrentURIMetaData>
</u:SetAVTransportURI>
</s:Body>
</s:Envelope>The URL must be plain http://: the speaker’s AVTransport rejects https://
(“URI must start with http://, qplay:// or Stored Music XML”) and then reports a
misleading 402 "No URI supplied". For an https-only source, host the clip
over HTTP or use a method that proxies it (the service TTS / LOCAL_INTERNET_RADIO
path).
Trade-offs versus play_info: this switches the speaker to the UPNP source and
replaces the current playback (it does not duck and resume), and the speaker
itself must be able to reach the URL. The CLI wraps both steps:
soundtouch-cli --host <speaker-ip> speaker url-upnp --url http://<host>/clip.mp3(Thanks to @dagrider in #517 for surfacing this approach.)
GET /playNotification ✅ Implemented
Plays a notification beep sound (ST-10 Series only).
Response XML:
<status>/playNotification</status>Implementation:
- Simple double beep sound
- Pauses current media during beep
- Available via
PlayNotificationBeep()method
WebSocket Connection
WebSocket / ✅ Implemented
Establishes a persistent connection for live updates.
Event Types:
nowPlayingUpdatedvolumeUpdatedconnectionStateUpdatedpresetUpdated
Network and System
GET /networkInfo ✅ Implemented
Retrieves network information.
Response XML:
<networkInfo wifiProfileCount="1">
<interfaces>
<interface type="WIFI_INTERFACE" name="wlan0" macAddress="..." ipAddress="192.0.2.131" ssid="network_name" frequencyKHz="2452000" state="NETWORK_WIFI_CONNECTED" signal="MARGINAL_SIGNAL" mode="STATION" />
<interface type="WIFI_INTERFACE" name="wlan1" macAddress="..." state="NETWORK_WIFI_DISCONNECTED" />
</interfaces>
</networkInfo>GET /capabilities ✅ Implemented
Retrieves device capabilities.
GET /name 🔍 Extra
Retrieves the device name.
Response XML:
<name>SoundTouch 10</name>Note: Official API only documents POST /name for setting device name. Our GET implementation appears to be an undocumented extension.
POST /name ✅ Implemented
Sets the device name via SetName() method. If name is changed, the change will be detected immediately via ZeroConf services.
Request XML:
<name>SoundTouch Living Room</name>Response: Returns same structure as /info endpoint with updated name.
GET /bassCapabilities ✅ Implemented
Checks if bass customization is supported on the device.
Official Response Format:
<bassCapabilities deviceID="$MACADDR">
<bassAvailable>$BOOL</bassAvailable>
<bassMin>$INT</bassMin>
<bassMax>$INT</bassMax>
<bassDefault>$INT</bassDefault>
</bassCapabilities>GET /trackInfo ✅ Implemented
Gets extended track information for currently playing music service media.
Response XML:
<trackInfo deviceID="...">Track Name;extended details;separated by semicolons;</trackInfo>Important Notes:
- Only returns information if currently playing content is from a music service (PANDORA, SPOTIFY, etc.)
- If playing non-music-service content (AIRPLAY, STORED_MUSIC, etc.), service becomes unresponsive for ~30 seconds until timeout
- Extended details are delimited by semicolons (e.g., “Who You Are To Me (feat. Lady A);vocal duets;upbeat lyrics;”)
- Times out on some SoundTouch models - use
/now_playingas reliable alternative
Implementation: Available via GetTrackInfo() method. Consider using GetNowPlaying() method for guaranteed compatibility.
Zone Slave Management ✅ Implemented
Both official low-level endpoints and high-level zone management are available:
POST /addZoneSlave ✅ Implemented
Add individual device to existing zone using official API format.
Implementation: Available via AddZoneSlave() and AddZoneSlaveByDeviceID() methods
POST /removeZoneSlave ✅ Implemented
Remove individual device from existing zone using official API format.
Implementation: Available via RemoveZoneSlave() and RemoveZoneSlaveByDeviceID() methods
High-Level Zone API ✅ Enhanced
- Enhanced:
CreateZone(),AddToZone(),RemoveFromZone()methods via/setZone - Status: Provides both official low-level API and enhanced high-level operations
Advanced Audio Controls ✅ Conditionally Available
Professional/high-end device features (only available on devices that list these capabilities):
/audiodspcontrols - GET/POST ✅ Implemented
Access DSP settings including audio modes and video sync delay.
Availability: Only available if audiodspcontrols is listed in the reply to GET /capabilities
Implementation: Available via GetAudioDSPControls(), SetAudioDSPControls(), SetAudioMode(), SetVideoSyncAudioDelay() methods with automatic capability checking
/audioproducttonecontrols - GET/POST ✅ Implemented
Advanced bass and treble controls (beyond basic /bass endpoint).
Availability: Only available if audioproducttonecontrols is listed in the reply to GET /capabilities
Implementation: Available via GetAudioProductToneControls(), SetAudioProductToneControls(), SetAdvancedBass(), SetAdvancedTreble() methods with automatic capability checking
/audioproductlevelcontrols - GET/POST ✅ Implemented
Speaker level controls for front-center and rear-surround speakers.
Availability: Only available if audioproductlevelcontrols is listed in the reply to GET /capabilities
Implementation: Available via GetAudioProductLevelControls(), SetAudioProductLevelControls(), SetFrontCenterSpeakerLevel(), SetRearSurroundSpeakersLevel() methods with automatic capability checking
Clock and Network Endpoints 🔍 Extra
These endpoints work with real hardware but are NOT in official API v1.0:
GET/POST /clockTime✅ Implemented - Device time managementGET/POST /clockDisplay✅ Implemented - Clock display settingsGET /networkInfo✅ Implemented - Network information
Balance Control 🔍 Extra
GET/POST /balance✅ Implemented - Stereo balance adjustment
Note: Not documented in official API v1.0 but works with real devices.
Token Management ✅ Implemented
GET /requestToken ✅ Implemented
Generates a new bearer token from the device for authentication purposes.
Response XML:
<bearertoken value="Bearer vUApzBVT6Lh0nw1xVu/plr1UDRNdMYMEpe0cStm4wCH5mWSjrrtORnGGirMn3pspkJ8mNR1MFh/J4OcsbEikMplcDGJVeuZOnDPAskQALvDBCF0PW74qXRms2k1AfLJ/" />Usage:
- Tokens are generated per request and may have expiration times
- Use for HTTP Authorization headers:
Authorization: Bearer <token> - Store tokens securely and treat as passwords
- Request new tokens when needed rather than reusing old ones
Implementation: Available via RequestToken() method
Testing: Integration tests available - run with SOUNDTOUCH_TEST_HOST=<device-ip> go test ./pkg/client -run TestRequestToken_Integration to validate real device token generation without exposing token values
Coverage Summary
Official API Coverage: 100%
- Total Official Endpoints: 19
- Implemented: 19 (100%)
- Conditionally Available: 3 (16%) - Advanced audio endpoints require device support
- Device-Dependent: 1 (5%) - GET /trackInfo times out on some models
- Excluded: 1 endpoint (POST /presets officially N/A)
Real Device Discovery: 103 Endpoints Found
- Total Discovered Endpoints: 103 (from /supportedURLs)
- Currently Implemented: ~35 (34%)
- Core Functionality: 100% implemented
- Extended Features: Many undocumented endpoints available
- Implementation Focus: User-facing and essential system endpoints prioritized
Feature Coverage: 100%
- ✅ All available user functionality implemented
- ✅ All functional device operations supported
- ✅ Complete WebSocket event system
- ✅ Full multiroom capabilities
- ✅ Complete advanced audio controls (where supported by device)
- 🔍 Additional features beyond official specification
- 🔍 68 additional undocumented endpoints discovered but not yet implemented
Error Handling
The API uses standard HTTP status codes:
200 OK- Successful request400 Bad Request- Invalid request404 Not Found- Endpoint or resource not found500 Internal Server Error- Internal device error
Example Implementation
// Example for a GET request
func GetNowPlaying(deviceIP string) (*NowPlaying, error) {
url := fmt.Sprintf("http://%s:8090/now_playing", deviceIP)
resp, err := http.Get(url)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var nowPlaying NowPlaying
err = xml.NewDecoder(resp.Body).Decode(&nowPlaying)
return &nowPlaying, err
}
// Example for a POST request
func SendKey(deviceIP string, key string) error {
url := fmt.Sprintf("http://%s:8090/key", deviceIP)
xmlData := fmt.Sprintf(`<key state="press" sender="GoClient">%s</key>`, key)
resp, err := http.Post(url, "application/xml", strings.NewReader(xmlData))
if err != nil {
return err
}
resp.Body.Close()
return nil
}Notes
- XML Namespace: Most responses use no explicit XML namespace
- Encoding: UTF-8 is used for all XML documents
- Timeouts: Recommended timeout for HTTP requests: 10 seconds
- Rate Limiting: No explicit limits documented, but moderate usage recommended
- Device Discovery: Devices can be found via UPnP on the local network
Comprehensive Endpoint Discovery
GET /supportedURLs ✅ Implemented
Retrieves all supported endpoints for the specific device with comprehensive feature mapping.
Client Method: GetSupportedURLs() (*models.SupportedURLsResponse, error)
CLI Commands:
soundtouch-cli supported-urls [--features] [--verbose]- Show endpoint-to-feature mappingsoundtouch-cli analyze- Comprehensive device capability analysis with recommendations
Response XML Structure:
<supportedURLs deviceID="...">
<URL location="/info" />
<URL location="/capabilities" />
<!-- ... additional endpoints ... -->
</supportedURLs>Feature Mapping System: The implementation includes a comprehensive endpoint-to-feature mapping system that:
- Maps 103+ discovered endpoints to 15+ functional features
- Categorizes features by type (Core, Audio, Playback, Sources, Content, etc.)
- Identifies essential vs. optional features for device classification
- Provides feature completeness scoring (0-100%)
- Shows CLI command mappings for each supported feature
- Detects partial implementations and missing capabilities
- Offers personalized usage recommendations
Complete Endpoint List (103 endpoints discovered from real devices):
Core Device Information:
/info✅ - Device information/capabilities✅ - Device capabilities/supportedURLs✅ - This endpoint (self-reference) - FULLY IMPLEMENTED with Feature Mapping/networkInfo✅ - Network configuration/name✅ - Device name management/netStats- Network statistics/powerManagement- Power state and battery information/soundTouchConfigurationStatus- Device configuration status
Playback and Media Control:
/nowPlaying✅ - Current playback status/now_playing✅ - Alternative current playback endpoint/nowSelection- Current selection details/key✅ - Send key commands/select✅ - Select source/content/playbackRequest- Advanced playback requests/userPlayControl- User play control interface (PAUSE_CONTROL, PLAY_CONTROL, etc.)/userTrackControl- User track control interface/userRating- User rating interface (UP/DOWN for Pandora, etc.)
Volume and Audio:
/volume✅ - Volume control/bass✅ - Bass settings/bassCapabilities✅ - Bass capability info/balance✅ - Stereo balance/DSPMonoStereo- DSP mono/stereo settings
Sources and Content:
/sources✅ - Available sources/sourceDiscoveryStatus- Source discovery status/nameSource- Name/rename sources/selectLastSource- Select last used source/selectLastWiFiSource- Select last WiFi source/selectLastSoundTouchSource- Select last SoundTouch source/selectLocalSource- Select local source
Presets and Favorites:
/presets✅ - Preset management/storePreset- Store new preset (max 6 presets)/removePreset- Remove existing preset/selectPreset- Select preset by ID/recents✅ - Recently played content/bookmark- Bookmark current content
Music Services:
/setMusicServiceAccount- Configure music service account (Pandora, Spotify, etc.)/setMusicServiceOAuthAccount- OAuth account setup/removeMusicServiceAccount- Remove music service account/serviceAvailability✅ Implemented - Check service availability/introspect✅ Implemented - Get introspect data for specific sources
Station Management (Radio/Streaming):
/searchStation- Search for stations (tested with Pandora)/addStation- Add station to favorites (tested with Pandora)/removeStation- Remove station from favorites (tested with Pandora)/genreStations- Browse stations by genre/stationInfo- Station information/trackInfo✅ - Extended track information with semicolon-delimited details
Zone and Multiroom:
/getZone✅ - Get zone configuration/setZone✅ - Set zone configuration/addZoneSlave✅ - Add device to zone/removeZoneSlave✅ - Remove device from zone/addGroup- Add to speaker group/removeGroup- Remove from speaker group/getGroup- Get group configuration/updateGroup- Update group settings
Clock and Display:
/clockDisplay✅ - Clock display settings/clockTime✅ - Device time management
System and Configuration:
/powerManagement- Power management settings/standby- Standby mode control/lowPowerStandby- Low power standby mode/systemtimeout- System timeout settings/powersaving- Power saving configuration/userActivity- User activity tracking/language- Language settings/speaker- Speaker configuration
Network and Connectivity:
/performWirelessSiteSurvey- WiFi site survey (returns detected networks with signal strength)/addWirelessProfile- Add WiFi profile (supports various security types)/getActiveWirelessProfile- Get active WiFi profile/setWiFiRadio- WiFi radio control
Bluetooth:
/bluetoothInfo✅ - Bluetooth information and pairing status/enterBluetoothPairing- Enter Bluetooth pairing mode (switches to BLUETOOTH source)/clearBluetoothPaired- Clear all Bluetooth pairings (emits descending tone)
Pairing and Setup:
/pairLightswitch- Pair with lightswitch accessory/cancelPairLightswitch- Cancel lightswitch pairing/clearPairedList- Clear all pairings/enterPairingMode- Enter general pairing mode/setPairedStatus- Set pairing status/setPairingStatus- Update pairing status/soundTouchConfigurationStatus- Configuration status/setup- Device setup interface
Software Updates:
/swUpdateStart- Start software update/swUpdateAbort- Abort software update/swUpdateQuery- Query update status/swUpdateCheck- Check for updates
Advanced Features:
/search- Content search (music libraries with filter support)/navigate- Content navigation (traverse music library containers)/listMediaServers- List available UPnP/DLNA media servers/requestToken✅ - Bearer token generation/notification- Notification management/playNotification- Play notification beep (ST-10 series only)/speaker- Play TTS messages or URL content (ST-10 series only)/test- System test interface
Internal/System:
/pdo- Internal PDO operations/slaveMsg- Slave device messaging/masterMsg- Master device messaging/factoryDefault- Factory reset/criticalError- Critical error handling/netStats- Network statistics and device interface details/rebroadcastlatencymode- Rebroadcast latency mode configuration/systemtimeout- System timeout settings/powersaving- Power saving configuration
Product Information:
/setProductSerialNumber- Set product serial number/setProductSoftwareVersion- Set software version/setComponentSoftwareVersion- Set component versions
Marge Integration (Bose Cloud Services):
/marge- Marge service integration (Bose cloud services, EOL May 2026)/setMargeAccount- Set Marge account (EOL May 2026)/pushCustomerSupportInfoToMarge- Push support info to cloud (EOL May 2026)
Reset and Control:
/getBCOReset- Get BCO reset status/setBCOReset- Set BCO reset
Notes on Endpoint Discovery:
- Total discovered endpoints: 103
- Both test devices (192.0.2.11 and 192.0.2.10) support identical endpoint lists
- Many endpoints are undocumented in official API v1.0 but functional on real hardware
- Some endpoints may require specific device types or firmware versions
- Endpoints marked ✅ are currently implemented in this Go library
Implementation Priority:
- High: Core functionality endpoints already implemented
- Medium: Music service integration, advanced zone management
- Low: Internal/diagnostic endpoints, factory operations
Reference
Based on the official Bose SoundTouch Web API documentation: https://assets.bosecreative.com/m/496577402d128874/original/SoundTouch-Web-API.pdf