Music — entry 023 of 30
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.infoand pick one of the returned server hosts at random rather than hammering a single instance — a live query againsthttps://all.api.radio-browser.info/json/serversthis run resolved to a single mirror,de1.api.radio-browser.info(the same host this quickstart'sbaseUrlpoints 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.