Performance specs
Runnable examples for pulling and comparing aircraft performance data by ICAO type designator. See the full Aircraft Performance reference for field definitions and coverage notes.
| # | Question | Data used |
|---|---|---|
| 1 | What are the performance specs for a Boeing 737-800? | /aircraft/performance/{icao_type} |
| 2 | How do the A320, B738, and A35K compare on range and cruise speed? | /aircraft/performance/{icao_type} |
Requirements
x-api-key on every request (direct subscription). Learn more →Install
The scripts below use requests for API calls and rich for terminal output. Install once:
pip install requests rich1. Look up performance specs for a Boeing 737-800 (B738)
Question: What are the cruise speed, range, dimensions, and operational limits for a B738?
Performance data is keyed by ICAO type designator. A 404 means the type is not yet in the performance database — this is normal for rare or very new types.
import os
import requests
from rich.console import Console
from rich.table import Table
console = Console()
HEADERS = {
"X-RapidAPI-Key": os.getenv("RAPIDAPI_KEY", "YOUR_RAPIDAPI_KEY"),
"X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"
ICAO_TYPE = "B738"
def fetch_performance(icao_type: str) -> dict | None:
r = requests.get(
f"{BASE}/aircraft/performance/{icao_type}",
headers=HEADERS,
timeout=(10, 15),
)
if r.status_code == 404:
return None
r.raise_for_status()
return r.json()
def main() -> None:
data = fetch_performance(ICAO_TYPE)
if data is None:
console.print(f"[yellow]Type {ICAO_TYPE} not in performance database.[/yellow]")
return
cruise_kt = data["cruise_speed_ktas"]
cruise_kmh = round(cruise_kt * 1.852)
range_nm = data["max_range_nm"]
range_km = round(range_nm * 1.852)
mtow_t = data["mtow_t"]
mtow_lb = round(mtow_t * 2204.6)
table = Table(title=f"Performance — {data['icao_type']} {data['name']}", border_style="cyan")
table.add_column("Field", style="bold")
table.add_column("Value")
table.add_row("ICAO Type", data["icao_type"])
table.add_row("Name", data["name"])
table.add_row("Engine Type", data["engine_type"])
table.add_row("Wake Category", data["wake_category"])
table.add_row("Cruise Speed", f"{cruise_kt} kt ({cruise_kmh} km/h)")
table.add_row("Service Ceiling", f"{data['service_ceiling_ft']:,} ft")
table.add_row("Max Range", f"{range_nm:,} nm ({range_km:,} km)")
table.add_row("Wingspan", f"{data['wing_span_m']} m")
table.add_row("Length", f"{data['length_m']} m")
table.add_row("MTOW", f"{mtow_t} t ({mtow_lb:,} lb)")
table.add_row("Max Passengers", str(data["max_passengers"]))
console.print(table)
if __name__ == "__main__":
main()Output: A table with all performance fields including derived unit conversions (km/h, km, lb).
2. Compare cruise speed and range for A320 vs B738 vs A35K
Question: Among three common narrowbody and widebody types, which has the greatest range and how do they stack up on cruise speed?
Fetch each type concurrently, sort by max_range_nm descending, and mark the longest-range type with ★. Types that 404 are skipped with a warning.
import os
from concurrent.futures import ThreadPoolExecutor, as_completed
import requests
from rich.console import Console
from rich.table import Table
console = Console()
HEADERS = {
"X-RapidAPI-Key": os.getenv("RAPIDAPI_KEY", "YOUR_RAPIDAPI_KEY"),
"X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"
TYPES = ["A320", "B738", "A35K"]
def fetch_performance(icao_type: str) -> tuple[str, dict | None]:
r = requests.get(
f"{BASE}/aircraft/performance/{icao_type}",
headers=HEADERS,
timeout=(10, 15),
)
if r.status_code == 404:
return icao_type, None
r.raise_for_status()
return icao_type, r.json()
def main() -> None:
found: list[dict] = []
missing: list[str] = []
with ThreadPoolExecutor(max_workers=5) as pool:
futures = {pool.submit(fetch_performance, t): t for t in TYPES}
for future in as_completed(futures):
icao_type, data = future.result()
if data is None:
missing.append(icao_type)
else:
found.append(data)
if missing:
console.print(f"[yellow]Skipped (not in database): {', '.join(missing)}[/yellow]")
if not found:
console.print("[red]No performance data available for any of the requested types.[/red]")
return
found.sort(key=lambda d: d["max_range_nm"], reverse=True)
best_range = found[0]["icao_type"]
table = Table(title="Aircraft Performance Comparison", border_style="cyan")
table.add_column("Type", style="bold")
table.add_column("Name")
table.add_column("Cruise (kt)", justify="right")
table.add_column("Range (nm)", justify="right")
table.add_column("Ceiling (ft)", justify="right")
table.add_column("Wake", justify="center")
for d in found:
star = " ★" if d["icao_type"] == best_range else ""
table.add_row(
d["icao_type"] + star,
d["name"],
str(d["cruise_speed_ktas"]),
f"{d['max_range_nm']:,}",
f"{d['service_ceiling_ft']:,}",
d["wake_category"],
)
console.print(table)
if __name__ == "__main__":
main()Output: A comparison table sorted by range descending. The longest-range type is marked with ★.