Tuning into the world,
one station at a time.
Database
60,969
radio stations available to stream from around the world.
Hi, I'm Johni — a software engineer from Brazil. Since 2008, I've been using technology to make my daily life better, and occasionally just to have fun.
As an enthusiast of radio, I built this project to help me discover stations from around the world. Radio takes me back to my childhood — I was born and raised in the countryside, where listening to the radio was a big part of growing up.
This is an open source project. You can find the source code on GitHub.
Have a suggestion to improve the project? Send me an email at johni.douglas.marangon@gmail.com.
Enjoying the project?
Buy me a coffee ☕
Connect & Explore
/linksWorth Checking Out
/inspirationREST API
/apiAntenna exposes a public HTTP API so you can query the radio station database programmatically.
/api/radio/stationsQuery Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
pageSize | number | 20 | Items per page (max 100) |
cursor | string | — | Opaque cursor from a previous response's pagination.nextCursor |
sortBy | name | country | name | Field to sort by |
order | asc | desc | asc | Sort direction |
country | string | — | Filter by exact country name |
language | string | — | Filter by exact language |
tag | string | — | Filter stations that contain this tag |
Response
{
"data": [
{
"id": "018edc4f-...",
"name": "Arrow Classic Rock",
"country": "The Netherlands",
"language": "dutch",
"streamUrl": "http://...",
"homepageUrl": "https://...",
"logoUrl": "https://...",
"tags": ["classic rock", "rock"]
}
],
"pagination": {
"nextCursor": "MDE4ZWRj...",
"nextPage": "https://antenna.show/api/radio/stations?pageSize=20&cursor=MDE4ZWRj...",
"previousPage": "https://antenna.show/api/radio/stations?pageSize=20&cursor=MDAwMDAw...",
"hasMore": true,
"pageSize": 20
}
}nextCursor— Pass as cursor in the next request; null when no more results.nextPage— Full URL to the next page; null when no more results.previousPage— Full URL to the previous page; null when at the first page.hasMore— true if another page exists.
Examples
# First page, 10 results sorted by name curl "https://antenna.show/api/radio/stations?pageSize=10" # Next page using cursor from previous response curl "https://antenna.show/api/radio/stations?pageSize=10&cursor=<nextCursor>" # Filter by country, sorted descending curl "https://antenna.show/api/radio/stations?country=Germany&sortBy=name&order=desc" # Filter by tag curl "https://antenna.show/api/radio/stations?tag=jazz"