Radio Browser Stations API

Browse, search, and list radio stations.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

radio-browser-stations-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Radio Browser Categories Stations API
  description: 'Radio Browser is a free community-driven directory of internet radio

    stations. The API exposes the complete station database along with

    metadata (countries, languages, codecs, tags, states) and supports

    click counting, voting, and station submission.


    Servers are reached through a round-robin DNS pool. Resolve

    `all.api.radio-browser.info` to obtain the list of mirrors, then call

    one of them (for example `de1.api.radio-browser.info`). The base URL

    `api.radio-browser.info` also resolves to one of the active mirrors.


    Clients MUST send a descriptive `User-Agent` header in the form

    `appname/appversion`. Voting is throttled to one vote per station per

    IP every 10 minutes. Click counts are aggregated once per station per

    IP per 24 hours.

    '
  version: 0.7.44
  contact:
    name: Radio Browser
    url: https://www.radio-browser.info/
  license:
    name: AGPL-3.0
    url: https://www.gnu.org/licenses/agpl-3.0.html
servers:
- url: https://de1.api.radio-browser.info
  description: Germany 1 mirror
- url: https://nl1.api.radio-browser.info
  description: Netherlands 1 mirror
- url: https://at1.api.radio-browser.info
  description: Austria 1 mirror
- url: https://all.api.radio-browser.info
  description: Round-robin pool entry (resolve via DNS)
tags:
- name: Stations
  description: Browse, search, and list radio stations.
paths:
  /json/stations:
    get:
      tags:
      - Stations
      operationId: listStations
      summary: List All Stations
      description: Return the full collection of radio stations as JSON.
      parameters:
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/HideBroken'
      responses:
        '200':
          description: Array of station objects.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/search:
    get:
      tags:
      - Stations
      operationId: searchStations
      summary: Search Stations
      description: Advanced search across the station database using multiple optional filters.
      parameters:
      - in: query
        name: name
        schema:
          type: string
        description: Match station name (substring, case-insensitive).
      - in: query
        name: nameExact
        schema:
          type: boolean
          default: false
      - in: query
        name: country
        schema:
          type: string
      - in: query
        name: countrycode
        schema:
          type: string
          description: ISO 3166-1 alpha-2 country code.
      - in: query
        name: state
        schema:
          type: string
      - in: query
        name: language
        schema:
          type: string
      - in: query
        name: tag
        schema:
          type: string
      - in: query
        name: tagList
        schema:
          type: string
          description: Comma-separated tag list.
      - in: query
        name: codec
        schema:
          type: string
      - in: query
        name: bitrateMin
        schema:
          type: integer
          minimum: 0
      - in: query
        name: bitrateMax
        schema:
          type: integer
          minimum: 0
      - in: query
        name: order
        schema:
          type: string
          enum:
          - name
          - url
          - homepage
          - favicon
          - tags
          - country
          - state
          - language
          - votes
          - codec
          - bitrate
          - lastcheckok
          - lastchecktime
          - clicktimestamp
          - clickcount
          - clicktrend
          - random
      - in: query
        name: reverse
        schema:
          type: boolean
          default: false
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/HideBroken'
      responses:
        '200':
          description: Filtered list of stations.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/byuuid:
    get:
      tags:
      - Stations
      operationId: getStationsByUuid
      summary: Get Stations By UUID
      description: Return the stations matching the supplied station UUIDs.
      parameters:
      - in: query
        name: uuids
        required: true
        schema:
          type: string
        description: One UUID or a comma-separated list of UUIDs.
      responses:
        '200':
          description: Array of matching stations.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/byname/{searchterm}:
    get:
      tags:
      - Stations
      operationId: getStationsByName
      summary: Get Stations By Name
      parameters:
      - in: path
        name: searchterm
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Stations whose name matches the search term.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/bycountry/{searchterm}:
    get:
      tags:
      - Stations
      operationId: getStationsByCountry
      summary: Get Stations By Country
      parameters:
      - in: path
        name: searchterm
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Stations registered in the given country.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/bycountrycodeexact/{searchterm}:
    get:
      tags:
      - Stations
      operationId: getStationsByCountryCode
      summary: Get Stations By Country Code
      parameters:
      - in: path
        name: searchterm
        required: true
        schema:
          type: string
          description: ISO 3166-1 alpha-2 country code.
      responses:
        '200':
          description: Stations matching the country code exactly.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/bylanguage/{searchterm}:
    get:
      tags:
      - Stations
      operationId: getStationsByLanguage
      summary: Get Stations By Language
      parameters:
      - in: path
        name: searchterm
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Stations broadcasting in the given language.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/bytag/{searchterm}:
    get:
      tags:
      - Stations
      operationId: getStationsByTag
      summary: Get Stations By Tag
      parameters:
      - in: path
        name: searchterm
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Stations tagged with the given keyword.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/bycodec/{searchterm}:
    get:
      tags:
      - Stations
      operationId: getStationsByCodec
      summary: Get Stations By Codec
      parameters:
      - in: path
        name: searchterm
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Stations using the given audio codec.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/byurl:
    get:
      tags:
      - Stations
      operationId: getStationsByUrl
      summary: Get Stations By Stream URL
      parameters:
      - in: query
        name: url
        required: true
        schema:
          type: string
          format: uri
      responses:
        '200':
          description: Stations registered with the given stream URL.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/topclick:
    get:
      tags:
      - Stations
      operationId: getTopClickStations
      summary: Get Top Clicked Stations
      parameters:
      - in: path
        name: rowcount
        schema:
          type: integer
          minimum: 1
        required: false
      responses:
        '200':
          description: Stations ranked by click count.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/topvote:
    get:
      tags:
      - Stations
      operationId: getTopVoteStations
      summary: Get Top Voted Stations
      responses:
        '200':
          description: Stations ranked by vote count.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/lastclick:
    get:
      tags:
      - Stations
      operationId: getLastClickStations
      summary: Get Recently Clicked Stations
      responses:
        '200':
          description: Stations sorted by most recent click.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/lastchange:
    get:
      tags:
      - Stations
      operationId: getLastChangeStations
      summary: Get Recently Changed Stations
      responses:
        '200':
          description: Stations sorted by most recent change.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
  /json/stations/broken:
    get:
      tags:
      - Stations
      operationId: getBrokenStations
      summary: Get Broken Stations
      responses:
        '200':
          description: Stations whose latest health check failed.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Station'
