Canonical station metadata for the AirwaveDB internet radio directory.
AirwaveDB is a directory of internet radio stations and their playable stream endpoints. This repository stores station identity, normalized metadata, source mappings, and indexes. Consumer applications should use AirwaveDB/api.
Canonical data is stored as JSON under data/.
data/stations/<CC>.json— station metadata split by ISO 3166-1 alpha-2 country codedata/source_map.json— upstream source identifiers mapped to stable AirwaveDB station IDsdata/redirects.json— station ID redirects created when duplicate records are mergeddata/countries.json— country index and station countsdata/languages.json— canonical language codes and station countsdata/language_aliases.json— legacy/equivalent language codes mapped to canonical codesdata/categories.json— normalized categories and station countsdata/index.json— build metadata, source counts, and quality counters
Unknown or unclassified countries use ZZ.
The canonical machine-readable schema is schema/station.schema.json, using JSON Schema 2020-12.
{
"id": "awb_c89923852f31a58c4a4c",
"name": "Example Radio",
"country": "JP",
"subdivision": null,
"languages": ["ja"],
"categories": ["news"],
"tags": ["news", "talk"],
"homepage": "https://example.com/",
"favicon": "https://example.com/logo.png",
"type": "public",
"sourceCount": 2,
"updatedAt": "2026-10-13T00:00:00Z"
}type may be public, community, college, internet, or null. Missing metadata is kept as null or an empty array rather than guessed.
Categories and station types may be enriched from explicit upstream tags using conservative phrase matching. AirwaveDB does not infer language, category, or station type from country, station name, popularity, or other weak proxies. The generated quality counters make missing metadata visible instead of hiding it with plausible defaults.
Station records use canonical language codes. Equivalent ISO 639-2 bibliographic/terminologic forms are normalized when there is an exact ISO 639-1 equivalent, for example:
eng -> en
deu / ger -> de
jpn -> ja
fra / fre -> fr
spa -> es
Related but distinct language codes are not collapsed. For example, cmn is not silently rewritten to zh.
data/language_aliases.json preserves the accepted aliases so the public API can remain backwards-compatible with older language URLs.
The consumer-facing JSON API is maintained in AirwaveDB/api.
Routes include:
/v1/stations/:id
/v1/countries/:code
/v1/categories/:id
/v1/languages/:code
The automated import currently uses:
Source records are normalized and de-duplicated before they are written to data/stations/. Stream endpoints are maintained separately in AirwaveDB/streams.
The database is rebuilt automatically every day. A large unexpected reduction in the upstream dataset is rejected instead of replacing a healthy snapshot.
Read CONTRIBUTING.md before submitting station corrections or schema changes.
Database files are released under CC0 1.0. Station names, logos, websites, and other third-party material remain subject to their respective owners' rights.