zint.ch

Unofficial SpeedRunsLive API Documentation

This documentation is based on endpoints found while inspecting the SRL pages. This page only covers API endpoints from the new API (since the one at api.speedrunslive.com might be shut down soonish). The new API base is available at https://speedrunslive.com/api.

Live Streams

GET /api/livestreams

Returns the list of livestreams displayed on the home page.

{
    "data": [
        {
            "id": "12345678912",
            "game": "Grand Theft Auto V",
            "name": "SomeTwitchUserName",
            "playerName": "SomeSRLUserName",
            "profileImage": "https://...",
            "title": "Some Stream Title",
            "viewercount": 1234
        },
        {
            /* ... */
        }
    ]
}

Races

GET /api/currentraces

Returns a paginated list of active races.

Params

Param Description
pageNumber The page to display
pageSize The page size

Sample Output

{
    "data": [
        {
            "currentRaceFileName": ???,
            "currentRaceGameId": 6222,
            "currentRaceGoal": "Tower of Oannes",
            "currentRaceId": "or4bu",
            "currentRaceState": 3,
            "currentRaceStateText": "In Progress",
            "currentRaceTime": "2022-01-28T23:50:03+00:00",
            "elapsedTime": 1234,
            "entrants": [
                {
                    "currentRaceLinkId": 12345,
                    "currentRacePlayerId": 123,
                    "currentRacePlayerName": "SomeSRLUserName",
                    "message": "",
                    "place": 1234,
                    "rating": 0,
                    "time": -3
                }
                {
                    /* ... */
                }
            ],
            "game": {
                "gameAbbrev": "lamulana2",
                "gameName": "La-Mulana 2",
                "gamePopularity": 0,
                "isSeasonGame": false
            },
            "totalEntrants": 2
        },
        {
            /* ... */
        }
    ],
    "pageNumber": 1,
    "pageSize": 12,
    "totalPages": 2
}

GET /api/currentraces/<race-id>

Returns the info of a single race, same data as GET /api/currentraces -> data.

Past Races

GET /api/pastresults

Returns a paginated list of race results.

Params

Param Description
player Filter results by a player name
game Filter results by a game abbreviation
pageNumber The page to display
pageSize The page size

Games

GET /api/games

Returns a paginated list of games.

Params

Param Description
pageNumber The page to display
pageSize The page size
sortBy If set to popularity, sorty by popularity score
orderBy Either asc for ascending or desc

Sample Output

{
    "data": [
        {
            "gameAbbrev": "sm64",
            "gameName": "Super Mario 64",
            "gamePopularity": 974,
            "isSeasonGame": false
        },
        {
            /* ... */
        }
    ],
    "pageNumber": 1,
    "pageSize": 20,
    "totalPages": 322
}

Statistics

GET /api/stats/all

Returns the overall SRL race statistics.

Sample Output

{
    "data":{
        "totalRaces":286503,
        "totalPlayers":36165,
        "totalGames":6426,
        "largestRaceId":125224,
        "largestRaceSize":301,
        "totalRaceTime":1374617114,
        "totalPlayedTime":3998093958
    }
}

GET /api/stats/monthly

Returns the monthly race statistics.

Sample Output

{
    "data":[
        {
            "year":2022,
            "months":[
                {
                    "month":1,
                    "totalRaces":180,
                    "totalPlayers":185,
                    "totalGames":127,
                    "largestRace":286579,
                    "totalRaceTime":180,
                    "totalTimePlayed":1737482,
                    "largestRaceSize":16
                }
            ]
        },
        {
            /* ... */
        }
    ],
    "totalPages":0,
    "pageNumber":0,
    "pageSize":12
}

GET /api/stats/players

Returns a paginated list of race stats grouped by user.

Params

Param Description
pageNumber The page to display
pageSize The page size

Sample Output

{
    "data":[
        {
            "playerId":147,
            "playerName":"neskamikaze",
            "totalRaces":3769,
            "totalGames":1312,
            "firstRaceId":1731,
            "firstRaceDate":"2011-02-16T00:55:53+00:00",
            "totalPlayedTime":9057577,
            "totalFirsts":1560,
            "totalSeconds":1102,
            "totalThirds":320,
            "totalQuits":347,
            "totalDQs":5
        },
        {
            /* ... */
        }
    ],
    "totalPages":0,
    "pageNumber":0,
    "pageSize":12
}

GET /api/stats/players/<player-name>

Returns the race stats of the specified user.

Sample Output

