Every CloudRadio One station has a public JSON endpoint that reports what the stream is doing right now. Use it to build your own now-playing display, live indicator, or listener counter with your own JavaScript. If you'd rather not write code, the widgets cover the same data with copy-paste snippets.
Endpoint
GET https://public.cloudrad.io/your-station-slug/status
Your station slug is the identifier in your public URLs. You can find the exact address on your station's Widgets & Links page in Studio.
The endpoint needs no authentication and supports CORS, so you can call it with fetch() directly from your own domain. Responses are cached for 5 seconds.
Response
{
"status": "online",
"source": {
"type": "live",
"collaborator": "studio",
"relay": null
},
"listeners": 12,
"current_track": {
"title": "Let There Be Light - Hans Hiptmair",
"start_time": "2026-08-05T14:03:21Z",
"artwork_url": "https://...",
"artwork_url_large": "https://..."
},
"history": [
{ "title": "Previous Song - Artist" }
],
"logo_url": "https://...",
"collaborators": [],
"relays": [],
"accepting_requests": false
}
Fields
| Field | Meaning |
|---|---|
status | online while the stream is up, offline otherwise |
source.type | live while a live input is on air, relay while a relay is on air, automated while AutoDJ is playing |
source.collaborator | studio or guest when source.type is live, otherwise null |
listeners | Current listener count |
current_track | The playing track: title, plus start_time, artwork_url, and artwork_url_large when available. Omitted when no track metadata exists |
history | Recently played tracks, newest first, each with a title |
logo_url | Your station logo from the Branding Kit, when set |
source.relay, collaborators, relays, and accepting_requests are reserved fields. They currently always return null, empty lists, or false.
An offline station still returns the full shape, with "status": "offline" and source.type set to automated.
Live or automated
source.type reflects what listeners are hearing, not who is connected. A DJ whose encoder is connected while the stream has already fallen back to AutoDJ reports automated, not live. For the full picture, including the widget attributes that expose the same state without any JavaScript, see Live Source Indicator.
Example
A minimal now-playing display with a live badge:
<div id="np"></div>
<script>
async function refresh() {
const res = await fetch("https://public.cloudrad.io/your-station-slug/status");
const data = await res.json();
const live = data.source.type === "live" ? "LIVE " : "";
const track = data.current_track ? data.current_track.title : "";
document.getElementById("np").textContent = live + track;
}
refresh();
setInterval(refresh, 10000);
</script>
Poll every 10 seconds or slower. Responses are cached for 5 seconds, so polling faster returns the same answer.
Product scope
This endpoint reports live status for CloudRadio One stations, which run our AutoDJ and live inputs. Stations on their own Shoutcast or Icecast server should use the stream widgets instead; the live-versus-automated distinction does not exist for them.