Music — entry 023 of 32
Radio Browser
Radio Browser is a free, keyless, community-maintained directory of internet radio stations — over 60,000 of them — with search, tagging by genre/country/language, click-tracking, and ready-to-play M3U playlists for any station. It's fully open source, mirrored across several independently-run servers behind a round-robin DNS entry point, and its maintainers explicitly ask API consumers to pick a random mirror rather than hammer one instance. Responses are available as JSON or XML, with a dedicated M3U format for playlist endpoints.
Radio Browser is a keyless directory of internet radio stations mirrored across several independently-run servers. A live GET to `/json/stations/topvote/1` against the `de1` mirror returned a 200 with real, current station data (station name, stream URL, votes) and `access-control-allow-origin: *`, with no auth header sent at all.
GreatAPIs Score
Auth quickstart
- No API key or registration required today — every probe in this file returned real, live station data with no credential sent at all.
- The docs at de1.api.radio-browser.info ask: "Please send a descriptive User-Agent in your HTTP requests... Something like 'appname/appversion', for example 'Cool Radio App/1.2'" — a live GET with an explicitly empty `User-Agent:` header this run still returned a normal HTTP 200, so this is a courtesy convention the maintainer asks for, not an enforced requirement.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Get the most-voted station
GEThttps://de1.api.radio-browser.info/json/stations/topvote/1
[{"changeuuid":"03e43f84-4e3d-48eb-88ab-107340b86101","stationuuid":"78012206-1aa1-11e9-a80b-52543be04c81","serveruuid":null,"name":"MANGORADIO","url":"https://mangoradio.stream.laut.fm/mangoradio","url_resolved":"https://mangoradio.stream.laut.fm/mangoradio","homepage":"https://mangoradio.de/","favicon":"https://mangoradio.de/wp-content/uploads/cropped-Logo-192x192.webp","tags":"music,variety","country":"Germany","countrycode":"DE","iso_3166_2":"DE-RP","state":"Rheinland-Pfalz","language":"german","languagecodes":"DE,EN","votes":817613,"lastchangetime":"2026-01-14 23:29:03","lastchangetime_iso8601":"2026-01-14T23:29:03Z","codec":"MP3","bitrate":128,"hls":0,"lastcheckok":1,"lastchecktime":"2026-01-14 23:29:04","lastchecktime_iso8601":"2026-01-14T23:29:04Z","lastcheckoktime":"2026-01-14 23:29:04","lastcheckoktime_iso8601":"2026-01-14T23:29:04Z","lastlocalchecktime":"2026-01-14 23:29:04","lastlocalchecktime_iso8601":"2026-01-14T23:29:04Z","clicktimestamp":"2026-07-27 06:28:36","clicktimestamp_iso8601":"2026-07-27T06:28:36Z","clickcount":474,"clicktrend":474,"ssl_error":0,"geo_lat":null,"geo_long":null,"geo_distance":null,"has_extended_info":false}]`votes` and `clickcount` are live counters and will have moved by the time this is read again — the shape (name, url, url_resolved, country, codec, bitrate) is what's stable, not the exact numbers.
Developer reference
https://de1.api.radio-browser.infoGotchas & limits
- The docs' own onboarding step is to do a DNS lookup of `all.api.radio-browser.info` and pick one of the returned server hosts at random rather than hammering a single instance — a live query against `https://all.api.radio-browser.info/json/servers` this run resolved to a single mirror, `de1.api.radio-browser.info` (the same host this quickstart's `baseUrl` points at); other mirrors exist per the docs even though this sandbox's DNS only ever surfaced the one.
- A search with no matching station does not error: a live GET to `/json/stations/byname/zzzznonexistentstationxyz123` (a made-up name) returned HTTP 200 with body `[]`, not a 404.
- Three response formats are live under different path prefixes — `/json/...` (this quickstart's focus), `/xml/...`, and a dedicated `/m3u/...` shape for ready-to-play playlists — picking the wrong prefix for a given client (e.g. asking a media player for JSON) will not work even though the underlying station data is identical.