airportfyi
Python API client for global airport data. Look up 4,500+ airports by IATA/ICAO code, query runway specifications, explore terminal configurations, and retrieve geographic coordinates — all from AirportFYI, an airport reference platform with comprehensive data on commercial and regional airports worldwide.
Built on authoritative aviation data sources, AirportFYI covers IATA/ICAO code assignments, airport classifications (international hub, regional, domestic), runway dimensions, elevation, timezone, and country information — used by travel-tech developers, flight tracking apps, and aviation data platforms.
Explore airports at airportfyi.com — browse by country, search by IATA code, and view airport details.
Table of Contents
- Install
- Quick Start
- What You Can Do
- Command-Line Interface
- MCP Server (Claude, Cursor, Windsurf)
- REST API Client
- API Reference
- Learn More About Airports
- Also Available
- Transport FYI Family
- License
Install
pip install airportfyi # Core (zero deps)
pip install "airportfyi[cli]" # + Command-line interface
pip install "airportfyi[mcp]" # + MCP server for AI assistants
pip install "airportfyi[api]" # + HTTP client for airportfyi.com API
pip install "airportfyi[all]" # Everything
Quick Start
from airportfyi.api import AirportFYI
with AirportFYI() as api:
# Look up airport by IATA code
icn = api.get_airport("incheon-international")
print(icn["iata"]) # ICN
print(icn["icao"]) # RKSI
print(icn["city"]) # Seoul
print(icn["country"]) # South Korea
# List airports by country
airports = api.list_airports(country="japan")
for a in airports:
print(f"{a['iata']} — {a['name']}")
# Search airports globally
results = api.search("heathrow")
What You Can Do
IATA and ICAO Codes
Every commercial airport is assigned two identification codes. The IATA code (3 letters) is used on boarding passes and booking systems — familiar codes like LAX, JFK, NRT. The ICAO code (4 letters) is used in flight plans and air traffic control — KLAX, KJFK, RJTT. The first letter(s) of ICAO codes indicate the geographic region.
| ICAO Prefix | Region | Examples |
|---|---|---|
| K | Contiguous United States | KJFK, KLAX, KORD |
| C | Canada | CYYZ, CYVR |
| EG | United Kingdom | EGLL (Heathrow), EGKK (Gatwick) |
| LF | France | LFPG (CDG), LFPO (Orly) |
| RJ | Japan (mainland) | RJTT (Haneda), RJAA (Narita) |
| RK | South Korea | RKSI (Incheon), RKSS (Gimpo) |
| Z | China (mainland) | ZBAA (Beijing), ZSPD (Pudong) |
| WS | Singapore | WSSS (Changi) |
from airportfyi.api import AirportFYI
with AirportFYI() as api:
# Look up by IATA code
results = api.search("ICN")
airport = results[0]
print(f"{airport['iata']}/{airport['icao']} — {airport['name']}")
# ICN/RKSI — Incheon International Airport
Learn more: Airport Directory · Glossary
Airport Classifications
Airports are classified by traffic volume, runway capability, and role in the air transport network. Major international hubs handle 40M+ passengers annually and serve as connection points for global airline alliances.
| Classification | Annual Passengers | Characteristics |
|---|---|---|
| Large Hub | 1% + of total (40M+) | Multiple terminals, long-haul routes |
| Medium Hub | 0.25-1% (10-40M) | Domestic + some international |
| Small Hub | 0.05-0.25% (2-10M) | Regional service |
| Non-Hub Primary | 10K-2M | Essential air service |
| Regional/GA | <10K | General aviation, private |
from airportfyi.api import AirportFYI
with AirportFYI() as api:
# Browse airports by country
airports = api.list_airports(country="united-states")
hubs = [a for a in airports if a.get("classification") == "Large Hub"]
print(f"{len(hubs)} large hub airports in the US")
Learn more: Countries · Guides
Runway and Elevation Data
Runway length determines what aircraft can operate at an airport. Widebody jets (B777, A380) typically require 3,000m+ runways, while regional turboprops can operate from 1,500m. Airport elevation affects takeoff performance — high-altitude airports like La Paz (4,061m) require longer runways due to thinner air.
| Runway Category | Length | Capable Aircraft |
|---|---|---|
| Short (<1,500m) | 4,921 ft | Turboprops, light jets |
| Medium (1,500-2,500m) | 8,202 ft | Narrowbody (A320, B737) |
| Long (2,500-3,500m) | 11,483 ft | Widebody (B777, A350) |
| Ultra-long (>3,500m) | 11,483+ ft | A380, high-altitude ops |
from airportfyi.api import AirportFYI
with AirportFYI() as api:
# Get runway specifications
airport = api.get_airport("denver-international")
print(f"Elevation: {airport['elevation_ft']} ft") # 5,431 ft
print(f"Runways: {airport['runway_count']}")
Learn more: Airport Details · Glossary
Geographic and Timezone Data
Every airport entry includes precise latitude/longitude coordinates and IANA timezone identifier, enabling distance calculations, flight time estimation, and local time display in travel applications.
from airportfyi.api import AirportFYI
with AirportFYI() as api:
airport = api.get_airport("tokyo-haneda")
print(f"Lat: {airport['latitude']}") # 35.5533
print(f"Lon: {airport['longitude']}") # 139.7811
print(f"Timezone: {airport['timezone']}") # Asia/Tokyo
print(f"UTC Offset: {airport['utc_offset']}")
Learn more: Airport Data · API Documentation
Command-Line Interface
pip install "airportfyi[cli]"
airportfyi airport incheon-international # Airport details
airportfyi search "LAX" # Search by IATA/name
airportfyi country japan # All airports in Japan
airportfyi countries # List all countries
MCP Server (Claude, Cursor, Windsurf)
pip install "airportfyi[mcp]"
{
"mcpServers": {
"airportfyi": {
"command": "uvx",
"args": ["--from", "airportfyi[mcp]", "python", "-m", "airportfyi.mcp_server"]
}
}
}
REST API Client
from airportfyi.api import AirportFYI
with AirportFYI() as api:
airport = api.get_airport("incheon-international") # GET /api/v1/airports/incheon-international/
airports = api.list_airports(country="japan") # GET /api/v1/airports/?country=japan
countries = api.list_countries() # GET /api/v1/countries/
results = api.search("heathrow") # GET /api/v1/search/?q=heathrow
Example
curl -s "https://airportfyi.com/api/v1/airports/incheon-international/"
{
"slug": "incheon-international",
"name": "Incheon International Airport",
"iata": "ICN",
"icao": "RKSI",
"city": "Seoul",
"country": "South Korea"
}
Full API documentation at airportfyi.com/developers/.
API Reference
| Function | Description |
|---|---|
api.get_airport(slug) |
Airport details (codes, coordinates, runways) |
api.list_airports(country) |
List airports, optionally filtered by country |
api.list_countries() |
All countries with airport counts |
api.get_country(slug) |
Country details with airport list |
api.search(query) |
Search by name, IATA, or ICAO code |
Learn More About Airports
- Browse: Airport Directory · Countries
- Guides: Aviation Guides · Glossary
- API: REST API Docs · OpenAPI Spec
Also Available
| Platform | Install | Link |
|---|---|---|
| npm | npm install airportfyi |
npm |
| MCP | uvx --from "airportfyi[mcp]" python -m airportfyi.mcp_server |
Config |
Transport FYI Family
Part of the FYIPedia open-source developer tools ecosystem — airports, airlines, aircraft, and railways.
| Package | PyPI | npm | Description |
|---|---|---|---|
| airportfyi | PyPI | npm | 4,500+ airports, IATA/ICAO codes, routes — airportfyi.com |
| airlinefyi | PyPI | npm | Airlines, fleets, alliances, routes — airlinefyi.com |
| planefyi | PyPI | npm | Aircraft models, specifications, manufacturers — planefyi.com |
| trainfyi | PyPI | npm | Railway stations, train routes, rail networks — trainfyi.com |
License
MIT
Metadata
Release files for airportfyi 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| airportfyi-0.1.1.tar.gz | 197.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| airportfyi-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 206.8 kB
Release files / airportfyi-0.1.1.tar.gz
| Download URL | airportfyi-0.1.1.tar.gz |
|---|---|
| Size | 197.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7513280f7a9f25f5d357ba708dca1c954e9ecf3ca557e97ae5377fe3ad2953a7
|
|
BLAKE2b-256 checksum How to use checksums |
70e76209368397c64821fbae6c6f37589e012a42de663bfebe94ecd2c188724c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / airportfyi-0.1.1-py3-none-any.whl
| Download URL | airportfyi-0.1.1-py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
835cee847cee7b3c591030abebf294546118f5c0fc7b4c8bc2acf3fbe33abf2f
|
|
BLAKE2b-256 checksum How to use checksums |
f442c17a582ecb856e1640186c0e766598a681a28042065ff7945ef43ac03cc5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|