JSON Data Export System¶
Racing League Tools can export league data to structured JSON files for use in third-party tools, websites, overlays, and custom integrations. The export system produces four distinct export types, each targeting a different level of data granularity:
| Export Type | Description | Root JSON Key |
|---|---|---|
| Session | Results of a single race, qualification, or practice session | session |
| Event | All sessions of a single race weekend (rounds + qualifications) | sessions[] |
| Season Statistics | Full season standings, statistics, and per-event breakdowns | seasonStatistics |
| Multi-Season | Aggregated driver/team/track statistics across multiple seasons | multiSeasonStatistics |
All exports share the same top-level metadata block and follow the same conventions for data types, time formatting, and feature-gating.
Common Conventions¶
Date and Time¶
| Value | Format | Example |
|---|---|---|
| Date only | yyyy-MM-dd |
"2024-06-23" |
| Date + time (UTC) | yyyy-MM-ddTHH:mm:ssZ |
"2024-06-23T14:30:00Z" |
| Lap/sector time (string) | m:ss.fff |
"1:23.456" |
| Duration (milliseconds) | integer, *Ms suffix |
83456 |
Time values are consistently provided as both a human-readable string and a raw millisecond integer. This allows easy display without parsing and accurate arithmetic without locale issues.
"fastestLapTime": "1:23.456",
"fastestLapTimeMs": 83456
Points¶
Points values are serialised as strings using invariant culture formatting. This prevents locale-specific decimal separator issues ("25.5" never becomes "25,5").
"points": "25.5",
"gapToLeader": "-3.0"
Ratings¶
Driver and team ratings use a 0–10 scale with two decimal places.
"rating": "7.85"
Colours¶
Team and class colours are expressed as hex strings.
"primaryColor": "#FF0000"
Null and Optional Fields¶
- Fields that are not applicable (e.g.
gridPositionfor a qualification) arenullor omitted entirely. - Fields gated behind feature tiers are
nullwhen the league does not have access to that tier. - Array fields with no data are
null(not an empty array[]).
Booleans¶
Boolean values use lowercase JSON notation: true / false.
Feature Access Tiers¶
Some export fields are only populated when the league subscription includes the corresponding feature tier.
| Tier | Examples of gated data |
|---|---|
| Base (always available) | All positions, points, session results, basic participation stats, penalty totals |
| Advanced | Pure pace rating, consistency rating, sector ratings |
| Pro | Attack rating, defense rating, overtakes count, positions-lost count, top-battle details |
When a field requires a tier the league does not have, it is null in the output. The field is always present in the JSON structure so integrations can check for null rather than handling missing keys.
Desktop Export Options¶
The only user-facing Desktop option that changes JSON content is configured in Application Options:
| UI setting | Effect | Applies to |
|---|---|---|
| Include standings history in export (default: off) | When enabled, Season Statistics export includes a seasonStatisticsHistory block with a full standings snapshot after each completed round. |
Season Statistics only |
Session, Event, and Multi-Season Desktop exports do not expose additional content toggles: the file always contains the full available payload for that export type (subject to feature tiers and whether the multi-season definition enables team/track stats).
Shared Building Blocks¶
Several objects appear in multiple export types under the same name and with the same structure.
metadata¶
Present at the root level in all four export types.
| Field | Type | Description |
|---|---|---|
formatVersion |
integer |
Schema version for forward compatibility. Currently 1. |
exportType |
string |
"Session", "SeasonStatistics", or "MultiSeason". |
exportedAt |
string |
UTC timestamp when the file was created (yyyy-MM-ddTHH:mm:ssZ). |
sourceApplication |
string |
Always "Racing League Tools". |
leagueName |
string\|null |
Name of the league that produced the export. |
"metadata": {
"formatVersion": 1,
"exportType": "Session",
"exportedAt": "2024-06-23T14:30:00Z",
"sourceApplication": "Racing League Tools",
"leagueName": "My Racing League"
}
season (context block)¶
Used in Session and Event exports. Provides enough context to identify where the session sits within the season.
| Field | Type | Description |
|---|---|---|
seasonName |
string |
Season display name (e.g. "2024 Season"). |
championshipName |
string\|null |
Championship name. |
totalRounds |
integer |
Total number of rounds in the season. |
completedRounds |
integer |
Number of rounds completed so far. |
isMulticlass |
boolean |
Whether the season uses racing classes. |
multiclassDefinitions |
array\|null |
List of { uniqueName, name, abbreviation?, color? } objects. Present only when isMulticlass is true. |
event (context block)¶
Used in Session and Event exports.
| Field | Type | Description |
|---|---|---|
round |
integer |
Round number within the championship (1-based). |
eventDate |
string\|null |
Event date (yyyy-MM-dd). |
racesCount |
integer |
Number of race sessions in this event. |
qualificationsCount |
integer |
Number of qualification sessions in this event. |
track |
object |
Track information (see below). |
event.track
| Field | Type | Description |
|---|---|---|
trackName |
string |
Track display name (e.g. "Circuit de Monaco"). |
country |
string\|null |
Country of the track. |
turnsCount |
integer\|null |
Number of turns on the circuit. |
Driver Info Block (driverInfo)¶
An optional extended block attached to driver entries across all export types. Included only when additional driver data is present in the league database.
| Field | Type | Description |
|---|---|---|
nationality |
string\|null |
Country name. |
raceNumber |
integer\|null |
Race number, if assigned. |
realName |
string\|null |
Real name if different from display name. |
shortName |
string\|null |
Short name or abbreviation (e.g. "HAM"). |
platform |
string\|null |
Gaming platform: "PC", "PlayStation", "Xbox", etc. |
categories |
string[]\|null |
League category names the driver belongs to. |
badge |
string\|null |
Badge text. |
description |
string\|null |
Driver biography or notes. |
discord |
string\|null |
Discord username or link. |
steam |
string\|null |
Steam username or link. |
Team Info Block (teamInfo)¶
An optional extended block attached to team entries. Included only when additional team data is present.
| Field | Type | Description |
|---|---|---|
uniqueId |
string\|null |
Stable team identifier (consistent across seasons). |
fullName |
string\|null |
Official full team name. |
abbreviation |
string\|null |
Short team code (e.g. "RBR"). |
primaryColor |
string\|null |
Primary team colour (hex). |
secondaryColor |
string\|null |
Secondary team colour (hex). |
tertiaryColor |
string\|null |
Tertiary team colour (hex). |
country |
string\|null |
Team nationality/country. |
car |
string\|null |
Default car used by the team. |
badge |
string\|null |
Team badge text. |
Export Type 1 — Session Export¶
A single session (race, qualification, or practice) with full driver results.
Root Structure¶
{
metadata,
season,
event,
session: {
sessionInfo,
fastestLap?,
raceDetails?, // race sessions only
qualificationDetails?, // qualification sessions only
drivers: [ ... ],
classes?: [ ... ] // multiclass only
}
}
session.sessionInfo¶
| Field | Type | Description |
|---|---|---|
sessionId |
string |
Unique session identifier (UUID). |
sessionType |
string |
"Race", "Qualification", or "Practice". |
raceType |
string\|null |
Race sub-type: "Feature", "Sprint", "Endurance", etc. Race sessions only. |
qualificationType |
string\|null |
Qualification sub-type: "Regular", "TimeAttack", etc. Qualification sessions only. |
sessionPosition |
integer |
Position within the event (1 = first session, 2 = second, etc.). |
sessionCaption |
string\|null |
Display caption (e.g. "Feature Race", "Sprint Qualifying"). |
completedStatus |
string |
"Completed", "InProgress", "Scheduled", or "Cancelled". |
sessionDate |
string\|null |
Session date/time (ISO 8601, with timezone offset). |
totalLaps |
integer\|null |
Total race laps. null for timed or unconfigured sessions. |
driversCount |
integer |
Total number of drivers classified in the session. |
weatherTimeline |
array\|null |
Weather and temperature changes during the session, in time order; the first point is the start. null when the session has no recorded history (live timing since 0.9.9). Added in 0.9.9. |
safetyCarPeriods |
array\|null |
Safety car and VSC periods, in time order. Empty when none were deployed, null when the session has no recorded history. Added in 0.9.9. |
sessionInfo.weatherTimeline[]
| Field | Type | Description |
|---|---|---|
time |
string |
Session time of the change (e.g. "12:34"). |
timeMs |
integer |
Session time in milliseconds. |
lap |
integer\|null |
Leader lap in progress at the change. null outside races. |
weatherType |
string |
"Clear", "LightCloud", "Overcast", "LightRain", "HeavyRain", or "Storm". |
airTemperature |
integer |
Air temperature in degrees Celsius. |
trackTemperature |
integer |
Track temperature in degrees Celsius. |
sessionInfo.safetyCarPeriods[]
| Field | Type | Description |
|---|---|---|
kind |
string |
"SC" or "VSC". |
startLap |
integer\|null |
First leader lap the period touched. null outside races. |
endLap |
integer\|null |
Last leader lap the period touched. null outside races. |
lapsCount |
integer\|null |
Number of leader laps the period touched. |
startTime |
string |
Session time when the period started. |
startTimeMs |
integer |
Start time in milliseconds. |
duration |
string |
Length of the period (e.g. "3:05"). |
durationMs |
integer |
Length in milliseconds. |
session.fastestLap¶
Present when a fastest lap has been recorded for the session.
| Field | Type | Description |
|---|---|---|
lapTime |
string |
Fastest lap as string (e.g. "1:23.456"). |
lapTimeMs |
integer\|null |
Fastest lap in milliseconds. |
driverName |
string\|null |
Name of the driver who set it. |
lapNumber |
integer\|null |
Lap number when it was set. |
tyreCompound |
string\|null |
Tyre compound used. |
session.raceDetails (race sessions only)¶
| Field | Type | Description |
|---|---|---|
raceType |
string |
Race type (e.g. "Feature"). |
isMajorRace |
boolean |
Whether this is the main/feature race of the event. |
session.qualificationDetails (qualification sessions only)¶
| Field | Type | Description |
|---|---|---|
qualificationType |
string\|null |
Qualification type. |
segments |
integer |
Number of knockout segments (0 for single-segment). |
poleTime |
string\|null |
Pole position lap time. |
poleTimeMs |
integer\|null |
Pole time in milliseconds. |
duration |
string\|null |
Total session duration. |
durationMs |
integer\|null |
Total session duration in milliseconds. |
session.drivers[] — Driver Result Entry¶
Entries are sorted by classification position (ascending), with unclassified drivers at the end.
Core fields (always present)
| Field | Type | Description |
|---|---|---|
driverName |
string |
Driver display name. |
driverInfo |
object\|null |
Extended driver info block. |
position |
integer |
Overall session position. |
classificationPosition |
integer |
Final classification position (may differ in class-based results). |
gridPosition |
integer\|null |
Starting grid position. null if not applicable. |
positionChange |
integer\|null |
Positions gained (positive) or lost (negative). null if no grid was set. |
status |
string\|null |
Race result status: "Finished", "DNF", "DNS", "DSQ". null for non-race sessions. |
lapsCompleted |
integer |
Number of laps completed. |
driverPoints |
string\|null |
Points scored by this driver. |
teamPoints |
string\|null |
Points scored by the team for this session. |
Timing fields
| Field | Type | Description |
|---|---|---|
totalTime |
string\|null |
Total race time (race sessions only). |
totalTimeMs |
integer\|null |
Total race time in milliseconds. |
gap |
string\|null |
Gap to race leader (e.g. "+5.234", "+1 lap"). |
gapMs |
integer\|null |
Gap in milliseconds. 0 for the leader. |
interval |
string\|null |
Gap to the driver immediately ahead. |
intervalMs |
integer\|null |
Interval in milliseconds. |
fastestLapTime |
string\|null |
Driver's personal fastest lap. |
fastestLapTimeMs |
integer\|null |
Fastest lap in milliseconds. |
fastestLapNumber |
integer\|null |
Lap number of fastest lap. |
fastestLapTyreCompound |
string\|null |
Tyre compound on fastest lap. |
Nested conditional objects
| Field | Present when | Description |
|---|---|---|
team |
Driver has a team assigned | Team name and colours. |
car |
Car data is available | Car name, class, and manufacturer. |
classInfo |
Multiclass session | Driver's racing class and class position. |
stints |
Race session + stint data available | Array of stint details. |
raceDetails |
Race session | Max speed and average speed. |
qualDetails |
Qualification session | Max speed. |
penalties |
Driver received penalties | Penalty totals and individual items. |
topBattles |
Race session + Pro tier | Battle statistics and detail list. |
ratings |
Advanced or Pro tier | Pace, consistency, attack, defense ratings. |
laps |
Lap data was recorded | Per-lap data array. |
driver.team
| Field | Type | Description |
|---|---|---|
name |
string |
Team name. |
uniqueId |
string\|null |
Stable team identifier. |
fullName |
string\|null |
Official full name. |
abbreviation |
string\|null |
Short team code. |
primaryColor |
string\|null |
Primary colour (hex). |
secondaryColor |
string\|null |
Secondary colour (hex). |
tertiaryColor |
string\|null |
Tertiary colour (hex). |
country |
string\|null |
Team nationality. |
badge |
string\|null |
Badge text. |
driver.car
| Field | Type | Description |
|---|---|---|
carName |
string |
Car model name. |
className |
string\|null |
Car class name. |
classColor |
string\|null |
Class colour (hex). |
manufacturer |
string\|null |
Car manufacturer/vendor. |
driver.classInfo (multiclass sessions)
| Field | Type | Description |
|---|---|---|
uniqueName |
string |
Class identifier. |
name |
string |
Class display name. |
abbreviation |
string\|null |
Short class name. |
color |
string\|null |
Class colour (hex). |
classPosition |
integer |
Driver's position within the class. |
classDriversCount |
integer |
Total drivers in the class. |
driver.stints[] (race sessions)
| Field | Type | Description |
|---|---|---|
stintNumber |
integer |
Stint number (1-based). |
tyreCompound |
string |
Tyre compound used during this stint. |
startLap |
integer |
First lap of the stint. |
endLap |
integer |
Last lap of the stint. |
lapsCount |
integer |
Total laps completed on this stint. |
driver.penalties
| Field | Type | Description |
|---|---|---|
inGamePenaltySeconds |
integer |
Total in-game time penalty seconds. |
stewardPenaltySeconds |
integer |
Total steward-issued time penalty seconds. |
inGamePenaltyPositions |
integer |
In-game position penalties. |
stewardPenaltyPositions |
integer |
Steward-issued position penalties. |
totalPenaltyPoints |
integer |
Total penalty points accumulated. |
inGamePenalties |
array\|null |
List of individual in-game penalty items. |
stewardPenalties |
array\|null |
List of individual steward penalty items. |
Each item in inGamePenalties[] / stewardPenalties[]:
| Field | Type | Description |
|---|---|---|
offense |
string |
Description of the infraction. |
action |
string |
Penalty action name (e.g. "Time Penalty"). |
penaltySeconds |
integer\|null |
Time penalty in seconds. |
penaltyPoints |
integer\|null |
Penalty points issued. |
penaltyPositions |
integer\|null |
Position penalty. |
lapNumber |
integer\|null |
Lap when the penalty was given. |
description |
string\|null |
Additional notes. |
driver.topBattles (Pro tier, race sessions only)
| Field | Type | Description |
|---|---|---|
totalBattlesCount |
integer |
Total number of on-track battles. |
battlesWon |
integer |
Battles won. |
battlesLost |
integer |
Battles lost. |
winPercentage |
integer |
Win percentage (0–100). |
overtakes |
integer |
Number of successful overtakes made. |
positionsLost |
integer |
Positions lost to opponents. |
battles |
array\|null |
Detailed battle entries (see below). |
Each battle entry:
| Field | Type | Description |
|---|---|---|
opponentName |
string |
Name of the opponent driver. |
battleType |
string |
"Attack" or "Defense". |
isWon |
boolean |
Whether this battle was won. |
startLap |
integer\|null |
Lap the battle began. |
endLap |
integer\|null |
Lap the battle ended. |
durationLaps |
integer |
How many laps the battle lasted. |
driverTyreCompound |
string\|null |
Driver's tyre at battle start. |
opponentTyreCompound |
string\|null |
Opponent's tyre at battle start. |
driverTyreWear |
integer\|null |
Driver's tyre wear % at battle start. |
opponentTyreWear |
integer\|null |
Opponent's tyre wear % at battle start. |
driver.ratings
All ratings use the 0–10 scale. Sub-objects are null when the corresponding feature tier is not available.
| Field | Tier required | Description |
|---|---|---|
pace |
Advanced | Pure race pace rating. |
consistency |
Advanced | Lap consistency rating. |
attack |
Pro | Overtaking / attack rating. |
defense |
Pro | Defensive driving rating. |
pace and consistency share this structure:
| Field | Type | Description |
|---|---|---|
rating |
string |
Rating on the 0–10 scale. |
position |
integer |
Rank among all session drivers. |
gapToLeader |
string\|null |
Gap to the top-rated driver. |
gapToLeaderMs |
integer\|null |
Gap in milliseconds. |
sectors |
object\|null |
{ sector1Rating, sector2Rating, sector3Rating } — per-sector ratings. |
pace additionally includes:
| Field | Type | Description |
|---|---|---|
pureLapTime |
string\|null |
Theoretical best lap (composed from best sectors). |
pureLapTimeMs |
integer\|null |
Theoretical best lap in milliseconds. |
consistency additionally includes:
| Field | Type | Description |
|---|---|---|
averageDeviation |
string\|null |
Average lap time deviation from optimal. |
averageDeviationMs |
integer\|null |
Average deviation in milliseconds. |
attack and defense share this structure:
| Field | Type | Description |
|---|---|---|
rating |
string |
Rating on the 0–10 scale. |
position |
integer |
Rank among all session drivers. |
overtakes |
integer |
Successful overtakes made (attack) / positions defended (defense). |
battlesCount |
integer |
Total battles engaged. |
winPercentage |
integer |
Percentage of battles won. |
topBattles |
array\|null |
Highlight battle entries. |
driver.laps[] — Per-Lap Data
| Field | Type | Description |
|---|---|---|
lapNumber |
integer |
Lap number (1-based). |
lapTime |
string |
Lap time string. |
lapTimeMs |
integer\|null |
Lap time in milliseconds. |
sector1Time |
string\|null |
Sector 1 time. |
sector1TimeMs |
integer\|null |
Sector 1 in milliseconds. |
sector2Time |
string\|null |
Sector 2 time. |
sector2TimeMs |
integer\|null |
Sector 2 in milliseconds. |
sector3Time |
string\|null |
Sector 3 time. |
sector3TimeMs |
integer\|null |
Sector 3 in milliseconds. |
tyreCompound |
string\|null |
Tyre compound on this lap. |
isValid |
boolean |
Whether the lap was valid (no track limit violations). |
isPersonalBest |
boolean |
Whether this was the driver's personal best lap. |
isSessionFastest |
boolean |
Whether this was the overall fastest lap of the session. |
positionAfterLap |
integer\|null |
Race position after completing this lap: recorded by live timing, otherwise estimated from lap times. null when unknown. |
isPositionEstimated |
boolean\|null |
true when positionAfterLap is estimated from lap times, false when recorded. null when the position is unknown. Added in 0.9.9. |
gapToLeader |
string\|null |
Gap to race leader after this lap. |
gapToLeaderMs |
integer\|null |
Gap in milliseconds. |
gapToAhead |
string\|null |
Gap to driver immediately ahead. |
gapToAheadMs |
integer\|null |
Gap ahead in milliseconds. |
tyreWear |
integer\|null |
Average tyre wear in percent at the end of the lap. null when not recorded. Added in 0.9.9. |
isPitEntryLap |
boolean\|null |
Whether the driver entered the pit lane on this lap. null without recorded history. Added in 0.9.9. |
isPitExitLap |
boolean\|null |
Whether the driver left the pit lane on this lap. null without recorded history. Added in 0.9.9. |
isSafetyCarLap |
boolean\|null |
Whether the leader lap with the same number was under SC or VSC. null without recorded history. Added in 0.9.9. |
deltaToPreviousLap |
string\|null |
Delta vs. the driver's previous lap. |
deltaToPreviousLapMs |
integer\|null |
Delta in milliseconds. |
deltaToPersonalBest |
string\|null |
Delta vs. the driver's best lap. |
deltaToPersonalBestMs |
integer\|null |
Delta in milliseconds. |
Minimal Example¶
{
"metadata": {
"formatVersion": 1,
"exportType": "Session",
"exportedAt": "2024-06-23T14:30:00Z",
"sourceApplication": "Racing League Tools",
"leagueName": "My League"
},
"season": {
"seasonName": "2024 Season",
"championshipName": "League Championship",
"totalRounds": 12,
"completedRounds": 3,
"isMulticlass": false
},
"event": {
"round": 3,
"eventDate": "2024-06-23",
"racesCount": 1,
"qualificationsCount": 1,
"track": {
"trackName": "Circuit de Monaco",
"country": "Monaco",
"turnsCount": 19
}
},
"session": {
"sessionInfo": {
"sessionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"sessionType": "Race",
"raceType": "Feature",
"sessionPosition": 1,
"sessionCaption": "Feature Race",
"completedStatus": "Completed",
"totalLaps": 78,
"driversCount": 20
},
"fastestLap": {
"lapTime": "1:14.260",
"lapTimeMs": 74260,
"driverName": "Lewis Hamilton",
"lapNumber": 55,
"tyreCompound": "Soft"
},
"drivers": [
{
"driverName": "Lewis Hamilton",
"position": 1,
"classificationPosition": 1,
"gridPosition": 2,
"positionChange": 1,
"status": "Finished",
"lapsCompleted": 78,
"driverPoints": "25",
"totalTime": "1:32:15.123",
"totalTimeMs": 5535123,
"gap": "0",
"gapMs": 0,
"fastestLapTime": "1:14.260",
"fastestLapTimeMs": 74260,
"fastestLapNumber": 55,
"fastestLapTyreCompound": "Soft",
"team": {
"name": "Mercedes",
"primaryColor": "#00D2BE"
},
"stints": [
{ "stintNumber": 1, "tyreCompound": "Medium", "startLap": 1, "endLap": 30, "lapsCount": 30 },
{ "stintNumber": 2, "tyreCompound": "Soft", "startLap": 31, "endLap": 78, "lapsCount": 48 }
]
}
]
}
}
Export Type 2 — Event Export¶
An event export bundles all sessions of a single race weekend into one file. The structure mirrors the Session export but replaces the single session block with a sessions array.
Root Structure¶
{
metadata,
season,
event,
sessions: [
{
sessionInfo,
fastestLap?,
raceDetails?,
qualificationDetails?,
drivers: [ ... ],
classes?: [ ... ]
},
...
]
}
The season, event, sessionInfo, and drivers blocks are identical in structure to the Session export. Sessions are ordered chronologically within the event (qualifications first, then races).
Export Type 3 — Season Statistics Export¶
The most detailed export type. Contains full season standings, statistics per driver and team, event-by-event breakdowns, and — when Include standings history in export is enabled in Application Options — the complete standings progression after each round.
Root Structure¶
{
metadata,
season,
seasonStatistics: {
status,
driverStandings: [ ... ],
teamStandings?: [ ... ],
classes?: [ ... ] // multiclass seasons only
},
seasonStatisticsHistory? // only when "Include standings history in export" is enabled
}
season Block (Season Statistics)¶
This is an extended version of the season context used in Session exports.
| Field | Type | Description |
|---|---|---|
seasonName |
string |
Season display name. |
championshipName |
string |
Championship name. |
totalRounds |
integer |
Total rounds in the season. |
completedRounds |
integer |
Number of completed rounds. |
lineupsBasedOn |
string |
What lineups are organised around: "Team", "Car", etc. |
isMulticlass |
boolean |
Whether the season is multiclass. |
seasonStartDate |
string\|null |
First event date (yyyy-MM-dd). |
seasonEndDate |
string\|null |
Last event date (yyyy-MM-dd). |
seasonStatistics.status¶
| Field | Type | Description |
|---|---|---|
completionPercentage |
number |
Season completion as a percentage (0–100). |
statusText |
string |
Human-readable status (e.g. "Round 3 of 12"). |
isCompleted |
boolean |
Whether all rounds are finished. |
isInProgress |
boolean |
Whether the season has started but not finished. |
dateRangeText |
string |
Human-readable date range. |
upcomingRounds |
integer |
Number of remaining rounds. |
nextRoundName |
string\|null |
Name or track of the next upcoming round. |
nextRoundDate |
string\|null |
Date of the next round (yyyy-MM-dd). |
seasonStatistics.driverStandings[] — Driver Standings Entry¶
Identification and position
| Field | Type | Description |
|---|---|---|
driverName |
string |
Driver display name. |
driverInfo |
object\|null |
Extended driver info block. |
seatType |
string\|null |
"Primary" or "Reserve". |
position |
integer |
Current standings position. |
points |
string |
Total points earned. |
gapToLeader |
string\|null |
Points gap to the standings leader (e.g. "-24.5"). |
gapToAhead |
string\|null |
Points gap to the driver immediately ahead. |
positionChange |
integer |
Standings position change since last round. |
isNewInStandings |
boolean |
Whether the driver is appearing in standings for the first time. |
teamName |
string\|null |
Current team name. |
teamInfo |
object\|null |
Extended team info block. |
carName |
string\|null |
Current car name. |
hasMultipleTeams |
boolean |
Whether the driver raced for more than one team. |
teamsCount |
integer |
Number of distinct teams raced for. |
classInfo |
object\|null |
Class identity (multiclass seasons only). |
Championship tracking
| Field | Type | Description |
|---|---|---|
bestPossiblePosition |
integer |
Best final position still mathematically achievable. |
canWinChampionship |
boolean |
Whether the title is still possible. |
isChampionshipSecured |
boolean |
Whether the title is already confirmed. |
bestChampionshipPosition |
integer |
Best standing position reached during the season. |
roundsLeading |
integer |
Number of rounds the driver led the championship. |
Statistics sub-blocks
| Field | Always present | Description |
|---|---|---|
participation |
✅ | Event, race, and qualification participation counts and completion rates. |
positions |
✅ | Best/worst/average positions, wins, podiums, top-5/10, poles, fastest laps, position distributions. |
raceDetails |
✅ | Season-total race stats: laps led, pit stops, max speed, and Pro-tier overtake/positions-lost stats. |
events |
✅ | Per-event breakdown (see below). |
penalties |
When penalties exist | Penalty totals split by source. |
discardInfo |
When discard rules are active | Discard configuration and list of dropped results. |
ratings |
Advanced / Pro tier | Season-aggregated pace, consistency, attack, defense ratings. |
liveDataCoverage |
When live data was tracked | Coverage percentage and session counts. |
participation block
| Field | Type | Description |
|---|---|---|
eventsParticipated |
integer |
Events (weekends) where the driver appeared. |
totalEvents |
integer |
Total events in the season. |
eventCompletionRate |
number |
Event participation rate (0.0–1.0). |
racesParticipated |
integer |
Races started. |
racesFinished |
integer |
Races finished (not DNF/DSQ). |
raceCompletionRate |
number |
Race finish rate (0.0–1.0). |
qualificationsParticipated |
integer |
Qualification sessions entered. |
qualificationsCompleted |
integer |
Qualifications completed. |
sprintRacesParticipated |
integer\|null |
Sprint race count (if applicable). |
featureRacesParticipated |
integer\|null |
Feature race count (if applicable). |
sessionBreakdown |
object\|null |
Counts by session type (practice, qualification, sprint, feature). |
positions block
| Field | Type | Description |
|---|---|---|
bestRacePosition |
integer |
Best race finish position. |
worstRacePosition |
integer |
Worst race finish position. |
averageRacePosition |
number |
Average race finish position. |
bestQualPosition |
integer |
Best qualification position. |
worstQualPosition |
integer |
Worst qualification position. |
averageQualPosition |
number |
Average qualification position. |
averagePositionChange |
number |
Average positions gained/lost per race. |
bestPositionGain |
integer |
Best single-race position gain. |
worstPositionLoss |
integer |
Worst single-race position loss. |
averagePointsPerRace |
string\|null |
Average points per race entry. |
scoringRacesCount |
integer |
Races where points were scored. |
zeroPointRacesCount |
integer |
Races where no points were scored. |
wins |
integer |
Number of race wins. |
podiums |
integer |
Number of podium finishes (P1–P3). |
topFives |
integer |
Top-5 finishes. |
topTens |
integer |
Top-10 finishes. |
polePositions |
integer |
Number of pole positions. |
frontRowStarts |
integer |
Front-row starts (P1–P2 on grid). |
fastestLaps |
integer |
Number of fastest laps in races. |
racePositionDistribution |
object\|null |
Map of "position" → count for race results. |
qualPositionDistribution |
object\|null |
Map of "position" → count for qualification results. |
raceDetails block
| Field | Tier | Description |
|---|---|---|
bestMaxSpeed |
Base | Best top speed recorded (km/h). |
averageMaxSpeed |
Base | Average top speed. |
maxSpeedWinsCount |
Base | Races where the driver had the highest top speed. |
totalLeadLaps |
Base | Total laps led. |
totalLaps |
Base | Total laps completed across all races. |
totalPossibleLaps |
Base | Total race laps available if no DNFs. |
lapCompletionRate |
Base | Lap completion ratio (0.0–1.0). |
totalPitStops |
Base | Total pit stops. |
averagePitStopsPerRace |
Base | Average pit stops per race. |
fastestLapWins |
Base | Races where the driver set the overall fastest lap. |
totalOvertakes |
Pro | Total overtakes made across all races. |
bestOvertakesInRace |
Pro | Most overtakes in a single race. |
averageOvertakesPerRace |
Pro | Average overtakes per race. |
totalPositionsLost |
Pro | Total positions lost to opponents. |
averagePositionsLostPerRace |
Pro | Average positions lost per race. |
events[] — per-event breakdown
| Field | Type | Description |
|---|---|---|
roundNumber |
integer |
Round number in the season (1-based). |
eventName |
string |
Event/track name. |
trackName |
string |
Track name. |
eventDate |
datetime\|null |
Event date. |
pointsEarned |
string\|null |
Total points earned this event. |
isDiscarded |
boolean |
Whether this event's result was discarded (dropped score). |
races |
array\|null |
Race session results for this driver at this event. |
qualifications |
array\|null |
Qualification session results. |
Each race entry in events[].races[]:
| Field | Type | Description |
|---|---|---|
sessionName |
string |
Session name (e.g. "Race 1"). |
position |
integer\|null |
Finish position. |
gridPosition |
integer\|null |
Starting grid position. |
positionChange |
integer\|null |
Positions gained/lost. |
pointsEarned |
string\|null |
Points scored in this race. |
status |
string\|null |
Result status ("Finished", "DNF", etc.). |
isFinished |
boolean |
Whether the driver finished. |
isFastestLap |
boolean |
Whether the driver set the session fastest lap. |
Each qualification entry in events[].qualifications[]:
| Field | Type | Description |
|---|---|---|
sessionName |
string |
Session name. |
position |
integer\|null |
Qualification position. |
status |
string\|null |
Result status. |
isCompleted |
boolean |
Whether the driver completed the session. |
seasonStatistics.teamStandings[]¶
Team standings entries mirror driver standings in structure with the following differences:
teamNamereplacesdriverName;teamInforeplacesdriverInfo.driverNames(string array) lists current team drivers;driversCountgives the total driver count.ratingscontainsoverallRating,paceRating,consistencyRating, andratingsDataSessionsCount.- The
events[]sub-array contains team-level results with adriverResults[]list per session.
seasonStatisticsHistory (optional)¶
Added when Include standings history in export is enabled in Application Options. Contains one snapshot per completed round, showing the full standings as they stood after that round.
seasonStatisticsHistory: {
snapshots: [
{
metadata: { roundNumber, roundName, roundDate? },
seasonStatistics: {
driverStandings: [ { driverName, position, points, ... } ],
teamStandings?: [ ... ]
}
},
...
]
}
Snapshot driver/team standings are a simplified subset — position, points, and gap fields only (no per-event breakdowns or detailed statistics).
seasonStatistics.classes[] (multiclass)¶
For multiclass seasons, each entry contains a classInfo block and a classStatistics block that is identical in structure to the root seasonStatistics block (minus the nested classes array).
{
"classInfo": { "uniqueName": "LMH", "name": "LMH Class", "abbreviation": "LMH", "color": "#FF0000" },
"classStatistics": {
"status": { "driversCount": 8, "teamsCount": 4 },
"driverStandings": [ "..." ],
"teamStandings": [ "..." ]
}
}
Export Type 4 — Multi-Season Export¶
Aggregated statistics spanning multiple seasons. Useful for career statistics, all-time records, and cross-season comparisons.
Root Structure¶
{
metadata,
multiSeasonStatistics: {
multiSeasonInfo,
seasons: [ ... ],
drivers: [ ... ],
teams?: [ ... ],
tracks?: [ ... ]
}
}
multiSeasonStatistics.multiSeasonInfo¶
| Field | Type | Description |
|---|---|---|
name |
string |
Multi-season display name. |
seasonsCount |
integer |
Total seasons included. |
completedSeasonsCount |
integer |
Number of fully completed seasons. |
racingClassName |
string\|null |
Class name if this is a class-specific export. |
isClassSpecific |
boolean |
Whether only one racing class is covered. |
totalDrivers |
integer |
Unique drivers across all seasons. |
totalTeams |
integer\|null |
Unique teams across all seasons. |
totalTracks |
integer\|null |
Unique tracks visited across all seasons. |
snapshot |
object\|null |
{ date?, roundNumber?, isLatest } — present for historical snapshots. |
multiSeasonStatistics.seasons[]¶
| Field | Type | Description |
|---|---|---|
name |
string |
Season name. |
championshipName |
string\|null |
Championship name. |
totalRounds |
integer |
Total rounds in the season. |
completedRounds |
integer |
Completed rounds. |
isCompleted |
boolean |
Whether the season is finished. |
isStarted |
boolean |
Whether at least one round was completed. |
startDate |
string\|null |
First event date. |
endDate |
string\|null |
Last event date. |
multiSeasonStatistics.drivers[]¶
| Field | Always present | Description |
|---|---|---|
driverId |
✅ | Internal driver identifier (stable across seasons). |
driverName |
✅ | Driver display name. |
driverInfo |
Optional | Extended driver info block. |
participation |
✅ | Multi-season participation counts and completion rates. |
points |
✅ | Total and average points statistics. |
racePositions |
✅ | Best/average positions, wins, podiums, top-5/10. |
qualPositions |
✅ | Poles, front rows, best/average qualifying position. |
standings |
✅ | Championship history: titles, best/average position, per-season results. |
discipline |
✅ | DNFs, penalties, and race incident statistics. |
participation block
| Field | Type | Description |
|---|---|---|
seasonsParticipated |
integer |
Number of seasons raced in. |
totalEvents |
integer |
Total race weekends. |
totalRaces |
integer |
Total races started. |
totalMajorRaces |
integer |
Total feature/main races. |
totalQualifications |
integer |
Total qualification sessions. |
totalRacesFinished |
integer |
Races completed (not DNF/DSQ). |
eventCompletionRatePercent |
number |
Event participation rate (0–100). |
raceCompletionRatePercent |
number |
Race finish rate (0–100). |
points block
| Field | Type | Description |
|---|---|---|
totalPoints |
string |
Career points total. |
averagePerSeason |
string |
Average points per season. |
averagePerMajorRace |
string |
Average points per major race. |
averagePerEvent |
string |
Average points per event (race weekend). |
bestSeasonPoints |
string |
Highest points scored in a single season. |
bestSeasonName |
string\|null |
Name of the season with the best points total. |
scoringRacesCount |
integer |
Races where at least one point was scored. |
scoringRatePercent |
number |
Percentage of races with points. |
racePositions block
| Field | Type | Description |
|---|---|---|
bestPosition |
integer |
Career best race finish. |
averagePosition |
number |
Career average race finish. |
wins |
integer |
Total wins. |
podiums |
integer |
Total podiums (P1–P3). |
top5 |
integer |
Total top-5 finishes. |
top10 |
integer |
Total top-10 finishes. |
totalFinishes |
integer |
Total classified finishes. |
averageGridPosition |
number |
Career average starting position. |
averagePositionChange |
number |
Career average positions gained/lost. |
qualPositions block
| Field | Type | Description |
|---|---|---|
bestPosition |
integer |
Career best qualifying position. |
averagePosition |
number |
Career average qualifying position. |
poles |
integer |
Total pole positions. |
frontRows |
integer |
Front-row starts (P1–P2). |
top3 |
integer |
Top-3 qualifying finishes. |
top5 |
integer |
Top-5 qualifying finishes. |
top10 |
integer |
Top-10 qualifying finishes. |
totalQualifications |
integer |
Total qualification sessions completed. |
standings block
| Field | Type | Description |
|---|---|---|
championshipsWon |
integer |
Number of championships won. |
bestPosition |
integer |
Best final championship standing. |
averagePosition |
number |
Average final championship position. |
runnerUps |
integer |
Runner-up (P2) championship finishes. |
top3Finishes |
integer |
Top-3 championship finishes. |
top5Finishes |
integer |
Top-5 championship finishes. |
seasonResults |
array\|null |
Per-season { seasonName, position, points? } list. |
multiSeasonStatistics.teams[]¶
| Field | Type | Description |
|---|---|---|
teamId |
integer |
Internal team identifier. |
teamName |
string |
Team name. |
teamInfo |
object\|null |
Extended team info block. |
position |
integer |
Multi-season standings position. |
totalPoints |
string |
Career total points. |
participation |
object |
Seasons, events, races, and finishes counts. |
racePositions |
object |
Best position, wins, podiums, top-5/10, total finishes. |
multiSeasonStatistics.tracks[]¶
| Field | Type | Description |
|---|---|---|
trackName |
string |
Track display name. |
circuitName |
string\|null |
Circuit name. |
country |
string\|null |
Country of the track. |
generalStats |
object |
Overall visit counts, dates, and absolute track record. |
raceStats |
object\|null |
Race-specific records and history. null if no race data. |
qualificationStats |
object\|null |
Qualification-specific records. null if no qualification data. |
generalStats
| Field | Type | Description |
|---|---|---|
totalEvents |
integer |
Events held at this track. |
totalSeasons |
integer |
Seasons that visited this track. |
totalRaces |
integer |
Total races held. |
totalMajorRaces |
integer |
Feature/main races held. |
totalQualifications |
integer |
Qualifications held. |
firstVisitDate |
string\|null |
Date of first visit. |
lastVisitDate |
string\|null |
Date of most recent visit. |
absoluteTrackRecord |
object\|null |
Fastest ever lap across all session types. |
raceStats
| Field | Type | Description |
|---|---|---|
fastestRaceLap |
object\|null |
Fastest race lap record: { time, timeMs, driverName, teamName?, seasonName?, sessionType? }. |
mostWinsDriver |
object\|null |
{ driverName, count } |
mostWinsTeam |
object\|null |
{ teamName, count } |
mostPodiumsDriver |
object\|null |
{ driverName, count } |
mostPodiumsTeam |
object\|null |
{ teamName, count } |
avgPitstops |
number\|null |
Average pit stops per race. |
maxSpeed |
number\|null |
Maximum recorded speed (km/h). |
totalSafetyCars |
integer\|null |
Total safety car deployments. |
totalVirtualSafetyCars |
integer\|null |
Total virtual safety car deployments. |
races |
array\|null |
Chronological list of races with winner info. |
qualificationStats
| Field | Type | Description |
|---|---|---|
fastestQualLap |
object\|null |
Fastest qualification lap record. |
mostPolesDriver |
object\|null |
{ driverName, count } |
mostPolesTeam |
object\|null |
{ teamName, count } |
qualifications |
array\|null |
Chronological list of qualifications with pole sitter info. |
Each entry in races[] / qualifications[]:
| Field | Type | Description |
|---|---|---|
date |
string |
Event date (ISO 8601). |
seasonName |
string |
Season in which this session took place. |
driverName |
string\|null |
Winner / pole sitter name. |
teamName |
string\|null |
Winner / pole sitter team. |
Summary: Top-Level Keys by Export Type¶
| Key | Session | Event | Season Statistics | Multi-Season |
|---|---|---|---|---|
metadata |
✅ | ✅ | ✅ | ✅ |
season |
✅ | ✅ | ✅ (extended) | ❌ |
event |
✅ | ✅ | ❌ | ❌ |
session |
✅ | ❌ | ❌ | ❌ |
sessions |
❌ | ✅ | ❌ | ❌ |
seasonStatistics |
❌ | ❌ | ✅ | ❌ |
seasonStatisticsHistory |
❌ | ❌ | Optional | ❌ |
multiSeasonStatistics |
❌ | ❌ | ❌ | ✅ |