Skip to main content
The Flight Tracking plugin sends a periodic position update on the interval set by the airline’s Tracking Interval (15 / 30 / 60 seconds) and, at the end of a flight, a single completion PIREP. When a VA has a backend URL configured for its own ACARS (phpVMS, vmsACARS, custom), every report sent to that backend carries a fixed set of core fields plus whichever extras the airline has opted into. The Additional Fields setting is one matrix that controls all of that. Every optional field is a row; the 15 flight phases are columns, with a final Submission column. Tick a phase cell to append that field to position updates while the flight is in that phase; tick Submission to include it in the completion PIREP. This single matrix replaces the two older lists (the streamed “Position Report Fields” and the completion “PIREP Fields”) — an airline configured under the old model is migrated automatically, preserving its previous behaviour (everything it streamed keeps streaming in every phase, everything it submitted keeps being submitted). This page lists every field, the exact key it uses on the wire, its type and unit, and what it represents, so VA admins know what to enable and what their own backend will receive. It is kept in sync with the client code — when a new variable is added, it is added here.

Where to configure

In your Skyvex admin: Airlines → <your airline> → Plugins → Flight Tracking → Additional Fields. Tick any combination of phase cells and Submission per field. The selection is stored on the airline and applies to every pilot the next time they (re)start a flight — the Stratos client pulls the config at the start of each flight.
Lower the Tracking Interval and tick more phase cells only if your VA backend actually consumes them. Each extra field is more bytes per pilot per tick — fine in isolation, noticeable at scale across hundreds of pilots flying simultaneously. Restricting a field to the phases that matter (for example winds only during CLIMB / CRUISE / DESCENT) keeps every other tick lean.

What every report always carries

Two sets of fields are sent unconditionally, regardless of what you tick.

Position update — the always-on keys

Every position update POSTed to your backend’s /flights/update opens with these twelve keys, in this order, before any optional fields are appended:
KeyDescriptionType / Unit
uuidThe VA-side tracking id for this flight. Always the first key. Not sim-sourced.string
bid_idThe VA booking id the flight was started from.number
phaseCurrent flight phase, UPPERCASE (BOARDINGDEBOARDING). TAXI_IN and ARRIVED both report as TAXI_TO_GATE; an undetected phase is UNKNOWN. Reports PAUSED while the sim is paused. See The phase fields.string
latitudeAircraft latitude in WGS-84.number, °
longitudeAircraft longitude in WGS-84.number, °
headingTrue heading.number, °
altitudeAltitude MSL.number, ft
ground_speedGround speed.number, kts
distance_remainingGreat-circle distance from the current position to the destination airport. 0 only when the destination is unknown (free flight, or its coordinates haven’t synced).number, nm
time_remainingdistance_remaining ÷ ground_speed, in hours; 0 when stationary or when distance_remaining is 0.number, hr
routeThe filed route string for the booking.string
networkAlways the literal string "offline".string
The opt-in miles_to_go field carries the same value as distance_remaining, which is already always present — so there is no need to enable miles_to_go separately.

Completion PIREP — the always-on keys

The completion POST to /flights/complete always includes these thirteen keys, before any Submission-ticked fields are merged on top:
KeyDescriptionType / Unit
tracking_idIdentifies the flight being completed.string
bid_idThe VA booking id.number
statusCompletion status (completed, diverted, and so on).string
flight_timeTotal flight duration.number, hr
landing_rateTouchdown vertical rate, from the landing analyser.number, fpm
fuel_usedFuel burned over the flight.number, lbs
block_fuelFuel on board at block-off. Omitted from the JSON entirely if it was never captured (not sent as 0).number, lbs
zfwZero-fuel weight at start. Omitted entirely if never captured.number, lbs
simulator_versionSimulator name and version.string
commentsPilot and auto-generated comments.string
historyThinned (~15 s) position track, as a JSON array of {time, latitude, longitude, alt, gs}.JSON array
flight_logRecorded flight events, as a JSON array of {timestamp, event}.JSON array
landing_reportThe landing-analyser report object.object
landing_rate, fuel_used and simulator_version are always included here with their authoritative completion values, so Submission is disabled for them in the matrix — ticking it would only override the authoritative value with the live one, so there is nothing to add.

