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

Auth
x-api-key on every request (direct subscription). Learn more →
GEThttps://data.skylinkapi.com/v3/navaids
ParameterTypeRequiredDefaultDescription
identstringOne filter required-Navaid identifier, e.g. JFK
airportstringOne filter required-ICAO airport code for associated navaids
typestringOne filter required-Navaid type, e.g. VOR, NDB, VORTAC, ILS, DME
countrystringOne filter required-ISO 3166-1 alpha-2 country code
bboxstringOne filter required-Bounding box: lat1,lon1,lat2,lon2 — SW corner first, then NE. Example: 40,-74,41,-73
limitintegerNo100Maximum 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

FieldTypeRequiredDescription
navaidsarrayYesMatched navaid records (may be [])
totalintegerYesNumber of returned records
filters_appliedobjectYesEcho of accepted filters
FieldTypeRequiredNull?Description
idintegerYesNeverNumeric record identifier
identstringYesNeverNavaid identifier
namestringYesNeverNavaid name
typestringYesNeverFacility type (VOR-DME, NDB, etc.)
frequency_khznumber | nullNoYesPrimary frequency in kHz
latitude_degnumberYesNeverWGS-84 latitude
longitude_degnumberYesNeverWGS-84 longitude
elevation_ftnumber | nullNoYesElevation in feet MSL
iso_countrystring | nullNoYesCountry code
dme_frequency_khznumber | nullNoYesDME frequency when applicable
dme_channelstring | nullNoYesDME channel, e.g. 106X
slaved_variation_degnumber | nullNoYesSlaved magnetic variation
magnetic_variation_degnumber | nullNoYesLocal magnetic variation (angular difference between true north and magnetic north at the navaid)
usageTypestring | nullNoYesUsage class (e.g. BOTH)
powerstring | nullNoYesTransmitter power class
associated_airportstring | nullNoYesICAO 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'"
}
GET
/navaids
x-api-key<token>

Your SkyLink licence key, for keys bought direct from skylinkapi.com.

In: header

Query Parameters

ident?string

Navaid identifier — partial, case-insensitive (e.g. JFK, VOR)

airport?string

Associated airport ICAO code — exact match (e.g. KJFK)

type?string

Navaid type — exact, case-insensitive (e.g. VOR, NDB, ILS, DME, TACAN)

country?string

ISO country code — exact match (e.g. US, GB)

bbox?string

Bounding box as lat1,lon1,lat2,lon2 (SW corner to NE corner)

limit?integer

Maximum number of results to return (default 100, max 500)

Default100
Range1 <= value <= 500

Response 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

GuideCovers
AirportsLookup, frequencies, runway comparison
Airport searchAutocomplete and nearest-by-GPS
NavaidsChart overlay and ILS filter
Error handling404, empty search, validation
Caching & monitoringTTLs and quota logging

Related: Airports · Airport Search · Aerodrome Charts