SSC-TrackerManual

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

PathDescription
/Whazzup v1 format (for Little Navmap)
/jsonLive aircraft data of all pilots, as JSON
/activetaskActive task as a parsed JSON structure
/activetaskplnActive task as MSFS PLN XML
/mapSSC-Tracker map (browser)
/minifcMini flight computer (browser)
/getsettingsPanel settings as JSON
/elevation/statusStatus of the elevation service
/elevation/taskHeight profile of the active task
/elevation/pointHeight of a single point
/elevation/userrouteHeight profile of the stored user route
/elevation/lineHeight profile between two points
/elevation/areaHeight grid of an area
/userroute/loadLoad the stored user route

POST endpoints

PathDescription
/settaskSet a task locally
/setsettingsSave panel settings
/elevation/userrouteCalculate the height profile for submitted route data
/userroute/saveSave a user route
/actionRun 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):

PathKindContent
/GETWhazzup text format (Little Nav Map)
/jsonGETThe complete data set of all pilots
/activetaskGETActive flight plan
/activetaskjsonGETActive task as JSON
/elevation/…GETTerrain data and profiles
/getsettingsGETSettings for the web interfaces
/setsettingsPOSTWrite settings (a fixed selection of ui.* keys)
/settaskPOSTOffer a task from outside
/messagesGETCurrent status messages (what the banner shows as well)
/actionPOSTTrigger a named action from a message
/versionGETVersion of the app
/getpanellayoutGETLayout of the Overlay
/setpanellayoutPOSTWrite the layout of the Overlay
/map, /minifcGETThe web interfaces

All endpoints answer over HTTP with CORS headers set; there is no HTTPS.

Files and folders

WhatWhere
Settings%LocalAppData%\SSC-Tracker\settings.json
Log%LocalAppData%\SSC-Tracker\logs\ssc-tracker.log
Terrain data%LocalAppData%\SSC-Tracker\DEM\
Task historythe 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:

FieldUnit
VS (climb/sink)m/s
IAS, TAS, GS, WVknots
MSL, AGLfeet
TSK_DIS, TSK_DIS_WPnautical miles
Leg and route lengths in the task JSONmetres
TSK_ELEV_WP (terrain height at the turnpoint)feet
MinAlt / MaxAlt at the turnpointmetres
MacCreadywritten as m/s (ui.MC), read in knots (MC)