How optional fields are delivered

Every optional field is one of two kinds. This determines what your backend receives and when:
  • Live — read from the simulator on every tick and sent at its current value. If the sim can’t supply it, the raw default is sent: 0 for numbers, false for booleans, "" for strings. Live fields are never blank.
  • Milestone — captured once when the flight passes a milestone (block-off, takeoff, touchdown, block-on) and stored in the PIREP snapshot. A milestone field appended to a position update before its capture milestone is sent as null; the same applies to a Submission-ticked milestone field whose milestone never fired.
Each table below marks the kind. Per-simulator caveats are folded into the description, because the admin matrix’s “all sims” badge does not capture every gap.

Optional live fields

Grouped as they appear in the admin matrix. The Key column is the exact key your VA backend sees in the JSON payload.

Position & Navigation

KeyDescriptionType / Unit
vertical_speedClimb / descent rate, positive = climb. X-Plane uses an undamped value (local_vy), not the cockpit VSI.number, fpm
indicated_airspeedIndicated airspeed (rounded).number, kts
true_airspeedTrue airspeed (rounded).number, kts
altitude_aglHeight above ground level (aircraft reference point).number, ft
altitude_agl_gearAGL measured to the main gear (minus CG). Only MSFS gives a distinct minus-CG value; FSX/P3D and X-Plane fall back to altitude_agl.number, ft
miles_to_goGreat-circle distance to the destination airport — the same value as the always-on distance_remaining. 0 when the destination is unknown.number, nm
cruise_altitudeNot a filed cruise level. The current MSL altitude rounded to the nearest 1000 ft.number, ft

Orientation

KeyDescriptionType / Unit
pitchPitch attitude, positive = nose up (sign normalised across sims).number, °
bankBank angle (positive = right wing down).number, °

Flight Controls

KeyDescriptionType / Unit
gear_controlGear handle down (true = down). Debounced ~3 s to avoid toggling during gear animation.boolean
flaps_controlFlap handle position, 0–100 %.number, %
flaps_left_positionNot a real per-surface reading — aliased to flaps_control.number, %
flaps_right_positionNot a real per-surface reading — aliased to flaps_control.number, %
on_groundOn-ground flag. MSFS also applies a low-and-slow heuristic; X-Plane reads the sim flag directly.boolean

Engine Data

engines_count reports how many engines the current aircraft has — use it to ignore engine3_* / engine4_* on twins. Per-engine fields exist for all four slots; on X-Plane the unused slots are masked to 0 / false. For each engine there are two “running” signals: engineN_firing is the raw combustion flag (it can flicker on some MSFS 2024 aircraft), while engineN_on is a debounced, composite running flag that is more stable. Prefer engineN_on for “is the engine running”.
KeyDescriptionType / Unit
engines_countNumber of engines on the aircraft.number
engine1_firingengine4_firingRaw combustion flag for engine 1–4 (fuel burning). Can flicker on some MSFS 2024 aircraft.boolean
engine1_onengine4_onDebounced “engine running” flag for engine 1–4 (combustion plus an N1/RPM fallback, with a commit delay). The stable signal.boolean
engine1_n1engine4_n1Turbine N1 (fan / low-pressure spool). On MSFS 2024 this is the most reliable engine-running indicator.number, %
engine1_n2engine4_n2Turbine N2 (high-pressure spool). Can read wrong on some MSFS 2024 aircraft.number, %
engine1_pct_rpmengine4_pct_rpmRPM as a percentage of redline (works for pistons too). MSFS / FSX / P3D only — X-Plane always reports 0.number, %

Fuel

KeyDescriptionType / Unit
fuel_quantityTotal fuel weight on board. In pounds (easy to mistake for kg).number, lbs
fuel_usedFuel burned since the configured start phase (starting fuel − current fuel weight). 0 until the start-fuel milestone is captured (pushback or takeoff, per your config), then tracks live.number, lbs

Weather

KeyDescriptionType / Unit
wind_directionWind direction (true, from).number, °
wind_speedWind speed.number, kts
pressure_qnhAmbient / sea-level pressure in inHg (~29.92), not hPa despite the name. Both sims emit inches of mercury.number, inHg
altimeter_settingsAltimeter (Kohlsman) setting in inHg. On X-Plane this duplicates pressure_qnh (no separate Kohlsman read).number, inHg

