Radio API— Documentation
API Reference

Africa Radio API

Free, unlimited access to 28 Kenya radio stations with live now-playing scraped from each audio stream, plus station lists for 12 other African countries. No API key required.

28 Kenya Stations
With live track data
13 Countries
Africa-wide coverage
Live Now-Playing
ICY + Zetta + Zeno.fm
~1.5s Response
Parallel stream reads

Base URL

https://apis.xcasper.space

All endpoints accept GET requests. CORS is open — you can call from any browser or server. No authentication required.

Returns all 28 Kenya radio stations enriched with live now-playing data scraped directly from each stream. Streams are read in parallel — max response time is ~2 seconds.

Parameters

NameRequiredDescriptionExample
categoryoptionalFilter by station category. Omit or set to "all" for every station.music

Notes

  • ·nowPlaying is null when the station is between songs, airing a jingle, or sends no ICY metadata.
  • ·nowPlaying.artist may be null (some streams omit artist information).
  • ·Stations using Zetta playout (Classic 105, Kiss FM, Radio Jambo, Radio Maisha) embed full XML in ICY StreamTitle — the API parses this automatically.
  • ·HLS (.m3u8) streams and HTML embeds return nowPlaying: null — they cannot be read byte-by-byte.

Code Examples

cURL
curl "https://apis.xcasper.space/api/radio/kenya?category=all"
JavaScript
const res = await fetch("https://apis.xcasper.space/api/radio/kenya?category=all");
const data = await res.json();
console.log(data);
Python
import requests

res = requests.get("https://apis.xcasper.space/api/radio/kenya?category=all")
data = res.json()
print(data)

Response Shape

JSON
{
  "success": true,
  "provider": "CASPER TECH",
  "owner": "TRABY CASPER",
  "country": "Kenya",
  "category": "all",
  "count": 28,
  "stations": [
    {
      "id": "kiss",
      "name": "Kiss FM",
      "signal": "100.3 FM",
      "frequency": "100.3 FM",
      "description": "Contemporary hit radio and popular music",
      "category": "music",
      "logo": "/images/radio-logos/kiss.png",
      "streamUrl": "https://atunwadigital.streamguys1.com/kiss100fm",
      "isLive": true,
      "nowPlaying": {
        "artist": "COSTER OJWANG FT. WATENDAWILI",
        "title": "MANYO PESA"
      },
      "lastUpdated": "2026-03-30T19:20:06.000Z"
    }
  ]
}

How Now-Playing Works

The API uses three scraping methods depending on the station's stream infrastructure:

ICY Metadata (Icecast / ShoutCast / StreamGuys)

  • ·Sends an HTTP GET request to the audio stream URL with the Icy-MetaData: 1 header.
  • ·Reads metaint bytes of raw audio data, then reads the metadata block that follows.
  • ·Parses StreamTitle from the metadata: "Artist - Title" or just "Title".
  • ·Connection is closed immediately after reading the metadata block — not a full stream download.
  • ·Stations: Kameme, Inooro, Citizen, Capital, Egesa, Ramogi, Mulembe, Smooth, Hot 96, NRG, and more.

Zetta XML (Radio Africa Group stations)

  • ·Some stations embed a full Zetta playout system XML document inside the ICY StreamTitle field.
  • ·The XML contains a LogEventCollection with LogEvent elements per scheduled item.
  • ·The API finds the element with Status="CURRENT" and extracts Title and Artist1 attributes.
  • ·Stations: Classic 105, Kiss FM, Radio Jambo, Radio Maisha.

Zeno.fm Nowplaying API

  • ·For streams hosted on Zeno.fm (URL contains "zeno.fm"), the mount ID is extracted from the URL.
  • ·Calls https://api.zeno.fm/mounts/uuid/{mountId}/nowplaying directly.
  • ·Returns structured JSON with song title and artist.
  • ·Stations: Ghetto Radio, Kass FM, Radio Waumini, Hero Radio, KBC English Service.

Kenya Station Reference

All 28 stations with their IDs, categories, and now-playing source.

StationIDCategoryNow-Playing Source
Radio 47radio-47musicHLS stream — no now-playing
Kameme FMkamemelocalICY
Inooro FMinoorolocalICY
Citizen RadiocitizennewsICY
Kiss FMkissmusicICY + Zetta XML
Classic 105classic-105musicICY + Zetta XML
Ghetto RadioghettomusicZeno.fm API
HBR (Homeboyz)hbrmusicICY
Capital FMcapitalmusicICY
Radio JambojamboentertainmentICY + Zetta XML
Radio MariamariareligiousICY
Egesa FMegesalocalICY
Ramogi FMramogilocalICY
Mulembe FMmulembelocalICY
Msenangu FMmsenangu-fmlocalICY
Sound Asiasound-asiamusicICY
Musyi FMmusyilocalICY
Radio MaishamaishanewsICY + Zetta XML
Family Radio 316family-316religiousICY
Kass FMkasslocalZeno.fm API
Radio WauminiwauminireligiousZeno.fm API
West FMwestlocalICY
Smooth FMsmoothmusicICY
East FMeast-fmlocalICY
Hero RadioheroinspirationalZeno.fm API
Hot 96hot96musicICY
KBC English Servicekbc-englishnewsZeno.fm API
NRG RadionrgmusicICY

Station Categories

Use these values in the category query parameter.

allmusicnewslocalreligiousentertainmentsportsinspirational

Standard Response Envelope

All responses follow a consistent structure.

Success

{
  "success": true,
  "provider": "CASPER TECH",
  "count": 28,
  "stations": [ ... ]
}

Error

{
  "success": false,
  "provider": "CASPER TECH",
  "error": "Description of what went wrong"
}

Built by CASPER TECHNOLOGY · Free for all developers