Skip to main content

Airport Codes API

REAL DATA

Every scheduled-service airport with an IATA code — 4,159 rows with ICAO code, city, country, coordinates, elevation and IANA time zone.

Authoritative reference data or standards computation

Base URL
/api/airports
Capabilities
3 routes
Last updated
July 30, 2026
Data sources · 3

GET /api/airports

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.

Live requestRuns against the public API
No key required
GET/api/airports

Request parameters

ISO 3166-1 alpha-2 country or territory code, case-insensitive (dk and DK both resolve to DK). Must be exactly two letters.

Case- and diacritic-insensitive contains match over name, served city, country, country code, IATA code, ICAO code and ident.

Only return one OurAirports size classification; any keeps every classification.

Skip this many matches before returning records, for paging through a filter that matches more than one page.

Advanced response options6 options

Limit the number of returned records (1–100). Defaults to 100.

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

Return all fields except these (comma-separated).

Response format: json envelope, ndjson (one record per line) or csv.

Pretty-print the JSON response.

Drop the envelope: return the raw array/object without data/meta wrapper.

Response

Example parameters are ready. Send the request to inspect the live response.

Route reference

Code samples Ready-to-copy requests in 4 languages
Choose a code sample language
curl "https://randomapi.dev/api/airports"
const res = await fetch("https://randomapi.dev/api/airports");
const { data, meta } = await res.json();
import requests

data = requests.get("https://randomapi.dev/api/airports").json()["data"]
$json = json_decode(file_get_contents(
  "https://randomapi.dev/api/airports"
), true);
$data = $json["data"];
Parameters Route-specific request inputs 4
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.

example: country=DK
search string

Case- and diacritic-insensitive contains match over name, served city, country, country code, IATA code, ICAO code and ident.

example: search=sao paulo
type enum

Only return one OurAirports size classification; any keeps every classification.

default: any
allowed: any | large_airport | medium_airport | small_airport | seaplane_base | heliport
example: type=medium_airport
offset int

Skip this many matches before returning records, for paging through a filter that matches more than one page.

default: 0
allowed: 0 – 100000
example: offset=100
Universal parameters Shared response and formatting options 6
count int

Limit the number of returned records (1–100). Defaults to 100.

default: 100
allowed: 1 – 100
example: count=3
fields list

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

example: fields=name,city
exclude list

Return all fields except these (comma-separated).

example: exclude=timezone
format enum

Response format: json envelope, ndjson (one record per line) or csv.

default: json
allowed: json | ndjson | csv
example: format=csv
pretty boolean

Pretty-print the JSON response.

default: false
example: pretty=true
unwrap boolean

Drop the envelope: return the raw array/object without data/meta wrapper.

default: false
example: unwrap=true
Response schema Fields returned in each record 12
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

Documented examples

Build-generated requests and complete responses
7
The first page of the airport table
GET /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,
    …
    ]
  }
}
Airports in Belgium
GET /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-07-30T15:14:08.000Z"
  }
}
Every scheduled-service airport in Denmark
GET /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-07-30T15:14:08.000Z"
  }
}
Find São Paulo without typing diacritics
GET /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-07-30T15:14:08.000Z"
  }
}
Seaplane bases with scheduled service
GET /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-07-30T15:14:08.000Z"
  }
}
Second page of French airports
GET /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-07-30T15:14:08.000Z"
  }
}
First five US airports as CSV
GET /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

GET /api/airports/lookup

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.

Live requestRuns against the public API
No key required
GET/api/airports/lookup?code=CPH

Request parameters

A 3-letter IATA code, a 4-letter ICAO code or an OurAirports ident, case-insensitive.

Advanced response options4 options

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

Return all fields except these (comma-separated).

Pretty-print the JSON response.

Drop the envelope: return the raw array/object without data/meta wrapper.

Response

Example parameters are ready. Send the request to inspect the live response.

Route reference

Code samples Ready-to-copy requests in 4 languages
Choose a code sample language
curl "https://randomapi.dev/api/airports/lookup?code=CPH"
const res = await fetch("https://randomapi.dev/api/airports/lookup?code=CPH");
const { data, meta } = await res.json();
import requests

data = requests.get("https://randomapi.dev/api/airports/lookup?code=CPH").json()["data"]
$json = json_decode(file_get_contents(
  "https://randomapi.dev/api/airports/lookup?code=CPH"
), true);
$data = $json["data"];
Parameters Route-specific request inputs 1
code string required

A 3-letter IATA code, a 4-letter ICAO code or an OurAirports ident, case-insensitive.

allowed: 3 – 7
example: code=CPH
Universal parameters Shared response and formatting options 4
fields list

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

example: fields=name,city
exclude list

Return all fields except these (comma-separated).

example: exclude=timezone
pretty boolean

Pretty-print the JSON response.

default: false
example: pretty=true
unwrap boolean

