Navaids
Search radio navigation infrastructure — VOR (VHF Omnidirectional Range, primary en-route navaid), NDB (Non-Directional Beacon), ILS (Instrument Landing System), DME (Distance Measuring Equipment), TACAN (Tactical Air Navigation), and combined facilities such as VORTAC (co-located VOR and TACAN). Use this endpoint for route overlays, approach context panels, or map layers where you need navaids beyond the subset embedded on Airports.
At least one filter is required (ident, airport, type, country, or bbox). Unfiltered global export is blocked.
Request
Requirements
x-api-key on every request (direct subscription). Learn more →https://data.skylinkapi.com/v3/navaids| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
ident | string | One filter required | - | Navaid identifier, e.g. JFK |
airport | string | One filter required | - | ICAO airport code for associated navaids |
type | string | One filter required | - | Navaid type, e.g. VOR, NDB, VORTAC, ILS, DME |
country | string | One filter required | - | ISO 3166-1 alpha-2 country code |
bbox | string | One filter required | - | Bounding box: lat1,lon1,lat2,lon2 — SW corner first, then NE. Example: 40,-74,41,-73 |
limit | integer | No | 100 | Maximum records returned (max 500) |
Combine filters (e.g. country=US&type=[VOR](https://en.wikipedia.org/wiki/VHF_omnidirectional_range)) to narrow large result sets.
Response
{
"navaids": [
{
"id": 89475,
"ident": "JFK",
"name": "Kennedy",
"type": "VOR-DME",
"frequency_khz": 115900.0,
"latitude_deg": 40.63290023803711,
"longitude_deg": -73.77140045166016,
"elevation_ft": 11.0,
"iso_country": "US",
"dme_frequency_khz": 115900.0,
"dme_channel": "106X",
"slaved_variation_deg": -12.001,
"magnetic_variation_deg": -13.182,
"usageType": "BOTH",
"power": "HIGH",
"associated_airport": "KJFK"
}
],
"total": 1,
"filters_applied": {
"ident": "JFK"
}
}Top-level fields
| Field | Type | Required | Description |
|---|---|---|---|
navaids | array | Yes | Matched navaid records (may be []) |
total | integer | Yes | Number of returned records |
filters_applied | object | Yes | Echo of accepted filters |
Navaid item (navaids[])
| Field | Type | Required | Null? | Description |
|---|---|---|---|---|
id | integer | Yes | Never | Numeric record identifier |
ident | string | Yes | Never | Navaid identifier |
name | string | Yes | Never | Navaid name |
type | string | Yes | Never | Facility type (VOR-DME, NDB, etc.) |
frequency_khz | number | null | No | Yes | Primary frequency in kHz |
latitude_deg | number | Yes | Never | WGS-84 latitude |
longitude_deg | number | Yes | Never | WGS-84 longitude |
elevation_ft | number | null | No | Yes | Elevation in feet MSL |
iso_country | string | null | No | Yes | Country code |
dme_frequency_khz | number | null | No | Yes | DME frequency when applicable |
dme_channel | string | null | No | Yes | DME channel, e.g. 106X |
slaved_variation_deg | number | null | No | Yes | Slaved magnetic variation |
magnetic_variation_deg | number | null | No | Yes | Local magnetic variation (angular difference between true north and magnetic north at the navaid) |
usageType | string | null | No | Yes | Usage class (e.g. BOTH) |
power | string | null | No | Yes | Transmitter power class |
associated_airport | string | null | No | Yes | ICAO airport code if tied to an airport |
Optional avionics fields (nullability)Expand section
dme_frequency_khz, dme_channel, slaved_variation_deg, and magnetic_variation_deg are often null depending on facility type. associated_airport may be null for en-route navaids. Treat navaid type as an open-ended string — do not hard-fail unknown values.
Client types
"""Navaid search response models for GET /navaids."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass NavaidsSearchRequest: ident: str | None = None airport: str | None = None type: str | None = None country: str | None = None bbox: str | None = None limit: int | None = None@dataclassclass NavaidRecord: id: int ident: str name: str type: str frequency_khz: float | None latitude_deg: float longitude_deg: float elevation_ft: float | None iso_country: str | None dme_frequency_khz: float | None dme_channel: str | None slaved_variation_deg: float | None magnetic_variation_deg: float | None usageType: str | None power: str | None associated_airport: str | None@dataclassclass NavaidsResponse: navaids: list[NavaidRecord] total: int filters_applied: dict[str, str]Integration
Fetch navaids around an airport and return map-ready objects for route overlays.
The example below caches query results for 6 hours and uses explicit timeouts so map rendering does not stall on a slow response.
import osimport timefrom dataclasses import dataclassimport requestsHEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3"CACHE: dict[str, tuple[dict, float]] = {}NAVAID_TTL = 21_600 # 6 h@dataclassclass NavaidPoint: ident: str name: str navaid_type: str latitude: float longitude: float frequency_khz: float | None associated_airport: str | Nonedef fetch_navaids(*, airport: str) -> list[dict]: airport = airport.upper() key = f"navaids:airport:{airport}" cached = CACHE.get(key) if cached and time.time() < cached[1]: return cached[0]["navaids"] try: r = requests.get( f"{BASE}/navaids", headers=HEADERS, params={"airport": airport}, timeout=(10, 15), ) except requests.Timeout as exc: raise RuntimeError(f"SkyLink timeout fetching navaids for {airport}") from exc r.raise_for_status() data = r.json() CACHE[key] = (data, time.time() + NAVAID_TTL) return data.get("navaids", [])def navaid_points_for_map(airport: str) -> list[NavaidPoint]: return [ NavaidPoint( ident=item["ident"], name=item["name"], navaid_type=item["type"], latitude=item["latitude_deg"], longitude=item["longitude_deg"], frequency_khz=item.get("frequency_khz"), associated_airport=item.get("associated_airport"), ) for item in fetch_navaids(airport=airport) ]if __name__ == "__main__": import json from dataclasses import asdict points = navaid_points_for_map("KJFK") print(json.dumps([asdict(p) for p in points[:8]], indent=2))Implementation notes
Filter early. Combine country, type, or airport filters to reduce payload size and map clutter.
BBox format. Use lat1,lon1,lat2,lon2 (southwest → northeast), matching Winds Aloft, PIREPs, and AIRMET/SIGMET — not minLon,minLat,maxLon,maxLat.
Airport navaids. Airports embeds a subset per field. Use this endpoint for bbox queries, type/country filters, or overlays beyond a single airport lookup.
Error responses
Shared errors: Error Handling. Endpoint-specific:
400 - no filters provided
{
"detail": "At least one filter is required: ident, airport, type, country, or bbox. Returning the full navaid dataset unfiltered is not supported."
}400 - invalid bbox
{
"detail": "Invalid bbox: could not convert string to float: 'bad'"
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
Navaid identifier — partial, case-insensitive (e.g. JFK, VOR)
Associated airport ICAO code — exact match (e.g. KJFK)
Navaid type — exact, case-insensitive (e.g. VOR, NDB, ILS, DME, TACAN)
ISO country code — exact match (e.g. US, GB)
Bounding box as lat1,lon1,lat2,lon2 (SW corner to NE corner)
Maximum number of results to return (default 100, max 500)
1001 <= value <= 500Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3/navaids"{
"navaids": [
{
"id": 0,
"ident": "string",
"name": "string",
"type": "string",
"frequency_khz": 0,
"latitude_deg": 0,
"longitude_deg": 0,
"elevation_ft": 0,
"iso_country": "string",
"dme_frequency_khz": 0,
"dme_channel": "string",
"slaved_variation_deg": 0,
"magnetic_variation_deg": 0,
"usageType": "string",
"power": "string",
"associated_airport": "string"
}
],
"total": 0,
"filters_applied": {}
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Integration guides
| Guide | Covers |
|---|---|
| Airports | Lookup, frequencies, runway comparison |
| Airport search | Autocomplete and nearest-by-GPS |
| Navaids | Chart overlay and ILS filter |
| Error handling | 404, empty search, validation |
| Caching & monitoring | TTLs and quota logging |
Related: Airports · Airport Search · Aerodrome Charts