Save up to 17% with yearly billing

See pricing

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

Auth
x-api-key on every request (direct subscription). Learn more →

Request

GEThttps://data.skylinkapi.com/v3.1/aircraft/performance/{icao_type}
ParameterTypeRequiredDefaultDescription
icao_typestringYes (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
}
FieldTypeRequiredNull?Description
icao_typestringYesNeverICAO type designator echoed from the path
namestringYesNeverAircraft model name
engine_typestringYesNeverEngine category, e.g. Jet, Turboprop
engine_codestringYesNeverICAO engine-count/type code, e.g. L2J
wake_categorystringYesNeverICAO wake turbulence category (L, M, H, J)
cruise_speed_ktasnumberYesNeverTypical cruise speed in knots true airspeed
service_ceiling_ftnumberYesNeverService ceiling in feet
max_range_nmnumberYesNeverMaximum range in nautical miles
wing_span_mnumberYesNeverWingspan in metres
length_mnumberYesNeverFuselage length in metres
mtow_tnumberYesNeverMaximum take-off weight in metric tonnes
max_passengersintegerYesNeverTypical 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: str

Integration

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.

GET
/aircraft/performance/{icao_type}
x-api-key<token>

Your SkyLink licence key, for keys bought direct from skylinkapi.com.

In: header

Path Parameters

icao_type*Icao Type

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