Simulation Time

The simulator’s in-world clock, for logging what time it is in the sim rather than in the real world.
KeyDescriptionType / Unit
clock_hourLocal clock hour (0–23).number
clock_minLocal clock minute (0–59).number
clock_secLocal clock second (0–59).number
zulu_hourZulu (UTC) hour (0–23).number
zulu_minZulu minute (0–59).number
zulu_day_of_monthZulu day of month (1–31). On X-Plane this is aliased to the local date.number
zulu_month_of_yearZulu month (1–12). On X-Plane aliased to the local month.number
zulu_yearYear (4-digit). The real-world system year, not a sim-set year.number
local_day_of_monthLocal day of month (1–31).number
local_month_of_yearLocal month (1–12).number
local_yearYear (4-digit). The real-world system year.number

Aircraft Information

KeyDescriptionType / Unit
aircraft_typeSim-reported model name (with livery appended when known).string
aircraft_icaoICAO type designator (for example B738, A320). Also captured as a milestone at takeoff (the live value is the one sent on ticks).string
aircraft_liveryLivery / title. MSFS 2024 and X-Plane only — MSFS 2020 / FSX / P3D leave it empty. Also captured as a milestone at takeoff.string
aircraft_empty_weightEmpty weight of the aircraft, in pounds.number, lbs
zero_weight_plus_payloadZero-fuel weight (airframe plus payload, no fuel), in pounds.number, lbs

Simulator State

KeyDescriptionType / Unit
simulator_versionDetected simulator and version (for example Microsoft Flight Simulator 2024, X-Plane 12).string
pause_flagSimulator is paused. When true, the always-on top-level phase reports PAUSED. On X-Plane, 0× time compression folds into this flag.boolean
slew_modeAircraft is in slew mode. MSFS / FSX / P3D only — X-Plane always false.boolean
simulation_rateSim time multiplier (1 = real time, 4 = 4×). Dimensionless.number
is_in_menuSim is showing a menu / not in active flight. MSFS / P3D only — FSX and X-Plane always false.boolean
is_xplanetrue only when the connected simulator is X-Plane. A reliable sim discriminator.boolean

Warnings

KeyDescriptionType / Unit
stall_warningStall warning is active.boolean
overspeed_warningOverspeed warning is active.boolean
crashedSim has flagged the aircraft as crashed.boolean

Landing Analysis

These live fields are easy to misread — most are not the held touchdown values their names suggest. For authoritative touchdown figures, use the milestone landing_* fields below or the completion landing_report.
KeyDescriptionType / Unit
g_force_touchdownLive, instantaneous normal G load (~1.0 in level flight), not a held touchdown peak.number, G
landing_rateIn the air this is the live vertical speed (MSFS / FSX / P3D; X-Plane reports 0). After touchdown it holds the landing analyser’s canonical touchdown rate on every sim — the same value the completion report uses.number, fpm
touchdown_normal_velocityTouchdown vertical velocity. 0 until touchdown, then held on every sim — MSFS uses its native latched value; X-Plane / FSX / P3D carry the landing analyser’s canonical touchdown rate (so it agrees with landing_rate).number, fpm
touchdown_latitudeLatitude at touchdown. 0 until touchdown, then held on every sim for the rest of the flight.number, °
touchdown_longitudeLongitude at touchdown. 0 until touchdown, then held on every sim for the rest of the flight.number, °
landing_distanceRollout distance from touchdown to where the aircraft slows or turns off, from the landing analyser. 0 until the rollout is measured (around TAXI_IN), then held for the rest of the flight.number, ft
KeyDescriptionType / Unit
transponderTransponder squawk code, as a string.string
com1_freqCOM1 active frequency, decimal MHz string to 3 dp (for example "118.100").string, MHz
com2_freqCOM2 active frequency, MHz string to 3 dp.string, MHz
nav1_freqNAV1 active frequency, MHz string to 2 dp (for example "110.60").string, MHz
nav2_freqNAV2 active frequency, MHz string to 2 dp.string, MHz

Optional milestone fields

Captured once at a flight milestone and held for the rest of the flight. Sent as null until their milestone passes. Group order matches the admin matrix.

