# Radio API
> Search and explore over 50,000 internet and FM radio stations worldwide — a fast, clean wrapper over Radio Browser with automatic mirror failover. Find stations by name, country, language, genre tag or codec, sort by votes or popularity, fetch a single station by UUID with its stream URL, favicon and metadata, list the most-voted stations, browse all countries with station counts and discover the most popular genre/format tags. Every endpoint accepts input via the query string or the request body and returns lean, predictable JSON with the playable stream URL, bitrate, codec, tags and geo where available. Ideal for radio players, music and media apps, smart-speaker skills and directory features.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/radio-api/..."
```

## Pricing
- **Free** (Free) — 20,000 calls/Mo, 5 req/s
- **Basic** ($8/Mo) — 250,000 calls/Mo, 15 req/s
- **Pro** ($24/Mo) — 2,000,000 calls/Mo, 40 req/s
- **Mega** ($59/Mo) — 10,000,000 calls/Mo, 120 req/s

## Endpoints

### Radio

#### `GET /v1/countries` — Countries with station counts

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/radio-api/v1/countries"
```

**Response:**
```json
{
    "data": {
        "count": 237,
        "results": [
            {
                "code": "AD",
                "name": "Andorra",
                "stations": 8
            },
            {
                "code": "AE",
                "name": "The United Arab Emirates",
                "stations": 774
            },
            {
                "code": "AF",
                "name": "Afghanistan",
                "stations": 124
            },
            {
                "code": "AG",
                "name": "Antigua And Barbuda",
                "stations": 6
            },
            {
                "code": "AI",
                "name": "Anguilla",
                "stations": 6
            },
            {
                "code": "AL",
                "name": "Albania",
                "stations": 37
            },
            {
                "code": "AM",
                "name": "Armenia",
                "stations": 17
            },
            {
                "code": "AO",
                "name": "Angola",
                "stations": 16
            },
            {
                "code": "AQ",
                "name": "Antarctica",
                "stations": 10
            },
            {
                "code": "AR",
                "name": "Argentina",
                "stations": 763
            },
            {
                "code": "AS",
                "name": "American Samoa",
                "stations": 15
            },
            {
       
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/search` — Search radio stations

