Aircraft Performance
Get cruise speed, range, and wake category for an ICAO aircraft type code (e.g. B738, A320). Reference specs are drawn from ICAO Doc 8643 (Aircraft Type Designators) — the international register of type codes, manufacturer names, engine categories, and wake turbulence classes. Aircraft performance returns static reference specs for a type designator — not values for a specific tail number. The correct workflow is to resolve icao_type from Aircraft Lookup first, then call this endpoint.
The response includes cruise speed in KTAS (knots true airspeed — speed relative to undisturbed air), service ceiling (maximum altitude the aircraft can sustain in level flight), maximum range, engine and wake turbulence category (ICAO classification L/M/H/J based on MTOW — governs minimum separation between aircraft), and physical dimensions including MTOW (maximum take-off weight in metric tonnes) and max passengers. Use this data for range rings on maps, fuel and connection estimates, and wake-separation hints in dispatch tools.
Requirements
x-api-key on every request (direct subscription). Learn more →Request
https://data.skylinkapi.com/v3.1/aircraft/performance/{icao_type}| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
icao_type | string | Yes (path) | - | ICAO type designator, e.g. B738, A359, E190 |
Response
{
"icao_type": "B738",
"name": "BOEING 737-800",
"engine_type": "Jet",
"engine_code": "L2J",
"wake_category": "M",
"cruise_speed_ktas": 460.0,
"service_ceiling_ft": 35000.0,
"max_range_nm": 2900.0,
"wing_span_m": 34.4,
"length_m": 39.5,
"mtow_t": 78.2,
"max_passengers": 189
}| Field | Type | Required | Null? | Description |
|---|---|---|---|---|
icao_type | string | Yes | Never | ICAO type designator echoed from the path |
name | string | Yes | Never | Aircraft model name |
engine_type | string | Yes | Never | Engine category, e.g. Jet, Turboprop |
engine_code | string | Yes | Never | ICAO engine-count/type code, e.g. L2J |
wake_category | string | Yes | Never | ICAO wake turbulence category (L, M, H, J) |
cruise_speed_ktas | number | Yes | Never | Typical cruise speed in knots true airspeed |
service_ceiling_ft | number | Yes | Never | Service ceiling in feet |
max_range_nm | number | Yes | Never | Maximum range in nautical miles |
wing_span_m | number | Yes | Never | Wingspan in metres |
length_m | number | Yes | Never | Fuselage length in metres |
mtow_t | number | Yes | Never | Maximum take-off weight in metric tonnes |
max_passengers | integer | Yes | Never | Typical maximum passenger capacity |
All response fields are non-null when the type code is recognized — no optional nulls to guard against.
Client types
"""Aircraft performance models for GET /aircraft/performance/{icao_type}."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass AircraftPerformance: icao_type: str name: str engine_type: str engine_code: str wake_category: str cruise_speed_ktas: float service_ceiling_ft: float max_range_nm: float wing_span_m: float length_m: float mtow_t: float max_passengers: int@dataclassclass PerformanceSummary: """Compact model for range rings and briefing cards.""" icao_type: str name: str cruise_speed_ktas: float max_range_nm: float wake_category: strIntegration
Fetch performance specs for a type code and build a range-ring or briefing summary.
The example below caches performance profiles for 7 days because type-level data changes rarely. Each call uses connect/read timeouts (10 s / 15 s). The helper returns a compact model with normalized speed and range units for map overlays.
import osimport timefrom dataclasses import dataclassimport requestsHEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3.1"CACHE: dict[str, tuple[dict, float]] = {}PERF_TTL = 604_800 # 7 days@dataclassclass PerformanceSummary: icao_type: str name: str cruise_speed_ktas: float max_range_nm: float wake_category: strdef fetch_performance(icao_type: str) -> dict: """Fetch performance profile for an ICAO aircraft type code.""" code = icao_type.strip().upper() key = f"perf:{code}" cached = CACHE.get(key) if cached and time.time() < cached[1]: return cached[0] try: r = requests.get( f"{BASE}/aircraft/performance/{code}", headers=HEADERS, timeout=(10, 15), ) except requests.Timeout as exc: raise RuntimeError(f"SkyLink timeout fetching performance {code}") from exc r.raise_for_status() payload = r.json() CACHE[key] = (payload, time.time() + PERF_TTL) return payloaddef performance_summary(icao_type: str) -> PerformanceSummary: data = fetch_performance(icao_type) return PerformanceSummary( icao_type=data["icao_type"], name=data["name"], cruise_speed_ktas=float(data["cruise_speed_ktas"]), max_range_nm=float(data["max_range_nm"]), wake_category=data["wake_category"], )if __name__ == "__main__": import json from dataclasses import asdict summary = performance_summary("B738") print(json.dumps(asdict(summary), indent=2))Implementation notes
Type code source. Resolve icao_type from Aircraft Lookup or ADS-B enrichment before calling this endpoint — pass the ICAO designator (B738), not the long marketing name.
Not tail-specific. MTOW and range are fleet-average figures for the type, not values for an individual aircraft configuration.
Wake category. Use wake_category for separation hints in dispatch tools only — it is reference data, not a live ATC instruction.
Caching. Safe to cache by icao_type for days or weeks. Invalidate only when SkyLink announces dataset updates.
Block time predictions. For ML-predicted block time using the type, see Flight Time.
Error responses
For shared platform errors (auth, rate limits, server errors), see Error Handling. Endpoint-specific behavior:
422 — unknown or invalid type code
{
"detail": [
{
"type": "value_error",
"loc": ["path", "icao_type"],
"msg": "Unknown ICAO aircraft type"
}
]
}Occurs when the type designator is not in the performance dataset. Validate codes from lookup before calling, and handle 422 with a fallback label in your UI.
Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/aircraft/performance/B738"{
"icao_type": "B77W",
"name": "BOEING 777-300ER",
"engine_type": "Jet",
"engine_code": "L2J",
"wake_category": "H",
"cruise_speed_ktas": 490,
"service_ceiling_ft": 43000,
"max_range_nm": 7370,
"wing_span_m": 64.8,
"length_m": 73.9,
"mtow_t": 351.5,
"max_passengers": 396
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Related: Aircraft Lookup · ADS-B · Distance & Bearing