{"openapi":"3.1.0","info":{"title":"Loadout API","version":"1.0.0","description":"Esports teams, players and logos for mockups and prototypes. Every request needs an `X-API-Key` header. Rate limit: 60 requests per minute per key (see the `X-RateLimit-*` response headers). Imported data comes from Liquipedia under CC-BY-SA 3.0 — see each record's `attribution`."},"servers":[{"url":"/"}],"security":[{"apiKey":[]}],"paths":{"/v1/games":{"get":{"summary":"List games","tags":["Games"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Game"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/games/{game}":{"get":{"summary":"Get a game with all of its art","description":"Logos, icons, heroes (wide banners) and grids (covers) from SteamGridDB, each credited to its author.","tags":["Games"],"parameters":[{"name":"game","in":"path","required":true,"schema":{"type":"string"},"example":"cs2"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameDetail"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/games/{game}/teams":{"get":{"summary":"List a game's teams","tags":["Teams"],"parameters":[{"name":"game","in":"path","required":true,"schema":{"type":"string"},"example":"cs2"},{"name":"region","in":"query","schema":{"type":"string"},"example":"Europe"},{"name":"country","in":"query","description":"ISO 3166-1 alpha-2","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string","enum":["active","disbanded"],"default":"active"}},{"name":"q","in":"query","description":"Name search","schema":{"type":"string"}},{"name":"has_logo","in":"query","schema":{"type":"boolean"}},{"name":"sort","in":"query","description":"`rank` = top teams first (all-time prize money among active teams, unranked last); `name` = alphabetical.","schema":{"type":"string","enum":["rank","name"],"default":"rank"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"fields","in":"query","description":"Comma-separated top-level fields to return (sparse response). `id` is always included.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Team"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/teams/{id}":{"get":{"summary":"Get a team with its current roster","tags":["Teams"],"parameters":[{"name":"id","in":"path","required":true,"description":"Numeric team id, or \"{game}:{slug}\" (e.g. `cs2:team-vitality`).","schema":{"type":"string"}},{"name":"fields","in":"query","description":"Comma-separated top-level fields to return (sparse response). `id` is always included.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Team"},{"type":"object","properties":{"roster":{"type":"array","items":{"$ref":"#/components/schemas/PlayerSummary"}}}}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/teams/{id}/roster":{"get":{"summary":"Current roster with full player details","tags":["Teams"],"parameters":[{"name":"id","in":"path","required":true,"description":"Numeric team id, or \"{game}:{slug}\" (e.g. `lol:t1`).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Player"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/teams/{id}/history":{"get":{"summary":"Current and former roster memberships","tags":["Teams"],"parameters":[{"name":"id","in":"path","required":true,"description":"Numeric team id, or \"{game}:{slug}\" (e.g. `valorant:sentinels`).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Membership"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/players":{"get":{"summary":"List players","tags":["Players"],"parameters":[{"name":"game","in":"query","description":"Game slug — see GET /v1/games for the full list","schema":{"type":"string"},"example":"cs2"},{"name":"team","in":"query","description":"Numeric team id (current roster)","schema":{"type":"integer"}},{"name":"status","in":"query","schema":{"type":"string","enum":["active","inactive","retired"]}},{"name":"country","in":"query","schema":{"type":"string"}},{"name":"role","in":"query","schema":{"type":"string"},"example":"AWPer"},{"name":"q","in":"query","schema":{"type":"string"}},{"name":"has_photo","in":"query","schema":{"type":"boolean"}},{"name":"sort","in":"query","description":"`rank` = top teams first (all-time prize money among active teams, unranked last); `name` = alphabetical.","schema":{"type":"string","enum":["rank","name"],"default":"rank"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"fields","in":"query","description":"Comma-separated top-level fields to return (sparse response). `id` is always included.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Player"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/players/{id}":{"get":{"summary":"Get a player with team history","tags":["Players"],"parameters":[{"name":"id","in":"path","required":true,"description":"Numeric player id, or \"{game}:{slug}\" (e.g. `cs2:zywoo`).","schema":{"type":"string"}},{"name":"fields","in":"query","description":"Comma-separated top-level fields to return (sparse response). `id` is always included.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Player"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/search":{"get":{"summary":"Search teams and players","tags":["Search"],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2}},{"name":"game","in":"query","description":"Game slug — see GET /v1/games for the full list","schema":{"type":"string"},"example":"cs2"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"teams":{"type":"array","items":{"$ref":"#/components/schemas/TeamSummary"}},"players":{"type":"array","items":{"$ref":"#/components/schemas/PlayerSummary"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/random/teams":{"get":{"summary":"Random active teams","description":"Great for filling prototypes. Only teams with a logo unless `has_logo=false`.","tags":["Random"],"parameters":[{"name":"game","in":"query","description":"Game slug — see GET /v1/games for the full list","schema":{"type":"string"},"example":"cs2"},{"name":"region","in":"query","schema":{"type":"string"}},{"name":"count","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":5}},{"name":"has_logo","in":"query","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Team"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/random/players":{"get":{"summary":"Random active players","description":"Only players with a photo unless `has_photo=false`.","tags":["Random"],"parameters":[{"name":"game","in":"query","description":"Game slug — see GET /v1/games for the full list","schema":{"type":"string"},"example":"cs2"},{"name":"role","in":"query","schema":{"type":"string"}},{"name":"count","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":5}},{"name":"has_photo","in":"query","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Player"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}}},"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key"}},"responses":{"Unauthorized":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"perPage":{"type":"integer"},"total":{"type":"integer"},"totalPages":{"type":"integer"}}},"Game":{"type":"object","properties":{"slug":{"type":"string","example":"cs2"},"name":{"type":"string"},"shortName":{"type":"string"},"teamCount":{"type":"integer"},"playerCount":{"type":"integer"},"art":{"$ref":"#/components/schemas/GameArt"}}},"GameArt":{"type":"object","description":"The best image of each kind (null when none)","properties":{"logo":{"oneOf":[{"$ref":"#/components/schemas/Asset"},{"type":"null"}]},"icon":{"oneOf":[{"$ref":"#/components/schemas/Asset"},{"type":"null"}]},"hero":{"oneOf":[{"$ref":"#/components/schemas/Asset"},{"type":"null"}]},"grid":{"oneOf":[{"$ref":"#/components/schemas/Asset"},{"type":"null"}]}}},"GameDetail":{"allOf":[{"$ref":"#/components/schemas/Game"},{"type":"object","properties":{"logos":{"type":"array","items":{"$ref":"#/components/schemas/Asset"}},"icons":{"type":"array","items":{"$ref":"#/components/schemas/Asset"}},"heroes":{"type":"array","items":{"$ref":"#/components/schemas/Asset"}},"grids":{"type":"array","items":{"$ref":"#/components/schemas/Asset"}}}}]},"Asset":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["logo","photo","icon","hero","grid"]},"style":{"type":["string","null"],"description":"Source style tags, e.g. official, white, alternate"},"variant":{"type":"string","enum":["default","light","dark","monochrome","icon","icon_dark"],"description":"`icon`/`icon_dark` are the compact marks used in match lists; the others are full logos"},"format":{"type":"string","example":"svg"},"width":{"type":"integer"},"height":{"type":"integer"},"url":{"type":"string","description":"Original file"},"png":{"type":"object","description":"PNG renditions keyed by size (64, 128, 256, 512, 1024), aspect ratio kept","additionalProperties":{"type":"string"}},"square":{"type":"object","description":"1:1 PNGs keyed by size — logos centered on transparent padding, photos cropped around the face","additionalProperties":{"type":"string"}}}},"Attribution":{"type":["object","null"],"properties":{"source":{"type":"string"},"url":{"type":"string"},"license":{"type":"string"}}},"TeamSummary":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"},"game":{"type":"string"},"name":{"type":"string"},"shortName":{"type":["string","null"]},"region":{"type":["string","null"]},"country":{"type":["string","null"],"description":"ISO 3166-1 alpha-2"},"status":{"type":"string","enum":["active","disbanded"]},"rank":{"type":["integer","null"],"description":"1 = top active team in its game by all-time prize money; null = unranked"},"prizeMoney":{"type":["object","null"],"description":"Prize money behind the rank; `year` is null for all-time totals","properties":{"year":{"type":["integer","null"]},"usd":{"type":"integer"}}},"logo":{"oneOf":[{"$ref":"#/components/schemas/Asset"},{"type":"null"}]},"icon":{"oneOf":[{"$ref":"#/components/schemas/Asset"},{"type":"null"}],"description":"Compact icon (match lists), if the team has one"}}},"Team":{"allOf":[{"$ref":"#/components/schemas/TeamSummary"},{"type":"object","properties":{"colors":{"type":"object","description":"Hex colors set by the admin, or else found in the team's logo (fromLogo: true). Black and white only count when the logo has no other colors.","properties":{"primary":{"type":["string","null"],"examples":["#FEEF00"]},"secondary":{"type":["string","null"],"examples":["#010101"]},"fromLogo":{"type":"boolean"}}},"foundedOn":{"type":["string","null"],"format":"date"},"website":{"type":["string","null"]},"socials":{"type":"object","additionalProperties":{"type":"string"}},"logos":{"type":"array","items":{"$ref":"#/components/schemas/Asset"}},"attribution":{"$ref":"#/components/schemas/Attribution"},"updatedAt":{"type":"string","format":"date-time"}}}]},"PlayerSummary":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"},"game":{"type":"string"},"nickname":{"type":"string"},"realName":{"type":["string","null"]},"country":{"type":["string","null"]},"role":{"type":["string","null"]},"photo":{"oneOf":[{"$ref":"#/components/schemas/Asset"},{"type":"null"}]}}},"Player":{"allOf":[{"$ref":"#/components/schemas/PlayerSummary"},{"type":"object","properties":{"birthDate":{"type":["string","null"],"format":"date"},"age":{"type":["integer","null"]},"status":{"type":"string","enum":["active","inactive","retired"]},"team":{"type":["object","null"],"properties":{"id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"role":{"type":["string","null"]},"since":{"type":["string","null"],"format":"date"}}},"socials":{"type":"object","additionalProperties":{"type":"string"}},"photos":{"type":"array","items":{"$ref":"#/components/schemas/Asset"}},"attribution":{"$ref":"#/components/schemas/Attribution"},"updatedAt":{"type":"string","format":"date-time"}}}]},"Membership":{"type":"object","properties":{"player":{"$ref":"#/components/schemas/PlayerSummary"},"role":{"type":["string","null"]},"startedOn":{"type":["string","null"],"format":"date"},"endedOn":{"type":["string","null"],"format":"date"},"current":{"type":"boolean"}}}}}}