Takeoff Performance

Calculate takeoff performance data including V-speeds, regulatory takeoff weight (RTOW), thrust settings, and distances.

Calculation Modes

The API supports two calculation modes depending on your use case. The mode is determined by the presence of the takeoffWeight parameter.

RTOW Calculation

Calculate the Regulatory Takeoff Weight — the performance-limited maximum achievable takeoff weight for the given conditions.

Use case: Dispatch planning, load sheet preparation, route feasibility.

How: Omit takeoffWeight or set to null

Returns: RTOW, limiting factors. No assumed temperature or V-speeds.

Actual TOW Calculation

Calculate complete performance data for a specific takeoff weight.

Use case: Flight preparation, EFB data, pilot briefing.

How: Provide takeoffWeight value (in specified weight unit)

Returns: V1, VR, V2, flap, rating, assumed temp, N1 + all RTOW data

Request

POST /api

Full Request Structure

JSON
{
  "query": "performance",
  "apiVersion": "1.3.6",
  "data": {
    "requestType": "TAKEOFF",
    "units": {
      "weight": "kg",
      "wind": "kt",
      "altitude": "feet",
      "distance": "feet",
      "depth": "mm",
      "pressure": "hpa"
    },
    "aircraft": {
      "file": "737-800W_CFM56-7B26.json",
      "userRegistration": null,
      "virtualAirline": null
    },
    "airport": "EBBR",
    "runway": "25R",
    "weather": {
      "windDirection": 250,
      "windSpeed": 10,
      "headwind": null,
      "temperature": 15,
      "qnh": 1013
    },
    "runwayCondition": {
      "state": "DRY",
      "depth": 0
    },
    "configuration": {
      "flap": "OPTIMUM",
      "rating": "OPTIMUM",
      "ratingAssumed": null,
      "antiIce": "OFF",
      "acBleed": "AUTO",
      "improvedClimb": "NO"
    },
    "weight": {
      "takeoffWeight": null,
      "flexibleTakeoffWeight": null,
      "cg": null,
      "cgPosition": null
    },
    "inopItems": {
      "mel": [1, 3],
      "cdl": []
    },
    "notam": {
      "shortenStart": 0,
      "shortenEnd": 200,
      "obstacleHeight": 0,
      "obstacleDistance": 0,
      "obstacleLateral": 0,
      "refHeight": "runwayStart",
      "refDistance": "runwayStart"
    },
    "imageFormat": "svg"
  }
}

Units

The API uses standard units by default. You can override any unit by specifying it in the units object. Response values will be returned in the same units.

Standard Units (Default)

Parameter Standard Unit
weight kg
wind kt (knots)
altitude feet
distance feet
depth mm (millimeters)
pressure hpa (hectopascal)

Custom Units

Override defaults by including the units object:

Parameter Allowed Values
weight kg, lb
wind kt, ms (meters per second)
altitude feet, meter
distance feet, meter
depth mm, inches
pressure hpa, inhg (inch of mercury)
Example: Imperial Units
"units": {
  "weight": "lb",
  "distance": "feet",
  "depth": "inches"
}

Parameters

Data Source Requirement

Configuration values (flap, rating, antiIce, acBleed, runwayCondition.state, etc.) must use the value field from the aircraft's formData options (via the Aircraft API), not the description. Custom values not present in formData will be rejected.

aircraft Required

Parameter Type Description
file string Required. Aircraft profile filename from Aircraft API
userRegistration string|null Custom aircraft registration for personalized profiles
virtualAirline string|null Virtual airline identifier for VA-specific aircraft. userRegistration is required when set.

airport & runway Required

Parameter Type Description
airport string Required. ICAO airport code (e.g., "EBBR")
runway string Required. Runway identification from the Airports API (e.g., "25R", "25RI3" intersection, "25RN1" notam). The intersection selection ALL (sent as the intersection token, e.g. "25RALL") requests every intersection of the runway at once. This requires a VPT Global Pro subscription — see All intersections (ALL).

weather

Parameter Type Default Description
windDirection integer 0 Wind direction in degrees magnetic (0-360)
windSpeed integer 0 Wind speed in knots (or unit specified)
headwind integer|null null Direct headwind component. Negative = tailwind. Overrides direction/speed if provided.
temperature number 15 Outside Air Temperature (OAT) in °C
qnh number 1013 Altimeter setting. Default unit is hPa; set pressure unit to "inhg" to provide and receive values in inches of mercury (e.g., 29.92).

