Reference
Specification / API
Understanding the data format and the API
To pull data from a third-party app or website you need a running SSC-Tracker app. SSC-Tracker acts as a proxy, so that the ssc-tracker.org server is not overloaded.
You can reach tracker data on the standard port 55055 on localhost. From another device on the local network, access is possible through http://[IP SIM PC]:55055. That requires LAN access to be enabled once (☰ → Connections → Enable LAN access, one admin dialog) - there is no need to run the app as administrator permanently.
If Windows blocks 55055, the tracker uses the first free fallback port of 45055-45058 for that session (☰ → Connections shows the port in use). The examples below use 55055; replace it with the port in use. To find the tracker from your own code, ask GET /version on 55055 and then on the fallbacks: the tracker answers {"version":"…","app":"SSC-Tracker","port":…}.
All endpoints answer over HTTP (HTTPS is not implemented at present). CORS headers are set, so websites can access them directly.
Overview of all endpoints
GET endpoints
| Path | Description |
|---|---|
/ | Whazzup v1 format (for Little Navmap) |
/json | Live aircraft data of all pilots, as JSON |
/activetask | Active task as a parsed JSON structure |
/activetaskpln | Active task as MSFS PLN XML |
/map | SSC-Tracker map (browser) |
/minifc | Mini flight computer (browser) |
/getsettings | Panel settings as JSON |
/elevation/status | Status of the elevation service |
/elevation/task | Height profile of the active task |
/elevation/point | Height of a single point |
/elevation/userroute | Height profile of the stored user route |
/elevation/line | Height profile between two points |
/elevation/area | Height grid of an area |
/userroute/load | Load the stored user route |
POST endpoints
| Path | Description |
|---|---|
/settask | Set a task locally |
/setsettings | Save panel settings |
/elevation/userroute | Calculate the height profile for submitted route data |
/userroute/save | Save a user route |
/action | Run an action (resetting a task, for instance) |
Fetching live aircraft data
GET http://localhost:55055/json
Returns the aircraft data of every pilot in the group. The values are updated every second. TSK values are only available while a task/flight plan is loaded.
Fields:
GN: Group name
TASK: Current task name
WEATHER: Weather preset name
ID: Your own pilot ID
ITEMS: List of all pilots
GN: Group name of the pilot
ID: Pilot ID
NAME: Pilot name
AC: Aircraft name
MODEL: Aircraft model
TH: True heading [deg]
LON: Longitude [decimal]
LAT: Latitude [decimal]
IAS: Indicated airspeed [kn]
TAS: True airspeed [kn]
GS: Ground speed [kn]
LV: Last landing speed [kn]
VS: Vertical speed [ft/min]
WD: Wind direction [deg]
WV: Wind speed [kn]
MSL: Height above MSL [ft]
AGL: Height above ground [ft]
TSK_TIME: Task time since the start line [s]
TSK_AVG: Average speed, straight line [kn]
TSK_AVG_PATH: Average speed, path flown [kn]
TSK_NEXT: Name of the next waypoint
TSK_DIS: Remaining distance to the finish line [nm]
TSK_DIS_PATH: Distance flown along the path [nm]
TSK_DIS_ALL: Task distance flown [nm]
TSK_DIS_WP: Distance to the next waypoint [nm]
TSK_ONGROUND: 1 = on the ground during the task
TSK_SLEWT: 1 = slew mode during the task
TSK_ENG: 1 = engine running during the task (soaring)
DIS: Distance from your own aircraft [nm]
FLAPS: Flap setting
TW: Total weight [lbs]
VER: App and MSFS version
Example:
{
"GN": "ssc2",
"TASK": "Bolzano Dolomiti SE",
"WEATHER": "SSC2 08 Clear Sky SE 15kt",
"ID": "FELTE",
"ITEMS": [{
"GN": "ssc2",
"ID": "FELTE",
"NAME": "Felte",
"AC": "AS-33me",
"MODEL": "AS-33me",
"TH": 0.8,
"LON": 11.531,
"LAT": 46.462,
"IAS": 85.0,
"TAS": 90.0,
"GS": 88.0,
"VS": -1.2,
"WD": 270.0,
"WV": 12.5,
"MSL": 6200.0,
"AGL": 4800.0,
"TSK_TIME": 1823.0,
"TSK_AVG": 72.4,
"TSK_NEXT": "TP1",
"TSK_DIS": 45.2,
"TSK_DIS_WP": 12.8,
"TSK_ONGROUND": 0,
"TSK_SLEWT": 0,
"TSK_ENG": 0,
"FLAPS": "1",
"TW": 1208.0,
"VER": "0.8.0.0|MSFS2020"
}]
}
Fetching the Whazzup format (Little Navmap)
GET http://localhost:55055/
Returns the aircraft data in Whazzup v1 format, which Little Navmap and other tools support.
Fetching the active flight plan
GET http://localhost:55055/activetaskpln
Returns the active flight plan in MSFS PLN XML format, when a task is loaded.
Fetching the active task as JSON
GET http://localhost:55055/activetask
Returns the parsed task as JSON. The data contains all waypoints with coordinates, sector types and task progress.
{
"Name": "Bolzano Dolomiti Airport",
"GN": "ssc2",
"DepartureID": "LIPB",
"Distance": 173906.57,
"IsEmpty": false,
"IsStarted": false,
"IsFinished": false,
"IsAATTask": false,
"StartWPIndex": 1,
"FinishWPIndex": 4,
"NextWPIndex": 1,
"Waypoints": [...]
}
Elevation endpoints
The /elevation/… paths in the tables above: status, task profile, single point, user route, line and area.
User route
/userroute/load and /userroute/save read and write the route you drew in Preflight. It is stored as userroute.json in the task folder.
Setting a task locally (without uploading to the group)
POST http://localhost:55055/settask
Sets a task locally in the SSC-Tracker app without uploading it to the server.
Required fields: CMD, TASK, TASKDATA
{
"CMD": "SET",
"GN": "[GROUP NAME, optional]",
"TASK": "[TASK NAME]",
"TASKDATA": "[.PLN XML CONTENT]",
"TASKINFO": "[URL or info text, optional]",
"WEATHER": "[WEATHER PRESET NAME, optional]",
"WEATHERDATA": "[.WPR XML CONTENT, optional]"
}
Endpoints have been added since the old edition. The full state of the local server (default port 55055):
| Path | Kind | Content |
|---|---|---|
/ | GET | Whazzup text format (Little Nav Map) |
/json | GET | The complete data set of all pilots |
/activetask | GET | Active flight plan |
/activetaskjson | GET | Active task as JSON |
/elevation/… | GET | Terrain data and profiles |
/getsettings | GET | Settings for the web interfaces |
/setsettings | POST | Write settings (a fixed selection of ui.* keys) |
/settask | POST | Offer a task from outside |
/messages | GET | Current status messages (what the banner shows as well) |
/action | POST | Trigger a named action from a message |
/version | GET | Version of the app |
/getpanellayout | GET | Layout of the Overlay |
/setpanellayout | POST | Write the layout of the Overlay |
/map, /minifc | GET | The web interfaces |
All endpoints answer over HTTP with CORS headers set; there is no HTTPS.
Files and folders
| What | Where |
|---|---|
| Settings | %LocalAppData%\SSC-Tracker\settings.json |
| Log | %LocalAppData%\SSC-Tracker\logs\ssc-tracker.log |
| Terrain data | %LocalAppData%\SSC-Tracker\DEM\ |
| Task history | the folder from Settings → Shared .pln folder, otherwise %LocalAppData%\SSC-Tracker\tasks\ |
| Web interfaces (local copy) | %LocalAppData%\SSC-Tracker\frontend\ |
| In-game packages | …\Packages\Community\SSC-Tracker-Panel, …-FC, …-AC per simulator |
The settings are a plain JSON file. You may edit it by hand - but only with the app closed, otherwise the next save overwrites the change. Identity (name, ID, group) and the logger sync are signed on top of that: if another program changes them, the tracker restores them at the next start.
Units
The display follows your settings (metric/imperial). Read the raw data through /json or /activetaskjson, however, and you get fixed units - and they are not the same everywhere:
| Field | Unit |
|---|---|
VS (climb/sink) | m/s |
IAS, TAS, GS, WV | knots |
MSL, AGL | feet |
TSK_DIS, TSK_DIS_WP | nautical miles |
| Leg and route lengths in the task JSON | metres |
TSK_ELEV_WP (terrain height at the turnpoint) | feet |
MinAlt / MaxAlt at the turnpoint | metres |
| MacCready | written as m/s (ui.MC), read in knots (MC) |