Departure

Captured at block-off (first movement / pushback).
KeyDescriptionType / UnitCaptured at
unlimited_fuelUnlimited-fuel cheat flag. Encoded as the string "YES" / "NO" (or null) despite the name. MSFS only; X-Plane null.stringblock-off
ramp_weightGross ramp weight at first movement.number, lbsblock-off
blocks_off_time_simIn-sim Zulu time at block-off, ISO-8601 (YYYY-MM-DDTHH:MM:00Z).stringblock-off
blocks_off_time_realReal wall-clock time at block-off, ISO-8601 UTC.stringblock-off
departure_gateDeparture parking stand, matched against the pushback position. MSFS only (needs airport facility data); X-Plane null.stringtakeoff

Takeoff

Captured at the takeoff trigger (airborne, post-debounce).
KeyDescriptionType / UnitCaptured at
taxi_fuel_usedFuel burned during taxi-out (block-off fuel minus takeoff fuel, floored at 0).number, lbstakeoff
takeoff_time_simIn-sim Zulu time at takeoff, ISO-8601.stringtakeoff
takeoff_time_realReal wall-clock time at takeoff, ISO-8601 UTC.stringtakeoff
takeoff_weightGross weight at takeoff.number, lbstakeoff
takeoff_flapsFlap handle detent index at takeoff (an integer, not a percentage), or null.numbertakeoff
departure_runwayDeparture runway designator (for example 06L). Matched client-side, MSFS only; X-Plane null (derive it server-side from departure_latitude / departure_longitude).stringtakeoff
departure_heading_deviationSigned heading minus runway heading at takeoff (±180, positive = clockwise of runway). MSFS only.number, °takeoff
departure_centerline_deviationPerpendicular distance from the runway centerline at takeoff, in metres. MSFS only.number, mtakeoff
departure_latitudeLatitude at the liftoff frame. Every sim. Lets a VA derive departure_runway server-side where the client can’t match one (X-Plane).number, °takeoff
departure_longitudeLongitude at the liftoff frame. Every sim.number, °takeoff

Landing

Captured at touchdown, from the landing analyser.
KeyDescriptionType / UnitCaptured at
landing_time_simIn-sim Zulu time at touchdown, ISO-8601.stringtouchdown
landing_time_realReal time at touchdown, ISO-8601 UTC.stringtouchdown
landing_pitchPitch at touchdown.number, °touchdown
landing_g_forceVertical G at touchdown (from the analyser).number, Gtouchdown
landing_rollBank / roll attitude at touchdown — not a roll-out distance.number, °touchdown
landing_headingAircraft heading at touchdown (true, 0–360).number, °touchdown
landing_weightGross weight at touchdown.number, lbstouchdown
landing_fuelTotal fuel weight remaining at touchdown.number, lbstouchdown
landing_speedIndicated airspeed at touchdown.number, ktstouchdown
landing_flapsFlap handle detent index at touchdown (an integer), or null.numbertouchdown

Arrival

Captured at touchdown or block-on (final stop before shutdown).
KeyDescriptionType / UnitCaptured at
arrival_runwayArrival runway designator (for example 24R). MSFS only; X-Plane null.stringtouchdown
arrival_threshold_distanceTouchdown distance past the runway threshold (from the landing analyser). Populated on both sims without facility data.number, fttouchdown
arrival_heading_deviationSigned touchdown heading minus arrival runway heading (±180). MSFS only.number, °touchdown
arrival_centerline_deviationPerpendicular distance from the arrival centerline at touchdown, in metres. MSFS only.number, mtouchdown
arrival_gateArrival parking stand, matched at the final full stop. MSFS only; X-Plane null.stringblock-on
blocks_on_time_simIn-sim Zulu time at gate-in, ISO-8601.stringblock-on
blocks_on_time_realReal time at gate-in, ISO-8601 UTC.stringblock-on
taxi_in_timeTaxi-in duration (touchdown to final stop) as an HH:MM:SS string.stringblock-on

Summary

Captured at completion.
KeyDescriptionType / UnitCaptured at
total_flight_timeTotal elapsed flight time as an HH:MM:SS string.stringcompletion
total_pause_timeTotal accumulated paused time as an HH:MM:SS string.stringcompletion