runway_condition

Parameter Type Default Description
state string "DRY" Runway condition value from the aircraft profile conditionDispatch or conditionEnroute options.
depth number 0 Contamination depth in mm (or unit specified). Only used when state indicates contamination.

configuration

Parameter Type Default Description
flap string "OPTIMUM" "OPTIMUM" or value from the aircraft profile flap options.
rating string "OPTIMUM" "OPTIMUM" or value from the aircraft profile rating options.
ratingAssumed number|null null Force a specific flex/assumed temperature in °C. When set, takeoffWeight must be provided and be less than RTOW. Used to manually increase takeoff margins while keeping FLEX/Assumed method.

Airbus: the main TOGA + max-FLEX envelope is always returned in performance.full / performance.assumed. When the supplied ratingAssumed is in the regulatory range 44–67 °C and a takeoff weight is provided, an additional dedicated FLEX calculation at that exact temperature is run in parallel and exposed under performance.additionalAssumed[] with an available flag. Values outside the 44–67 °C range are ignored for that extra calculation.
antiIce string "OFF" value from the aircraft profile ai options.
acBleed string profile first value from the aircraft profile acBleed options. Default is the first element in the profile list.
improvedClimb string "NO" value from the aircraft profile improved options.

weight

Parameter Type Default Description
takeoffWeight number|null null null → RTOW calculation
value → Actual TOW calculation with V-speeds
flexibleTakeoffWeight number|null null Optional weight limit lower than the manufacturer's MSTOW.
cg number|null null Center of gravity as % MAC. Used for trim settings and Alternate Forward CG.
cgPosition string|null profile first value from the aircraft profile cgPosition options. Default is the first element in the profile list.

notam

NOTAM (Notice to Airmen) runway restrictions. When provided, the takeoff distances are adjusted to reflect temporary runway modifications. Requires NOTAM in subscription. Pass null or omit when not applicable.

The same shortenStart and shortenEnd values are used for both takeoff (adjusts TORA) and landing (adjusts LDA) calculations internally.

When the runway end is shortened (shortenEnd > 0), clearway and stopway are automatically set to zero. TORA, TODA and ASDA are derived from the shortened runway length.

All distance values use the distance unit and obstacle height uses the altitude unit from the units section (default: feet).

Parameter Type Default Description
shortenStart number 0 Runway closure distance from the start threshold. Must be ≥ 0.
shortenEnd number 0 Runway closure distance from the end threshold. Must be ≥ 0. When > 0, clearway and stopway become 0.
obstacleHeight number 0 Obstacle height (uses altitude unit)
obstacleDistance number 0 Obstacle distance from reference point
obstacleLateral number 0 Obstacle lateral offset
refHeight string "runwayStart" Obstacle height reference point. "runwayStart" — height measured from runway start elevation. "runwayEnd" — height measured from runway end elevation (corrected for slope).
refDistance string "runwayStart" Obstacle distance reference point. "runwayStart" — distance measured from brake release. "runwayEnd" — distance measured from runway end (TORA is added internally).

inopItems

Parameter Type Default Description
mel array|null [] Minimum Equipment List — array of numeric indexes from the melCdl endpoint, or null. Example: [1, 3]. Requires MEL in subscription.
cdl array|null [] Configuration Deviation List — array of numeric indexes from the melCdl endpoint, or null. Example: [2]. Requires CDL in subscription.

imageFormat

Requested image format for graphic, cduGraphic and rtoGraphic. svg (the default) is always cheap to produce and is the canonical source the other formats are rendered from. Requesting png or jpg triggers a genuine Imagick rasterization pass, so pick it only when you actually need a raster image (e.g. for PDF export) — the response's svg field is populated either way.

Parameter Type Default Description
imageFormat string "svg" One of "svg", "png", "jpg". Any unrecognized value falls back to "svg". Applies to Takeoff Performance only.

Response

Response Structure

The response contains a performance object with three sub-objects: full (full thrust calculation), assumed (reduced thrust calculation when available), and additionalAssumed (an array of extra assumed-temperature calculations such as a user-requested custom FLEX temperature; empty unless requested).

