Documentation for controlling and preserving Bose SoundTouch devices
https://all.api.radio-browser.info/soundtouch.This service registers RadioBrowser in its BMX service registry (provider ID 39) pointing to RadioBrowser’s SoundTouch API. The device discovers it from there and communicates directly with RadioBrowser for browsing and playback — the local service does not proxy streams.
The source is registered with type RADIO_BROWSER in the Marge sources list. The RadioBrowser provider ID (39) in the source entry identifies it as RadioBrowser within the BMX layer.
The device’s own Sources.xml (/mnt/nv/BoseApp-Persistence/1/Sources.xml) must contain a RADIO_BROWSER entry for playback to work:
<source secret="" secretType="">
<sourceKey type="RADIO_BROWSER" account="" />
</source>
A device reboot is required after adding this entry. The firmware only registers RADIO_BROWSER as a selectable source type during the boot-time Sources.xml load. The Marge runtime sync stores the source in the registry but does not complete the activation — without a reboot, selecting a RADIO_BROWSER station results in INVALID_SOURCE.
A reboot achieves two things in sequence:
/full request, which updates the device-local Sources.xml.RADIO_BROWSER source type from that updated file.The INVALID_SOURCE_TYPE message from the Bluetooth daemon visible in device logs (e.g. during GET /serviceAvailability) is informational noise and does not affect playback.
Step 1 above (the /full fetch that updates Sources.xml) can be triggered independently by posting a sourcesUpdated notification directly to the speaker. This is useful for verifying that the soundtouch-service serves the correct sources list before committing to a full reboot:
curl -v -X POST http://<speaker-ip>:8090/notification \
-H "Content-Type: application/xml" \
-d '<updates deviceID="<deviceID>"><sourcesUpdated/></updates>'
Replace <speaker-ip> with your speaker’s IP address and <deviceID> with its device ID (visible in /info). After this call the speaker re-fetches its sources from the service. Step 2 (source-type registration) still requires a reboot.
https://www.radio-browser.info/history/d28420a4-eccf-47a2-ace1-088c7e7cb7e0<ContentItem
source="RADIO_BROWSER"
type="stationurl"
isPresetable="true"
location="/stations/byuuid/9610c454-0601-11e8-ae97-52543be04c81">
<itemName>Radio Station Name</itemName>
<containerArt></containerArt>
</ContentItem>
To start the radio stream replace <uuid> and <soundtouch> and run curl like this:
curl -d '<ContentItem source="RADIO_BROWSER" type="stationurl" location="/stations/byuuid/<uuid>"/>' <soundtouch>:8090/select
The entry in pkg/service/handlers/static/bmx_services.json that enables RadioBrowser:
{
"baseUrl": "https://all.api.radio-browser.info/soundtouch",
"id": {
"name": "RADIO_BROWSER",
"value": 39
},
"streamTypes": ["liveRadio", "onDemand"],
"authenticationModel": {
"anonymousAccount": {
"autoCreate": true,
"enabled": true
}
}
}