{
    "data": {
        "playerId":19075,
        "playerName":"psychonauter",
        "totalRaces":55,
        "totalGames":2,
        "firstRaceId":167799,
        "firstRaceDate":"2016-04-12T21:25:49+00:00",
        "totalPlayedTime":449503,
        "totalFirsts":11,
        "totalSeconds":5,
        "totalThirds":8,
        "totalQuits":10,
        "totalDQs":0
    }
}

GET /api/stats/playergamestats

Returns the race stats of the specified user in the specified game.

Params

Param Description
playerName (Required) The user name
gameAbbrev (Required) The game abbreviation

Sample Output

{
    "data":{
        "playerId":19075,
        "gameId":0,
        "totalRaces":48,
        "firstRaceId":167799,
        "firstRaceDate":"2016-04-12T21:25:49+00:00",
        "totalPlayedTime":196639,
        "totalFirsts":8,
        "totalSeconds":5,
        "totalThirds":6,
        "totalQuits":9,
        "totalDQs":0
    }
}

GET /api/bestracetimes/<game-abbreviation>

Returns the top races of the specified game.

Sample Output

{
    "data": [
        {
            "goalId": 123,
            "goalName": "16 star",
            "bestTimes": [
                {
                    "raceId": 1234,
                    "playerId": 12345,
                    "time": 123,
                    "playerName": "SomeSRLUserName"
                }
            ]
        }
    ],
    "totalPages": 0,
    "pageNumber": 0,
    "pageSize": 12
}

Players

GET /api/players

Returns a paginated list of SRL players

Params

Param Description
pageNumber The page to display
pageSize The page size

Sample Output

{
    "data": [
        {
            "playerId": 123,
            "playerName": "SomeSRLUserName",
            "roleId": 5,
            "youtube": "",
            "countryName": "",
            "twitter": "",
            "channel" ""
        },
        {
            /* ... */
        }
    ],
    "totalPages": 3014,
    "pageNumber": 1,
    "pageSize": 12
}

GET /api/players/<player-name>

Returns the info of the specified user.

Sample Output

{
    "data":{
        "playerId":19075,
        "playerName":"psychonauter",
        "roleId":5,
        "youtube":"",
        "countryName":"Switzerland",
        "twitter":"psychonauter",
        "channel":"psychonauter",
        "playerPlayedGames":[
            {
                "playerId":19075,
                "gameId":7,
                "gameName":"Super Mario Sunshine",
                "gameAbbrev":"sms",
                "totalRaces":48,
                "gameRank":230
            },
            {
                "playerId":19075,
                "gameId":941,
                "gameName":"Final Fantasy X",
                "gameAbbrev":"ffx",
                "totalRaces":7,
                "gameRank":4
            }
        ]
    }
}

Sample Output

{
    "data":[
        {
            "raceId":267156,
            "raceGoal":"Any%",
            "raceDate":1578331429,
            "seasonId":0,
            "game":{
                "gameName":"Super Mario Sunshine",
                "gameAbbrev":"sms",
                "gamePopularity":153,
                "isSeasonGame":false
            },
            "entrants":[
                {
                    "playerName":"_1UpsForLife",
                    "place":1,
                    "placeText":"",
                    "time":4882,
                    "message":"first weekly of the decade!",
                    "oldRating":720,
                    "newRating":735
                },
                {
                    /* ... */
                }
            ]
        }
    ],
    "totalPages":48,
    "pageNumber":1,
    "pageSize":1
}

Countries

GET /api/countries

Returns the list of countries available on SRL.

Sample Output

{
    "data": [
        {
            "countryId": 1,
            "countryName": "None"
        },
        {
            /* ... */
        }
    ]
}

User / Auth

POST /api/auth/login

Authenticates a user, returns a cookie called auth_cookie used for privileged actions.

Payload

{
    "username": "",
    "password": ""
}

POST /api/auth/logout

Allows users to log out, removes the auth_cookie.

GET /api/user/profile

Returns the profile information of the currently authenticated user.

Sample Output

{
    "data":{
        "playerName":"psychonauter",
        "twitch":"psychonauter",
        "youtube":"",
        "twitter":"psychonauter",
        "country":"Switzerland",
        "countryId":191,
        "frontPagePref":2
    }
}

PUT /api/user/profile

Updates the profile information of the currently authenticated user.

Payload

{
    "playerName":"psychonauter",
    "twitch":"psychonauter",
    "youtube":"",
    "twitter":"psychonauter",
    "countryId":191,
    "frontPagePref":"2"
}