Response Structure
{
  "performance": {
    "full": { ... },
    "assumed": { ... },
    "additionalAssumed": [ ... ]
  }
}

When assumed/flex thrust is not available, the assumed object contains only status fields:

Assumed Not Available
"assumed": {
  "assumed": false,
  "assumedMessage": "No valid assumed temperature found for these conditions."
}

Additional Assumed Temperatures (optional, Airbus only)

additionalAssumed is an optional array of extra assumed-temperature calculations performed in parallel alongside the main TOGA / max-FLEX envelope. It is always present in the response but is empty ([]) by default and is only populated for Airbus aircraft when the client explicitly requests a custom FLEX temperature via configuration.ratingAssumed in the regulatory range 44–67 °C with a takeoff weight supplied. Boeing aircraft, windshear takeoffs, requests without a takeoff weight, and ratingAssumed values outside 44–67 °C all yield an empty array.

It currently holds at most one entry (the user's custom FLEX), but is structured as an array so future additional assumed scenarios can be appended without breaking clients.

Each entry always includes requested and available. When available is true, the entry also carries the same V-speeds, distances, N1, trim, margin, etc. fields documented under Performance Result Fields below (in the requested units and camelCase). When available is false, the entry includes an errorMessage explaining why the calculation could not be returned (e.g. the FLEX is too low for the requested weight, or the weight exceeds the performance-limited TOW at that thrust reduction).

additionalAssumed Examples
"additionalAssumed": [
  {
    "requested": 55,
    "available": true,
    "assumed": true,
    "rating": "FLEX 55",
    "flap": "1+F",
    "temperature": 55,
    "v1": 142,
    "vr": 145,
    "v2": 150,
    "n1": "88.4",
    "accelerateStopDistanceOneEngine": 1820,
    "takeOffDistanceOneEngine": 1750,
    "margin": 950
  }
]

"additionalAssumed": [
  {
    "requested": 62,
    "available": false,
    "errorMessage": "ATOW (77111 KG / 169957 LB) EXCEEDS PERFORMANCE LIMITED TOW (73404 KG / 161826 LB)"
  }
]

All Intersections (ALL) VPT Global Pro

Selecting the intersection ALL (sent as the intersection token appended to the full-length runway, e.g. "runway": "25RALL") computes the full-length runway and every intersection of that runway in a single request.

  • The full-length result is returned in the top-level performance object exactly as for a normal request (fully back-compatible).
  • The full-length calculation runs first and acts as a gate: if it cannot be computed, the request returns that result only and the fan-out is skipped.
  • This feature requires a VPT Global Pro subscription (is_allIntersections). Requests from accounts without this entitlement are rejected with "calculationPossible": false and an error stating the feature requires VPT Global Pro — no calculation is performed.
  • When enabled, an additional intersections array is returned. Each entry identifies the runway and the intersection (taxiway label) for display, plus the units and a full performance object (full, assumed, additionalAssumed) identical in shape to the top-level result. Declared distances (TORA/TODA/ASDA) are inside each performance object as usual.
ALL Intersections Response
{
  "performance": { "full": { ... }, "assumed": { ... }, "additionalAssumed": [ ... ] },
  "intersections": [
    {
      "runway": "25R",
      "intersection": "B4",
      "units": { ... },
      "performance": {
        "full": { ... },
        "assumed": { ... },
        "additionalAssumed": [ ... ]
      }
    },
    {
      "runway": "25R",
      "intersection": "D",
      "units": { ... },
      "performance": { ... }
    }
  ]
}

An intersection entry where performance is not achievable (e.g. runway too short) carries "notAchievable": true and a caution message instead of units / performance. This is a normal, expected outcome for short intersections — the full-length result and any achievable intersections are unaffected. The full-length runway and every intersection are computed in parallel — all their provider calculations fire together in a single batched round-trip, so total time stays close to that of a single calculation regardless of how many intersections the runway has.

Status Fields

Field Type Description
assumed boolean true if this is an assumed/flex thrust calculation
assumedMessage string Reason when assumed thrust is not available (empty when available)

Configuration Fields

Field Type Description
rating string Thrust rating used (actual rating, not "OPTIMUM")
flap string Selected flap setting
flapAnnotation string Indicates if flap was optimized ("OPTIMUM") or user-selected
lblTemp string Temperature label ("OAT", "FLEX", "ASSUMED")
lblThrust string Thrust setting label (e.g., "FULL TAKE OFF POWER")
temperature integer Temperature value in °C (OAT or assumed temp)
tora integer Takeoff Run Available (runway length used)
isNotam boolean true if NOTAM runway restrictions are applied
displayVspeeds boolean true if V-speeds should be displayed (weight was provided)
vrefIsDisplayed boolean true if Vref data is available for this aircraft
units object Display labels: weight ("kgs"/"lbs"), distance/height ("ft"/"m"), pressure ("hPa"/"inHg")

Weight Fields

Field Type Description
tow integer Takeoff Weight used for calculation
maxTow integer Maximum Regulatory Takeoff Weight (lowest of all limits)
structuralLimited integer Structural (MTOW) limited weight
tireSpeedLimit integer Tire speed limited weight
fieldLimited integer Field length limited weight
climbLimited integer Climb gradient limited weight
obstacleClearanceLimited integer Obstacle clearance limited weight
brakeEnergyLimited integer Brake energy limited weight
limitingFactor string What limits the weight: FIELD, CLIMB, OBSTACLE CLEARANCE, BRAKE ENERGY, TIRE SPEED, STRUCTURAL, or FLEXIBLE TOW
limitingFactorShort string Short code: FIELD, CLIMB, OBST., BRAKE, TIRE, STRUCT., FLEX.

V-Speed Fields

Field Type Description
v1 integer Decision speed (knots)
vr integer Rotation speed (knots)
v2 integer Takeoff safety speed (knots)
v1Logic string V1 optimization mode (e.g., "Optimum")
vman integer Manual V1 value (0 if not set)
vrMax integer Maximum rotation speed (0 if not applicable)
vrefFlaps string Reference flap setting for Vref
vrefSpeed integer Reference approach speed (knots)
greenDot integer | null Green dot speed — clean maneuver / best lift-to-drag speed (knots). Airbus only. null when not available for the aircraft type. Calculated as weightFactor × TOW[kg] / 1000 + weightAdditive from the aircraft profile.

Engine Fields

Field Type Description
n1Label string Engine parameter label (e.g., "N1", "EPR")
n1 string Engine thrust setting value

Distance Fields

Field Type Description
accelerateStopDistanceOneEngine integer Accelerate-stop distance with one engine failed
takeOffRunAllEngines integer Takeoff run with all engines operating
takeOffRunOneEngine integer Takeoff run with one engine failed
takeOffDistanceAllEngines integer Takeoff distance with all engines operating
takeOffDistanceOneEngine integer Takeoff distance with one engine failed
margin integer Remaining runway distance after the takeoff, expressed in the requested distance unit. Computed as the minimum of three margins: (runway length − all-engines distance), (runway length − one-engine distance), and (ASDA − accelerate-stop distance). The runway length used is the effective intersection TORA (NOTAM-aware) plus clearway when the aircraft displays Takeoff Distance, or just the TORA when it displays Takeoff Run. ASDA includes the stopway. A negative value indicates the takeoff would not fit on the runway.

Climb Gradient Fields

Field Type Description
secondSegmentGros number Gross second segment climb gradient (%)
secondSegmentNet number Net second segment climb gradient (%)

Trim Fields

Field Type Description
trimRaw string Calculated trim value ("N/A" if CG not provided)
trimRounded string Rounded trim value for cockpit setting

Engine Failure Procedure Fields

Field Type Description
efp string Engine Failure Procedure text
effra integer Engine-out acceleration altitude
effrh integer Engine-out acceleration height
userEffrValue integer User-specified engine-out value
userEffrReference string Reference for engine-out value (e.g., "AMSL", "AGL")

Brake Cooling Fields

Field Type Description
brakeCoolingSchedule object|undefined Brake cooling times for Air and Ground cooling, with values for 80kt, 100kt, and V1 reject-speed scenarios. Only present when the aircraft profile has landing.brakeCooling.isBrakeCoolingAvailable set — see rtoDistance for the corresponding distances, which are always available.
BrakeCoolingSchedule Structure
"brakeCoolingSchedule": {
  "air": {
    "eighty": "0",
    "hundred": "5",
    "v1": "FUSE MELT"
  },
  "ground": {
    "eighty": "0",
    "hundred": "29",
    "v1": "FUSE MELT"
  }
}

Graphics Fields

Field Type Description
graphic object URLs to generated performance graphics: svg (always), png, jpg (only the one matching the requested imageFormat, the other is null)
cduGraphic object|null CDU-style graphic URLs (Airbus only, null for other aircraft): svg — scalable vector graphic URL (always), png — raster PNG URL (only when imageFormat is "png", otherwise null)
rtoDistance object Estimated accelerate-stop distance (ASDR) for a reject at 80kt, 100kt and V1 (in the requested distance unit, see units). Always present, independent of brakeCoolingSchedule/brake cooling availability.
rtoGraphic object|null Rejected-takeoff (RTO) graphic: svg (always), png, jpg (only the one matching the requested imageFormat, otherwise null). Always generated (only null if the runway/intersection data can't be resolved). Plots rtoDistance on the same runway/exits/windsock layout as graphic. The ground/air brake cooling time for each speed (from brakeCoolingSchedule) is shown alongside the distance only when the aircraft profile has landing.brakeCooling.isBrakeCoolingAvailable set.
RtoDistance Structure
"rtoDistance": {
  "eighty": 793,
  "hundred": 1239,
  "v1": 2678
}

Full Response Example

JSON Response
{
  "performance": {
    "full": {
      "assumed": false,
      "assumedMessage": "No valid assumed temperature found for these conditions.",
      "rating": "TO-1",
      "flap": "1",
      "lblTemp": "OAT",
      "lblThrust": "FULL TAKE OFF POWER",
      "temperature": 15,
      "tora": 11935,
      "isNotam": false,
      "displayVspeeds": true,
      "vrefIsDisplayed": false,
      "units": {
        "weight": "kgs",
        "distance": "ft",
        "height": "ft"
      },
      "tow": 73920,
      "structuralLimited": 79016,
      "tireSpeedLimit": 86183,
      "fieldLimited": 84060,
      "climbLimited": 76025,
      "obstacleClearanceLimited": 73920,
      "brakeEnergyLimited": 86183,
      "maxTow": 73920,
      "limitingFactor": "OBSTACLE CLEARANCE",
      "limitingFactorShort": "OBST.",
      "v1Logic": "Optimum",
      "v1": 156,
      "vr": 156,
      "v2": 159,
      "vman": 0,
      "vrMax": 0,
      "vrefFlaps": "40",
      "vrefSpeed": 150,
      "greenDot": 205,
      "n1Label": "N1",
      "n1": "91.7",
      "accelerateStopDistanceOneEngine": 8632,
      "takeOffRunAllEngines": 8152,
      "takeOffRunOneEngine": 7802,
      "takeOffDistanceAllEngines": 8821,
      "takeOffDistanceOneEngine": 8632,
      "margin": 3303,
      "secondSegmentGros": 2.71,
      "secondSegmentNet": 1.91,
      "trimRaw": "N/A",
      "trimRounded": "N/A",
      "efp": "Maintain 244° to 25 NM and HOLD.",
      "effra": 976,
      "effrh": 800,
      "userEffrValue": 976,
      "userEffrReference": "AMSL",
      "brakeCoolingSchedule": {
        "air": { "eighty": "0", "hundred": "5", "v1": "FUSE MELT" },
        "ground": { "eighty": "0", "hundred": "29", "v1": "FUSE MELT" }
      },
      "rtoDistance": { "eighty": 793, "hundred": 1239, "v1": 2678 },
      "graphic": {
        "svg": "http://example.com/takeoffResult.svg",
        "png": null,
        "jpg": null
      },
      "cduGraphic": {
        "svg": "http://example.com/takeoffResult_cdu_full.svg",
        "png": null
      },
      "rtoGraphic": {
        "svg": "http://example.com/rtoResult_full.svg",
        "png": null,
        "jpg": null
      },
      "flapAnnotation": "OPTIMUM"
    },
    "assumed": {
      "assumed": false,
      "assumedMessage": "No valid assumed temperature found for these conditions."
    },
    "additionalAssumed": []
  }
}