ACSM has a few read-only API endpoints available that can be used to read some data. API endpoint access can be controlled by the accounts permissions system.
Please note that to allow unauthenticated access to API endpoints, "Public Access" must be enabled in the accounts system.
The API is provided as-is, and may change with future releases of Server Manager. The developers of Server Manager do not provide a specific API promise/guarantee or API versioning, but will aim not to change or remove values unless absolutely necessary. Future updates to Server Manager may also add more data to these endpoints.
API endpoints are rate limited to a maximum of 5 requests per 20 seconds. You will receive a "Too Many Requests" error if you exceed the limit. We recommend that you do not request data from the API more than twice per minute.
This endpoint returns session and driver data for the currently active session. This data is the same that is used to form the Live Timings page. Many of the items displayed on the Live Timings page itself are calculated from these values via JavaScript. You may need to perform these calculations in your application.
GET /api/live-timings/leaderboard.json
Live Timings Api List
Sample request: GET /api/live-timings/leaderboard.json
Sample output:
{
"Version": 202,
"SessionIndex": 0,
"CurrentSessionIndex": 0,
"SessionCount": 1,
"ServerName": "Test Server",
"Track": "ks_red_bull_ring",
"TrackConfig": "layout_national",
"Name": "Practice",
"Type": 1,
"Time": 40,
"Laps": 0,
"WaitTime": 0,
"AmbientTemp": 26,
"RoadTemp": 37,
"WeatherGraphics": "3_clear",
"ElapsedMilliseconds": 510000,
"VisibilityMode": 0,
"EventType": 50,
"ConnectedDrivers": [
{
"CarInfo": {
"CarID": 0,
"DriverName": "Callum Jones",
"DriverGUID": "00000000000000001",
"CarModel": "urd_redbull_x2010_s1",
"CarSkin": "original",
"Tyres": "SS",
"RaceNumber": 0,
"DriverInitials": "JON",
"CarName": "RedBull X2010 S1",
"ClassID": "00000000-0000-0000-0000-000000000000",
"EventType": 51
},
"TotalNumLaps": 4,
"ConnectedTime": "2023-11-28T15:00:15.587187Z",
"LoadedTime": "2023-11-28T15:00:27.885066Z",
"Position": 1,
"Split": "00:00.000",
"DeltaToBest": 142356,
"DeltaToSelf": 142356,
"LastSeen": "2023-11-28T15:07:05.532451Z",
"LastPos": {
"X": -64.90211,
"Y": 2.6354387,
"Z": 399.89066
},
"IsInPits": false,
"LastPitStop": 4,
"DRSActive": false,
"NormalisedSplinePos": 0.13354197,
"SteerAngle": 126,
"StatusBytes": 0,
"BlueFlag": false,
"HasCompletedSession": false,
"Ping": 17,
"DriverSwap": {
"IsInDriverSwap": false,
"DriverSwapExpectedCompletionTime": "0001-01-01T00:00:00Z",
"DriverSwapHadPenalty": false,
"DriverSwapActualCompletionTime": "0001-01-01T00:00:00Z"
},
"DriftInfo": {
"CurrentLapScore": 0,
"BestLapScore": 0
},
"Cars": {
"urd_redbull_x2010_s1": {
"TopSpeedThisLap": 303.2196528642868,
"TopSpeedBestLap": 382.95381133909973,
"TyreBestLap": "SS",
"BestLap": 31910000000,
"NumLaps": 4,
"LastLap": 122735000000,
"LastLapCompletedTime": "2023-11-28T15:04:37.692917Z",
"TotalLapTime": 249857000000,
"CarName": "RedBull X2010 S1",
"RaceNumber": 0,
"CurrentLapSplits": {
"0": {
"SplitIndex": 0,
"SplitTime": 108876000000,
"Cuts": 0,
"IsDriversBest": false,
"IsBest": false
},
"1": {
"SplitIndex": 1,
"SplitTime": 13859000000,
"Cuts": 0,
"IsDriversBest": true,
"IsBest": false
}
},
"BestSplits": {
"0": {
"SplitIndex": 0,
"SplitTime": 17929000000,
"Cuts": 0,
"IsDriversBest": true,
"IsBest": true
},
"1": {
"SplitIndex": 1,
"SplitTime": 13859000000,
"Cuts": 0,
"IsDriversBest": true,
"IsBest": false
}
},
"BestLapSplits": {
"0": {
"SplitIndex": 0,
"SplitTime": 17929000000,
"Cuts": 0,
"IsDriversBest": true,
"IsBest": true
},
"1": {
"SplitIndex": 1,
"SplitTime": 13981000000,
"Cuts": 0,
"IsDriversBest": false,
"IsBest": false
}
},
"BestLapMiniSectors": [
{
"Time": 1701183723137704000,
"TimeInLap": 88,
"Lap": 2
},
// etc ...
],
"QualifyingTime": 0
}
}
},
// etc ...
],
"DisconnectedDrivers": null // like ConnectedDrivers above...
}
This endpoint returns the standings for a given Championship.
GET /championship/{championshipID}/standings.json
Championships Standing Endpoint
Sample request: GET /championship/0a393890-c079-43ee-8a6d-37266ba0e703/standings.json
Sample output:
{
"DriverStandings": {
"": [
{
"Car": {
"BallastKG": 0,
"CarId": 0,
"Driver": {
"Guid": "00000000000000005",
"GuidsList": [
"00000000000000002"
],
"Name": "Model Snipe",
"Nation": "GBR",
"Team": "",
"ClassID": "00000000-0000-0000-0000-000000000000"
},
"Model": "ks_mazda_mx5_cup",
"Restrictor": 0,
"Skin": "10_cup_60",
"ClassID": "00000000-0000-0000-0000-000000000000",
"MinPing": 0,
"MaxPing": 0
},
"Teams": {
"": 10
},
"Points": 202,
"IgnoredEventIDs": {}
},
{
"Car": {
"BallastKG": 0,
"CarId": 3,
"Driver": {
"Guid": "00000000000000003",
"GuidsList": [
"00000000000000002"
],
"Name": "Organic Moth",
"Nation": "PLA",
"Team": "",
"ClassID": "00000000-0000-0000-0000-000000000000"
},
"Model": "ks_mazda_mx5_cup",
"Restrictor": 0,
"Skin": "11_cup_61",
"ClassID": "00000000-0000-0000-0000-000000000000",
"MinPing": 0,
"MaxPing": 0
},
"Teams": {
"": 9
},
"Points": 121,
"IgnoredEventIDs": {}
},
{
"Car": {
"BallastKG": 0,
"CarId": 13,
"Driver": {
"Guid": "00000000000000004",
"GuidsList": [
"00000000000000002"
],
"Name": "Mint Marlin",
"Nation": "GBR",
"Team": "",
"ClassID": "00000000-0000-0000-0000-000000000000"
},
"Model": "ks_mazda_mx5_cup",
"Restrictor": 0,
"Skin": "04_cup_29",
"ClassID": "00000000-0000-0000-0000-000000000000",
"MinPing": 0,
"MaxPing": 0
},
"Teams": {
"": 6
},
"Points": 86,
"IgnoredEventIDs": {}
}
]
},
"TeamStandings": {}
}
Lists the results files on the server, optionally matching a search query. This endpoint is paginated, so multiple requests may need to be made to retrieve all results files.
GET /api/results/list.json
Results Api List
q
- search query, URL encoded. Syntax must match that of the search box on the results list page. Can be left blank, which returns all results, paginated.page
- page number, indexed from 0 (first page). The API response lists the number of pages, so you can paginate correctly.sort
- Sort type, either date
or relevance
. If left blank, date
is used.Sample request: GET /api/results/list.json?q=%2Bspa+-f2004+Result.TotalTime%3A%3E1200000&sort=date&page=0
Sample output:
{
"num_pages": 3,
"current_page": 0,
"sort_type": "date",
"results": [
{
"track": "spa",
"session_type": "RACE",
"date": "2020-07-28T19:48:00+01:00",
"results_json_url": "/results/download/2020_7_28_19_48_RACE.json",
"results_page_url": "/results/2020_7_28_19_48_RACE"
},
{
"track": "spa",
"session_type": "QUALIFY",
"date": "2020-07-28T19:32:00+01:00",
"results_json_url": "/results/download/2020_7_28_19_32_QUALIFY.json",
"results_page_url": "/results/2020_7_28_19_32_QUALIFY"
},
{
"track": "spa",
"session_type": "PRACTICE",
"date": "2020-07-28T19:16:00+01:00",
"results_json_url": "/results/download/2020_7_28_19_16_PRACTICE.json",
"results_page_url": "/results/2020_7_28_19_16_PRACTICE"
},
{
"track": "spa",
"session_type": "PRACTICE",
"date": "2020-07-28T19:12:00+01:00",
"results_json_url": "/results/download/2020_7_28_19_12_PRACTICE.json",
"results_page_url": "/results/2020_7_28_19_12_PRACTICE"
},
{
"track": "spa",
"session_type": "PRACTICE",
"date": "2020-07-28T16:26:00+01:00",
"results_json_url": "/results/download/2020_7_28_16_26_PRACTICE.json",
"results_page_url": "/results/2020_7_28_16_26_PRACTICE"
}
// etc...
]
}
This endpoint returns a full JSON output of the results file from the Assetto Corsa Server. To find results file names, use the Results List endpoint above.
GET /results/download/{filename}.json
Results Download
Sample request: GET /results/download/2020_7_28_16_26_PRACTICE.json
Sample output:
{
"Version": 0,
"Cars": [
{
"BallastKG": 0,
"CarId": 0,
"Driver": {
"Guid": "00000000000000001",
"GuidsList": [
""
],
"Name": "Callum Jones",
"Nation": "FJI",
"Team": "",
"ClassID": "00000000-0000-0000-0000-000000000000"
},
"Model": "ginetta_gt4_lhd",
"Restrictor": 0,
"Skin": "KX_Supercup_GT",
"ClassID": "00000000-0000-0000-0000-000000000000",
"MinPing": 0,
"MaxPing": 0
},
{
"BallastKG": 0,
"CarId": 1,
"Driver": {
"Guid": "",
"GuidsList": [
""
],
"Name": "",
"Nation": "",
"Team": "",
"ClassID": "00000000-0000-0000-0000-000000000000"
},
"Model": "ginetta_gt4_lhd",
"Restrictor": 0,
"Skin": "Martini_Racing",
"ClassID": "00000000-0000-0000-0000-000000000000",
"MinPing": 0,
"MaxPing": 0
}
// etc...
]
// output truncated due to large amounts of data
// to find the full structure, make a request to your server and inspect the output.
}
This endpoint returns information about the machine running Server Manager, and a few other tools useful for debugging.
GET /healthcheck.json
Sample request: GET /healthcheck.json
Sample output:
{
"OK": true,
"Version": "v2.3.10",
"LicenseID": "XXXX-XXXX-XXXX-XXXX",
"OS": "linux/amd64",
"NumCPU": 6,
"NumGoroutines": 112,
"Uptime": "121h35m23.911250797s",
"GoVersion": "go1.21.3",
"AssettoIsInstalled": true,
"StrackerIsInstalled": false,
"CarDirectoryIsWritable": true,
"TrackDirectoryIsWritable": true,
"WeatherDirectoryIsWritable": true,
"SetupsDirectoryIsWritable": true,
"ConfigDirectoryIsWritable": true,
"ResultsDirectoryIsWritable": true,
"ServerName": "Example Server",
"ServerID": "XXXX-XXXX-XXXX-XXXX",
"EventInProgress": true,
"EventIsCritical": false,
"EventIsChampionship": false,
"EventIsRaceWeekend": false,
"EventIsPractice": false,
"NumConnectedDrivers": 0,
"MaxClientsOverride": 0
}