components:
  parameters:
    Offset:
      in: query
      name: offset
      schema:
        type: integer
        minimum: 0
        default: 0
      description: Starting offset for pagination.
    HideBroken:
      in: query
      name: hidebroken
      schema:
        type: boolean
        default: false
      description: Exclude stations whose last health check failed.
    Limit:
      in: query
      name: limit
      schema:
        type: integer
        minimum: 0
        default: 100000
      description: Maximum rows to return.
  schemas:
    Station:
      type: object
      description: A radio station entry in the Radio Browser directory.
      properties:
        changeuuid:
          type: string
          format: uuid
        stationuuid:
          type: string
          format: uuid
        serveruuid:
          type: string
          format: uuid
          nullable: true
        name:
          type: string
        url:
          type: string
          format: uri
        url_resolved:
          type: string
          format: uri
        homepage:
          type: string
          format: uri
        favicon:
          type: string
          format: uri
        tags:
          type: string
          description: Comma-separated tag list.
        country:
          type: string
        countrycode:
          type: string
          description: ISO 3166-1 alpha-2.
        iso_3166_2:
          type: string
        state:
          type: string
        language:
          type: string
          description: Comma-separated language list.
        languagecodes:
          type: string
          description: Comma-separated ISO 639 codes.
        votes:
          type: integer
        lastchangetime:
          type: string
        lastchangetime_iso8601:
          type: string
          format: date-time
        codec:
          type: string
        bitrate:
          type: integer
          description: Kilobits per second.
        hls:
          type: integer
          enum:
          - 0
          - 1
        lastcheckok:
          type: integer
          enum:
          - 0
          - 1
        lastchecktime:
          type: string
        lastchecktime_iso8601:
          type: string
          format: date-time
        lastcheckoktime:
          type: string
        lastcheckoktime_iso8601:
          type: string
          format: date-time
        lastlocalchecktime:
          type: string
        lastlocalchecktime_iso8601:
          type: string
          format: date-time
        clicktimestamp:
          type: string
        clicktimestamp_iso8601:
          type: string
          format: date-time
          nullable: true
        clickcount:
          type: integer
        clicktrend:
          type: integer
        ssl_error:
          type: integer
          enum:
          - 0
          - 1
        geo_lat:
          type: number
          format: float
          nullable: true
        geo_long:
          type: number
          format: float
          nullable: true
        geo_distance:
          type: number
          format: float
          nullable: true
        has_extended_info:
          type: boolean