Unofficial Speedrun.com API docs Built by Flammableassassin
If you wish to contribute feel free to here https://github.com/flamableassassin/openapi-docs/
The official docs are here: https://github.com/speedruncomorg/api
This spec is based on my interpretation of the official docs
In reality this spec is more than likely missing parameters, properties on schemas and endpoints. If you find one of these please open an issue or contribute via a pull request
Categories are the different rulesets for speedruns. Categories are either per-game
or per-level
(if the game uses individual levels), both can be accessed via this resource.
This resource is meant to perform ID-based lookups. That's why there is no GET /categories
to get a flat list of all categories across all games. If you want to get the categories for a game, use GET /v1/games/{gameid}/categories.
id required | string Values can vary in length |
name required | string |
weblink required | string <uri> The URL to the category leaderboard on the website |
type required | string Enum: "per-game" "per-level" Categories are either per-game or per-level (if the game uses individual levels) |
rules required | string Freeform text with some basic, undocumented speedrun.com markup |
required | object Players is the number of participants per run in this category. |
miscellaneous required | boolean Miscellaneous categories are usually not shown directly on the leaderboards, but are otherwise nothing special |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "jkh473tf",
- "name": "Any%",
- "type": "per-game",
- "rules": "Yada Yada Yada",
- "players": {
- "type": "exactly",
- "value": 2
}, - "miscellaneous": false,
- "links": [
]
}
id required | string The id of a category |
embed | Array of strings Items Enum: "game" "variables" Embed additional resources into the response. See embedding for more info. |
{- "data": {
- "id": "jkh473tf",
- "name": "Any%",
- "type": "per-game",
- "rules": "Yada Yada Yada",
- "players": {
- "type": "exactly",
- "value": 2
}, - "miscellaneous": false,
- "links": [
]
}
}
This will retrieve all variables that are applicable to the given category.
per-level
categories will not show the variables for runs completing the entire game.per-game
categories will not show the variables for individual level runs.id required | string The id of a category |
orderby | string Default: "pos" Enum: "name" "mandatory" "user-defined" "pos"
| ||||||||||
direction | string Enum: "asc" "desc" The direction to sort the results |
{- "data": [
- {
- "id": "wzx7q875",
- "name": "cc",
- "category": null,
- "scope": {
- "type": "full-game"
}, - "mandatory": true,
- "user-defined": false,
- "obsoletes": false,
- "values": {
- "values": {
- "zdbx1h88": {
- "label": "150cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}, - "k1omees9": {
- "label": "200cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}
}, - "default": "zdbx1h88"
}, - "is-subcategory": true,
- "links": [
]
}
]
}
This will retrieve the records (first three places) of the given category. If it's a full-game category, the result will be a list containing one leaderboard, otherwise the result will contain one leaderboard for each level of the game the category belongs to.
id required | string The id of a category |
top | number Only return the top N places |
skip-empty | boolean Skips empty values |
offset | number >= 0 Advance to the next set of elements |
max | number [ 1 .. 200 ] The maximum number of elements to return |
embed | Array of strings Items Enum: "game" "category" "level" "players" "regions" "platforms" "variables" Embed additional resources into the response. See embedding for more info. |
{- "data": [
- {
- "data": {
- "game": "xldev513",
- "category": "rklg3rdn",
- "level": null,
- "platform": null,
- "region": null,
- "emulators": null,
- "video-only": false,
- "timing": "realtime",
- "values": { },
- "runs": [
- {
- "place": 1,
- "run": {
- "id": "yw1nj0nz",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "comment": "Bad levels:\r\nJoA5 - Transport ship never landed, so no trigger for the end never loaded?\r\nSala2 - Bad ships\r\nBB3 - Myself playing super bad\r\nAtt1 - Destroy monastery then market. noted.\r\nMonte 2 - Bad luck on the red army killing my rams and bad play.\r\nHastings - Needed to play it on AoE2HD not AoC\r\nVindlandsaga - Longboats wrecked me.",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2018-01-05T03:22:57Z"
}, - "players": [
], - "date": "2018-01-02",
- "submitted": "2018-01-02T22:04:03Z",
- "times": {
- "primary": "PT7H3M43S",
- "primary_t": 25423,
- "realtime": "PT7H3M43S",
- "realtime_t": 25423,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "values": {
- "m5ly6jn4": "xqke89q9"
}
}
}, - {
- "place": 2,
- "run": {
- "id": "pzgkj6ey",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "videos": {
- "links": [
]
}, - "comment": "part 2: http://www.twitch.tv/adam_ak/v/4191464\r\n\r\nResult of the race with Mhmd and Dawned. Montezuma and BoC were a mess -- rest was OK. Will improve :v)",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2015-05-10T12:09:40Z"
}, - "players": [
], - "date": "2015-04-11",
- "submitted": "2015-04-20T13:41:10Z",
- "times": {
- "primary": "PT27H55M24S",
- "primary_t": 100524,
- "realtime": "PT27H55M24S",
- "realtime_t": 100524,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "splits": null,
- "values": {
- "m5ly6jn4": "p12z471x"
}
}
}
], - "links": [
]
}
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
Developers are the persons and/of studios responsible for developing games, for example Acclaim Entertainment, Bethesda Softworks, Edmund McMillen etc.
id required | string |
name required | string |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "l4eprzro",
- "name": "Arkane Studios",
- "links": [
]
}
offset | number >= 0 Advance to the next set of elements | ||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||
orderby | string Default: "name" Value: "name"
|
{- "data": [
- {
- "id": "l4eprzro",
- "name": "Arkane Studios",
- "links": [
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
Engines are software frameworks used in the creation of games, for example the DOOM engine, Unreal Engine, Geo-Mod etc.
id required | string |
name required | string |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "p85eo036",
- "name": "Build",
- "links": [
]
}
offset | number >= 0 Advance to the next set of elements | ||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||
orderby | string Default: "name" Value: "name"
|
{- "data": [
- {
- "id": "p85eo036",
- "name": "Build",
- "links": [
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
Games are the things users do speedruns in. Games are associated with regions (US, Europe, ...), platforms (consoles, handhelds, ...), genres, engines, developers, game types, publishers, categories, levels and custom variables (like speed=50/100/150cc in Mario Kart games).
Games that are not part of a series are categorized in the "N/A" series for backwards compatibility.
id required | string Values can vary in length |
required | object (GameNames) |
abbreviation required | string ** Do not ** use the abbreviation to manually construct a game's full web URL, instead always use the provided |
weblink required | string <uri> Link to get to this game's page intended for humans, |
released required | integer Deprecated Legacy value that has been superseded by |
release-date required | string <date> |
required | object (Ruleset) |
romhack required | boolean Deprecated Legacy value that has been superceded by |
required | Array of strings or object List of game types IDs set for the game. This list can be empty. |
required | Array of strings or object List of platform IDs the game can be played on. This list can be empty. |
required | Array of strings or object List of region IDs the game is available in. This list can be empty. |
required | Array of strings or object List of genre IDs set for the game. This list can be empty. |
required | Array of strings or object List of engine IDs set for the game. This list can be empty. |
required | Array of strings or object List of developer IDs set for the game. This list can be empty. |
required | Array of strings or object List of publisher IDs set for the game. This list can be empty. |
required | Moderators (object) or object Mapping of user IDs to their roles within the game. Possible roles are moderator and super-moderator (super moderators can appoint other users as moderators). |
required | string or null Can be null for games that have been added in the early days of speedrun.com. |
required | object Links to images that are used for that game on speedrun.com |
required | Array of objects (Links)
|
{- "id": "1kgr75w4",
- "names": {
- "international": "Super Mario Sunshine",
- "japanese": "スーパーマリオサンシャイン",
- "twitch": "Super Mario Sunshine"
}, - "abbreviation": "sms",
- "released": 2002,
- "release-date": "2002-08-26",
- "ruleset": {
- "show-milliseconds": false,
- "require-verification": true,
- "require-video": false,
- "run-times": [
- "realtime",
- "realtime_noloads"
], - "default-time": "realtime",
- "emulators-allowed": false
}, - "romhack": false,
- "gametypes": [ ],
- "platforms": [
- "039or978",
- "hdzate15"
], - "regions": [
- "hdz48alk",
- "hdz1hdwo",
- "9uhjgcgg"
], - "genres": [ ],
- "engines": [ ],
- "developers": [ ],
- "publishers": [ ],
- "moderators": {
- "wzx7q875": "moderator",
- "zzb12med": "super-moderator"
}, - "created": "2014-12-07T12:50:20Z",
- "assets": {
- "cover-tiny": {
- "width": 32,
- "height": 45
}, - "cover-small": {
- "width": 64,
- "height": 90
}, - "cover-medium": {
- "width": 128,
- "height": 180
}, - "cover-large": {
- "width": 256,
- "height": 360
}, - "trophy-1st": {
- "width": 16,
- "height": 16
}, - "trophy-2nd": {
- "width": 16,
- "height": 16
}, - "trophy-3rd": {
- "width": 16,
- "height": 16
}, - "trophy-4th": null,
- "background": {
- "width": 151,
- "height": 195
}, - "foreground": null
}, - "links": [
- {
- "rel": "leaderboard",
}
]
}
Note that giving invalid values for platform, region or moderator will result in an HTTP 404 error instead of an empty list. This is on purpose, because asking to filter by non-existing elements should be something an API client should notice.
embed | Array of strings Items Enum: "levels" "categories" "moderators" "gametypes" "platforms" "regions" "genres" "engines" "developers" "publishers" "variables" Embed additional resources into the response. See embedding for more info. | ||||||||||||||
offset | number >= 0 Advance to the next set of elements | ||||||||||||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||||||||||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||||||||||||
platform | string Platform ID; when given, restricts to that platform | ||||||||||||||
region | string Region ID; when given, restricts to that region | ||||||||||||||
orderby | string Default: "name.int" Enum: "name.int" "name.jap" "abbreviation" "released" "created" "similarity"
| ||||||||||||||
name | string When given, performs a fuzzy search across game names and abbreviations | ||||||||||||||
abbreviation | string When given, performs an exact-match search for this abbreviation | ||||||||||||||
released | number When given, restricts to games released in that year | ||||||||||||||
gametype | string Game type ID; when given, restricts to that game type | ||||||||||||||
genre | string Genre ID; when given, restricts to that genre | ||||||||||||||
engine | string Engine ID; when given, restricts to that engine | ||||||||||||||
developer | string Developer ID; when given, restricts to that developer | ||||||||||||||
publisher | string Publisher ID; when given, restricts to that publisher | ||||||||||||||
moderator | string Moderator ID; when given, only games moderated by that user will be returned | ||||||||||||||
romhack | boolean Deprecated Legacy parameter, do not use this in new code; whether or not to include games with game types (if this parameter is not set, game types are included; if it is set to a true value, only games with game types will be returned, otherwise only games without game types are returned) | ||||||||||||||
_bulk | boolean Enable bulk access |
{- "data": [
- {
- "id": "1kgr75w4",
- "names": {
- "international": "Super Mario Sunshine",
- "japanese": "スーパーマリオサンシャイン",
- "twitch": "Super Mario Sunshine"
}, - "abbreviation": "sms",
- "released": 2002,
- "release-date": "2002-08-26",
- "ruleset": {
- "show-milliseconds": false,
- "require-verification": true,
- "require-video": false,
- "run-times": [
- "realtime",
- "realtime_noloads"
], - "default-time": "realtime",
- "emulators-allowed": false
}, - "romhack": false,
- "gametypes": [ ],
- "platforms": [
- "039or978",
- "hdzate15"
], - "regions": [
- "hdz48alk",
- "hdz1hdwo",
- "9uhjgcgg"
], - "genres": [ ],
- "engines": [ ],
- "developers": [ ],
- "publishers": [ ],
- "moderators": {
- "wzx7q875": "moderator",
- "zzb12med": "super-moderator"
}, - "created": "2014-12-07T12:50:20Z",
- "assets": {
- "cover-tiny": {
- "width": 32,
- "height": 45
}, - "cover-small": {
- "width": 64,
- "height": 90
}, - "cover-medium": {
- "width": 128,
- "height": 180
}, - "cover-large": {
- "width": 256,
- "height": 360
}, - "trophy-1st": {
- "width": 16,
- "height": 16
}, - "trophy-2nd": {
- "width": 16,
- "height": 16
}, - "trophy-3rd": {
- "width": 16,
- "height": 16
}, - "trophy-4th": null,
- "background": {
- "width": 151,
- "height": 195
}, - "foreground": null
}, - "links": [
- {
- "rel": "leaderboard",
}
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
id required | string The id of a game or its abbreviation |
{- "data": {
- "id": "1kgr75w4",
- "names": {
- "international": "Super Mario Sunshine",
- "japanese": "スーパーマリオサンシャイン",
- "twitch": "Super Mario Sunshine"
}, - "abbreviation": "sms",
- "released": 2002,
- "release-date": "2002-08-26",
- "ruleset": {
- "show-milliseconds": false,
- "require-verification": true,
- "require-video": false,
- "run-times": [
- "realtime",
- "realtime_noloads"
], - "default-time": "realtime",
- "emulators-allowed": false
}, - "romhack": false,
- "gametypes": [ ],
- "platforms": [
- "039or978",
- "hdzate15"
], - "regions": [
- "hdz48alk",
- "hdz1hdwo",
- "9uhjgcgg"
], - "genres": [ ],
- "engines": [ ],
- "developers": [ ],
- "publishers": [ ],
- "moderators": {
- "wzx7q875": "moderator",
- "zzb12med": "super-moderator"
}, - "created": "2014-12-07T12:50:20Z",
- "assets": {
- "cover-tiny": {
- "width": 32,
- "height": 45
}, - "cover-small": {
- "width": 64,
- "height": 90
}, - "cover-medium": {
- "width": 128,
- "height": 180
}, - "cover-large": {
- "width": 256,
- "height": 360
}, - "trophy-1st": {
- "width": 16,
- "height": 16
}, - "trophy-2nd": {
- "width": 16,
- "height": 16
}, - "trophy-3rd": {
- "width": 16,
- "height": 16
}, - "trophy-4th": null,
- "background": {
- "width": 151,
- "height": 195
}, - "foreground": null
}, - "links": [
- {
- "rel": "leaderboard",
}
]
}
}
id required | string The id of a game or its abbreviation |
direction | string Enum: "asc" "desc" The direction to sort the results | ||||||||
miscellaneous | boolean
| ||||||||
orderby | string Default: "pos" Enum: "name" "pos" "miscellaneous"
|
{- "data": [
- {
- "id": "jkh473tf",
- "name": "Any%",
- "type": "per-game",
- "rules": "Yada Yada Yada",
- "players": {
- "type": "exactly",
- "value": 2
}, - "miscellaneous": false,
- "links": [
]
}
]
}
id required | string The id of a game or its abbreviation |
direction | string Enum: "asc" "desc" The direction to sort the results | ||||||
orderby | string Default: "pos" Enum: "name" "pos"
|
{- "data": [
- {
- "id": "ha71kldd",
- "name": "Slip Slide Icecapades",
- "rules": "Yada Yada Yada",
- "links": [
]
}
]
}
id required | string The id of a game or its abbreviation |
direction | string Enum: "asc" "desc" The direction to sort the results | ||||||||||
orderby | string Default: "pos" Enum: "name" "mandatory" "user-defined" "pos"
|
{- "data": [
- {
- "id": "wzx7q875",
- "name": "cc",
- "category": null,
- "scope": {
- "type": "full-game"
}, - "mandatory": true,
- "user-defined": false,
- "obsoletes": false,
- "values": {
- "values": {
- "zdbx1h88": {
- "label": "150cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}, - "k1omees9": {
- "label": "200cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}
}, - "default": "zdbx1h88"
}, - "is-subcategory": true,
- "links": [
]
}
]
}
id required | string The id of a game or its abbreviation |
embed | Array of strings Items Enum: "levels" "categories" "moderators" "gametypes" "platforms" "regions" "genres" "engines" "developers" "publishers" "variables" Embed additional resources into the response. See embedding for more info. | ||||||||||||||
offset | number >= 0 Advance to the next set of elements | ||||||||||||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||||||||||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||||||||||||
orderby | string Default: "name.int" Enum: "name.int" "name.jap" "abbreviation" "released" "created" "similarity"
| ||||||||||||||
name | string When given, performs a fuzzy search across game names and abbreviations | ||||||||||||||
abbreviation | string When given, performs an exact-match search for this abbreviation | ||||||||||||||
released | number When given, restricts to games released in that year | ||||||||||||||
gametype | string Game type ID; when given, restricts to that game type | ||||||||||||||
platform | string Platform ID; when given, restricts to that platform | ||||||||||||||
region | string Region ID; when given, restricts to that region | ||||||||||||||
genre | string Genre ID; when given, restricts to that genre | ||||||||||||||
engine | string Engine ID; when given, restricts to that engine | ||||||||||||||
developer | string Developer ID; when given, restricts to that developer | ||||||||||||||
publisher | string Publisher ID; when given, restricts to that publisher | ||||||||||||||
moderator | string Moderator ID; when given, only games moderated by that user will be returned | ||||||||||||||
_bulk | boolean Enable bulk access |
{- "data": [
- {
- "id": "1kgr75w4",
- "names": {
- "international": "Super Mario Sunshine",
- "japanese": "スーパーマリオサンシャイン",
- "twitch": "Super Mario Sunshine"
}, - "abbreviation": "sms",
- "released": 2002,
- "release-date": "2002-08-26",
- "ruleset": {
- "show-milliseconds": false,
- "require-verification": true,
- "require-video": false,
- "run-times": [
- "realtime",
- "realtime_noloads"
], - "default-time": "realtime",
- "emulators-allowed": false
}, - "romhack": false,
- "gametypes": [ ],
- "platforms": [
- "039or978",
- "hdzate15"
], - "regions": [
- "hdz48alk",
- "hdz1hdwo",
- "9uhjgcgg"
], - "genres": [ ],
- "engines": [ ],
- "developers": [ ],
- "publishers": [ ],
- "moderators": {
- "wzx7q875": "moderator",
- "zzb12med": "super-moderator"
}, - "created": "2014-12-07T12:50:20Z",
- "assets": {
- "cover-tiny": {
- "width": 32,
- "height": 45
}, - "cover-small": {
- "width": 64,
- "height": 90
}, - "cover-medium": {
- "width": 128,
- "height": 180
}, - "cover-large": {
- "width": 256,
- "height": 360
}, - "trophy-1st": {
- "width": 16,
- "height": 16
}, - "trophy-2nd": {
- "width": 16,
- "height": 16
}, - "trophy-3rd": {
- "width": 16,
- "height": 16
}, - "trophy-4th": null,
- "background": {
- "width": 151,
- "height": 195
}, - "foreground": null
}, - "links": [
- {
- "rel": "leaderboard",
}
]
}
]
}
id required | string The id of a game or its abbreviation |
embed | Array of strings Items Enum: "game" "category" "level" "players" "regions" "platforms" "variables" Embed additional resources into the response. See embedding for more info. | ||||||
offset | number >= 0 Advance to the next set of elements | ||||||
miscellaneous | boolean
| ||||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||||
top | number Only return the top N places | ||||||
skip-empty | boolean Skips empty values | ||||||
scope | string Default: "all" Enum: "full-game" "levels" "all" when set to full-game, only full-game categories will be included; when set to levels, only individual levels are returned; default is all |
{- "data": [
- {
- "data": {
- "game": "xldev513",
- "category": "rklg3rdn",
- "level": null,
- "platform": null,
- "region": null,
- "emulators": null,
- "video-only": false,
- "timing": "realtime",
- "values": { },
- "runs": [
- {
- "place": 1,
- "run": {
- "id": "yw1nj0nz",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "comment": "Bad levels:\r\nJoA5 - Transport ship never landed, so no trigger for the end never loaded?\r\nSala2 - Bad ships\r\nBB3 - Myself playing super bad\r\nAtt1 - Destroy monastery then market. noted.\r\nMonte 2 - Bad luck on the red army killing my rams and bad play.\r\nHastings - Needed to play it on AoE2HD not AoC\r\nVindlandsaga - Longboats wrecked me.",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2018-01-05T03:22:57Z"
}, - "players": [
], - "date": "2018-01-02",
- "submitted": "2018-01-02T22:04:03Z",
- "times": {
- "primary": "PT7H3M43S",
- "primary_t": 25423,
- "realtime": "PT7H3M43S",
- "realtime_t": 25423,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "values": {
- "m5ly6jn4": "xqke89q9"
}
}
}, - {
- "place": 2,
- "run": {
- "id": "pzgkj6ey",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "videos": {
- "links": [
]
}, - "comment": "part 2: http://www.twitch.tv/adam_ak/v/4191464\r\n\r\nResult of the race with Mhmd and Dawned. Montezuma and BoC were a mess -- rest was OK. Will improve :v)",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2015-05-10T12:09:40Z"
}, - "players": [
], - "date": "2015-04-11",
- "submitted": "2015-04-20T13:41:10Z",
- "times": {
- "primary": "PT27H55M24S",
- "primary_t": 100524,
- "realtime": "PT27H55M24S",
- "realtime_t": 100524,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "splits": null,
- "values": {
- "m5ly6jn4": "p12z471x"
}
}
}
], - "links": [
]
}
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
Game types are classifications for unofficial games, for example ROM Hack, Fangame, Modification etc.
id required | string |
name required | string |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "d91jd1ex",
- "name": "Fangame",
- "links": [
]
}
offset | number >= 0 Advance to the next set of elements | ||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||
orderby | string Default: "name" Value: "name"
|
{- "data": [
- {
- "id": "d91jd1ex",
- "name": "Fangame",
- "links": [
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
Genres are classifications for games, for example Action, JRPG, Rogue-like etc.
id required | string |
name required | string |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "qdnqyk28",
- "name": "Metroidvania",
- "links": [
]
}
offset | number >= 0 Advance to the next set of elements | ||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||
orderby | string Default: "name" Value: "name"
|
{- "data": [
- {
- "id": "qdnqyk28",
- "name": "Metroidvania",
- "links": [
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
Sometimes, speedrun.com has runs done by players that have no account on the site yet. These runners are called "guests" in the API. Except for a name, there is nothing we know about them.
name required | string |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "name": "Alex",
- "links": [
]
}
Leaderboards contain non-obsolete runs, sorted by time descending. In contrast to raw runs, leaderboards are automatically grouped according to the game/category/level rules that the moderators have defined.
weblink required | string <uri> |
required | string or object |
required | string or object |
required | null or string or object |
required | null or string or object |
required | null or string or object |
emulators required | null |
video-only required | boolean |
timing required | string |
required | object (VariableMapping) |
required | Array of objects |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "data": {
- "game": "xldev513",
- "category": "rklg3rdn",
- "level": null,
- "platform": null,
- "region": null,
- "emulators": null,
- "video-only": false,
- "timing": "realtime",
- "values": { },
- "runs": [
- {
- "place": 1,
- "run": {
- "id": "yw1nj0nz",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "comment": "Bad levels:\r\nJoA5 - Transport ship never landed, so no trigger for the end never loaded?\r\nSala2 - Bad ships\r\nBB3 - Myself playing super bad\r\nAtt1 - Destroy monastery then market. noted.\r\nMonte 2 - Bad luck on the red army killing my rams and bad play.\r\nHastings - Needed to play it on AoE2HD not AoC\r\nVindlandsaga - Longboats wrecked me.",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2018-01-05T03:22:57Z"
}, - "players": [
], - "date": "2018-01-02",
- "submitted": "2018-01-02T22:04:03Z",
- "times": {
- "primary": "PT7H3M43S",
- "primary_t": 25423,
- "realtime": "PT7H3M43S",
- "realtime_t": 25423,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "values": {
- "m5ly6jn4": "xqke89q9"
}
}
}, - {
- "place": 2,
- "run": {
- "id": "pzgkj6ey",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "videos": {
- "links": [
]
}, - "comment": "part 2: http://www.twitch.tv/adam_ak/v/4191464\r\n\r\nResult of the race with Mhmd and Dawned. Montezuma and BoC were a mess -- rest was OK. Will improve :v)",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2015-05-10T12:09:40Z"
}, - "players": [
], - "date": "2015-04-11",
- "submitted": "2015-04-20T13:41:10Z",
- "times": {
- "primary": "PT27H55M24S",
- "primary_t": 100524,
- "realtime": "PT27H55M24S",
- "realtime_t": 100524,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "splits": null,
- "values": {
- "m5ly6jn4": "p12z471x"
}
}
}
], - "links": [
]
}
}
game required | string Game ID or abbreviation. |
category required | string Category ID or abbreviation. |
embed | Array of strings Items Enum: "game" "category" "level" "players" "regions" "platforms" "variables" Embed additional resources into the response. See embedding for more info. |
top | number Only return the top N places |
platform | string Platform ID; when given, restricts to that platform |
region | string Region ID; when given, restricts to that region |
emulators | boolean When not given, real devices and emulators are shown. When set to a true value, only emulators are shown, else only real devices are shown |
video-only | boolean Default: false When set to a true value, only runs with a video will be returned |
timing | string Enum: "realtime" "realtime_noloads" "ingame" Controls the sorting |
date | string <date> ISO 8601 date string; when given, only returns runs done before or on this date |
object To filter by custom variables, name the query string parameter |
{- "data": {
- "data": {
- "game": "xldev513",
- "category": "rklg3rdn",
- "level": null,
- "platform": null,
- "region": null,
- "emulators": null,
- "video-only": false,
- "timing": "realtime",
- "values": { },
- "runs": [
- {
- "place": 1,
- "run": {
- "id": "yw1nj0nz",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "comment": "Bad levels:\r\nJoA5 - Transport ship never landed, so no trigger for the end never loaded?\r\nSala2 - Bad ships\r\nBB3 - Myself playing super bad\r\nAtt1 - Destroy monastery then market. noted.\r\nMonte 2 - Bad luck on the red army killing my rams and bad play.\r\nHastings - Needed to play it on AoE2HD not AoC\r\nVindlandsaga - Longboats wrecked me.",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2018-01-05T03:22:57Z"
}, - "players": [
], - "date": "2018-01-02",
- "submitted": "2018-01-02T22:04:03Z",
- "times": {
- "primary": "PT7H3M43S",
- "primary_t": 25423,
- "realtime": "PT7H3M43S",
- "realtime_t": 25423,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "values": {
- "m5ly6jn4": "xqke89q9"
}
}
}, - {
- "place": 2,
- "run": {
- "id": "pzgkj6ey",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "videos": {
- "links": [
]
}, - "comment": "part 2: http://www.twitch.tv/adam_ak/v/4191464\r\n\r\nResult of the race with Mhmd and Dawned. Montezuma and BoC were a mess -- rest was OK. Will improve :v)",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2015-05-10T12:09:40Z"
}, - "players": [
], - "date": "2015-04-11",
- "submitted": "2015-04-20T13:41:10Z",
- "times": {
- "primary": "PT27H55M24S",
- "primary_t": 100524,
- "realtime": "PT27H55M24S",
- "realtime_t": 100524,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "splits": null,
- "values": {
- "m5ly6jn4": "p12z471x"
}
}
}
], - "links": [
]
}
}
}
game required | string Game ID or abbreviation. |
level required | string Level ID or abbreviation. |
category required | string Category ID or abbreviation. |
embed | Array of strings Items Enum: "game" "category" "level" "players" "regions" "platforms" "variables" Embed additional resources into the response. See embedding for more info. |
top | number Only return the top N places |
platform | string Platform ID; when given, restricts to that platform |
region | string Region ID; when given, restricts to that region |
emulators | boolean When not given, real devices and emulators are shown. When set to a true value, only emulators are shown, else only real devices are shown |
video-only | boolean Default: false When set to a true value, only runs with a video will be returned |
timing | string Enum: "realtime" "realtime_noloads" "ingame" Controls the sorting |
date | string <date> ISO 8601 date string; when given, only returns runs done before or on this date |
object To filter by custom variables, name the query string parameter |
{- "data": {
- "data": {
- "game": "xldev513",
- "category": "rklg3rdn",
- "level": null,
- "platform": null,
- "region": null,
- "emulators": null,
- "video-only": false,
- "timing": "realtime",
- "values": { },
- "runs": [
- {
- "place": 1,
- "run": {
- "id": "yw1nj0nz",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "comment": "Bad levels:\r\nJoA5 - Transport ship never landed, so no trigger for the end never loaded?\r\nSala2 - Bad ships\r\nBB3 - Myself playing super bad\r\nAtt1 - Destroy monastery then market. noted.\r\nMonte 2 - Bad luck on the red army killing my rams and bad play.\r\nHastings - Needed to play it on AoE2HD not AoC\r\nVindlandsaga - Longboats wrecked me.",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2018-01-05T03:22:57Z"
}, - "players": [
], - "date": "2018-01-02",
- "submitted": "2018-01-02T22:04:03Z",
- "times": {
- "primary": "PT7H3M43S",
- "primary_t": 25423,
- "realtime": "PT7H3M43S",
- "realtime_t": 25423,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "values": {
- "m5ly6jn4": "xqke89q9"
}
}
}, - {
- "place": 2,
- "run": {
- "id": "pzgkj6ey",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "videos": {
- "links": [
]
}, - "comment": "part 2: http://www.twitch.tv/adam_ak/v/4191464\r\n\r\nResult of the race with Mhmd and Dawned. Montezuma and BoC were a mess -- rest was OK. Will improve :v)",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2015-05-10T12:09:40Z"
}, - "players": [
], - "date": "2015-04-11",
- "submitted": "2015-04-20T13:41:10Z",
- "times": {
- "primary": "PT27H55M24S",
- "primary_t": 100524,
- "realtime": "PT27H55M24S",
- "realtime_t": 100524,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "splits": null,
- "values": {
- "m5ly6jn4": "p12z471x"
}
}
}
], - "links": [
]
}
}
}
id required | string |
name required | string |
weblink required | string <uri> |
rules required | string |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "ha71kldd",
- "name": "Slip Slide Icecapades",
- "rules": "Yada Yada Yada",
- "links": [
]
}
id required | string The id of a level |
embed | Array of strings Items Enum: "categories" "variables" Embed additional resources into the response. See embedding for more info. |
{- "data": {
- "id": "ha71kldd",
- "name": "Slip Slide Icecapades",
- "rules": "Yada Yada Yada",
- "links": [
], - "variables": {
- "id": "wzx7q875",
- "name": "cc",
- "category": null,
- "scope": {
- "type": "full-game"
}, - "mandatory": true,
- "user-defined": false,
- "obsoletes": false,
- "values": {
- "values": {
- "zdbx1h88": {
- "label": "150cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}, - "k1omees9": {
- "label": "200cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}
}, - "default": "zdbx1h88"
}, - "is-subcategory": true,
- "links": [
]
}, - "category": {
- "id": "jkh473tf",
- "name": "Any%",
- "type": "per-game",
- "rules": "Yada Yada Yada",
- "players": {
- "type": "exactly",
- "value": 2
}, - "miscellaneous": false,
- "links": [
]
}
}
}
id required | string The id of a category |
orderby | string Default: "pos" Enum: "name" "miscellaneous" "pos"
| ||||||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||||||
miscellaneous | boolean
|
{- "data": [
- {
- "id": "jkh473tf",
- "name": "Any%",
- "type": "per-game",
- "rules": "Yada Yada Yada",
- "players": {
- "type": "exactly",
- "value": 2
}, - "miscellaneous": false,
- "links": [
]
}
]
}
id required | string The id of a category |
orderby | string Default: "pos" Enum: "name" "mandatory" "user-defined" "pos"
| ||||||||||
direction | string Enum: "asc" "desc" The direction to sort the results |
{- "data": [
- {
- "id": "wzx7q875",
- "name": "cc",
- "category": null,
- "scope": {
- "type": "full-game"
}, - "mandatory": true,
- "user-defined": false,
- "obsoletes": false,
- "values": {
- "values": {
- "zdbx1h88": {
- "label": "150cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}, - "k1omees9": {
- "label": "200cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}
}, - "default": "zdbx1h88"
}, - "is-subcategory": true,
- "links": [
]
}
]
}
Retrieve the records (first three places) of the given level.
id required | string The id of a category |
top | number Only return the top N places |
skip-empty | boolean Skips empty values |
offset | number >= 0 Advance to the next set of elements |
max | number [ 1 .. 200 ] The maximum number of elements to return |
embed | Array of strings Items Enum: "game" "category" "level" "players" "regions" "platforms" "variables" Embed additional resources into the response. See embedding for more info. |
{- "data": [
- {
- "data": {
- "game": "xldev513",
- "category": "rklg3rdn",
- "level": null,
- "platform": null,
- "region": null,
- "emulators": null,
- "video-only": false,
- "timing": "realtime",
- "values": { },
- "runs": [
- {
- "place": 1,
- "run": {
- "id": "yw1nj0nz",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "comment": "Bad levels:\r\nJoA5 - Transport ship never landed, so no trigger for the end never loaded?\r\nSala2 - Bad ships\r\nBB3 - Myself playing super bad\r\nAtt1 - Destroy monastery then market. noted.\r\nMonte 2 - Bad luck on the red army killing my rams and bad play.\r\nHastings - Needed to play it on AoE2HD not AoC\r\nVindlandsaga - Longboats wrecked me.",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2018-01-05T03:22:57Z"
}, - "players": [
], - "date": "2018-01-02",
- "submitted": "2018-01-02T22:04:03Z",
- "times": {
- "primary": "PT7H3M43S",
- "primary_t": 25423,
- "realtime": "PT7H3M43S",
- "realtime_t": 25423,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "values": {
- "m5ly6jn4": "xqke89q9"
}
}
}, - {
- "place": 2,
- "run": {
- "id": "pzgkj6ey",
- "game": "xldev513",
- "level": null,
- "category": "rklg3rdn",
- "videos": {
- "links": [
]
}, - "comment": "part 2: http://www.twitch.tv/adam_ak/v/4191464\r\n\r\nResult of the race with Mhmd and Dawned. Montezuma and BoC were a mess -- rest was OK. Will improve :v)",
- "status": {
- "status": "verified",
- "examiner": "v18q6wjn",
- "verify-date": "2015-05-10T12:09:40Z"
}, - "players": [
], - "date": "2015-04-11",
- "submitted": "2015-04-20T13:41:10Z",
- "times": {
- "primary": "PT27H55M24S",
- "primary_t": 100524,
- "realtime": "PT27H55M24S",
- "realtime_t": 100524,
- "realtime_noloads": null,
- "realtime_noloads_t": 0,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "8gej2n93",
- "emulated": false,
- "region": null
}, - "splits": null,
- "values": {
- "m5ly6jn4": "p12z471x"
}
}
}
], - "links": [
]
}
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
id required | string |
created required | string <date-time> |
status required | string Enum: "read" "unread" |
text required | string |
required | object |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "p2p5rrle",
- "created": "2015-01-25T11:55:15Z",
- "status": "read",
- "text": "Lighnat0r likes your post.",
- "links": [
]
}
Platforms are hardware devices that run games, for example PC, NES, PS2 etc.
id required | string |
name required | string |
released required | integer |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "rdjq4vwe",
- "name": "Nintendo Entertainment System",
- "released": 2002,
- "links": [
]
}
offset | number >= 0 Advance to the next set of elements | ||||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||||
orderby | string Default: "name" Enum: "name" "released"
|
{- "data": [
- {
- "id": "rdjq4vwe",
- "name": "Nintendo Entertainment System",
- "released": 2002,
- "links": [
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
The profile is the user resource of the currently authenticated user. This is useful to see what user a given API key belongs to.
See the official authentication docs for more info
X-API-Key
id required | string |
required | object (BaseName) |
weblink required | string <uri> |
required | object |
role required | string Enum: "banned" "user" "trusted" "moderator" "admin" "programmer" |
required | null or string |
required | null or object |
required | null or object (UserSocial) |
required | null or object (UserSocial) |
required | null or object (UserSocial) |
required | null or object (UserSocial) |
required | null or object (UserSocial) |
required | Array of objects (Links) [ items ] |
{- "id": "kjpdr4jq",
- "names": {
- "international": "chewdiggy",
- "japanese": null
}, - "name-style": {
- "style": "solid",
- "color": {
- "light": "#249BCE",
- "dark": "#44BBEE"
}
}, - "role": "user",
- "signup": "2014-10-02T12:34:23Z",
- "location": {
- "country": {
- "code": "GB",
- "names": {
- "international": "United Kingdom",
- "japanese": "イギリス"
}
}, - "region": {
- "code": "ENGLAND",
- "names": {
- "international": "England",
- "japanese": "イングランド"
}
}
}, - "links": [
]
}
{- "data": {
- "id": "kjpdr4jq",
- "names": {
- "international": "chewdiggy",
- "japanese": null
}, - "name-style": {
- "style": "solid",
- "color": {
- "light": "#249BCE",
- "dark": "#44BBEE"
}
}, - "role": "user",
- "signup": "2014-10-02T12:34:23Z",
- "location": {
- "country": {
- "code": "GB",
- "names": {
- "international": "United Kingdom",
- "japanese": "イギリス"
}
}, - "region": {
- "code": "ENGLAND",
- "names": {
- "international": "England",
- "japanese": "イングランド"
}
}
}, - "links": [
]
}
}
Publishers are companies that publish (games)(#tag/games), for example Capcom, SEGA, Midway Games etc.
id required | string |
name required | string |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "1z6qgr9p",
- "name": "Codemasters",
- "links": [
]
}
offset | number >= 0 Advance to the next set of elements | ||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||
orderby | string Default: "name" Value: "name"
|
{- "data": [
- {
- "id": "1z6qgr9p",
- "name": "Codemasters",
- "links": [
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
Regions represent the different distribution zones in which (games)(#tag/games) are published, for example the US, Europe or Japan.
id required | string |
name required | string |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "pr184lqn",
- "name": "USA / NTSC",
- "links": [
]
}
offset | number >= 0 Advance to the next set of elements | ||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||
orderby | string Default: "name" Value: "name"
|
{- "data": [
- {
- "id": "pr184lqn",
- "name": "USA / NTSC",
- "links": [
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
id required | string The id or username of a user |
{- "data": {
- "id": "kjpdr4jq",
- "names": {
- "international": "chewdiggy",
- "japanese": null
}, - "name-style": {
- "style": "solid",
- "color": {
- "light": "#249BCE",
- "dark": "#44BBEE"
}
}, - "role": "user",
- "signup": "2014-10-02T12:34:23Z",
- "location": {
- "country": {
- "code": "GB",
- "names": {
- "international": "United Kingdom",
- "japanese": "イギリス"
}
}, - "region": {
- "code": "ENGLAND",
- "names": {
- "international": "England",
- "japanese": "イングランド"
}
}
}, - "links": [
]
}
}
Runs are the meat of our business at speedrun.com. A run is a finished attempt to play a game, adhering to that game's ruleset. Invalid attempts (use of cheats etc) or obsolete runs (the ones superseded by a better time by the same player(s) in the same ruleset) still count as runs and are available via API.
id required | string |
weblink required | string <uri> |
required | string or object |
required | null or string or object |
required | string or object |
required | null or object |
comment required | string |
required | object (RunStatus) |
required | Array of objects or object |
required | string or null |
required | string or null |
required | object (Time) |
required | object |
required | null or object |
required | object (VariableMapping) Values is a mapping from variables to values |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "90y6pm7e",
- "game": "29d30dlp",
- "level": null,
- "category": "nxd1rk8q",
- "videos": {
- "text": "Part 1: http://youtube.com/videoidhere -- HYPE!!",
}, - "comment": "Lost 35 seconds on bridge swap, plus a bunch of time elsewhere. Part 2 is https://youtube.com/anothervideo",
- "status": {
- "status": "verified",
- "examiner": "61xymxr9",
- "verify-date": "2015-05-23T16:12:32Z"
}, - "players": [
], - "date": "2014-06-01",
- "submitted": null,
- "times": {
- "primary": "PT31M22S",
- "primary_t": 1882,
- "realtime": "PT31M22S",
- "realtime_t": 1882,
- "realtime_noloads": "PT41M26S",
- "realtime_noloads_t": 2486,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "rdjq4vwe",
- "emulated": false,
- "region": null
}, - "values": {
- "wvn9wp51": "ezj43ozx"
}, - "links": [
]
}
embed | string Enum: "game" "category" "level" "players" "region" "platform" Embed additional resources into the response. See embedding for more info. | ||||||||||||||||||||||
offset | number >= 0 Advance to the next set of elements | ||||||||||||||||||||||
max | number [ 1 .. 200 ] The maximum number of elements to return | ||||||||||||||||||||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||||||||||||||||||||
orderby | string Default: "game" Enum: "game" "category" "level" "platform" "region" "emulated" "date" "submitted" "status" "verify-date"
| ||||||||||||||||||||||
user | string User ID; when given, only returns runs played by that user | ||||||||||||||||||||||
guest | string When given, only returns runs done by that guest | ||||||||||||||||||||||
examiner | string User ID; when given, only returns runs examined by that user | ||||||||||||||||||||||
game | string Game ID; when given, restricts to that game | ||||||||||||||||||||||
level | string Level ID; when given, restricts to that level | ||||||||||||||||||||||
category | string Category ID; when given, restricts to that category | ||||||||||||||||||||||
platform | string Platform ID; when given, restricts to that platform | ||||||||||||||||||||||
region | string Region ID; when given, restricts to that region | ||||||||||||||||||||||
emulated | boolean When 1, yes or true, only games run on emulator will be returned | ||||||||||||||||||||||
status | string Filters by run status; new, verified and rejected are possible values for this parameter |
{- "data": [
- {
- "id": "90y6pm7e",
- "game": "29d30dlp",
- "level": null,
- "category": "nxd1rk8q",
- "videos": {
- "text": "Part 1: http://youtube.com/videoidhere -- HYPE!!",
}, - "comment": "Lost 35 seconds on bridge swap, plus a bunch of time elsewhere. Part 2 is https://youtube.com/anothervideo",
- "status": {
- "status": "verified",
- "examiner": "61xymxr9",
- "verify-date": "2015-05-23T16:12:32Z"
}, - "players": [
], - "date": "2014-06-01",
- "submitted": null,
- "times": {
- "primary": "PT31M22S",
- "primary_t": 1882,
- "realtime": "PT31M22S",
- "realtime_t": 1882,
- "realtime_noloads": "PT41M26S",
- "realtime_noloads_t": 2486,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "rdjq4vwe",
- "emulated": false,
- "region": null
}, - "values": {
- "wvn9wp51": "ezj43ozx"
}, - "links": [
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
category required | string (Encoded-id) <= 50 characters ^[a-z0-9]+$ |
level | string (Encoded-id) <= 50 characters ^[a-z0-9]+$ |
date | string <date> |
region | string (Encoded-id) <= 50 characters ^[a-z0-9]+$ |
platform required | string (Encoded-id) <= 50 characters ^[a-z0-9]+$ |
verified | boolean Default: false |
required | object non-empty |
Array of objects or objects (Run-Submit-Player-List) non-empty | |
emulated | boolean Default: false |
video | string <= 255 characters |
comment | string <= 2000 characters |
splitsio | string <= 50 characters |
object |
{- "run": {
- "category": "<category ID>",
- "level": "<level ID>",
- "date": "YYYY-MM-DD",
- "region": "<region ID>",
- "platform": "<platform ID>",
- "verified": false,
- "times": {
- "realtime": 1234.56,
- "realtime_noloads": 1200.1,
- "ingame": 1150
}, - "players": [
- {
- "rel": "user",
- "id": "<user ID>"
}, - {
- "rel": "guest",
- "name": "unregistered username"
}
], - "emulated": false,
- "comment": "Most awesome run ever!",
- "splitsio": "6vr",
- "variables": {
- "<variable ID>": {
- "type": "user-defined",
- "value": "my value"
}, - "<variable ID 1>": {
- "type": "pre-defined",
- "value": "<value ID>"
}
}
}
}
{- "data": {
- "id": "90y6pm7e",
- "game": "29d30dlp",
- "level": null,
- "category": "nxd1rk8q",
- "videos": {
- "text": "Part 1: http://youtube.com/videoidhere -- HYPE!!",
}, - "comment": "Lost 35 seconds on bridge swap, plus a bunch of time elsewhere. Part 2 is https://youtube.com/anothervideo",
- "status": {
- "status": "verified",
- "examiner": "61xymxr9",
- "verify-date": "2015-05-23T16:12:32Z"
}, - "players": [
], - "date": "2014-06-01",
- "submitted": null,
- "times": {
- "primary": "PT31M22S",
- "primary_t": 1882,
- "realtime": "PT31M22S",
- "realtime_t": 1882,
- "realtime_noloads": "PT41M26S",
- "realtime_noloads_t": 2486,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "rdjq4vwe",
- "emulated": false,
- "region": null
}, - "values": {
- "wvn9wp51": "ezj43ozx"
}, - "links": [
]
}
}
id required | string The id of a run |
embed | string Enum: "game" "category" "level" "players" "region" "platform" Embed additional resources into the response. See embedding for more info. |
{- "data": {
- "id": "90y6pm7e",
- "game": "29d30dlp",
- "level": null,
- "category": "nxd1rk8q",
- "videos": {
- "text": "Part 1: http://youtube.com/videoidhere -- HYPE!!",
}, - "comment": "Lost 35 seconds on bridge swap, plus a bunch of time elsewhere. Part 2 is https://youtube.com/anothervideo",
- "status": {
- "status": "verified",
- "examiner": "61xymxr9",
- "verify-date": "2015-05-23T16:12:32Z"
}, - "players": [
], - "date": "2014-06-01",
- "submitted": null,
- "times": {
- "primary": "PT31M22S",
- "primary_t": 1882,
- "realtime": "PT31M22S",
- "realtime_t": 1882,
- "realtime_noloads": "PT41M26S",
- "realtime_noloads_t": 2486,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "rdjq4vwe",
- "emulated": false,
- "region": null
}, - "values": {
- "wvn9wp51": "ezj43ozx"
}, - "links": [
]
}
}
This method allows an authenticated user to delete a run. Regular users can only delete their own runs, whereas [global] mods can delete runs by other users as well.
id required | string The id of a run |
{- "data": {
- "id": "90y6pm7e",
- "game": "29d30dlp",
- "level": null,
- "category": "nxd1rk8q",
- "videos": {
- "text": "Part 1: http://youtube.com/videoidhere -- HYPE!!",
}, - "comment": "Lost 35 seconds on bridge swap, plus a bunch of time elsewhere. Part 2 is https://youtube.com/anothervideo",
- "status": {
- "status": "verified",
- "examiner": "61xymxr9",
- "verify-date": "2015-05-23T16:12:32Z"
}, - "players": [
], - "date": "2014-06-01",
- "submitted": null,
- "times": {
- "primary": "PT31M22S",
- "primary_t": 1882,
- "realtime": "PT31M22S",
- "realtime_t": 1882,
- "realtime_noloads": "PT41M26S",
- "realtime_noloads_t": 2486,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "rdjq4vwe",
- "emulated": false,
- "region": null
}, - "values": {
- "wvn9wp51": "ezj43ozx"
}, - "links": [
]
}
}
By PUTing to this endpoint, a user with sufficient permissions (i.e. a global moderator or a game moderator) can change the verification status of the run identified by its id.
id required | string The id of a run |
object or object |
{- "status": {
- "status": "verified"
}
}
{ }
By PUTing to this endpoint, a user with sufficient permissions (i.e. a global moderator or a game moderator) can change list of players that participated in a run.
id required | string The id of a run |
rel required | string Value: "user" |
id required | string (Encoded-id) <= 50 characters ^[a-z0-9]+$ |
[- {
- "rel": "user",
- "id": "string"
}
]
{- "data": {
- "id": "90y6pm7e",
- "game": "29d30dlp",
- "level": null,
- "category": "nxd1rk8q",
- "videos": {
- "text": "Part 1: http://youtube.com/videoidhere -- HYPE!!",
}, - "comment": "Lost 35 seconds on bridge swap, plus a bunch of time elsewhere. Part 2 is https://youtube.com/anothervideo",
- "status": {
- "status": "verified",
- "examiner": "61xymxr9",
- "verify-date": "2015-05-23T16:12:32Z"
}, - "players": [
], - "date": "2014-06-01",
- "submitted": null,
- "times": {
- "primary": "PT31M22S",
- "primary_t": 1882,
- "realtime": "PT31M22S",
- "realtime_t": 1882,
- "realtime_noloads": "PT41M26S",
- "realtime_noloads_t": 2486,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "rdjq4vwe",
- "emulated": false,
- "region": null
}, - "values": {
- "wvn9wp51": "ezj43ozx"
}, - "links": [
]
}
}
Series are collections of games that have been released in context to each other, for example the "GTA" series contains all the games of this franchise. As a series is most often formed after a number of games have been published, many games do not belong to a specific series and are therefore categorized in the "Other" series. As time progresses, games can be moved in their own series, so be prepared for the series-game relationship to change.
id required | string |
required | object (GameNames) |
abbreviation required | string |
weblink required | string <uri> |
required | Moderators (object) or object |
required | string or null |
required | object (Asset) |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "1kgr75w4",
- "names": {
- "international": "Grand Theft Auto",
- "japanese": ""
}, - "abbreviation": "gta",
- "moderators": {
- "wzx7q875": "moderator",
- "zzb12med": "super-moderator"
}, - "created": "2014-12-07T12:50:20Z",
- "assets": {
- "cover-tiny": {
- "width": 32,
- "height": 45
}, - "cover-small": {
- "width": 64,
- "height": 90
}, - "cover-medium": {
- "width": 128,
- "height": 180
}, - "cover-large": {
- "width": 256,
- "height": 360
}, - "trophy-1st": {
- "width": 16,
- "height": 16
}, - "trophy-2nd": {
- "width": 16,
- "height": 16
}, - "trophy-3rd": {
- "width": 16,
- "height": 16
}, - "trophy-4th": null,
- "background": {
- "width": 151,
- "height": 195
}, - "foreground": null
}, - "links": [
]
}
embed | Array of strings Items Value: "moderators" Embed additional resources into the response. See embedding for more info. | ||||||||||
name | string when given, performs a fuzzy search across series names and abbreviations | ||||||||||
abbreviation | string When given, performs an exact-match search for this abbreviation | ||||||||||
moderator | string Moderator ID; when given, only series moderated by that user will be returned | ||||||||||
orderby | string Default: "name.int" Enum: "name.int" "name.jap" "abbreviation" "created"
| ||||||||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||||||||
offset | number >= 0 Advance to the next set of elements | ||||||||||
max | number [ 1 .. 200 ] The maximum number of elements to return |
{- "data": [
- {
- "id": "1kgr75w4",
- "names": {
- "international": "Grand Theft Auto",
- "japanese": ""
}, - "abbreviation": "gta",
- "moderators": {
- "wzx7q875": "moderator",
- "zzb12med": "super-moderator"
}, - "created": "2014-12-07T12:50:20Z",
- "assets": {
- "cover-tiny": {
- "width": 32,
- "height": 45
}, - "cover-small": {
- "width": 64,
- "height": 90
}, - "cover-medium": {
- "width": 128,
- "height": 180
}, - "cover-large": {
- "width": 256,
- "height": 360
}, - "trophy-1st": {
- "width": 16,
- "height": 16
}, - "trophy-2nd": {
- "width": 16,
- "height": 16
}, - "trophy-3rd": {
- "width": 16,
- "height": 16
}, - "trophy-4th": null,
- "background": {
- "width": 151,
- "height": 195
}, - "foreground": null
}, - "links": [
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
id required | string The id or abbreviation of a series |
{- "data": {
- "id": "1kgr75w4",
- "names": {
- "international": "Grand Theft Auto",
- "japanese": ""
}, - "abbreviation": "gta",
- "moderators": {
- "wzx7q875": "moderator",
- "zzb12med": "super-moderator"
}, - "created": "2014-12-07T12:50:20Z",
- "assets": {
- "cover-tiny": {
- "width": 32,
- "height": 45
}, - "cover-small": {
- "width": 64,
- "height": 90
}, - "cover-medium": {
- "width": 128,
- "height": 180
}, - "cover-large": {
- "width": 256,
- "height": 360
}, - "trophy-1st": {
- "width": 16,
- "height": 16
}, - "trophy-2nd": {
- "width": 16,
- "height": 16
}, - "trophy-3rd": {
- "width": 16,
- "height": 16
}, - "trophy-4th": null,
- "background": {
- "width": 151,
- "height": 195
}, - "foreground": null
}, - "links": [
]
}
}
id required | string The id or abbreviation of a series |
embed | Array of strings Items Enum: "levels" "categories" "moderators" "gametypes" "platforms" "regions" "genres" "engines" "developers" "publishers" "variables" Embed additional resources into the response. See embedding for more info. |
offset | number >= 0 Advance to the next set of elements |
max | number [ 1 .. 200 ] The maximum number of elements to return |
direction | string Enum: "asc" "desc" The direction to sort the results |
platform | string Platform ID; when given, restricts to that platform |
region | string Region ID; when given, restricts to that region |
name | string When given, performs a fuzzy search across game names and abbreviations |
abbreviation | string When given, performs an exact-match search for this abbreviation |
released | number When given, restricts to games released in that year |
gametype | string Game type ID; when given, restricts to that game type |
genre | string Genre ID; when given, restricts to that genre |
engine | string Engine ID; when given, restricts to that engine |
developer | string Developer ID; when given, restricts to that developer |
publisher | string Publisher ID; when given, restricts to that publisher |
moderator | string Moderator ID; when given, only games moderated by that user will be returned |
romhack | boolean Deprecated Legacy parameter, do not use this in new code; whether or not to include games with game types (if this parameter is not set, game types are included; if it is set to a true value, only games with game types will be returned, otherwise only games without game types are returned) |
_bulk | boolean Enable bulk access |
{- "data": [
- {
- "id": "1kgr75w4",
- "names": {
- "international": "Grand Theft Auto",
- "japanese": ""
}, - "abbreviation": "gta",
- "moderators": {
- "wzx7q875": "moderator",
- "zzb12med": "super-moderator"
}, - "created": "2014-12-07T12:50:20Z",
- "assets": {
- "cover-tiny": {
- "width": 32,
- "height": 45
}, - "cover-small": {
- "width": 64,
- "height": 90
}, - "cover-medium": {
- "width": 128,
- "height": 180
}, - "cover-large": {
- "width": 256,
- "height": 360
}, - "trophy-1st": {
- "width": 16,
- "height": 16
}, - "trophy-2nd": {
- "width": 16,
- "height": 16
}, - "trophy-3rd": {
- "width": 16,
- "height": 16
}, - "trophy-4th": null,
- "background": {
- "width": 151,
- "height": 195
}, - "foreground": null
}, - "links": [
]
}
]
}
Users are the individuals who have registered an account on speedrun.com. Users submit (their) runs and moderate games, besides other things that are not covered by this API (like writing posts in the forums).
The API only returns public user information, so things like the e-mail address, site settings etc. are not accessible.
id required | string |
required | object (BaseName) |
weblink required | string <uri> |
required | object |
role required | string Enum: "banned" "user" "trusted" "moderator" "admin" "programmer" |
required | null or string |
required | null or object |
required | null or object (UserSocial) |
required | null or object (UserSocial) |
required | null or object (UserSocial) |
required | null or object (UserSocial) |
required | null or object (UserSocial) |
required | Array of objects (Links) [ items ] |
{- "id": "kjpdr4jq",
- "names": {
- "international": "chewdiggy",
- "japanese": null
}, - "name-style": {
- "style": "solid",
- "color": {
- "light": "#249BCE",
- "dark": "#44BBEE"
}
}, - "role": "user",
- "signup": "2014-10-02T12:34:23Z",
- "location": {
- "country": {
- "code": "GB",
- "names": {
- "international": "United Kingdom",
- "japanese": "イギリス"
}
}, - "region": {
- "code": "ENGLAND",
- "names": {
- "international": "England",
- "japanese": "イングランド"
}
}
}, - "links": [
]
}
lookup | string when given, searches the value (case-insensitive exact-string match) across user names, URLs and social profiles; all other query string filters are disabled when this is given | ||||||||||
name | string only returns users whose name/URL contains the given value; the comparision is case-insensitive | ||||||||||
twitch | string searches for Twitch usernames | ||||||||||
hitbox | string searches for Hitbox usernames | ||||||||||
string searches for Twitter usernames | |||||||||||
speedrunslive | string searches for SpeedRunsLive usernames | ||||||||||
orderby | string Default: "name.int" Enum: "name.int" "name.jap" "signup" "role"
| ||||||||||
direction | string Enum: "asc" "desc" The direction to sort the results | ||||||||||
offset | number >= 0 Advance to the next set of elements | ||||||||||
max | number [ 1 .. 200 ] The maximum number of elements to return |
{- "data": [
- {
- "id": "kjpdr4jq",
- "names": {
- "international": "chewdiggy",
- "japanese": null
}, - "name-style": {
- "style": "solid",
- "color": {
- "light": "#249BCE",
- "dark": "#44BBEE"
}
}, - "role": "user",
- "signup": "2014-10-02T12:34:23Z",
- "location": {
- "country": {
- "code": "GB",
- "names": {
- "international": "United Kingdom",
- "japanese": "イギリス"
}
}, - "region": {
- "code": "ENGLAND",
- "names": {
- "international": "England",
- "japanese": "イングランド"
}
}
}, - "links": [
]
}
], - "pagination": {
- "offset": 0,
- "max": 0,
- "size": 0,
}
}
id required | string The id or username of a user |
top | number >= 1 When given, only PBs with a place equal or better than this value (e.g. |
series | string When given, restricts the result to games and romhacks in that series; can be either a series ID or abbreviation |
game | string When given, restricts the result to that game; can be either a game ID or abbreviation |
{- "data": [
- {
- "place": 0,
- "run": {
- "id": "90y6pm7e",
- "game": "29d30dlp",
- "level": null,
- "category": "nxd1rk8q",
- "videos": {
- "text": "Part 1: http://youtube.com/videoidhere -- HYPE!!",
}, - "comment": "Lost 35 seconds on bridge swap, plus a bunch of time elsewhere. Part 2 is https://youtube.com/anothervideo",
- "status": {
- "status": "verified",
- "examiner": "61xymxr9",
- "verify-date": "2015-05-23T16:12:32Z"
}, - "players": [
], - "date": "2014-06-01",
- "submitted": null,
- "times": {
- "primary": "PT31M22S",
- "primary_t": 1882,
- "realtime": "PT31M22S",
- "realtime_t": 1882,
- "realtime_noloads": "PT41M26S",
- "realtime_noloads_t": 2486,
- "ingame": null,
- "ingame_t": 0
}, - "system": {
- "platform": "rdjq4vwe",
- "emulated": false,
- "region": null
}, - "values": {
- "wvn9wp51": "ezj43ozx"
}, - "links": [
]
}, - "game": {
- "id": "1kgr75w4",
- "names": {
- "international": "Super Mario Sunshine",
- "japanese": "スーパーマリオサンシャイン",
- "twitch": "Super Mario Sunshine"
}, - "abbreviation": "sms",
- "released": 2002,
- "release-date": "2002-08-26",
- "ruleset": {
- "show-milliseconds": false,
- "require-verification": true,
- "require-video": false,
- "run-times": [
- "realtime",
- "realtime_noloads"
], - "default-time": "realtime",
- "emulators-allowed": false
}, - "romhack": false,
- "gametypes": [ ],
- "platforms": [
- "039or978",
- "hdzate15"
], - "regions": [
- "hdz48alk",
- "hdz1hdwo",
- "9uhjgcgg"
], - "genres": [ ],
- "engines": [ ],
- "developers": [ ],
- "publishers": [ ],
- "moderators": {
- "wzx7q875": "moderator",
- "zzb12med": "super-moderator"
}, - "created": "2014-12-07T12:50:20Z",
- "assets": {
- "cover-tiny": {
- "width": 32,
- "height": 45
}, - "cover-small": {
- "width": 64,
- "height": 90
}, - "cover-medium": {
- "width": 128,
- "height": 180
}, - "cover-large": {
- "width": 256,
- "height": 360
}, - "trophy-1st": {
- "width": 16,
- "height": 16
}, - "trophy-2nd": {
- "width": 16,
- "height": 16
}, - "trophy-3rd": {
- "width": 16,
- "height": 16
}, - "trophy-4th": null,
- "background": {
- "width": 151,
- "height": 195
}, - "foreground": null
}, - "links": [
- {
- "rel": "leaderboard",
}
]
}, - "category": {
- "id": "jkh473tf",
- "name": "Any%",
- "type": "per-game",
- "rules": "Yada Yada Yada",
- "players": {
- "type": "exactly",
- "value": 2
}, - "miscellaneous": false,
- "links": [
]
}
}
]
}
Variables are custom criteria to distinguish between runs done in the same category or level. The speed in Mario Kart games (which can be 50cc, 100cc or 150cc) is an example for a variable that has 3 possible values.
Variables are defined per-game and can be applicable to either all runs for this game or just full-game or individual-level (IL) runs. Variables can also be restricted to a category. It is therefore important to understand how to get the correct set of variables:
GET
/game/{id}/variables to get all defined variables of that game, no matter how they are configured.GET
/categories/{id}/variables to only get the variables that apply to the given category.GET
/levels/{id}/variables to only get the variables that apply to the given level.id required | string |
name required | string |
required | null or string |
required | object |
mandatory required | boolean |
user-defined required | boolean |
obsoletes required | boolean |
required | object |
is-subcategory required | boolean |
required | Array of objects (Links) Links for traversing the API or links to external sites (e.g for help in 404 response) |
{- "id": "wzx7q875",
- "name": "cc",
- "category": null,
- "scope": {
- "type": "full-game"
}, - "mandatory": true,
- "user-defined": false,
- "obsoletes": false,
- "values": {
- "values": {
- "zdbx1h88": {
- "label": "150cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}, - "k1omees9": {
- "label": "200cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}
}, - "default": "zdbx1h88"
}, - "is-subcategory": true,
- "links": [
]
}
id required | string The id of a variable |
{- "data": {
- "id": "wzx7q875",
- "name": "cc",
- "category": null,
- "scope": {
- "type": "full-game"
}, - "mandatory": true,
- "user-defined": false,
- "obsoletes": false,
- "values": {
- "values": {
- "zdbx1h88": {
- "label": "150cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}, - "k1omees9": {
- "label": "200cc",
- "rules": "do not cheat",
- "flags": {
- "miscellaneous": false
}
}
}, - "default": "zdbx1h88"
}, - "is-subcategory": true,
- "links": [
]
}
}