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.jsonLive Timings Api ListSample 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 driver data for the active session in a more flat format with less overall data than the main Live Timings endpoint.
GET /api/live-timings/basic.jsonLive Timings Api ListSample request: GET /api/live-timings/basic.json
Sample output:
{
"ConnectedDrivers": [
{
"DriverName": "Example Driver",
"DriverGUID": "12345678987654321",
"TeamName": "Example Team",
"RaceNumber": 7,
"CarName": "Mazda MX5 Cup",
"Tyres": "H",
"Position": 1,
"IsInPits": false,
"NumLongPits": 0,
"NumPits": 1,
"BlueFlag": false,
"Split": "00:00.000",
"NumLaps": 2,
"BestLap": 105181000000,
"LastLap": 105181000000
}
]
}
This endpoint returns the standings for a given Championship.
GET /championship/{championshipID}/standings.jsonChampionships Standing EndpointSample 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.jsonResults Api Listq - 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}.jsonResults DownloadSample 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.jsonSample 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
}