country string ISO 3166-1 alpha-2 country or territory code, case-insensitive (dk and DK both resolve to DK). Must be exactly two letters.
Every scheduled-service airport with an IATA code — 4,159 rows with ICAO code, city, country, coordinates, elevation, time zone and 5,660 runways.
Authoritative reference data or standards computation
Returns matching airports in IATA-code order. At most 100 records come back per request — use 'offset' to page and 'count' to shorten. Filters compose, and a zero-match filter returns an empty list plus a warning.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
country | string | example: DK | ISO 3166-1 alpha-2 country or territory code, case-insensitive (dk and DK both resolve to DK). Must be exactly two letters. |
search | string | example: sao paulo | Case- and diacritic-insensitive contains match over name, served city, country, country code, IATA code, ICAO code and ident. |
type | enum | default: any allowed: any | large_airport | medium_airport | small_airport | seaplane_base | heliport example: medium_airport | Only return one OurAirports size classification; any keeps every classification. |
minRunwayFt | int | allowed: 1 – 20000 example: 10000 | Only airports whose longest runway not flagged closed in the 2026-09-14 OurAirports runway snapshot is at least this many feet. The longest in the snapshot is 16,404 ft; the 204 airports with no runway row or no recorded open-runway length never match. |
offset | int | default: 0 allowed: 0 – 100000 example: 100 | Skip this many matches before returning records, for paging through a filter that matches more than one page. |
country string ISO 3166-1 alpha-2 country or territory code, case-insensitive (dk and DK both resolve to DK). Must be exactly two letters.
search string Case- and diacritic-insensitive contains match over name, served city, country, country code, IATA code, ICAO code and ident.
type enum Only return one OurAirports size classification; any keeps every classification.
minRunwayFt int Only airports whose longest runway not flagged closed in the 2026-09-14 OurAirports runway snapshot is at least this many feet. The longest in the snapshot is 16,404 ft; the 204 airports with no runway row or no recorded open-runway length never match.
offset int Skip this many matches before returning records, for paging through a filter that matches more than one page.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
count | int | default: 100 allowed: 1 – 100 example: 3 | Limit the number of returned records (1–100). Defaults to 100. |
fields | list | example: name,city | Return only these fields (comma-separated). Mutually exclusive with 'exclude'. |
exclude | list | example: timezone | Return all fields except these (comma-separated). |
format | enum | default: json allowed: json | ndjson | csv example: csv | Response format: json envelope, ndjson (one record per line) or csv. |
pretty | boolean | default: false example: true | Pretty-print the JSON response. |
unwrap | boolean | default: false example: true | Drop the envelope: return the raw array/object without data/meta wrapper. |
count int Limit the number of returned records (1–100). Defaults to 100.
fields list Return only these fields (comma-separated). Mutually exclusive with 'exclude'.
exclude list Return all fields except these (comma-separated).
format enum Response format: json envelope, ndjson (one record per line) or csv.
pretty boolean Pretty-print the JSON response.
unwrap boolean Drop the envelope: return the raw array/object without data/meta wrapper.
| Field | Type | Description | Example |
|---|---|---|---|
name | string | Airport name exactly as recorded in the OurAirports snapshot. | Copenhagen Kastrup Airport |
city | string | null | Primary municipality served, as recorded by OurAirports; it need not be the municipality where the airport is physically located. null when the snapshot records none. | Copenhagen |
country | string | Common English country or territory name. | Denmark |
countryCode | string (ISO 3166-1 alpha-2) | Two-letter country or territory code. | DK |
iata | string | Three-letter IATA airport code; unique across the snapshot. | CPH |
icao | string | null | Four-letter ICAO location indicator, or null for the airports the snapshot has no ICAO code for. | EKCH |
ident | string | OurAirports identifier — the ICAO code when one exists, otherwise a national or OurAirports-assigned id such as 5A8 or AG-0001. Always unique and always present. | EKCH |
type | string | OurAirports size classification: large_airport, medium_airport, small_airport, seaplane_base, heliport. | large_airport |
latitude | float | Airport latitude in WGS84 decimal degrees (positive north), rounded to 6 decimals. | 55.617901 |
longitude | float | Airport longitude in WGS84 decimal degrees (positive east), rounded to 6 decimals. | 12.656 |
elevationFt | integer | null | Airport elevation above mean sea level in feet; negative values are below sea level, null when the snapshot records none. | 17 |
timezone | string | null | IANA time zone id derived from the pinned coordinates at snapshot time and validated against the airport's ISO country; approximate near zone boundaries and null for the airports where the derivation could not be confirmed. | Europe/Copenhagen |
name string Airport name exactly as recorded in the OurAirports snapshot.
example: Copenhagen Kastrup Airport
city string | null Primary municipality served, as recorded by OurAirports; it need not be the municipality where the airport is physically located. null when the snapshot records none.
example: Copenhagen
country string Common English country or territory name.
example: Denmark
countryCode string (ISO 3166-1 alpha-2) Two-letter country or territory code.
example: DK
iata string Three-letter IATA airport code; unique across the snapshot.
example: CPH
icao string | null Four-letter ICAO location indicator, or null for the airports the snapshot has no ICAO code for.
example: EKCH
ident string OurAirports identifier — the ICAO code when one exists, otherwise a national or OurAirports-assigned id such as 5A8 or AG-0001. Always unique and always present.
example: EKCH
type string OurAirports size classification: large_airport, medium_airport, small_airport, seaplane_base, heliport.
example: large_airport
latitude float Airport latitude in WGS84 decimal degrees (positive north), rounded to 6 decimals.
example: 55.617901
longitude float Airport longitude in WGS84 decimal degrees (positive east), rounded to 6 decimals.
example: 12.656
elevationFt integer | null Airport elevation above mean sea level in feet; negative values are below sea level, null when the snapshot records none.
example: 17
timezone string | null IANA time zone id derived from the pinned coordinates at snapshot time and validated against the airport's ISO country; approximate near zone boundaries and null for the airports where the derivation could not be confirmed.
example: Europe/Copenhagen
/api/airports {
"data": [
{
"name": "Anaa Airport",
"city": "Anaa",
"country": "French Polynesia",
"countryCode": "PF",
"iata": "AAA",
"icao": "NTGA",
"ident": "NTGA",
"type": "medium_airport",
"latitude": -17.3526,
"longitude": -145.509995,
"elevationFt": 10,
"timezone": "Pacific/Tahiti"
},
{
"name": "El Arish International Airport",
"city": "El Arish",
"country": "Egypt",
"countryCode": "EG",
"iata": "AAC",
"icao": "HEAR",
"ident": "HEAR",
"type": "large_airport",
"latitude": 31.055324,
"longitude": 33.827964,
"elevationFt": 118,
"timezone": "Africa/Cairo"
},
{
"name": "Annaba Rabah Bitat Airport",
"city": "Annaba",
"country": "Algeria",
"countryCode": "DZ",
"iata": "AAE",
"icao": "DABB",
"ident": "DABB",
"type": "large_airport",
"latitude": 36.826781,
…
]
}
} /api/airports?country=be {
"data": [
{
"name": "Antwerp International Airport (Deurne)",
"city": "Antwerp",
"country": "Belgium",
"countryCode": "BE",
"iata": "ANR",
"icao": "EBAW",
"ident": "EBAW",
"type": "medium_airport",
"latitude": 51.190667,
"longitude": 4.463153,
"elevationFt": 39,
"timezone": "Europe/Brussels"
},
{
"name": "Brussels Airport",
"city": "Zaventem",
"country": "Belgium",
"countryCode": "BE",
"iata": "BRU",
"icao": "EBBR",
"ident": "EBBR",
"type": "large_airport",
"latitude": 50.901402,
"longitude": 4.48444,
"elevationFt": 175,
"timezone": "Europe/Brussels"
},
{
"name": "Brussels South Charleroi Airport",
"city": "Charleroi",
"country": "Belgium",
"countryCode": "BE",
"iata": "CRL",
"icao": "EBCI",
"ident": "EBCI",
"type": "large_airport",
"latitude": 50.461963,
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports?country=dk&count=100 {
"data": [
{
"name": "Aalborg Airport",
"city": "Aalborg",
"country": "Denmark",
"countryCode": "DK",
"iata": "AAL",
"icao": "EKYT",
"ident": "EKYT",
"type": "large_airport",
"latitude": 57.094763,
"longitude": 9.84993,
"elevationFt": 10,
"timezone": "Europe/Copenhagen"
},
{
"name": "Aarhus Airport",
"city": "Aarhus",
"country": "Denmark",
"countryCode": "DK",
"iata": "AAR",
"icao": "EKAH",
"ident": "EKAH",
"type": "large_airport",
"latitude": 56.303331,
"longitude": 10.618286,
"elevationFt": 82,
"timezone": "Europe/Copenhagen"
},
{
"name": "Billund Airport",
"city": "Billund",
"country": "Denmark",
"countryCode": "DK",
"iata": "BLL",
"icao": "EKBI",
"ident": "EKBI",
"type": "large_airport",
"latitude": 55.740335,
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports?search=sao+paulo {
"data": [
{
"name": "Congonhas–Deputado Freitas Nobre Airport",
"city": "São Paulo",
"country": "Brazil",
"countryCode": "BR",
"iata": "CGH",
"icao": "SBSP",
"ident": "SBSP",
"type": "large_airport",
"latitude": -23.627657,
"longitude": -46.654601,
"elevationFt": 2631,
"timezone": "America/Sao_Paulo"
},
{
"name": "São Paulo/Guarulhos–Governor André Franco Montoro International Airport",
"city": "São Paulo",
"country": "Brazil",
"countryCode": "BR",
"iata": "GRU",
"icao": "SBGR",
"ident": "SBGR",
"type": "large_airport",
"latitude": -23.431274,
"longitude": -46.469954,
"elevationFt": 2461,
"timezone": "America/Sao_Paulo"
}
],
"meta": {
"endpoint": "airports",
"count": 2,
"params": {
"search": "sao paulo",
"type": "any",
"offset": 0
},
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports?type=seaplane_base&count=100 {
"data": [
{
"name": "Angoon Seaplane Base",
"city": "Angoon",
"country": "United States",
"countryCode": "US",
"iata": "AGN",
"icao": "PAGN",
"ident": "PAGN",
"type": "seaplane_base",
"latitude": 57.497097,
"longitude": -134.56722,
"elevationFt": null,
"timezone": "America/Sitka"
},
{
"name": "Alitak Seaplane Base",
"city": "Lazy Bay",
"country": "United States",
"countryCode": "US",
"iata": "ALZ",
"icao": null,
"ident": "ALZ",
"type": "seaplane_base",
"latitude": 56.897294,
"longitude": -154.249692,
"elevationFt": null,
"timezone": "America/Anchorage"
},
{
"name": "Amook Bay Seaplane Base",
"city": "Amook Bay",
"country": "United States",
"countryCode": "US",
"iata": "AOS",
"icao": null,
"ident": "AK81",
"type": "seaplane_base",
"latitude": 57.4715,
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports?country=GB&minRunwayFt=10000 {
"data": [
{
"name": "Birmingham Airport",
"city": "Birmingham, West Midlands",
"country": "United Kingdom",
"countryCode": "GB",
"iata": "BHX",
"icao": "EGBB",
"ident": "EGBB",
"type": "large_airport",
"latitude": 52.453899,
"longitude": -1.74803,
"elevationFt": 327,
"timezone": "Europe/London"
},
{
"name": "London Gatwick Airport",
"city": "London",
"country": "United Kingdom",
"countryCode": "GB",
"iata": "LGW",
"icao": "EGKK",
"ident": "EGKK",
"type": "large_airport",
"latitude": 51.148744,
"longitude": -0.185739,
"elevationFt": 202,
"timezone": "Europe/London"
},
{
"name": "London Heathrow Airport",
"city": "London",
"country": "United Kingdom",
"countryCode": "GB",
"iata": "LHR",
"icao": "EGLL",
"ident": "EGLL",
"type": "large_airport",
"latitude": 51.470748,
…
]
}
} /api/airports?minRunwayFt=13000&count=100 {
"data": [
{
"name": "Al Ain International Airport",
"city": "Al Ain",
"country": "United Arab Emirates",
"countryCode": "AE",
"iata": "AAN",
"icao": "OMAL",
"ident": "OMAL",
"type": "large_airport",
"latitude": 24.2617,
"longitude": 55.6092,
"elevationFt": 869,
"timezone": "Asia/Dubai"
},
{
"name": "Albuquerque International Sunport",
"city": "Albuquerque",
"country": "United States",
"countryCode": "US",
"iata": "ABQ",
"icao": "KABQ",
"ident": "KABQ",
"type": "large_airport",
"latitude": 35.039976,
"longitude": -106.608925,
"elevationFt": 5355,
"timezone": "America/Denver"
},
{
"name": "Almaty International Airport",
"city": "Almaty",
"country": "Kazakhstan",
"countryCode": "KZ",
"iata": "ALA",
"icao": "UAAA",
"ident": "UAAA",
"type": "large_airport",
"latitude": 43.354267,
…
]
}
} /api/airports?country=FR&count=25&offset=25 {
"data": [
{
"name": "Figari Sud-Corse Airport",
"city": "Figari",
"country": "France",
"countryCode": "FR",
"iata": "FSC",
"icao": "LFKF",
"ident": "LFKF",
"type": "large_airport",
"latitude": 41.50185,
"longitude": 9.097092,
"elevationFt": 85,
"timezone": "Europe/Paris"
},
{
"name": "Grenoble Alpes Isère Airport",
"city": "Grenoble",
"country": "France",
"countryCode": "FR",
"iata": "GNB",
"icao": "LFLS",
"ident": "LFLS",
"type": "medium_airport",
"latitude": 45.3629,
"longitude": 5.32937,
"elevationFt": 1302,
"timezone": "Europe/Paris"
},
{
"name": "Paris-Le Bourget International Airport",
"city": "Paris",
"country": "France",
"countryCode": "FR",
"iata": "LBG",
"icao": "LFPB",
"ident": "LFPB",
"type": "large_airport",
"latitude": 48.962276,
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports?country=US&count=5&format=csv name,city,country,countryCode,iata,icao,ident,type,latitude,longitude,elevationFt,timezone
Lehigh Valley International Airport,Allentown/Bethlehem,United States,US,ABE,KABE,KABE,medium_airport,40.651773,-75.442797,393,America/New_York
Abilene Regional Airport,Abilene,United States,US,ABI,KABI,KABI,medium_airport,32.411301,-99.6819,1791,America/Chicago
Ambler Airport,Ambler,United States,US,ABL,PAFM,PAFM,medium_airport,67.105529,-157.855339,334,America/Anchorage
Albuquerque International Sunport,Albuquerque,United States,US,ABQ,KABQ,KABQ,large_airport,35.039976,-106.608925,5355,America/Denver
Aberdeen Regional Airport,Aberdeen,United States,US,ABR,KABR,KABR,medium_airport,45.4491,-98.421799,1302,America/Chicago
Accepts a three-letter IATA code, a four-letter ICAO code or an OurAirports ident, case-insensitively and resolved in that order. Unknown well-formed codes are explicit 404s, never substitute records.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
code
required
| string | allowed: 3 – 7 example: CPH | A 3-letter IATA code, a 4-letter ICAO code or an OurAirports ident, case-insensitive. |
code string required A 3-letter IATA code, a 4-letter ICAO code or an OurAirports ident, case-insensitive.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
fields | list | example: name,city | Return only these fields (comma-separated). Mutually exclusive with 'exclude'. |
exclude | list | example: timezone | Return all fields except these (comma-separated). |
pretty | boolean | default: false example: true | Pretty-print the JSON response. |
unwrap | boolean | default: false example: true | Drop the envelope: return the raw array/object without data/meta wrapper. |
fields list Return only these fields (comma-separated). Mutually exclusive with 'exclude'.
exclude list Return all fields except these (comma-separated).
pretty boolean Pretty-print the JSON response.
unwrap boolean Drop the envelope: return the raw array/object without data/meta wrapper.
| Field | Type | Description | Example |
|---|---|---|---|
name | string | Airport name exactly as recorded in the OurAirports snapshot. | Copenhagen Kastrup Airport |
city | string | null | Primary municipality served, as recorded by OurAirports; it need not be the municipality where the airport is physically located. null when the snapshot records none. | Copenhagen |
country | string | Common English country or territory name. | Denmark |
countryCode | string (ISO 3166-1 alpha-2) | Two-letter country or territory code. | DK |
iata | string | Three-letter IATA airport code; unique across the snapshot. | CPH |
icao | string | null | Four-letter ICAO location indicator, or null for the airports the snapshot has no ICAO code for. | EKCH |
ident | string | OurAirports identifier — the ICAO code when one exists, otherwise a national or OurAirports-assigned id such as 5A8 or AG-0001. Always unique and always present. | EKCH |
type | string | OurAirports size classification: large_airport, medium_airport, small_airport, seaplane_base, heliport. | large_airport |
latitude | float | Airport latitude in WGS84 decimal degrees (positive north), rounded to 6 decimals. | 55.617901 |
longitude | float | Airport longitude in WGS84 decimal degrees (positive east), rounded to 6 decimals. | 12.656 |
elevationFt | integer | null | Airport elevation above mean sea level in feet; negative values are below sea level, null when the snapshot records none. | 17 |
timezone | string | null | IANA time zone id derived from the pinned coordinates at snapshot time and validated against the airport's ISO country; approximate near zone boundaries and null for the airports where the derivation could not be confirmed. | Europe/Copenhagen |
name string Airport name exactly as recorded in the OurAirports snapshot.
example: Copenhagen Kastrup Airport
city string | null Primary municipality served, as recorded by OurAirports; it need not be the municipality where the airport is physically located. null when the snapshot records none.
example: Copenhagen
country string Common English country or territory name.
example: Denmark
countryCode string (ISO 3166-1 alpha-2) Two-letter country or territory code.
example: DK
iata string Three-letter IATA airport code; unique across the snapshot.
example: CPH
icao string | null Four-letter ICAO location indicator, or null for the airports the snapshot has no ICAO code for.
example: EKCH
ident string OurAirports identifier — the ICAO code when one exists, otherwise a national or OurAirports-assigned id such as 5A8 or AG-0001. Always unique and always present.
example: EKCH
type string OurAirports size classification: large_airport, medium_airport, small_airport, seaplane_base, heliport.
example: large_airport
latitude float Airport latitude in WGS84 decimal degrees (positive north), rounded to 6 decimals.
example: 55.617901
longitude float Airport longitude in WGS84 decimal degrees (positive east), rounded to 6 decimals.
example: 12.656
elevationFt integer | null Airport elevation above mean sea level in feet; negative values are below sea level, null when the snapshot records none.
example: 17
timezone string | null IANA time zone id derived from the pinned coordinates at snapshot time and validated against the airport's ISO country; approximate near zone boundaries and null for the airports where the derivation could not be confirmed.
example: Europe/Copenhagen
/api/airports/lookup?code=CPH {
"data": {
"name": "Copenhagen Kastrup Airport",
"city": "Copenhagen",
"country": "Denmark",
"countryCode": "DK",
"iata": "CPH",
"icao": "EKCH",
"ident": "EKCH",
"type": "large_airport",
"latitude": 55.617901,
"longitude": 12.656,
"elevationFt": 17,
"timezone": "Europe/Copenhagen"
},
"meta": {
"endpoint": "airports",
"route": "/lookup",
"params": {
"code": "CPH"
},
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports/lookup?code=ekch {
"data": {
"name": "Copenhagen Kastrup Airport",
"city": "Copenhagen",
"country": "Denmark",
"countryCode": "DK",
"iata": "CPH",
"icao": "EKCH",
"ident": "EKCH",
"type": "large_airport",
"latitude": 55.617901,
"longitude": 12.656,
"elevationFt": 17,
"timezone": "Europe/Copenhagen"
},
"meta": {
"endpoint": "airports",
"route": "/lookup",
"params": {
"code": "EKCH"
},
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports/lookup?code=BRU {
"data": {
"name": "Brussels Airport",
"city": "Zaventem",
"country": "Belgium",
"countryCode": "BE",
"iata": "BRU",
"icao": "EBBR",
"ident": "EBBR",
"type": "large_airport",
"latitude": 50.901402,
"longitude": 4.48444,
"elevationFt": 175,
"timezone": "Europe/Brussels"
},
"meta": {
"endpoint": "airports",
"route": "/lookup",
"params": {
"code": "BRU"
},
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports/lookup?code=LHR&fields=name,iata,icao,latitude,longitude,timezone {
"data": {
"name": "London Heathrow Airport",
"iata": "LHR",
"icao": "EGLL",
"latitude": 51.470748,
"longitude": -0.459909,
"timezone": "Europe/London"
},
"meta": {
"endpoint": "airports",
"route": "/lookup",
"params": {
"code": "LHR"
},
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} Returns one record per runway in designator order, from the 2026-09-14 OurAirports runways.csv snapshot: length and width in feet, the upstream surface text, the lighted and closed flags and both true headings. An airport the snapshot has no runway row for returns an empty list plus a warning; an unknown code is a 404.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
code
required
| string | allowed: 3 – 7 example: CPH | A 3-letter IATA code, a 4-letter ICAO code or an OurAirports ident, case-insensitive — the same codes /lookup accepts. |
includeClosed | boolean | default: true example: false | Whether to include runways the snapshot flags as closed (297 of the 5,660 rows). false returns only runways that are not flagged closed. |
code string required A 3-letter IATA code, a 4-letter ICAO code or an OurAirports ident, case-insensitive — the same codes /lookup accepts.
includeClosed boolean Whether to include runways the snapshot flags as closed (297 of the 5,660 rows). false returns only runways that are not flagged closed.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
count | int | default: all matches allowed: 1 – 100 example: 3 | Limit the number of returned records (1–100). Defaults to all matches. |
fields | list | example: airportIdent,airportIata | Return only these fields (comma-separated). Mutually exclusive with 'exclude'. |
exclude | list | example: highEndHeadingDegT | Return all fields except these (comma-separated). |
format | enum | default: json allowed: json | ndjson | csv example: csv | Response format: json envelope, ndjson (one record per line) or csv. |
pretty | boolean | default: false example: true | Pretty-print the JSON response. |
unwrap | boolean | default: false example: true | Drop the envelope: return the raw array/object without data/meta wrapper. |
count int Limit the number of returned records (1–100). Defaults to all matches.
fields list Return only these fields (comma-separated). Mutually exclusive with 'exclude'.
exclude list Return all fields except these (comma-separated).
format enum Response format: json envelope, ndjson (one record per line) or csv.
pretty boolean Pretty-print the JSON response.
unwrap boolean Drop the envelope: return the raw array/object without data/meta wrapper.
| Field | Type | Description | Example |
|---|---|---|---|
airportIdent | string | OurAirports ident of the airport the runway belongs to — the join key used upstream. | EKCH |
airportIata | string | Three-letter IATA code of the same airport, echoed so exported rows stay self-describing. | CPH |
designator | string | null | Both end identifiers joined with a slash, e.g. 04L/22R. Derived here from the two upstream cells; null when the snapshot names neither end. | 04L/22R |
lowEndIdent | string | null | Identifier of the low-numbered runway end as recorded upstream (04L, 09, H1 for a helipad), or null when unrecorded. | 04L |
highEndIdent | string | null | Identifier of the high-numbered (reciprocal) runway end, or null when the snapshot records none. | 22R |
lengthFt | integer | null | Runway length in feet exactly as recorded upstream; null when the snapshot has no length, never 0. | 11811 |
widthFt | integer | null | Runway width in feet exactly as recorded upstream; null when the snapshot has no width, never 0. | 148 |
surface | string | null | Surface text exactly as recorded upstream. OurAirports does not constrain this column, so values range from ASP and CON to Asphalt, asphalt and the placeholder UNK; null when the cell is blank. | ASP |
lighted | boolean | Whether the snapshot flags the runway as lighted (its 1/0 column, unmodified). | true |
closed | boolean | Whether the snapshot flags the runway as closed. Closed runways are returned unless includeClosed=false. | false |
lowEndHeadingDegT | float | null | True heading of the low-numbered end in degrees, as recorded upstream (not corrected or recomputed); null when unrecorded. | 41 |
highEndHeadingDegT | float | null | True heading of the high-numbered end in degrees, as recorded upstream; null when unrecorded. | 221 |
airportIdent string OurAirports ident of the airport the runway belongs to — the join key used upstream.
example: EKCH
airportIata string Three-letter IATA code of the same airport, echoed so exported rows stay self-describing.
example: CPH
designator string | null Both end identifiers joined with a slash, e.g. 04L/22R. Derived here from the two upstream cells; null when the snapshot names neither end.
example: 04L/22R
lowEndIdent string | null Identifier of the low-numbered runway end as recorded upstream (04L, 09, H1 for a helipad), or null when unrecorded.
example: 04L
highEndIdent string | null Identifier of the high-numbered (reciprocal) runway end, or null when the snapshot records none.
example: 22R
lengthFt integer | null Runway length in feet exactly as recorded upstream; null when the snapshot has no length, never 0.
example: 11811
widthFt integer | null Runway width in feet exactly as recorded upstream; null when the snapshot has no width, never 0.
example: 148
surface string | null Surface text exactly as recorded upstream. OurAirports does not constrain this column, so values range from ASP and CON to Asphalt, asphalt and the placeholder UNK; null when the cell is blank.
example: ASP
lighted boolean Whether the snapshot flags the runway as lighted (its 1/0 column, unmodified).
example: true
closed boolean Whether the snapshot flags the runway as closed. Closed runways are returned unless includeClosed=false.
example: false
lowEndHeadingDegT float | null True heading of the low-numbered end in degrees, as recorded upstream (not corrected or recomputed); null when unrecorded.
example: 41
highEndHeadingDegT float | null True heading of the high-numbered end in degrees, as recorded upstream; null when unrecorded.
example: 221
/api/airports/runways?code=CPH {
"data": [
{
"airportIdent": "EKCH",
"airportIata": "CPH",
"designator": "04L/22R",
"lowEndIdent": "04L",
"highEndIdent": "22R",
"lengthFt": 11811,
"widthFt": 148,
"surface": "ASP",
"lighted": true,
"closed": false,
"lowEndHeadingDegT": 41,
"highEndHeadingDegT": 221
},
{
"airportIdent": "EKCH",
"airportIata": "CPH",
"designator": "04R/22L",
"lowEndIdent": "04R",
"highEndIdent": "22L",
"lengthFt": 10827,
"widthFt": 148,
"surface": "ASP",
"lighted": true,
"closed": false,
"lowEndHeadingDegT": 41,
"highEndHeadingDegT": 221
},
{
"airportIdent": "EKCH",
"airportIata": "CPH",
"designator": "12/30",
"lowEndIdent": "12",
"highEndIdent": "30",
"lengthFt": 9186,
"widthFt": 148,
"surface": "ASPH",
"lighted": true,
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports/runways?code=egll {
"data": [
{
"airportIdent": "EGLL",
"airportIata": "LHR",
"designator": "09L/27R",
"lowEndIdent": "09L",
"highEndIdent": "27R",
"lengthFt": 12799,
"widthFt": 164,
"surface": "ASP",
"lighted": true,
"closed": false,
"lowEndHeadingDegT": 90,
"highEndHeadingDegT": 270
},
{
"airportIdent": "EGLL",
"airportIata": "LHR",
"designator": "09R/27L",
"lowEndIdent": "09R",
"highEndIdent": "27L",
"lengthFt": 12001,
"widthFt": 164,
"surface": "ASP",
"lighted": true,
"closed": false,
"lowEndHeadingDegT": 90,
"highEndHeadingDegT": 270
}
],
"meta": {
"endpoint": "airports",
"route": "/runways",
"count": 2,
"params": {
"code": "EGLL",
"includeClosed": true
},
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports/runways?code=ORD {
"data": [
{
"airportIdent": "KORD",
"airportIata": "ORD",
"designator": "04L/22R",
"lowEndIdent": "04L",
"highEndIdent": "22R",
"lengthFt": 7500,
"widthFt": 150,
"surface": "ASP",
"lighted": true,
"closed": false,
"lowEndHeadingDegT": 39,
"highEndHeadingDegT": 219
},
{
"airportIdent": "KORD",
"airportIata": "ORD",
"designator": "04R/22L",
"lowEndIdent": "04R",
"highEndIdent": "22L",
"lengthFt": 8075,
"widthFt": 150,
"surface": "ASP",
"lighted": true,
"closed": false,
"lowEndHeadingDegT": 42,
"highEndHeadingDegT": 222
},
{
"airportIdent": "KORD",
"airportIata": "ORD",
"designator": "09C/27C",
"lowEndIdent": "09C",
"highEndIdent": "27C",
"lengthFt": 11245,
"widthFt": 200,
"surface": "concrete",
"lighted": true,
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports/runways?code=ORD&includeClosed=false {
"data": [
{
"airportIdent": "KORD",
"airportIata": "ORD",
"designator": "04L/22R",
"lowEndIdent": "04L",
"highEndIdent": "22R",
"lengthFt": 7500,
"widthFt": 150,
"surface": "ASP",
"lighted": true,
"closed": false,
"lowEndHeadingDegT": 39,
"highEndHeadingDegT": 219
},
{
"airportIdent": "KORD",
"airportIata": "ORD",
"designator": "04R/22L",
"lowEndIdent": "04R",
"highEndIdent": "22L",
"lengthFt": 8075,
"widthFt": 150,
"surface": "ASP",
"lighted": true,
"closed": false,
"lowEndHeadingDegT": 42,
"highEndHeadingDegT": 222
},
{
"airportIdent": "KORD",
"airportIata": "ORD",
"designator": "09C/27C",
"lowEndIdent": "09C",
"highEndIdent": "27C",
"lengthFt": 11245,
"widthFt": 200,
"surface": "concrete",
"lighted": true,
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports/runways?code=DXB&format=csv airportIdent,airportIata,designator,lowEndIdent,highEndIdent,lengthFt,widthFt,surface,lighted,closed,lowEndHeadingDegT,highEndHeadingDegT
OMDB,DXB,12L/30R,12L,30R,14275,197,ASP,true,false,121,301
OMDB,DXB,12R/30L,12R,30L,14590,197,ASP,true,false,121,301
Ranks the 4,159-airport snapshot by spherical great-circle distance. Radius, country and type filters compose before the count limit, and at most 100 records come back.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
lat
required
| float | allowed: -90 – 90 example: 55.617901 | Search-point latitude in WGS84 decimal degrees (-90 to 90). |
lng
required
| float | allowed: -180 – 180 example: 12.656 | Search-point longitude in WGS84 decimal degrees (-180 to 180). |
radiusKm | float | default: 500 allowed: 0 – 20020 example: 100 | Maximum spherical great-circle distance in kilometers (0–20020). Defaults to 500 km. |
country | string | example: GB | Optional ISO 3166-1 alpha-2 country/territory filter, case-insensitive. |
type | enum | default: any allowed: any | large_airport | medium_airport | small_airport | seaplane_base | heliport example: medium_airport | Optional OurAirports size classification filter; any keeps every classification. |
lat float required Search-point latitude in WGS84 decimal degrees (-90 to 90).
lng float required Search-point longitude in WGS84 decimal degrees (-180 to 180).
radiusKm float Maximum spherical great-circle distance in kilometers (0–20020). Defaults to 500 km.
country string Optional ISO 3166-1 alpha-2 country/territory filter, case-insensitive.
type enum Optional OurAirports size classification filter; any keeps every classification.
| Parameter | Type | Default & allowed | Description |
|---|---|---|---|
count | int | default: 10 allowed: 1 – 100 example: 3 | Limit the number of returned records (1–100). Defaults to 10. |
fields | list | example: name,city | Return only these fields (comma-separated). Mutually exclusive with 'exclude'. |
exclude | list | example: distanceKm | Return all fields except these (comma-separated). |
format | enum | default: json allowed: json | ndjson | csv example: csv | Response format: json envelope, ndjson (one record per line) or csv. |
pretty | boolean | default: false example: true | Pretty-print the JSON response. |
unwrap | boolean | default: false example: true | Drop the envelope: return the raw array/object without data/meta wrapper. |
count int Limit the number of returned records (1–100). Defaults to 10.
fields list Return only these fields (comma-separated). Mutually exclusive with 'exclude'.
exclude list Return all fields except these (comma-separated).
format enum Response format: json envelope, ndjson (one record per line) or csv.
pretty boolean Pretty-print the JSON response.
unwrap boolean Drop the envelope: return the raw array/object without data/meta wrapper.
| Field | Type | Description | Example |
|---|---|---|---|
name | string | Airport name exactly as recorded in the OurAirports snapshot. | Copenhagen Kastrup Airport |
city | string | null | Primary municipality served, as recorded by OurAirports; it need not be the municipality where the airport is physically located. null when the snapshot records none. | Copenhagen |
country | string | Common English country or territory name. | Denmark |
countryCode | string (ISO 3166-1 alpha-2) | Two-letter country or territory code. | DK |
iata | string | Three-letter IATA airport code; unique across the snapshot. | CPH |
icao | string | null | Four-letter ICAO location indicator, or null for the airports the snapshot has no ICAO code for. | EKCH |
ident | string | OurAirports identifier — the ICAO code when one exists, otherwise a national or OurAirports-assigned id such as 5A8 or AG-0001. Always unique and always present. | EKCH |
type | string | OurAirports size classification: large_airport, medium_airport, small_airport, seaplane_base, heliport. | large_airport |
latitude | float | Airport latitude in WGS84 decimal degrees (positive north), rounded to 6 decimals. | 55.617901 |
longitude | float | Airport longitude in WGS84 decimal degrees (positive east), rounded to 6 decimals. | 12.656 |
elevationFt | integer | null | Airport elevation above mean sea level in feet; negative values are below sea level, null when the snapshot records none. | 17 |
timezone | string | null | IANA time zone id derived from the pinned coordinates at snapshot time and validated against the airport's ISO country; approximate near zone boundaries and null for the airports where the derivation could not be confirmed. | Europe/Copenhagen |
distanceKm | float | Spherical great-circle distance from the requested point in kilometers, using the IUGG mean Earth radius; rounded to 3 decimals. | 0 |
name string Airport name exactly as recorded in the OurAirports snapshot.
example: Copenhagen Kastrup Airport
city string | null Primary municipality served, as recorded by OurAirports; it need not be the municipality where the airport is physically located. null when the snapshot records none.
example: Copenhagen
country string Common English country or territory name.
example: Denmark
countryCode string (ISO 3166-1 alpha-2) Two-letter country or territory code.
example: DK
iata string Three-letter IATA airport code; unique across the snapshot.
example: CPH
icao string | null Four-letter ICAO location indicator, or null for the airports the snapshot has no ICAO code for.
example: EKCH
ident string OurAirports identifier — the ICAO code when one exists, otherwise a national or OurAirports-assigned id such as 5A8 or AG-0001. Always unique and always present.
example: EKCH
type string OurAirports size classification: large_airport, medium_airport, small_airport, seaplane_base, heliport.
example: large_airport
latitude float Airport latitude in WGS84 decimal degrees (positive north), rounded to 6 decimals.
example: 55.617901
longitude float Airport longitude in WGS84 decimal degrees (positive east), rounded to 6 decimals.
example: 12.656
elevationFt integer | null Airport elevation above mean sea level in feet; negative values are below sea level, null when the snapshot records none.
example: 17
timezone string | null IANA time zone id derived from the pinned coordinates at snapshot time and validated against the airport's ISO country; approximate near zone boundaries and null for the airports where the derivation could not be confirmed.
example: Europe/Copenhagen
distanceKm float Spherical great-circle distance from the requested point in kilometers, using the IUGG mean Earth radius; rounded to 3 decimals.
example: 0
/api/airports/nearby?lat=55.617901&lng=12.656&radiusKm=100 {
"data": [
{
"name": "Copenhagen Kastrup Airport",
"city": "Copenhagen",
"country": "Denmark",
"countryCode": "DK",
"iata": "CPH",
"icao": "EKCH",
"ident": "EKCH",
"type": "large_airport",
"latitude": 55.617901,
"longitude": 12.656,
"elevationFt": 17,
"timezone": "Europe/Copenhagen",
"distanceKm": 0
},
{
"name": "Copenhagen Roskilde Airport",
"city": "Roskilde",
"country": "Denmark",
"countryCode": "DK",
"iata": "RKE",
"icao": "EKRK",
"ident": "EKRK",
"type": "medium_airport",
"latitude": 55.585602,
"longitude": 12.1314,
"elevationFt": 146,
"timezone": "Europe/Copenhagen",
"distanceKm": 33.15
},
{
"name": "Malmö Sturup Airport",
"city": "Malmö",
"country": "Sweden",
"countryCode": "SE",
"iata": "MMX",
"icao": "ESMS",
"ident": "ESMS",
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports/nearby?lat=48.8566&lng=2.3522&radiusKm=100&count=25 {
"data": [
{
"name": "Paris-Le Bourget International Airport",
"city": "Paris",
"country": "France",
"countryCode": "FR",
"iata": "LBG",
"icao": "LFPB",
"ident": "LFPB",
"type": "large_airport",
"latitude": 48.962276,
"longitude": 2.436539,
"elevationFt": 218,
"timezone": "Europe/Paris",
"distanceKm": 13.269
},
{
"name": "Paris-Orly Airport",
"city": "Paris (Orly, Val-de-Marne)",
"country": "France",
"countryCode": "FR",
"iata": "ORY",
"icao": "LFPO",
"ident": "LFPO",
"type": "large_airport",
"latitude": 48.729499,
"longitude": 2.358963,
"elevationFt": 291,
"timezone": "Europe/Paris",
"distanceKm": 14.142
},
{
"name": "Charles de Gaulle International Airport",
"city": "Paris (Roissy-en-France, Val-d'Oise)",
"country": "France",
"countryCode": "FR",
"iata": "CDG",
"icao": "LFPG",
"ident": "LFPG",
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports/nearby?lat=51.5074&lng=-0.1278&radiusKm=100&type=large_airport {
"data": [
{
"name": "London Heathrow Airport",
"city": "London",
"country": "United Kingdom",
"countryCode": "GB",
"iata": "LHR",
"icao": "EGLL",
"ident": "EGLL",
"type": "large_airport",
"latitude": 51.470748,
"longitude": -0.459909,
"elevationFt": 83,
"timezone": "Europe/London",
"distanceKm": 23.353
},
{
"name": "London Gatwick Airport",
"city": "London",
"country": "United Kingdom",
"countryCode": "GB",
"iata": "LGW",
"icao": "EGKK",
"ident": "EGKK",
"type": "large_airport",
"latitude": 51.148744,
"longitude": -0.185739,
"elevationFt": 202,
"timezone": "Europe/London",
"distanceKm": 40.083
},
{
"name": "London Luton Airport",
"city": "Luton, Luton",
"country": "United Kingdom",
"countryCode": "GB",
"iata": "LTN",
"icao": "EGGW",
"ident": "EGGW",
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} /api/airports/nearby?lat=41.8781&lng=-87.6298&country=US&radiusKm=20020&count=5 {
"data": [
{
"name": "Chicago Midway International Airport",
"city": "Chicago",
"country": "United States",
"countryCode": "US",
"iata": "MDW",
"icao": "KMDW",
"ident": "KMDW",
"type": "large_airport",
"latitude": 41.785999,
"longitude": -87.752403,
"elevationFt": 620,
"timezone": "America/Chicago",
"distanceKm": 14.424
},
{
"name": "Chicago O'Hare International Airport",
"city": "Chicago",
"country": "United States",
"countryCode": "US",
"iata": "ORD",
"icao": "KORD",
"ident": "KORD",
"type": "large_airport",
"latitude": 41.9786,
"longitude": -87.9048,
"elevationFt": 680,
"timezone": "America/Chicago",
"distanceKm": 25.346
},
{
"name": "Gary/Chicago International Airport",
"city": "Gary",
"country": "United States",
"countryCode": "US",
"iata": "GYY",
"icao": "KGYY",
"ident": "KGYY",
…
"generatedAt": "2026-09-15T19:47:18.000Z"
}
} Real airport reference data for all 4,159 scheduled-service airports that carry a three-letter IATA code, across 235 countries and territories, snapshotted from the public-domain OurAirports dataset on 2026-07-29 and pinned by SHA-256.
That scope is the whole rule: an OurAirports row is included when it is marked as having scheduled service and has an IATA code. Private strips, closed fields, military-only bases and the many small aerodromes without scheduled flights are out of scope — this is not a complete registry of every airfield on Earth, and it is not a traffic ranking. Regional coverage of the included set: AF 377, AS 1235, EU 589, NA 1232, OC 387, SA 339.
country accepts an ISO 3166-1 alpha-2 code, case-insensitively. The canonical uppercase code is echoed in meta.params. A well-formed code with no scheduled-service airport in the snapshot returns an empty list plus a warning — never another country's airport.search is a case- and diacritic-insensitive contains match across airport name, served city, country name, country code, IATA code, ICAO code and ident. For example, sao paulo finds GRU and CGH, and egll finds Heathrow.type filters the OurAirports size classification: large_airport, medium_airport, small_airport, seaplane_base, heliport. Seaplane bases and heliports are in the data because they genuinely carry scheduled IATA-coded service (Alaska, British Columbia, the Maldives).offset skips that many matches, so ?country=US&offset=100 continues where ?country=US stopped, and a warning tells you how many matched in total.minRunwayFt keeps only airports whose longest runway not flagged closed in the pinned runway snapshot is at least that many feet: ?minRunwayFt=10000 is the set that can plausibly take a widebody, ?country=GB&minRunwayFt=10000 narrows it to five British airports. The longest runway in the snapshot is 16,404 ft, and the 204 airports with no runway row or no recorded length on an open runway never match — a warning says so on every request that uses the filter./lookup?code= resolves a 3-letter IATA code, a 4-letter ICAO code or an OurAirports ident, case-insensitively, in that order. A well-formed code that is not in the snapshot is an explicit 404 with a close-code suggestion where one is unambiguous./runways?code= lists one airport's runways — designators, length and width in feet, surface text, the lighted and closed flags and both true headings — for the same three code systems. includeClosed=false drops the 297 rows flagged closed. An airport with no runway row upstream returns an empty list plus a warning, and an unknown code is the same explicit 404 as /lookup./nearby?lat=…&lng=… ranks the snapshot by spherical great-circle distance, with optional radius, country and type filters.timezone is not an OurAirports column: it is derived once, at snapshot time, from each airport's pinned coordinates and then validated against that airport's own ISO country using the IANA tz database, so the Worker never runs a geographic lookup per request. 4,136 airports have a confirmed zone; the remaining 23 return null instead of a guess. Zone boundaries are approximated away from populated areas, so a zone id can name a neighbouring zone.
Runways come from the same public-domain project: a runways.csv snapshot taken on 2026-09-14 and pinned by SHA-256, joined to the airport set above at build time so every runway row belongs to an airport this API can return. That is 5,660 runways at 3,958 of the 4,159 airports; the other 201 have no runway row upstream and return an empty list rather than an invented one. OurAirports is community-edited, so runway dimensions, surfaces and headings are contributed values that can be stale, rounded or wrong: 42 rows carry no length, 313 no width and 130 no surface, and every one of those comes back as null rather than 0. surface is uncontrolled upstream free text — ASP, ASPH, Asphalt and asphalt all occur, as does the placeholder UNK — and is copied verbatim instead of being normalized into a vocabulary the source never used. Headings ship exactly as recorded, including the one value in this snapshot that reads 362°.
Names, served municipalities, classifications, coordinates and elevations are the values in the cited snapshot, with an empty source cell returned as null. Aviation data changes constantly: use an operational aviation authority or current aeronautical publication for flight planning, safety or navigation.
Yes. /api/airports/runways?code=CPH returns one record per runway with length and width in feet, the upstream surface text, lighted and closed flags and both true headings, from a 2026-09-14 OurAirports snapshot of 5,660 runways. Add includeClosed=false to drop the runways flagged closed.
Yes. Pass a three-letter IATA code such as CPH, a four-letter ICAO code such as EKCH, or the OurAirports ident to /api/airports/lookup?code=...; matching is case-insensitive and resolved in that order.
Every OurAirports row marked as having scheduled service and carrying a three-letter IATA code — 4,159 airports in 235 countries and territories. Airfields without scheduled service, and scheduled rows with no IATA code, are excluded.
A response returns at most 100 records, so combine offset with count: ?country=US&count=100, then ?country=US&count=100&offset=100. A warning reports the total number of matches.
OurAirports has no timezone column, so the IANA zone is derived from the airport's pinned coordinates at snapshot time and cross-checked against its ISO country. 23 airports whose zone could not be confirmed return null rather than a guess.
No. They are public reference coordinates from a dated snapshot, suitable for software fixtures, search and maps; safety-critical or operational use requires current official aeronautical data.
31,000+ world cities from a pinned GeoNames snapshot: coordinates, IANA timezone, elevation, population and capital flag — filter, search or rank by distance.
Live IANA offsets, DST transitions, local-time ambiguity resolution and exact instant conversion — no guessed wall-clock mappings.
Random geographic coordinates: uniform across the globe (no pole clustering), inside a bounding box, or within a radius of a point — with haversine distances.
Coherent fake flight fixtures between real hub airports, with working route, status, cabin and departure-window filters — never live operations.
Magnetic declination, inclination and field strength anywhere on Earth from the official WMM2025 coefficients, plus compass-to-true heading conversion.
Convert WGS 84 latitude and longitude to UTM, UPS and MGRS and back, with grid zone, band letter, convergence, scale factor and the Norway/Svalbard exceptions.