Local remote API
Base URL: http://RADIO_IP:8770. Every request requires Authorization: Bearer YOUR_PRIVATE_PAIRING_KEY. The key is generated per radio; none is shipped in the download. Responses are JSON with Cache-Control: no-store. There is no cloud relay.
| Method | Path | Behavior |
|---|---|---|
| GET | /status |
Playback state, station/title, volume, preset names, decoder status and firmware play/power/output state |
| GET | /stations |
Grouped station catalog |
| POST | /preset/1 through /preset/6 |
Play an assigned hardware preset |
| POST | /station/ID |
Play a catalog entry by ID |
| POST | /volume/0 through /volume/100 |
Set volume |
| POST | /play |
Resume/restart current stream |
| POST | /stop |
Stop playback |
| POST | /weather |
Open/refetch the hardware weather view |
| POST | /display |
Open Now Playing (development update) |
| POST | /info |
Open Radio Info (development update) |
| POST | /theme/purple, /theme/graphite, /theme/graphite-green, /theme/graphite-pink, /theme/graphite-purple |
Save display theme and open Now Playing (development update) |
| POST | /menu |
Open the radio's Squeeze Radio menu |
No body is required. Missing/wrong authorization gives HTTP 401, unknown routes give 404, and a failing applet operation gives 500. Client implementations should use a short timeout, show unreachable/rejected-pairing states separately, and avoid logging the authorization header. The server caps simultaneous clients and request-header size.
The radio uses plain HTTP on the local network. The bearer key is not encrypted in transit. Keep this on trusted home Wi-Fi; do not forward port 8770 through your router or expose it via a tunnel. The iPad app's local playback and the physical radio's playback are separate players.
The /status response includes firmware.playMode, firmware.powerState and firmware.audioEndpoint. An idle screen can coexist with normal playback: firmware mode should remain play and the endpoint Speaker (or Headphone when connected). This distinguishes amplifier sleep from a stream buffer failure.
The optional artworkURL field in /status is the provider URL of the cover accepted by the radio for the current track. It is absent while artwork is missing or loading, and is cleared on track/station changes. Remote clients can display that image without a separate metadata lookup. Older radios omit this field; clients should retain their placeholder. The image request goes directly to the provider and must not include the radio pairing key.
The /stations response retains its grouped array format and now reflects the current cached Squeeze Picks catalog, filtered to radio-compatible entries. Catalog refreshes do not require changing the remote pairing key.