**Parameters:**
- `name` (query, optional, string) — Station name Example: `jazz`
- `country` (query, optional, string) — Country name Example: `Germany`
- `countrycode` (query, optional, string) — ISO-2 country code Example: `DE`
- `language` (query, optional, string) — Language Example: `english`
- `tag` (query, optional, string) — Genre/format tag Example: `rock`
- `codec` (query, optional, string) — Codec Example: `MP3`
- `order` (query, optional, string) — votes|clickcount|name|bitrate|random|... Example: `votes`
- `reverse` (query, optional, string) — Reverse order Example: `true`
- `limit` (query, optional, string) — 1..100 (default 20) Example: `20`
- `offset` (query, optional, string) — Offset Example: `0`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/radio-api/v1/search?name=jazz&country=Germany&countrycode=DE&language=english&tag=rock&codec=MP3&order=votes&reverse=true&limit=20&offset=0"
```

**Response:**
```json
{
    "data": {
        "count": 1,
        "limit": 20,
        "offset": 0,
        "filters": {
            "tag": "rock",
            "name": "jazz",
            "codec": "MP3",
            "order": "votes",
            "country": "Germany",
            "language": "english",
            "countrycode": "DE"
        },
        "results": [
            {
                "geo": {
                    "lat": 48.12775420910939,
                    "lon": 11.64776813577383
                },
                "url": "https://breakz-high.rautemusik.fm/?ref=rb-djclubcharts0326",
                "name": "-- # TOP 100 CHARTS --- DJ MIXES -- Pop, Rock, Dance, House, Techno, Trance, Electro, Hip-Hop, Rap, RnB, Reggaeton, Latin, Jazz, Blues, Soul, Funk, Metal, Indie, Alternative, Chillout, Lounge, Ambient, Classical, Acoustic, Party, Hits, Charts, Oldies, 80s, 90s, EDM, Club, Deep House, Tropical, Mood, Love Songs, Workout, Relax",
                "tags": [
                    "charts",
                    "chillout",
                    "edm",
                    "edm festival",
                    "house",
                    "lifestyle",
                    "lounge",
                    "non-stop music",
                    "party",
                    "party hits",
                    "partyhits",
                    "rock",
                    "top 40",
                    "top charts",
                    "top hits",
                    "top100",
                    "top40"
       
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/station` — Single station by uuid

**Parameters:**
- `uuid` (query, required, string) — Station UUID Example: `510506e7-6bc0-4b91-b6a1-fc024ccad1a8`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/radio-api/v1/station?uuid=510506e7-6bc0-4b91-b6a1-fc024ccad1a8"
```

**Response:**
```json
{
    "data": {
        "geo": {
            "lat": 19.43349589121079,
            "lon": -99.13358688354492
        },
        "url": "https://playerservices.streamtheworld.com/api/livestream-redirect/ACIR22_s01AAC.aac",
        "name": "SMOOTH JAZZ: Sax, piano, guitarra y voz: cool jazz",
        "tags": [
            "acir",
            "acir online",
            "américa",
            "cdmx",
            "ciudad de méxico",
            "cool jazz",
            "entretenimiento",
            "español",
            "estación",
            "grupo acir",
            "guitar jazz",
            "iheart",
            "iheart radio",
            "jazz",
            "latinoamérica",
            "mexico city",
            "moi merino",
            "music",
            "méxico",
            "música",
            "norteamérica",
            "online",
            "online only",
            "piano",
            "piano jazz",
            "radio",
            "radio online",
            "sax",
            "saxophone",
            "smooth jazz",
            "valle de méxico"
        ],
        "uuid": "510506e7-6bc0-4b91-b6a1-fc024ccad1a8",
        "codec": "AAC+",
        "state": "Ciudad de México",
        "votes": 107,
        "bitrate": 48,
        "country": "Mexico",
        "favicon": "https://i.iheart.com/v3/re/assets.streams/63ee5ccb23c81aa16510435a",
        "homepage": "https://www.iheart.com/live/smooth-jazz-8063/",
        "language": "spanish",
        "clickcount
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/tags` — Popular genre/format tags

**Parameters:**
- `limit` (query, optional, string) — 1..500 (default 50) Example: `50`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/radio-api/v1/tags?limit=50"
```

**Response:**
```json
{
    "data": {
        "count": 50,
        "results": [
            {
                "name": "pop",
                "stations": 5511
            },
            {
                "name": "music",
                "stations": 4576
            },
            {
                "name": "rock",
                "stations": 2897
            },
            {
                "name": "news",
                "stations": 2717
            },
            {
                "name": "radio",
                "stations": 1992
            },
            {
                "name": "entretenimiento",
                "stations": 1904
            },
            {
                "name": "estación",
                "stations": 1865
            },
            {
                "name": "méxico",
                "stations": 1724
            },
            {
                "name": "norteamérica",
                "stations": 1630
            },
            {
                "name": "fm",
                "stations": 1584
            },
            {
                "name": "classical",
                "stations": 1562
            },
            {
                "name": "moi merino",
                "stations": 1531
            },
            {
                "name": "música",
                "stations": 1482
            },
            {
                "name": "latinoamérica",
                "stations": 1459
            },
            {
                "name": "dance",
                "stations": 
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/topvote` — Most-voted stations

**Parameters:**
- `limit` (query, optional, string) — 1..100 (default 20) Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/radio-api/v1/topvote?limit=20"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "results": [
            {
                "geo": null,
                "url": "https://mangoradio.stream.laut.fm/mangoradio",
                "name": "MANGORADIO",
                "tags": [
                    "music",
                    "variety"
                ],
                "uuid": "78012206-1aa1-11e9-a80b-52543be04c81",
                "codec": "MP3",
                "state": "Rheinland-Pfalz",
                "votes": 807985,
                "bitrate": 128,
                "country": "Germany",
                "favicon": "https://mangoradio.de/wp-content/uploads/cropped-Logo-192x192.webp",
                "homepage": "https://mangoradio.de/",
                "language": "german",
                "clickcount": 354,
                "countrycode": "DE"
            },
            {
                "geo": null,
                "url": "https://dancewave.online/dance.mp3",
                "name": "Dance Wave!",
                "tags": [
                    "club dance electronic house trance"
                ],
                "uuid": "962cc6df-0601-11e8-ae97-52543be04c81",
                "codec": "MP3",
                "state": null,
                "votes": 552835,
                "bitrate": 128,
                "country": "Hungary",
                "favicon": "https://dancewave.online/dw_logo.png",
                "homepage": "https://dancewave.online/",
                "language": "english",
                "clickcount": 
…(truncated, see openapi.json for full schema)
```


---
Marketplace page: https://www.oanor.com/api/radio-api
OpenAPI spec: https://www.oanor.com/api/radio-api/openapi.json
