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.
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.
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
Full Request Structure
{
"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) |
"units": {
"weight": "lb",
"distance": "feet",
"depth": "inches"
}
Parameters
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 calculationvalue → 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).
{
"performance": {
"full": { ... },
"assumed": { ... },
"additionalAssumed": [ ... ]
}
}
When assumed/flex thrust is not available, the
assumed object contains only status fields:
"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": [
{
"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
performanceobject 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": falseand anerrorstating the feature requires VPT Global Pro — no calculation is performed. -
When enabled, an additional
intersectionsarray is returned. Each entry identifies therunwayand theintersection(taxiway label) for display, plus theunitsand a fullperformanceobject (full,assumed,additionalAssumed) identical in shape to the top-level result. Declared distances (TORA/TODA/ASDA) are inside eachperformanceobject as usual.
{
"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": {
"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": {
"eighty": 793,
"hundred": 1239,
"v1": 2678
}
Full Response Example
{
"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": []
}
}