The phase fields

There are two distinct phase concepts.
  1. The always-on top-level phase on every position update. It is the UPPERCASE API phase: BOARDING, PUSH_BACK, TAXI, TAKE_OFF, REJECTED_TAKE_OFF, CLIMB, CRUISE, DESCENT, APPROACH, FINAL, LANDED, GO_AROUND, TAXI_TO_GATE (both TAXI_IN and ARRIVED collapse to this), DEBOARDING, or UNKNOWN. While the sim is paused it reports PAUSED. This is the only phase key on the wire and it is sent on every update, so there is no separate opt-in phase field to enable.
  2. The 15 matrix phase columns, which decide when each field is sent. Their keys are uppercase and keep TAXI_IN and ARRIVED separate: BOARDING, PUSH_BACK, TAXI, TAKE_OFF, REJECTED_TAKE_OFF, CLIMB, CRUISE, DESCENT, APPROACH, FINAL, LANDED, GO_AROUND, TAXI_IN, ARRIVED, DEBOARDING. UNKNOWN is never a column, and PAUSED is never a column.
While paused, field selection still uses the real underlying phase, so per-phase fields keep matching the phase you are actually in even though the top-level phase reads PAUSED. For the full phase model and the conditions that move a flight between phases, see Flight Phases.

Payload shape

On each tick, the fields whose phase set includes the current phase are appended after the twelve always-on keys. A representative position update during cruise, with a few cruise-phase fields enabled, looks like:
{
  "uuid": "f1e2d3c4-5b6a-7890-ab12-cd34ef56ab78",
  "bid_id": 48213,
  "phase": "CRUISE",
  "latitude": -33.9461,
  "longitude": 151.1772,
  "heading": 271,
  "altitude": 37000,
  "ground_speed": 462,
  "distance_remaining": 0,
  "time_remaining": 0,
  "route": "MARLN H65 RIVET Q29 LIZZI",
  "network": "offline",
  "vertical_speed": 0,
  "indicated_airspeed": 271,
  "fuel_quantity": 38450,
  "wind_speed": 24
}
The completion PIREP works the same way for the Submission column: every Submission-ticked field is merged onto the thirteen always-on completion keys in the /flights/complete body.

Rules worth knowing

  • A field is appended on a tick only when the live phase is one you ticked for it.
  • Live fields are read from the sim every tick; when the sim can’t supply a value the raw default rides along (0, false, or "") — live fields are never blank.
  • Milestone fields are null until their capture milestone passes; the same applies to a Submission-ticked milestone field whose milestone never fired.
  • block_fuel and zfw on the completion PIREP are omitted entirely (not 0) when never captured.
  • A few live fields are aliases or derived rather than direct telemetry — flaps_left_position / flaps_right_position (aliased to flaps_control) and cruise_altitude (current altitude rounded). The table notes call each one out.
  • Anything you turn on later starts appearing from the next flight onwards.

Field availability by simulator

Not every simulator populates every field. The general picture:
  • MSFS 2020 / 2024 / FSX / P3D (SimConnect): populate the broadest set, including all engine slots, engineN_pct_rpm, slew_mode, and native latched touchdown_* live fields.
  • X-Plane 11 / 12 (UDP DataRef): populate the same core telemetry, but a few fields are unavailable and report their defaults — engineN_pct_rpm is 0, slew_mode is false, landing_rate is 0 in the air (it holds the canonical touchdown rate after touchdown), the zulu date aliases to the local date, and altimeter_settings duplicates pressure_qnh.
  • Touchdown / departure position (touchdown_latitude / touchdown_longitude, departure_latitude / departure_longitude) is captured on every sim — including X-Plane — so a VA can derive the arrival and departure runways server-side where the client can’t match one.
  • Facility-derived milestone fields (departure_runway, arrival_runway, the gate and runway-deviation fields) are matched client-side and are MSFS onlynull on X-Plane; use the touchdown / departure coordinates above to derive them server-side. aircraft_livery is populated on MSFS 2024 and X-Plane but empty on MSFS 2020 / FSX / P3D.
If a field isn’t available from the sim, Stratos sends its default (0, false, or "" for live fields, null for uncaptured milestone fields). It won’t fabricate values.