Toolkit downloads paused. Third-party licensing is under review. These hardware guides are retained for reference; do not start a new installation from them. Read the status.

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.