{"openapi":"3.1.0","info":{"title":"Airwave API","version":"0.1.0","description":"Internet radio: search 50,000+ stations by name, country, language, tag or place with stream URLs; top and trending; nearby; browse countries, languages, tags.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://airwave.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/airwave/docs"},"termsOfService":"https://connectorbay.com/airwave/terms"},"servers":[{"url":"https://airwave.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/airwave/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/search_stations":{"post":{"operationId":"search_stations","summary":"Search stations by any mix of name, country, state, language and tag, ranked by votes (default), recent","description":"Search stations by any mix of name, country, state, language and tag, ranked by votes (default), recent\n    clicks, trend, name or bitrate; returns stream URLs. Use for \"Hindi news radio\", \"jazz in France\", \"Tamil FM\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Station name words.","examples":["Radio Mirchi","BBC Radio 4","Jazz FM"],"title":"Name"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Country (ISO-2 or name).","examples":["IN","France","US"],"title":"Country"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"State/region as in the directory.","examples":["Maharashtra","California"],"title":"State"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Language.","examples":["hindi","tamil","spanish"],"title":"Language"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Tag/genre.","examples":["news","jazz","bollywood","classical","talk"],"title":"Tag"},"order":{"default":"votes","description":"votes | clickcount | clicktrend | name | bitrate","title":"Order","type":"string"},"limit":{"default":12,"maximum":40,"minimum":1,"title":"Limit","type":"integer"}},"title":"search_stationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/station":{"post":{"operationId":"station","summary":"One station's full record by id (stream URL, codec, bitrate, homepage, logo, tags, votes, online).","description":"One station's full record by id (stream URL, codec, bitrate, homepage, logo, tags, votes, online).","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Station uuid from a search result.","title":"Id","type":"string"}},"required":["id"],"title":"stationArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/top_stations":{"post":{"operationId":"top_stations","summary":"Most-voted, most-clicked or trending stations worldwide or in a country. Use for \"popular radio in India\",","description":"Most-voted, most-clicked or trending stations worldwide or in a country. Use for \"popular radio in India\",\n    \"what's trending\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"kind":{"default":"votes","description":"votes | clicks | trending","title":"Kind","type":"string"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Limit to a country (ISO-2 or name).","title":"Country"},"limit":{"default":12,"maximum":40,"minimum":1,"title":"Limit","type":"integer"}},"title":"top_stationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/stations_near":{"post":{"operationId":"stations_near","summary":"Stations geotagged within a radius of a place or coordinates (local FM simulcasts and community stations).","description":"Stations geotagged within a radius of a place or coordinates (local FM simulcasts and community stations).\n    Use for \"radio stations near Pune\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"City with state/country.","examples":["Pune, India","Austin, TX"],"title":"Place"},"latitude":{"anyOf":[{"maximum":90,"minimum":-90,"type":"number"},{"type":"null"}],"default":null,"title":"Latitude"},"longitude":{"anyOf":[{"maximum":180,"minimum":-180,"type":"number"},{"type":"null"}],"default":null,"title":"Longitude"},"radius_km":{"default":50,"exclusiveMinimum":1,"maximum":500,"title":"Radius Km","type":"number"},"limit":{"default":12,"maximum":40,"minimum":1,"title":"Limit","type":"integer"}},"title":"stations_nearArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/browse":{"post":{"operationId":"browse","summary":"Countries, languages or tags ranked by station count — to discover what to search for. Use for \"which","description":"Countries, languages or tags ranked by station count — to discover what to search for. Use for \"which\n    languages have the most stations\", \"tags starting with 'bolly'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"kind":{"default":"tags","description":"countries | languages | tags","title":"Kind","type":"string"},"starts_with":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter names by prefix.","examples":["hin","ja"],"title":"Starts With"},"limit":{"default":40,"maximum":100,"minimum":1,"title":"Limit","type":"integer"}},"title":"browseArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}