Drop the envelope: return the raw array/object without data/meta wrapper.

default: false
example: unwrap=true
Response schema Fields returned in each record 12
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

Documented examples

Build-generated requests and complete responses
4
Copenhagen by IATA code
GET /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-07-30T15:14:08.000Z"
  }
}
Copenhagen by lowercase ICAO code
GET /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-07-30T15:14:08.000Z"
  }
}
Brussels Airport
GET /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-07-30T15:14:08.000Z"
  }
}
Heathrow coordinates and time zone only
GET /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-07-30T15:14:08.000Z"
  }
}

GET /api/airports/nearby

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.

Live requestRuns against the public API
No key required
GET/api/airports/nearby?lat=55.617901&lng=12.656&radiusKm=100

Request parameters

Search-point latitude in WGS84 decimal degrees (-90 to 90).

Search-point longitude in WGS84 decimal degrees (-180 to 180).

Maximum spherical great-circle distance in kilometers (0–20020). Defaults to 500 km.

Optional ISO 3166-1 alpha-2 country/territory filter, case-insensitive.

Optional OurAirports size classification filter; any keeps every classification.

Advanced response options6 options

Limit the number of returned records (1–100). Defaults to 10.

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

Return all fields except these (comma-separated).

Response format: json envelope, ndjson (one record per line) or csv.

Pretty-print the JSON response.

Drop the envelope: return the raw array/object without data/meta wrapper.

Response

Example parameters are ready. Send the request to inspect the live response.

Route reference

Code samples Ready-to-copy requests in 4 languages
Choose a code sample language
curl "https://randomapi.dev/api/airports/nearby?lat=55.617901&lng=12.656&radiusKm=100"
const res = await fetch("https://randomapi.dev/api/airports/nearby?lat=55.617901&lng=12.656&radiusKm=100");
const { data, meta } = await res.json();
import requests

data = requests.get("https://randomapi.dev/api/airports/nearby?lat=55.617901&lng=12.656&radiusKm=100").json()["data"]
$json = json_decode(file_get_contents(
  "https://randomapi.dev/api/airports/nearby?lat=55.617901&lng=12.656&radiusKm=100"
), true);
$data = $json["data"];
Parameters Route-specific request inputs 5
lat float required

Search-point latitude in WGS84 decimal degrees (-90 to 90).

allowed: -90 – 90
example: lat=55.617901
lng float required

Search-point longitude in WGS84 decimal degrees (-180 to 180).

allowed: -180 – 180
example: lng=12.656
radiusKm float

Maximum spherical great-circle distance in kilometers (0–20020). Defaults to 500 km.

default: 500
allowed: 0 – 20020
example: radiusKm=100
country string

Optional ISO 3166-1 alpha-2 country/territory filter, case-insensitive.

example: country=GB
type enum

Optional OurAirports size classification filter; any keeps every classification.

default: any
allowed: any | large_airport | medium_airport | small_airport | seaplane_base | heliport
example: type=medium_airport
Universal parameters Shared response and formatting options 6
count int

Limit the number of returned records (1–100). Defaults to 10.

default: 10
allowed: 1 – 100
example: count=3
fields list

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

example: fields=name,city
exclude list

Return all fields except these (comma-separated).

example: exclude=distanceKm
format enum

Response format: json envelope, ndjson (one record per line) or csv.

default: json
allowed: json | ndjson | csv
example: format=csv
pretty boolean

Pretty-print the JSON response.

default: false
example: pretty=true
unwrap boolean

Drop the envelope: return the raw array/object without data/meta wrapper.

default: false
example: unwrap=true
Response schema Fields returned in each record 13
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

Documented examples

Build-generated requests and complete responses
4
Airports within 100 km of Copenhagen Airport
GET /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-07-30T15:14:08.000Z"
  }
}
Airports within 100 km of central Paris
GET /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-07-30T15:14:08.000Z"
  }
}
Large airports near central London
GET /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-07-30T15:14:08.000Z"
  }
}
Five US airports nearest Chicago
GET /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-07-30T15:14:08.000Z"
  }
}

About this API

Coverage & behavior

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).
  • Paging: a single response returns at most 100 airports. 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.
  • /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.
  • /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.

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.

Use it for

  • Populate airport-code pickers and travel-booking prototypes with real reference values
  • Resolve a known IATA, ICAO or ident code to a display name, coordinates and time zone
  • Build country-by-country airport tables for logistics, routing and coverage maps
  • Test country, Unicode search, paging and airport-size filters against deterministic facts
  • Find the nearest scheduled-service airports to a coordinate for travel-search prototypes

Frequently asked questions

Can I look up both IATA and ICAO airport codes?

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.

Which airports are included in this API?

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.

How do I page through more than 100 airports?

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.

Where does each airport's time zone come from?

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.

Can I use these coordinates for flight planning?

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.

Standards & references