{"openapi":"3.1.0","info":{"title":"MLBB Public Data API","summary":"Public API for Mobile Legends: Bang Bang providing hero data, analytics, academy resources, user endpoints, and utility tools.","description":"MLBB Public Data API is a comprehensive public API for Mobile Legends: Bang Bang, built for developers, analysts, and fans who need structured and reliable game data. It provides access to hero information including listings, rankings, positions, detailed statistics, performance trends, skill combos, counters, compatibility, and hero relationships. In addition, the API includes academy resources such as roles, equipment, emblems, spells, builds, lane distribution, win rate timelines, and performance ratings to support deeper analysis and game understanding. User-related endpoints are available for authentication, profile data, match history, and player statistics, while utility tools such as win rate calculators and IP lookup enhance integration capabilities. The API is designed with a consistent and RESTful structure, supports flexible hero identifiers using either ID or name, and delivers standardized responses optimized for seamless integration into applications, dashboards, and analytics systems.","contact":{"name":"RoneAI","url":"https://rone.dev/#Contact","email":"founder@rone.dev"},"license":{"name":"BSD 3-Clause License","url":"https://github.com/ridwaanhall/api-mobilelegends/blob/main/LICENSE"},"version":"4.0.8"},"paths":{"/api/heroes":{"get":{"tags":["mlbb"],"summary":"List Heroes","description":"Retrieve a paginated list of all heroes with basic information. Supports query parameters for pagination (`size`, `index`), sorting (`order`), and localization (`lang`).\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **order**: Sort order for results. Allowed values: `asc`, `desc`.\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero records:\n- **records**: Array of hero entries, each containing:\n    - **data**:\n        - **hero**:\n            - **data**:\n                - **head**: Hero head image URL.\n                - **name**: Hero name.\n                - **smallmap**: Hero smallmap image URL.\n        - **hero_id**: Unique hero identifier.\n        - **relation**:\n            - **assist**:\n                - **target_hero_id**: Array of hero IDs assisted.\n            - **strong**:\n                - **target_hero_id**: Array of hero IDs this hero is strong against.\n            - **weak**:\n                - **target_hero_id**: Array of hero IDs this hero is weak against.\n\nThis endpoint is useful for:\n- Displaying hero collections.\n- Browsing hero details.\n- Analyzing hero relationships (assist, strong, weak).","operationId":"api_mlbb_hero_list_api_heroes_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"title":"Sort Order","description":"Sort order by hero ID.","default":"desc"},"description":"Sort order by hero ID."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlbbCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"data":{"hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage_2_1_42/100_df7603c292198bf4aa7b551d401ea5c1.png","name":"Marcel","smallmap":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage_2_1_42/100_82e5c2646276cd907f69cc800057c737.png"}},"hero_id":132,"relation":{"assist":{"target_hero_id":[60,121]},"strong":{"target_hero_id":[18,38]},"weak":{"target_hero_id":[84,83]}}}}],"total":132}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/heroes/rank":{"get":{"tags":["mlbb"],"summary":"Hero Rank Statistics","description":"Fetch rank statistics for heroes over a specified time window. Supports query parameters for filtering by past days, rank tier, sorting, pagination, and localization.\n\nQuery parameters:\n- **days**: Past day window. Allowed values: `1`, `3`, `7`, `15`, `30`.\n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **sort_field**: Sort field. Allowed values: `pick_rate`, `ban_rate`, `win_rate`.\n- **sort_order**: Sort order for results. Allowed values: `asc`, `desc`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero rank statistics:\n- **records**: Array of hero entries, each containing:\n    - **data**:\n        - **main_hero**:\n            - **data**:\n                - **head**: Hero head image URL.\n                - **name**: Hero name.\n        - **main_heroid**: Unique hero identifier.\n        - **main_hero_channel**:\n            - **id**: Channel ID reference.\n        - **main_hero_appearance_rate**: Hero pick rate (appearance frequency).\n        - **main_hero_ban_rate**: Hero ban rate.\n        - **main_hero_win_rate**: Hero win rate.\n        - **sub_hero**: Array of related sub-heroes, each containing:\n            - **hero**:\n                - **data**:\n                    - **head**: Sub-hero head image URL.\n            - **heroid**: Sub-hero ID.\n            - **hero_channel**:\n                - **id**: Channel ID reference.\n            - **increase_win_rate**: Impact of sub-hero on win rate.\n\nThis endpoint is useful for:\n- Analyzing hero performance trends across different ranks.\n- Tracking pick, ban, and win rates over time.\n- Understanding synergies and counters via sub-hero relationships.","operationId":"api_mlbb_hero_rank_api_heroes_rank_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"enum":["1","3","7","15","30"],"type":"string","title":"Past Days","description":"Past day window for rank statistics.","default":"1"},"description":"Past day window for rank statistics."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"sort_field","in":"query","required":false,"schema":{"enum":["pick_rate","ban_rate","win_rate"],"type":"string","title":"Sort Field","description":"Field to sort hero statistics.","default":"win_rate"},"description":"Field to sort hero statistics."},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"title":"Sort Order","description":"Sort order by field.","default":"desc"},"description":"Sort order by field."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlbbCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"data":{"main_hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage_2_1_40/100_8143d7bbd4318d7c699908e808de885e.png","name":"Sora"}},"main_hero_appearance_rate":0.014228,"main_hero_ban_rate":0.834702,"main_hero_channel":{"id":3245715},"main_hero_win_rate":0.506002,"main_heroid":131,"sub_hero":[{"hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_6495be044c2d28106e200f6918391d54.png"}},"hero_channel":{"id":2678835},"heroid":99,"increase_win_rate":0.061114}]}}],"total":132}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/heroes/positions":{"get":{"tags":["mlbb"],"summary":"Hero Position Filters","description":"Filter heroes by their position on the map using role and lane criteria. Supports multiple query parameters for roles and lanes, along with pagination, sorting, and localization.\n\nQuery parameters:\n- **role**: Role filter (multi allowed). Values: `tank`, `fighter`, `assassin`, `mage`, `marksman`, `support`.\n    Example: `role=tank&role=fighter`\n- **lane**: Lane filter (multi allowed). Values: `exp`, `mid`, `roam`, `jungle`, `gold`.\n    Example: `lane=exp&lane=mid`\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **order**: Sort order for results. Allowed values: `asc`, `desc`.\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero position data:\n- **records**: Array of hero entries, each containing:\n    - **data**:\n        - **hero**:\n            - **data**:\n                - **name**: Hero name.\n                - **smallmap**: Hero smallmap image URL.\n                - **roadsort**: Array of lane metadata objects:\n                    - **_id**: Unique identifier.\n                    - **caption**: Lane caption (localized).\n                    - **configId**: Configuration ID.\n                    - **createdAt**: Creation timestamp.\n                    - **createdUser**: Creator username.\n                    - **data**:\n                        - **_object**: Object reference ID.\n                        - **road_sort_icon**: Lane icon URL.\n                        - **road_sort_id**: Lane ID.\n                        - **road_sort_title**: Lane title (e.g., Roam).\n                    - **updatedAt**: Last update timestamp.\n                    - **updatedUser**: Last updater username.\n                - **sortid**: Array of role metadata objects:\n                    - **_id**: Unique identifier.\n                    - **caption**: Role caption (localized).\n                    - **configId**: Configuration ID.\n                    - **createdAt**: Creation timestamp.\n                    - **createdUser**: Creator username.\n                    - **data**:\n                        - **_object**: Object reference ID.\n                        - **sort_icon**: Role icon URL.\n                        - **sort_id**: Role ID.\n                        - **sort_title**: Role title (e.g., Support).\n                    - **updatedAt**: Last update timestamp.\n                    - **updatedUser**: Last updater username.\n        - **hero_id**: Unique hero identifier.\n        - **relation**:\n            - **assist**:\n                - **target_hero_id**: Array of hero IDs assisted.\n            - **strong**:\n                - **target_hero_id**: Array of hero IDs this hero is strong against.\n            - **weak**:\n                - **target_hero_id**: Array of hero IDs this hero is weak against.\n    - **id**: Record identifier.\n\nThis endpoint is useful for:\n- Building filtered hero lists.\n- Analyzing hero roles and lane assignments.\n- Understanding hero relationships (assist, strong, weak).","operationId":"api_mlbb_hero_position_api_heroes_positions_get","parameters":[{"name":"role","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"title":"Role","description":"Filter heroes by role.","default":["tank","fighter","assassin","mage","marksman","support"]},"description":"Filter heroes by role."},{"name":"lane","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"title":"Lane","description":"Filter heroes by lane.","default":["exp","mid","roam","jungle","gold"]},"description":"Filter heroes by lane."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"title":"Sort Order","description":"Sort order by hero ID.","default":"desc"},"description":"Sort order by hero ID."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlbbCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"data":{"hero":{"data":{"name":"Marcel","roadsort":[{"_id":"66854202aa8e7f6ec4703d8f","caption":"辅助","configId":144237,"createdAt":1720009218480,"createdUser":"nickjin","data":{"_object":2732073,"road_sort_icon":"https://akmweb.youngjoygame.com/web/gms/image/a3dbb075b4d8186c29f02f7d47da236a.svg","road_sort_id":"3","road_sort_title":"Roam"},"id":2732083,"linkId":[2732073],"sort":0,"updatedAt":1723022949109,"updatedUser":"nickjin"},""],"smallmap":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage_2_1_42/100_82e5c2646276cd907f69cc800057c737.png","sortid":[{"_id":"6698c06a613093b976b4a97c","caption":"6辅助","configId":144237,"createdAt":1721286762785,"createdUser":"nickjin","data":{"_object":2740651,"sort_icon":"https://akmweb.youngjoygame.com/web/gms/image/1e4609b25a4cd63ee5a13015d4058159.png","sort_id":"6","sort_title":"support"},"id":2740666,"linkId":[2740651],"sort":0,"updatedAt":1723023113317,"updatedUser":"nickjin"},""]}},"hero_id":132,"relation":{"assist":{"target_hero_id":[60,121]},"strong":{"target_hero_id":[18,38]},"weak":{"target_hero_id":[84,83]}}},"id":3280483}],"total":132}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/heroes/{hero_identifier}":{"get":{"tags":["mlbb"],"summary":"Hero Detail","description":"Get detailed information for a specific hero by ID or name. Supports query parameters for pagination and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero details:\n- **records**: Array of hero entries, each containing:\n    - **_id**: Unique record identifier.\n    - **caption**: Caption or localized label.\n    - **configId**: Configuration ID.\n    - **createdAt**: Creation timestamp.\n    - **createdUser**: Creator username.\n    - **data**:\n        - **head**: Hero portrait image URL.\n        - **head_big**: Larger hero portrait image URL.\n        - **hero**:\n            - **data**:\n                - **heroid**: Hero ID.\n                - **name**: Hero name.\n                - **story**: Hero lore or background story.\n                - **painting**: Hero splash art image URL.\n                - **speciality**: Array of hero specialties (e.g., Support, Crowd Control).\n                - **abilityshow**: Array of ability stats.\n                - **difficulty**: Difficulty rating.\n                - **heroskilllist**: Array of skill sets, each containing:\n                    - **skilllist**: Array of skills:\n                        - **skillid**: Skill ID.\n                        - **skillname**: Skill name.\n                        - **skilldesc**: Skill description.\n                        - **skillicon**: Skill icon URL.\n                        - **skillcd&cost**: Cooldown and mana cost.\n                        - **skilltag**: Array of tags:\n                            - **tagid**: Tag ID.\n                            - **tagname**: Tag name (e.g., Burst, CC).\n                            - **tagrgb**: Tag color.\n                        - **skillvideo**: Skill video URL (if available).\n                - **roadsort**: Lane assignment metadata:\n                    - **road_sort_id**: Lane ID.\n                    - **road_sort_title**: Lane title (e.g., Mid Lane).\n                    - **road_sort_icon**: Lane icon URL.\n                - **sortid**: Role assignment metadata:\n                    - **sort_id**: Role ID.\n                    - **sort_title**: Role title (e.g., Mage).\n                    - **sort_icon**: Role icon URL.\n                - **smallmap**: Hero smallmap image URL.\n                - **squarehead**: Square portrait image URL.\n                - **squareheadbig**: Larger square portrait image URL.\n        - **hero_id**: Unique hero identifier.\n        - **relation**:\n            - **assist**:\n                - **desc**: Description of assist synergy.\n                - **target_hero_id**: Array of hero IDs assisted.\n                - **target_hero**: Array of assisted hero metadata (images).\n            - **strong**:\n                - **desc**: Description of heroes countered.\n                - **target_hero_id**: Array of hero IDs countered.\n                - **target_hero**: Array of countered hero metadata (images).\n            - **weak**:\n                - **desc**: Description of heroes that counter this hero.\n                - **target_hero_id**: Array of hero IDs that counter.\n                - **target_hero**: Array of counter hero metadata (images).\n        - **url**: Official lore or profile URL.\n\nThis endpoint is useful for:\n- Displaying comprehensive hero profiles.\n- Analyzing hero abilities and skill tags.\n- Understanding hero synergies and counters.\n- Linking lane and role assignments to gameplay analysis.","operationId":"api_mlbb_hero_detail_api_heroes__hero_identifier__get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlbbCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_id":"65f2e280fd1bb8e47d25e07b","caption":"096珞翊","configId":144237,"createdAt":1710416512439,"createdUser":"nickjin","data":{"_object":2667538,"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/community/100_9dc55ccd4a972b721dfb8fadfb22fa34.png","head_big":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_52c14752b29b6f9039da26a50e860c5c.jpg","hero":{"_createdAt":1724837697935,"_id":"66ceef41af5771f18c5009e1","_updatedAt":1773205501411,"data":{"abilityshow":["20","100","40","50"],"difficulty":"50","head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_103541726507f5ce102689f04fe215e8.png","heroid":96,"heroskilllist":[{"skilllist":[{"skillcd&cost":"","skilldesc":"Luo Yi's skills can create <font color=\"a6aafb\">Sigils of Yin/Yang</font> on the battlefield. Each Sigil lasts up to 6s.\nSigils of opposite attributes will trigger <font color=\"a6aafb\">Yin-Yang Reaction</font> when they are within a certain distance, dealing 300 (+25*Hero Level) <font color=\"62f8fe\">(+190% Total Magic Power)</font> <font color=\"7f62fe\">Magic Damage</font> to the marked enemies, stunning them for 0.3s, and pulling them toward each other.\nEach time Luo Yi applies a new Sigil to a marked enemy, she gains a 300 (+10*Hero Level) <font color=\"62f8fe\">(+150% Total Magic Power)</font> shield (up to 3 stacks) and 50% extra Movement Speed that decays over 2s.","skillicon":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_55ccda55cadbf28d972b7878c6ed14fe.png","skillid":9650,"skillname":"Duality","skilltag":[{"tagid":31,"tagname":"Burst","tagrgb":"199,121,85"},{"tagid":21,"tagname":"CC","tagrgb":"205,93,109"}],"skillvideo":""}],"skilllistid":"961"}],"name":"Luo Yi","painting":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_e8f1e6dd0d7864b66bda10ef65242dd6.png","recommendlevel":["3","1","2"],"recommendlevellabel":"3-1-2","recommendmasterplan":[],"roadsort":[{"_id":"66854225aa8e7f6ec4703d93","caption":"中路","configId":144237,"createdAt":1720009253985,"createdUser":"nickjin","data":{"_object":2732073,"road_sort_icon":"https://akmweb.youngjoygame.com/web/gms/image/facab1eacb218d767b5acb80304bfafd.svg","road_sort_id":"2","road_sort_title":"Mid Lane"},"id":2732084,"linkId":[2732073],"sort":0,"updatedAt":1723022943932,"updatedUser":"nickjin"},""],"roadsorticon1":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_1b414d1631fc57199315b998064c6722.png","roadsorticon2":"","roadsortlabel":["Mid Lane",""],"smallmap":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_74fe63bd31cc092aed923543a115b7bd.png","sorticon1":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_50fbe091cc66ff01cef0fa6b82872510.png","sorticon2":"","sortid":[{"_id":"6698c015613093b976b4a974","caption":"4法师","configId":144237,"createdAt":1721286677393,"createdUser":"nickjin","data":{"_object":2740651,"sort_icon":"https://akmweb.youngjoygame.com/web/gms/image/1c6985dd0caec2028ccb6d1b8ca95e0f.png","sort_id":"4","sort_title":"mage"},"id":2740663,"linkId":[2740651],"sort":0,"updatedAt":1723023128824,"updatedUser":"nickjin"},""],"sortlabel":["Mage",""],"speciality":["Support","Crowd Control"],"squarehead":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_45ed52f05d2288e0c87ca858d7f66f23.jpg","squareheadbig":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_52c14752b29b6f9039da26a50e860c5c.jpg","story":"Seeking to revive an ancient past, she is the sole being who has mastered the secrets of Yin and Yang.","tale":""},"id":100465,"sourceId":2756563},"hero_id":96,"relation":{"assist":{"desc":"Luo Yi works best with Junglers who are often looking for fights around the map, such as Aamon and Karina, because she can use her Ultimate to cut down their travel time.","target_hero":[{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_b3a7602fe7ffd1e54bf8ea79ceadfa72.png"}}],"target_hero_id":[109,8,0]},"strong":{"desc":"Luo Yi counters heroes with low mobility such as Eudora and Gord because they are easy targets for her Sigils and Yin-Yang Reactions.","target_hero":[{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage_2_1_42/100_87b2a655b254c136dce8976e21935a80.png"}}],"target_hero_id":[15,23,0,0]},"weak":{"desc":"Luo Yi is countered by Fighters or Tanks with high HP recovery like Uranus and Fredrinn because she can't deal enough damage to finish them off quickly.","target_hero":[{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_2e15a0a506aaecd9b3de40a8cc9f7ec7.png"}}],"target_hero_id":[59,117,0,0]}},"url":"https://play.mobilelegends.com/lore/hero/LuoYi"},"id":2678832,"linkId":[2667538],"sort":0,"updatedAt":1726805352355,"updatedUser":"nickjin"}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/heroes/{hero_identifier}/stats":{"get":{"tags":["mlbb"],"summary":"Hero Detail Statistics","description":"Get detailed statistics for a specific hero by ID or name. Supports query parameters for rank tier, pagination, and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero statistics:\n- **records**: Array of hero entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **main_hero**:\n            - **data**:\n                - **head**: Hero portrait image URL.\n                - **name**: Hero name.\n        - **main_heroid**: Hero ID.\n        - **main_hero_channel**:\n            - **id**: Channel ID reference.\n        - **main_hero_appearance_rate**: Hero pick rate (appearance frequency).\n        - **main_hero_ban_rate**: Hero ban rate.\n        - **main_hero_win_rate**: Hero win rate.\n        - **sub_hero**: Array of synergy heroes, each containing:\n            - **heroid**: Sub-hero ID.\n            - **hero_win_rate**: Sub-hero win rate.\n            - **hero_appearance_rate**: Sub-hero pick rate.\n            - **increase_win_rate**: Impact of sub-hero on win rate.\n            - **hero_channel**:\n                - **id**: Channel ID reference.\n            - **hero**:\n                - **data**:\n                    - **head**: Sub-hero portrait image URL.\n            - **min_win_rate6**: Win rate in matches ≤ 6 minutes, (`min_win_rate6*100`%).\n            - **min_win_rate6_8**: Win rate in matches 6-8 minutes, (`min_win_rate6_8*100`%).\n            - **min_win_rate8_10**: Win rate in matches 8-10 minutes, (`min_win_rate8_10*100`%).\n            - **min_win_rate10_12**: Win rate in matches 10-12 minutes, (`min_win_rate10_12*100`%).\n            - **min_win_rate12_14**: Win rate in matches 12-14 minutes, (`min_win_rate12_14*100`%).\n            - **min_win_rate14_16**: Win rate in matches 14-16 minutes, (`min_win_rate14_16*100`%).\n            - **min_win_rate16_18**: Win rate in matches 16-18 minutes, (`min_win_rate16_18*100`%).\n            - **min_win_rate18_20**: Win rate in matches 18-20 minutes, (`min_win_rate18_20*100`%).\n            - **min_win_rate20**: Win rate in matches ≥ 20 minutes, (`min_win_rate20*100`%).\n        - **sub_hero_last**: Array of negative synergy heroes, each containing:\n            - **heroid**: Sub-hero ID.\n            - **hero_win_rate**: Sub-hero win rate.\n            - **hero_appearance_rate**: Sub-hero pick rate.\n            - **increase_win_rate**: Negative impact on win rate.\n            - **min_win_rate6** through **min_win_rate20**: Win rate breakdown across match durations.\n\nThis endpoint is useful for:\n- Analyzing hero performance trends across different ranks.\n- Tracking pick, ban, and win rates.\n- Understanding synergy with other heroes.\n- Identifying counters and negative synergies across match durations.","operationId":"api_mlbb_hero_detail_stats_api_heroes__hero_identifier__stats_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlbbCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1724837698515,"_id":"66ceef43af5771f18c501841","_updatedAt":1774970102297,"data":{"bigrank":"101","camp_type":"1","main_hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_da894b37bfb5cadb32307f371f31918a.png","name":"Miya"}},"main_hero_appearance_rate":0.024029,"main_hero_ban_rate":0.030362,"main_hero_channel":{"id":2667597},"main_hero_win_rate":0.501098,"main_heroid":1,"match_type":"1","sub_hero":[{"hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage_1_9_642/100_c472fe0233e5ef84a3ac9ba4a229d09f.png"}},"hero_appearance_rate":0.005875,"hero_channel":{"id":2678840},"hero_index":1,"hero_win_rate":0.559063,"heroid":104,"increase_win_rate":0.023307,"min_win_rate10_12":0.597996,"min_win_rate12_14":0.587859,"min_win_rate14_16":0.588737,"min_win_rate16_18":0.586709,"min_win_rate18_20":0.588967,"min_win_rate20":0.565267,"min_win_rate6":1,"min_win_rate6_8":0.481586,"min_win_rate8_10":0.519894}],"sub_hero_last":[{"hero_appearance_rate":0.001634,"hero_index":1,"hero_win_rate":0.473376,"heroid":89,"increase_win_rate":-0.088744,"min_win_rate10_12":0.356784,"min_win_rate12_14":0.345992,"min_win_rate14_16":0.348178,"min_win_rate16_18":0.433333,"min_win_rate18_20":0.505051,"min_win_rate20":0.50289,"min_win_rate6":1,"min_win_rate6_8":0.1,"min_win_rate8_10":0.18}]},"id":103638,"sourceId":2756567}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/heroes/{hero_identifier}/skill-combos":{"get":{"tags":["mlbb"],"summary":"Hero Skill Combos","description":"Get the most effective skill combos for a specific hero by ID or name. Supports query parameters for pagination and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero skill combo details:\n- **records**: Array of combo entries, each containing:\n    - **_id**: Unique record identifier.\n    - **caption**: Caption or localized label (e.g., laning, teamfight).\n    - **configId**: Configuration ID.\n    - **createdAt**: Creation timestamp.\n    - **createdUser**: Creator username.\n    - **data**:\n        - **hero_id**: Hero ID.\n        - **title**: Combo title (e.g., 'TEAMFIGHT COMBOS').\n        - **desc**: Descriptive instructions on how to execute the combo (e.g., laning phase or teamfight scenarios).\n        - **skill_id**: Array of skills in recommended sequence, each containing:\n            - **skillid**: Skill ID.\n            - **skillicon**: Skill icon URL.\n            - **_id**, **_createdAt**, **_updatedAt**: Metadata fields.\n    - **updatedAt**: Last update timestamp.\n    - **updatedUser**: Last updater username.\n\nThis endpoint is useful for:\n- Guiding players on optimal skill usage patterns.\n- Teaching effective combos for laning and teamfight scenarios.\n- Helping maximize hero performance in different situations.","operationId":"api_mlbb_hero_skill_combo_api_heroes__hero_identifier__skill_combos_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlbbCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_id":"661fffbc17071f48448b1f76","caption":"弥亚","configId":144237,"createdAt":1713373116184,"createdUser":"rubickguo","data":{"_object":2684183,"desc":"In teamfights, use Miya's Ultimate first to conceal herself, then find an ideal position to attack the enemy and quickly stack her Passive. Utilize her 2nd Skill to immobilize the enemy and activate her 1st Skill to enhance her Basic Attacks to hit multiple targets at once.","hero_id":1,"skill_id":[{"_createdAt":1730960697288,"_id":"672c5d399d856a6db37d936a","_updatedAt":1758787887535,"data":{"skillicon":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_361546d795e6df7029a1cf1252e57ac8.png","skillid":130},"id":109690,"sourceId":2674712}],"title":"TEAMFIGHT COMBOS"},"id":2694856,"linkId":[2684183],"sort":0,"updatedAt":1713373219943,"updatedUser":"rubickguo"}],"total":2}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/heroes/{hero_identifier}/trends":{"get":{"tags":["mlbb"],"summary":"Hero Performance Trends","description":"Get rate trends for a specific hero by ID or name over a specified time window. Supports query parameters for rank tier, past days window, pagination, and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **past-days**: Rate window in days. Allowed values: `7`, `15`, `30`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero rate trend data:\n- **records**: Array of hero entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **main_heroid**: Hero ID.\n        - **bigrank**: Rank tier identifier.\n        - **camp_type**: Camp type indicator.\n        - **match_type**: Match type indicator.\n        - **win_rate**: Array of daily statistics, each containing:\n            - **date**: Date of record.\n            - **app_rate**: Appearance rate (pick frequency).\n            - **ban_rate**: Ban rate.\n            - **win_rate**: Win rate.\n\nThis endpoint is useful for:\n- Tracking hero performance trends over time.\n- Monitoring hero popularity and ban frequency.\n- Comparing win rates across different ranks and time periods.","operationId":"api_mlbb_hero_rate_api_heroes__hero_identifier__trends_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"past-days","in":"query","required":false,"schema":{"enum":["7","15","30"],"type":"string","title":"Rate Window","description":"Rate window in days.","default":"7"},"description":"Rate window in days."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlbbCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1719822297335,"_id":"668267db061f5179ffb909ac","_updatedAt":1774965307951,"data":{"bigrank":"101","camp_type":"1","main_heroid":17,"match_type":"1","win_rate":[{"app_rate":0.00695,"ban_rate":0.045781,"date":"2026-03-30","win_rate":0.439798}]},"id":158321,"sourceId":2674709}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/heroes/{hero_identifier}/relations":{"get":{"tags":["mlbb"],"summary":"Hero Relations","description":"Get information about the relations of a specific hero by ID or name. Supports query parameters for pagination and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero relation data:\n- **records**: Array of hero entries, each containing:\n    - **data**:\n        - **hero**:\n            - **data**:\n                - **name**: Hero name.\n        - **hero_id**: Unique hero identifier.\n        - **relation**:\n            - **assist**:\n                - **target_hero_id**: Array of hero IDs that synergize well.\n            - **strong**:\n                - **target_hero_id**: Array of hero IDs that are countered.\n            - **weak**:\n                - **target_hero_id**: Array of hero IDs that counter this hero.\n\nThis endpoint is useful for:\n- Understanding hero synergies (assist).\n- Identifying heroes that are countered (strong).\n- Recognizing heroes that counter the selected hero (weak).\n- Building balanced team compositions.","operationId":"api_mlbb_hero_relation_api_heroes__hero_identifier__relations_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlbbCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"data":{"hero":{"data":{"name":"Miya"}},"hero_id":1,"relation":{"assist":{"target_hero_id":[6,70,0]},"strong":{"target_hero_id":[3,15,27]},"weak":{"target_hero_id":[52,101,0]}}}}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/heroes/{hero_identifier}/counters":{"get":{"tags":["mlbb"],"summary":"Hero Counters","description":"Get information about heroes that counter a specific hero by ID or name. Supports query parameters for rank tier, pagination, and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- days: Time window for counter data. Allowed values: `1`, `3`, `7`, `15`, `30`.\n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero counter data:\n- **records**: Array of hero entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **main_hero**:\n            - **data**:\n                - **head**: Main hero portrait image URL.\n                - **name**: Main hero name.\n        - **main_heroid**: Main hero ID.\n        - **main_hero_channel**:\n            - **id**: Channel ID reference.\n        - **main_hero_appearance_rate**: Pick rate of the main hero.\n        - **main_hero_ban_rate**: Ban rate of the main hero.\n        - **main_hero_win_rate**: Win rate of the main hero.\n        - **sub_hero**: Array of counter heroes, each containing:\n            - **heroid**: Counter hero ID.\n            - **hero_win_rate**: Counter hero win rate.\n            - **hero_appearance_rate**: Counter hero pick rate.\n            - **increase_win_rate**: Impact of counter hero on win rate.\n            - **hero_channel**:\n                - **id**: Channel ID reference.\n            - **hero**:\n                - **data**:\n                    - **head**: Counter hero portrait image URL.\n            - **min_win_rate6** through **min_win_rate20**: Win rate breakdown across match durations.\n        - **sub_hero_last**: Array of negative synergy heroes, each containing:\n            - **heroid**: Sub-hero ID.\n            - **hero_win_rate**: Sub-hero win rate.\n            - **hero_appearance_rate**: Sub-hero pick rate.\n            - **increase_win_rate**: Negative impact on win rate.\n            - **min_win_rate6** through **min_win_rate20**: Win rate breakdown across match durations.\n\nThis endpoint is useful for:\n- Identifying which heroes are effective counters.\n- Analyzing matchup dynamics.\n- Understanding performance trends across different ranks and match durations.","operationId":"api_mlbb_hero_counter_api_heroes__hero_identifier__counters_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"days","in":"query","required":false,"schema":{"enum":["1","3","7","15","30"],"type":"string","title":"Past Days","description":"Past day window for rank statistics.","default":"1"},"description":"Past day window for rank statistics."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlbbCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1724837698334,"_id":"66ceef42af5771f18c500da2","_updatedAt":1774890906262,"data":{"bigrank":"9","camp_type":"0","main_hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_3391df36d6dcc54dd1c417098e15ec59.png","name":"Fanny"}},"main_hero_appearance_rate":0.009896,"main_hero_ban_rate":0.073593,"main_hero_channel":{"id":2678753},"main_hero_win_rate":0.458363,"main_heroid":17,"match_type":"0","sub_hero":[{"hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_474cea36a4bfdc7bf7d94530853a99b2.png"}},"hero_appearance_rate":0.002274,"hero_channel":{"id":2678756},"hero_index":1,"hero_win_rate":0.553658,"heroid":20,"increase_win_rate":0.048121,"min_win_rate10_12":0.452088,"min_win_rate12_14":0.439306,"min_win_rate14_16":0.426901,"min_win_rate16_18":0.493865,"min_win_rate18_20":0.465217,"min_win_rate20":0.486553,"min_win_rate6":0.333333,"min_win_rate6_8":0.5,"min_win_rate8_10":0.355263}],"sub_hero_last":[{"hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_ff39deb9c6afec3d977fdbe9d86f78cb.png"}},"hero_appearance_rate":0.002147,"hero_channel":{"id":2678748},"hero_index":1,"hero_win_rate":0.476658,"heroid":12,"increase_win_rate":-0.045228,"min_win_rate10_12":0.384454,"min_win_rate12_14":0.456767,"min_win_rate14_16":0.435701,"min_win_rate16_18":0.459155,"min_win_rate18_20":0.420792,"min_win_rate20":0.450402,"min_win_rate6":1,"min_win_rate6_8":0.315789,"min_win_rate8_10":0.5}]},"id":103076,"sourceId":2756569}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/heroes/{hero_identifier}/compatibility":{"get":{"tags":["mlbb"],"summary":"Hero Compatibility","description":"Get compatibility information for a specific hero by ID or name. Supports query parameters for rank tier, pagination, and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **days**: Time window for compatibility data. Allowed values: `1`, `3`, `7`, `15`, `30`.\n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero compatibility data:\n- **records**: Array of hero entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **main_hero**:\n            - **data**:\n                - **head**: Main hero portrait image URL.\n                - **name**: Main hero name.\n        - **main_heroid**: Main hero ID.\n        - **main_hero_channel**:\n            - **id**: Channel ID reference.\n        - **main_hero_appearance_rate**: Pick rate of the main hero.\n        - **main_hero_ban_rate**: Ban rate of the main hero.\n        - **main_hero_win_rate**: Win rate of the main hero.\n        - **sub_hero**: Array of compatible heroes, each containing:\n            - **heroid**: Compatible hero ID.\n            - **hero_win_rate**: Compatible hero win rate.\n            - **hero_appearance_rate**: Compatible hero pick rate.\n            - **increase_win_rate**: Positive synergy impact on win rate.\n            - **hero_channel**:\n                - **id**: Channel ID reference.\n            - **hero**:\n                - **data**:\n                    - **head**: Compatible hero portrait image URL.\n            - **min_win_rate6** through **min_win_rate20**: Win rate breakdown across match durations.\n        - **sub_hero_last**: Array of negative synergy heroes, each containing:\n            - **heroid**: Sub-hero ID.\n            - **hero_win_rate**: Sub-hero win rate.\n            - **hero_appearance_rate**: Sub-hero pick rate.\n            - **increase_win_rate**: Negative impact on win rate.\n            - **min_win_rate6** through **min_win_rate20**: Win rate breakdown across match durations.\n\nThis endpoint is useful for:\n- Identifying which heroes pair well with the selected hero.\n- Analyzing synergy and team composition effectiveness.\n- Recognizing combinations that reduce performance.\n- Understanding matchup dynamics across ranks and match durations.","operationId":"api_mlbb_hero_compatibility_api_heroes__hero_identifier__compatibility_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"days","in":"query","required":false,"schema":{"enum":["1","3","7","15","30"],"type":"string","title":"Past Days","description":"Past day window for rank statistics.","default":"1"},"description":"Past day window for rank statistics."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MlbbCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1724837698334,"_id":"66ceef42af5771f18c500d18","_updatedAt":1774890906262,"data":{"bigrank":"9","camp_type":"1","main_hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_3391df36d6dcc54dd1c417098e15ec59.png","name":"Fanny"}},"main_hero_appearance_rate":0.009896,"main_hero_ban_rate":0.073593,"main_hero_channel":{"id":2678753},"main_hero_win_rate":0.458363,"main_heroid":17,"match_type":"1","sub_hero":[{"hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_6495be044c2d28106e200f6918391d54.png"}},"hero_appearance_rate":0.001064,"hero_channel":{"id":2678835},"hero_index":1,"hero_win_rate":0.487066,"heroid":99,"increase_win_rate":0.080441,"min_win_rate10_12":0.536232,"min_win_rate12_14":0.616162,"min_win_rate14_16":0.483333,"min_win_rate16_18":0.534247,"min_win_rate18_20":0.469388,"min_win_rate20":0.525424,"min_win_rate6":0,"min_win_rate6_8":0,"min_win_rate8_10":0.363636}],"sub_hero_last":[{"hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage_1_9_47/100_d2d28d2fcb060726fa27553920ca1a33.png"}},"hero_appearance_rate":0.003218,"hero_channel":{"id":2678805},"hero_index":1,"hero_win_rate":0.447087,"heroid":69,"increase_win_rate":-0.125309,"min_win_rate10_12":0.096154,"min_win_rate12_14":0.22973,"min_win_rate14_16":0.25,"min_win_rate16_18":0.342857,"min_win_rate18_20":0.526316,"min_win_rate20":0.531915,"min_win_rate6":0,"min_win_rate6_8":0,"min_win_rate8_10":0.0625}]},"id":102938,"sourceId":2756569}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/meta/version":{"get":{"tags":["academy"],"summary":"Game Version Info","description":"Fetch a list of game versions with their release dates. Supports query parameters for pagination, sorting, and localization.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **order**: Sort order for results. Allowed values: `asc`, `desc`.\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes game version data:\n- **records**: Array of version entries, each containing:\n    - **id**: Unique version record identifier.\n    - **uin**: User identifier associated with the record.\n    - **createdAt**: Creation timestamp.\n    - **updatedAt**: Last update timestamp.\n    - **data**:\n        - **game_version**: Version string (e.g., `2.1.18`).\n    - **form**:\n        - **id**: Form ID reference.\n    - **vote_all** (optional): Voting metadata, if available:\n        - **target**: Target record ID.\n        - **vote**:\n            - **id**: Vote ID.\n\nThis endpoint is useful for:\n- Tracking game version history.\n- Monitoring release cycles.\n- Ensuring compatibility with specific patches or updates.","operationId":"api_academy_meta_version_api_academy_meta_version_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"title":"Sort Order","description":"Sort order for results.","default":"desc"},"description":"Sort order for results."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"createdAt":1759044257232,"data":{"game_version":"2.1.18"},"form":{"id":2777742},"id":967057876869504,"uin":"1","updatedAt":1759044257232}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/catalog":{"get":{"tags":["academy"],"summary":"Hero Catalog","description":"Supports query parameters for pagination and localization.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero catalog data:\n- **records**: Array of hero entries, each containing:\n    - **data**:\n        - **head**: Hero portrait image URL.\n        - **head_big**: Larger hero portrait image URL.\n        - **painting**: Hero splash art image URL.\n        - **hero**:\n            - **data**:\n                - **name**: Hero name.\n                - **roadsort**: Lane assignment metadata:\n                    - **_id**: Unique identifier.\n                    - **caption**: Lane caption (localized).\n                    - **configId**: Configuration ID.\n                    - **createdAt**: Creation timestamp.\n                    - **createdUser**: Creator username.\n                    - **data**:\n                        - **road_sort_icon**: Lane icon URL.\n                        - **road_sort_id**: Lane ID.\n                        - **road_sort_title**: Lane title (e.g., Roam).\n                    - **updatedAt**: Last update timestamp.\n                    - **updatedUser**: Last updater username.\n        - **hero_id**: Unique hero identifier.\n\nThis endpoint is useful for:\n- Displaying hero collections.\n- Browsing available heroes.\n- Analyzing basic hero attributes.","operationId":"api_academy_heroes_catalog_api_academy_heroes_catalog_get","deprecated":true,"parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"data":{"head":"https://akmweb.youngjoygame.com/web/gms/image/e7aa2ab69d15fc168b2d60b0e5ed0a1e.jpg","head_big":"https://akmweb.youngjoygame.com/web/gms/image/3542718f699058d42801d88ec9b8fb8b.jpg","hero":{"data":{"name":"Marcel","roadsort":[{"_id":"66854202aa8e7f6ec4703d8f","caption":"辅助","configId":144237,"createdAt":1720009218480,"createdUser":"nickjin","data":{"_object":2732073,"road_sort_icon":"https://akmweb.youngjoygame.com/web/gms/image/a3dbb075b4d8186c29f02f7d47da236a.svg","road_sort_id":"3","road_sort_title":"Roam"},"id":2732083,"linkId":[2732073],"sort":0,"updatedAt":1723022949109,"updatedUser":"nickjin"},""]}},"hero_id":132,"painting":"https://akmweb.youngjoygame.com/web/gms/image/24c43180662d27aa5b62106b596fa4f7.webp"}}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/roles":{"get":{"tags":["academy"],"summary":"Roles","description":"List all hero roles available in the game (Tank, Fighter, Assassin, Mage, Marksman, Support). Supports query parameters for pagination, sorting, and localization.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **order**: Sort order for results. Allowed values: `asc`, `desc`.\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes role data:\n- **records**: Array of role entries, each containing:\n    - **_id**: Unique record identifier.\n    - **caption**: Localized role caption (e.g., '坦克', '法师').\n    - **configId**: Configuration ID.\n    - **createdAt**: Creation timestamp.\n    - **createdUser**: Creator username.\n    - **updatedAt**: Last update timestamp.\n    - **updatedUser**: Last updater username.\n    - **data**:\n        - **emblem_id**: Emblem ID associated with the role.\n        - **emblem_title**: Emblem title (e.g., 'Tank', 'Mage').\n        - **emblem_icon**: Emblem icon URL.\n        - **emblem_detail**:\n            - **_id**: Emblem detail record ID.\n            - **_createdAt**: Creation timestamp.\n            - **_updatedAt**: Last update timestamp.\n            - **data**:\n                - **emblemid**: Emblem ID.\n                - **emblemname**: Emblem name (e.g., 'Assassin').\n                - **emblemattrid**: Attribute ID.\n                - **emblemattr**: Attribute bonuses (e.g., '+500 Extra Max HP').\n                - **attriicon**: Attribute icon URL.\n                - **attriicon2**: Secondary attribute icon URL (optional).\n                - **emblembg**: Background indicator.\n\nThis endpoint is useful for:\n- Displaying role categories.\n- Explaining role-specific attributes and emblem bonuses.\n- Guiding players in hero selection based on roles.","operationId":"api_academy_roles_api_academy_roles_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"title":"Sort Order","description":"Sort order by emblem_id.","default":"asc"},"description":"Sort order by emblem_id."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_id":"6698bd01613093b976b4a90b","caption":"通用","configId":144237,"createdAt":1721285889064,"createdUser":"nickjin","data":{"_object":2740627,"emblem_detail":{"_createdAt":1723097697235,"_id":"66b46261f25dc3aacf517fa1","_updatedAt":1727436297890,"data":{"attriicon":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_4e0cd7364830b178279479bff1146e5e.png","attriicon2":"","emblemattr":{"emblemattr":"+12 HP Regen\n+12 Mana Regen\n+275 Extra Max HP\n+22 Adaptive Attack\n","emblemattrid":"2000160","emblemname":"All"},"emblembg":0,"emblemid":20001,"emblemname":"All"},"id":100050,"sourceId":2718120},"emblem_icon":"https://akmweb.youngjoygame.com/web/gms/image/cf9a85ddcdc9d53f3a1b76f8d8965d53.svg","emblem_id":20001,"emblem_title":"All"},"id":2740640,"linkId":[2740627],"sort":0,"updatedAt":1721287925214,"updatedUser":"nickjin"}],"total":7}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/equipment":{"get":{"tags":["academy"],"summary":"Equipment (Items)","description":"List all equipment (items). Supports query parameters for pagination and localization.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes equipment data:\n- **records**: Array of equipment entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **equipid**: Equipment ID.\n        - **equipname**: Equipment name (e.g., 'Bud of Hope').\n        - **equipicon**: Equipment icon URL.\n    - **id**: Internal record ID.\n    - **sourceId**: Source reference ID.\n\nThis endpoint is useful for:\n- Displaying the full equipment catalog.\n- Browsing available items.\n- Analyzing basic item attributes.","operationId":"api_academy_equipment_api_academy_equipment_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1762773906608,"_id":"6911cb92f45ef3d6c8c6340e","_updatedAt":1762773906608,"data":{"equipicon":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_e7f1b44153bd079824ececabb14cf901.png","equipid":10002,"equipname":"Bud of Hope"},"id":101281,"sourceId":2775075}],"total":184}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/equipment/expanded":{"get":{"tags":["academy"],"summary":"Equipment Expanded","description":"Get detailed information about a specific equipment item. Supports query parameters for pagination and localization.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes detailed equipment data:\n- **records**: Array of equipment entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **equipid**: Equipment ID.\n        - **equipname**: Equipment name (e.g., 'Demon Boots - Favor').\n        - **equipicon**: Equipment icon URL.\n        - **equiptype**: Equipment type ID.\n        - **equiptypename**: Equipment type name (e.g., 'Roam').\n        - **equipskill1-7**: Passive skills or effects (raw text segments).\n        - **equipskilldesc**: Full description of equipment skills and effects.\n        - **equiptips**: Item tips or stat bonuses (e.g., '+40 Movement Speed').\n        - **targetequipid**: Target equipment ID (if linked).\n    - **id**: Internal record ID.\n    - **sourceId**: Source reference ID.\n\nThis endpoint is useful for:\n- Displaying full item details.\n- Explaining equipment effects and passive skills.\n- Guiding players in equipment selection and strategy.","operationId":"api_academy_equipment_expanded_api_academy_equipment_expanded_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1773221702699,"_id":"69b13746b58eb3622c8297a5","_updatedAt":1773221702699,"data":{"equipicon":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_ca2a5c2be6010eb0ecff954a27bf05db.png","equipid":3573,"equipname":"Demon Boots - Favor","equipskill1":"\nPassive - Favor: ","equipskill2":"\n: ","equipskill3":"\nMysticism: Getting a kill or assist on an enemy Minion will restore 4% Mana. (An assist occurs when a Minion dies within 2s after taking damage from the hero.)","equipskill4":"\n<font color=\"FFD700\">Devotion</font>: When near allied heroes, does not share Gold and EXP from minions and creep, but gains 35% Gold and EXP independently. Revealing enemies also grants Gold and EXP.\n A maximum of 2000 Gold can be gained through this skill. (Only triggers when you have the lowest Gold among all heroes with active Roaming Blessing on your team).","equipskill5":"\n<font color=\"FFD700\">Thriving</font>: <font color=\"7f62fe\">Unique in Team</font>: Gain 6 Gold and 12 EXP every 5s. After 8 minutes into the match, gain an additional 66% boost (only triggers when you have the lowest Gold among all heroes with active Roaming Blessing on your team).","equipskill6":"\n<font color=\"FFD700\">Blessing</font>: Accumulate 1000 Gold via Devotion and Thriving to unlock a skill.\n<font color=\"A4AAC7\">During the first 5 minutes, Minion rewards are reduced to 50% when earned alone. After 2 minutes, Roaming Blessing can no longer be enchanted.</font>","equipskill7":"\n: ","equipskilldesc":"\nPassive - Favor: \nMysticism: Getting a kill or assist on an enemy Minion will restore 4% Mana. (An assist occurs when a Minion dies within 2s after taking damage from the hero.)\n<font color=\"FFD700\">Devotion</font>: When near allied heroes, does not share Gold and EXP from minions and creep, but gains 35% Gold and EXP independently. Revealing enemies also grants Gold and EXP.\n A maximum of 2000 Gold can be gained through this skill. (Only triggers when you have the lowest Gold among all heroes with active Roaming Blessing on your team).\n<font color=\"FFD700\">Thriving</font>: <font color=\"7f62fe\">Unique in Team</font>: Gain 6 Gold and 12 EXP every 5s. After 8 minutes into the match, gain an additional 66% boost (only triggers when you have the lowest Gold among all heroes with active Roaming Blessing on your team).\n<font color=\"FFD700\">Blessing</font>: Accumulate 1000 Gold via Devotion and Thriving to unlock a skill.\n<font color=\"A4AAC7\">During the first 5 minutes, Minion rewards are reduced to 50% when earned alone. After 2 minutes, Roaming Blessing can no longer be enchanted.</font>","equiptips":"+40 Movement Speed<br>+10 Mana Regen<br>","equiptype":"5","equiptypename":"Roam","targetequipid":""},"id":106413,"sourceId":2713995}],"total":152}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/spells":{"get":{"tags":["academy"],"summary":"Battle Spells","description":"List all battle spells with details. Supports query parameters for pagination and localization.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes battle spell data:\n- **records**: Array of spell entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **battleskillid**: Battle spell ID.\n        - **skillid**: Skill ID.\n        - **skillname**: Spell name (e.g., 'Arrival').\n        - **skillicon**: Spell icon URL.\n        - **skillshortdesc**: Short description (e.g., 'Long-range Support').\n        - **skilldesc**: Full description of spell effects.\n        - **skilldescemblem**: Emblem-specific description (if applicable).\n        - **skillvideo**: Video reference (if available).\n    - **id**: Internal record ID.\n    - **sourceId**: Source reference ID.\n\nThis endpoint is useful for:\n- Displaying the complete catalog of battle spells.\n- Explaining spell effects and mechanics.\n- Guiding players in spell selection and strategy.","operationId":"api_academy_spells_api_academy_spells_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1723097697296,"_id":"66b46261f25dc3aacf517fb2","_updatedAt":1723097697296,"data":{"__data":{"skilldesc":"After channeling for 3s, teleport to the target allied Turret, Base, Minion, or trap and gain 60% extra Movement Speed (decays over 3s) afterward.\nIf the channeling is canceled or interrupted, 30s of the spell cooldown will be <font color=\"62f8fe\">refunded</font>.","skilldescemblem":"After channeling for 3s, teleport to the target allied Turret, Base, Minion, or trap and gain 60% extra Movement Speed (decays over 3s) afterward.\nIf the channeling is canceled or interrupted, 30s of the spell cooldown will be <font color=\"62f8fe\">refunded</font>.","skillicon":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_e4c101cdf5311dc1ce58bd8385c1c478.png","skillid":20160,"skillname":"Arrival"},"battleskillid":20160,"skillicon":"@__data.skillicon","skillname":"@__data.skillname1","skillshortdesc":"Long-range Support","skillvideo":""},"id":100059,"sourceId":2718122}],"total":12}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/emblems":{"get":{"tags":["academy"],"summary":"Emblems","description":"List all emblems with details. Supports query parameters for pagination and localization.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes emblem data:\n- **records**: Array of emblem entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **giftid**: Emblem ID.\n        - **gifttiers**: Emblem tier level.\n        - **emblemskill**: Associated skill details:\n            - **skillid**: Skill ID.\n            - **skillid_lv**: Skill ID with level reference.\n            - **skillname**: Skill name (e.g., 'Weapons Master').\n            - **skillicon**: Skill icon URL.\n            - **skilldesc**: Full description of skill effects.\n            - **skilldesc_text**: Template-based description with placeholders.\n            - **skilldescemblem**: Emblem-specific description.\n            - **numdescribe**: Numeric effect values (e.g., '5%').\n    - **id**: Internal record ID.\n    - **sourceId**: Source reference ID.\n\nThis endpoint is useful for:\n- Displaying the full emblem catalog.\n- Explaining emblem effects and associated skills.\n- Guiding players in emblem selection and optimization.","operationId":"api_academy_emblems_api_academy_emblems_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1736302497664,"_id":"677ddfa16cecfab942bd1208","_updatedAt":1736302497664,"data":{"emblemskill":{"numdescribe":"5%","skilldesc":"Physical Attack and Magic Power gained from equipment, emblem, talents, and skills are increased by 5%.","skilldesc_text":"Physical Attack and Magic Power gained from equipment, emblem, talents, and skills are increased by <%Num1>.","skilldescemblem":"Physical Attack and Magic Power gained from equipment, emblem, talents, and skills are increased by 5%.","skillicon":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_893891a86726cbf0b00401127a1f9486.png","skillid":61010,"skillid_lv":"61010/1","skillname":"Weapons Master"},"giftid":1221,"gifttiers":2},"id":100333,"sourceId":2718121}],"total":26}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/ranks":{"get":{"tags":["academy"],"summary":"Ranks List","description":"Retrieve all rank information for MLBB. Supports query parameters for pagination and localization.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes rank data:\n- **records**: Array of rank entries, each containing:\n    - **_id**: Unique record identifier.\n    - **configId**: Configuration ID.\n    - **caption**: Localized caption (e.g., '1-4勇士Ⅲ').\n    - **createdAt**: Creation timestamp.\n    - **createdUser**: Creator username.\n    - **updatedAt**: Last update timestamp.\n    - **updatedUser**: Last updater username.\n    - **data**:\n        - **bigrank**: Major rank ID (e.g., 1).\n        - **bigrank_name**: Major rank name (e.g., '勇士').\n        - **icon**: Rank icon URL.\n        - **minrank**: Minor rank ID (e.g., '1').\n        - **minrank_name**: Minor rank name (e.g., 'Ⅲ').\n        - **rankid_start**: Starting rank ID in the range.\n        - **rankid_end**: Ending rank ID in the range.\n    - **id**: Internal record ID.\n    - **sort**: Sorting index.\n\nThis endpoint is useful for:\n- Displaying the full rank progression system.\n- Explaining rank tiers and ranges.\n- Guiding players in understanding MLBB's ranking structure.","operationId":"api_academy_ranks_api_academy_ranks_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_id":"6908a30ee594c8676a88ed72","configId":144237,"id":3210595,"caption":"1-4勇士Ⅲ","data":{"_object":3210429,"bigrank":1,"bigrank_name":"勇士","icon":"https://akmweb.youngjoygame.com/web/gms/image/e8659ed5040a378701beca13ebdc4fba.png","minrank":"1","minrank_name":"Ⅲ","rankid_end":4,"rankid_start":1},"createdUser":"v_xyxu","createdAt":1762173710696,"updatedAt":1762173714202,"updatedUser":"v_xyxu","sort":0}],"total":29}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/ranks/{rank_id}":{"get":{"tags":["academy"],"summary":"Ranks Details","description":"Retrieve details for a specific rank in MLBB by rank ID. Supports query parameter for localization.\n\nPath parameters:\n- **rank_id**: Rank ID (validated dynamically from current rank list). Minimum: 1, Maximum: 9999.\n\nQuery parameters:\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes detailed rank data:\n- **records**: Array of rank entries, each containing:\n    - **_id**: Unique record identifier.\n    - **configId**: Configuration ID.\n    - **caption**: Localized caption (e.g., '236-9999荣耀神话').\n    - **createdAt**: Creation timestamp.\n    - **createdUser**: Creator username.\n    - **updatedAt**: Last update timestamp.\n    - **updatedUser**: Last updater username.\n    - **data**:\n        - **bigrank**: Major rank ID (e.g., 7).\n        - **bigrank_name**: Major rank name (e.g., '荣耀神话').\n        - **icon**: Rank icon URL.\n        - **rankid_start**: Starting rank ID in the range.\n        - **rankid_end**: Ending rank ID in the range.\n    - **id**: Internal record ID.\n    - **linkId**: Linked object references.\n    - **sort**: Sorting index.\n\nThis endpoint is useful for:\n- Displaying detailed information about a single rank tier.\n- Explaining its position in the progression system.\n- Guiding players in understanding MLBB's ranking structure.","operationId":"api_academy_ranks_details_api_academy_ranks__rank_id__get","parameters":[{"name":"rank_id","in":"path","required":true,"schema":{"type":"integer","maximum":9999,"minimum":1,"title":"Rank ID","description":"Rank ID. Maximum is validated dynamically from current rank list."},"description":"Rank ID. Maximum is validated dynamically from current rank list."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_id":"6908a30ee594c8676a88ed08","configId":144237,"id":3210567,"caption":"236-9999荣耀神话","data":{"_object":3210429,"bigrank":7,"bigrank_name":"荣耀神话","icon":"https://akmweb.youngjoygame.com/web/gms/image/191257b84f57be74430d1964c4b01c8b.png","rankid_end":9999,"rankid_start":236},"createdUser":"v_xyxu","createdAt":1762173710344,"updatedAt":1762173748966,"updatedUser":"v_xyxu","linkId":[3210429],"sort":0}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/recommended":{"get":{"tags":["academy"],"summary":"Recommended Content","description":"List recommended content for players. Supports query parameters for pagination, sorting, and localization.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **order**: Sort order for results. Allowed values: `asc`, `desc`.\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes recommended content data:\n- **records**: Array of recommended entries, each containing:\n    - **createdAt**: Creation timestamp.\n    - **updatedAt**: Last update timestamp.\n    - **data**:\n        - **channels**: Content channels (e.g., 'UGC', 'recommend').\n        - **type**: Content type (e.g., 'ugc_hero').\n        - **state**: Content state (e.g., 'release').\n        - **data**:\n            - **hero**: Hero metadata including:\n                - **hero_id**: Hero ID.\n                - **hero_lane**: Lane assignment.\n                - **hero_overview**: Overview description.\n                - **hero_strength**: Strengths.\n                - **hero_weakness**: Weaknesses.\n                - **hero_tags**: Array of tag IDs.\n            - **equips**: Recommended equipment builds.\n            - **emblems**: Recommended emblem sets.\n            - **spell**: Recommended battle spell.\n            - **cooperates**: Cooperative hero synergies.\n            - **counters**: Counter heroes.\n            - **dominants**: Dominant strategies or tips.\n            - **recommend**: General recommendation notes.\n            - **snapshot**: Snapshot image URL.\n            - **game_version**: Version reference.\n            - **language**: Content language.\n            - **pages**: Content sections (e.g., 'hero', 'spell', 'equip').\n            - **title**: Guide or build title.\n        - **user**: Author metadata including:\n            - **name**: Author name.\n            - **avatar**: Author avatar URL.\n            - **level**: Author level.\n            - **roleId**: Role ID.\n            - **zoneId**: Zone ID.\n        - **dynamic**: Engagement metrics:\n            - **views**: Total views.\n            - **votes**: Total votes.\n            - **hot**: Hotness score.\n            - **views_by_4h_total_24h**: Views in last 24h.\n        - **vote_all**: Voting metadata:\n            - **average**: Average rating.\n            - **count**: Vote count.\n            - **total**: Total votes.\n            - **user_count**: Number of users voted.\n            - **vote**: Vote ID reference.\n\nThis endpoint is useful for:\n- Surfacing community guides and builds.\n- Providing personalized hero strategies.\n- Highlighting cooperative and counter hero recommendations.\n- Guiding players with contextual tips and strategic insights.","operationId":"api_academy_recommended_api_academy_recommended_get","parameters":[{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"title":"Sort Order","description":"Order by trending and creation date.","default":"desc"},"description":"Order by trending and creation date."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"createdAt":1774497670372,"data":{"channels":["UGC","recommend"],"data":{"cooperates":[{"cooperate_desc":"Best With: Long-range heroes like Pharsa, Yve, or Granger who can stand outside his Ultimate circle and fire into it while the enemies are frozen.","cooperate_hero_id":101,"cooperate_rate":100},{"cooperate_desc":"Best With: Long-range heroes like Pharsa, Yve, or Granger who can stand outside his Ultimate circle and fire into it while the enemies are frozen.","cooperate_hero_id":52,"cooperate_rate":100}],"counters":[{"counter_desc":"Weak Against: Diggie (can't cleanse the freeze, but can shield through the aftermath) and Karrie (True Damage ignores his high defense).","counter_hero_id":48,"counter_rate":20}],"data_version":1,"dominants":[{"dominant_desc":"Focus on annoying the enemy Jungler or Marksman. Use your passive \"snaps\" to poke and gain shields. You are surprisingly tanky at level 1.","dominant_title":"Early Game"},{"dominant_desc":"Roam with your Mid-laner. Use Skill 2 to scout bushes. Your job is to set up \"Frames\" (Skill 1) for your damage dealers.","dominant_title":"Mid Game"},{"dominant_desc":"You are the ultimate disruptor. Wait for the enemy to commit their big Ultimates (like Terizla or Guinevere), then use Golden Hour to negate their entire initiation.","dominant_title":"Late Game"}],"emblems":[{"emblem_desc":"\n✨ Agility / Vitality: Higher movement speed helps you position your camera shots perfectly.\n\n✨ Tenacity: Increases physical and magic defense when HP is low—since your damage scales with defense, this actually makes you stronger when you're \"losing.\"\n\n✨ Focusing Mark: When you hit an enemy (which Clemar does automatically), your teammates deal 6% more damage to them. Perfect for a support.\n\n","emblem_gifts":[811,321,831],"emblem_id":20001,"emblem_title":"Emblem: Support Emblem (for Cooldown and Movement Speed) or Tank Emblem (for pure scaling)."}],"equips":[{"equip_desc":"Rapid Boots/Tough Boots: Roam blessing (Encourage or Conceal).  \n\nThunder Belt: This is his core item. It provides True Damage and scales with his defensive stats.\n\nDominance Ice: Essential for anti-heal and more defense scaling.\n\nOracle: Boosts the shields he gets from his passive.\n\nAthena's Shield / Antique Cuirass: Standard defense based on enemy composition.\n\nImmortality: For late-game insurance.","equip_ids":[3562,2212,3206,3204,3205,3207],"equip_title":"MARCEL'S BUILD ITEMS"}],"game_version":"2.1.18","hero":{"hero_id":132,"hero_lane":"3","hero_overview":"Marcel, the \"Soul Photographer\" of the Paxley family. Released on March 11, 2026, he is the 132nd hero in Mobile Legends: Bang Bang. Marcel is a unique Support/Tank who introduces the \"Frozen Moment\" mechanic—literally pausing time for friends and foes alike.  Marcel carries a sentient camera named Clemar. He does not just stun enemies; he freezes them in stasis. Interestingly, Marcel is a \"HP-to-Defense\" converter, meaning he gains tankiness from health items but scales his damage and shields through his defensive stats. \n\n\nHERO SKILLS:\n\n📸 Passive (Platinum Snap): Marcel cannot Crit and doesn't benefit from extra Attack Speed. Instead, Extra HP is converted into 1.5% Hybrid Defense. Clemar automatically \"snaps\" photos of nearby enemies, dealing True Damage based on their Max HP and granting Marcel a shield.\n\n📷 Skill 1 (Framed Moment): Clemar takes a delayed shot in an area. After a short delay, enemies inside are immobilized and take physical damage that scales with Marcel's Physical and Magic Defense.\n\n📷 Skill 2 (Tracking Shot): A mobility skill. Marcel enters a \"Tracking Haste\" state, gaining movement speed that increases as he nears enemies. Recasting allows him to dash, leaving a phantom behind. \n\n📸 Ultimate (Golden Hour): Marcel creates a massive wide-angle stasis field. Everything inside—enemies, allies, lord, turrets, and even flying projectiles—is frozen in time. Only Marcel can move and deal damage inside.\n\n\nStandard Combo:\nSkill 2 (Approach) > Skill 1 (Position) > Basic Attacks > Ultimate (to secure the kill or reset the fight).","hero_strength":"✨Anti-Projectile: His Ultimate can literally stop a Franco hook or a Novaria blast mid-air.\n\n✨Insane Durability: Because his HP converts to Hybrid Defense, he becomes incredibly difficult to kill with standard penetration.\n\n✨Objective Control: He can freeze the enemy Jungler to prevent them from using Retribution on the Lord.","hero_tags":[3,14,10],"hero_weakness":"✨Double-Edged Sword: A poorly timed Ultimate can freeze your own teammates, ruining their big plays.  \n\n✨Zero Burst: He relies on sustained True Damage and CC; he cannot \"delete\" enemies quickly.\n\n✨Vulnerable to True Damage: Since he relies on high Defense stats rather than massive HP pools, heroes like Karrie or Gord can melt him."},"language":"en","pages":["hero","spell","emblem","equip","dominant","cooperate"],"recommend":"Marcel Comprehensive Guide You Have Been Waiting For!","snapshot":"https://akmweb.youngjoygame.com/web/academy/image/fca9cfad744e7627f963e19dd8a74cd7.jpeg","spell":{"spell_desc":"📸 Flicker: Essential for \"Flash-Ult\" plays to catch the entire enemy backline.\n\nOTHER BATTLE SPELLS: \n📷 Vengeance: Great for soaking up damage while you wait for your Skill 1 or Ultimate to trigger.\n\n📷 Revitalize: Works well if you are playing a more \"stay-at-home\" support style.","spell_id":20100},"title":"Frame the Meta: A Grandmaster's Guide to Marcel"},"state":"release","type":"ugc_hero"},"dynamic":{"hot":1530.06,"views":368,"views_by_4h_0":5,"views_by_4h_1":8,"views_by_4h_2":3,"views_by_4h_3":1,"views_by_4h_4":1,"views_by_4h_total_24h":19,"votes":20},"form":{"id":2737553},"id":1093652237288192,"item_uin":[{"count":1,"item":{"access":"all","desc":"MLBB Academy Top Creators Reward","icon":"https://akmweb.youngjoygame.com/web/gms/image/222cad2f3870af05c1e45b5a4f2eba03.png","id":2758031,"tags":["badge","2"],"title":"Creative Star","usage":{"mode":"manual"}},"uin":"mlbb:10022:581066511","user":{"avatar":"https://akmpicture.youngjoygame.com/dist/face/10022/11/65/4_new_574293fa-09f9-4f11-bc78-a29e13b8f040.jpg","historyRankLevel":436,"level":139,"module":"mlbb","name":" coco","registerCountry":"ph","registerTime":1575135242,"roleId":581066511,"zoneId":10022}}],"uin":"mlbb:10022:581066511","updatedAt":1774498623794,"user":{"avatar":"https://akmpicture.youngjoygame.com/dist/face/10022/11/65/4_new_574293fa-09f9-4f11-bc78-a29e13b8f040.jpg","historyRankLevel":436,"level":139,"module":"mlbb","name":" coco","roleId":581066511,"zoneId":10022},"vote_all":{"average":1,"count":20,"target":"1093652237288192","total":20,"user_count":20,"vote":{"id":2758890}}}],"total":10000}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/recommended/{recommended_id}":{"get":{"tags":["academy"],"summary":"Recommended Detail","description":"Get details for a specific recommended content item by its identifier. Supports query parameters for pagination and localization.\n\nPath parameters:\n- **recommended_id**: Identifier for the recommended post (minimum: 1).\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes detailed recommended content data:\n- **records**: Array of recommended entries, each containing:\n    - **createdAt**: Creation timestamp.\n    - **updatedAt**: Last update timestamp.\n    - **data**:\n        - **channels**: Content channels (e.g., 'UGC', 'recommend').\n        - **type**: Content type (e.g., 'ugc_hero').\n        - **state**: Content state (e.g., 'release').\n        - **data**:\n            - **hero**: Hero metadata including:\n                - **hero_id**: Hero ID.\n                - **hero_lane**: Lane assignment.\n                - **hero_overview**: Overview description.\n                - **hero_strength**: Strengths.\n                - **hero_weakness**: Weaknesses.\n                - **hero_tags**: Array of tag IDs.\n            - **equips**: Recommended equipment builds with IDs and descriptions.\n            - **emblems**: Recommended emblem sets with IDs and descriptions.\n            - **spell**: Recommended battle spell with ID and description.\n            - **cooperates**: Cooperative hero synergies with descriptions and rates.\n            - **counters**: Counter heroes with descriptions and rates.\n            - **dominants**: Dominant strategies or tips.\n            - **recommend**: General recommendation notes.\n            - **snapshot**: Snapshot image URL.\n            - **game_version**: Version reference.\n            - **language**: Content language.\n            - **pages**: Content sections (e.g., 'hero', 'spell', 'equip').\n            - **title**: Guide or build title.\n        - **user**: Author metadata including:\n            - **name**: Author name.\n            - **avatar**: Author avatar URL.\n            - **level**: Author level.\n            - **roleId**: Role ID.\n            - **zoneId**: Zone ID.\n        - **dynamic**: Engagement metrics:\n            - **views**: Total views.\n            - **votes**: Total votes.\n            - **hot**: Hotness score.\n            - **views_by_4h_total_24h**: Views in last 24h.\n        - **vote_all**: Voting metadata:\n            - **average**: Average rating.\n            - **count**: Vote count.\n            - **total**: Total votes.\n            - **user_count**: Number of users voted.\n            - **vote**: Vote ID reference.\n\nThis endpoint is useful for:\n- Displaying full details of a single guide or build.\n- Explaining strategic recommendations.\n- Surfacing community-generated content for MLBB players.","operationId":"api_academy_recommended_detail_api_academy_recommended__recommended_id__get","parameters":[{"name":"recommended_id","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Recommended Post ID","description":"The ID of the recommended post to retrieve."},"description":"The ID of the recommended post to retrieve."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"createdAt":1774497670372,"data":{"channels":["UGC","recommend"],"data":{"cooperates":[{"cooperate_desc":"Best With: Long-range heroes like Pharsa, Yve, or Granger who can stand outside his Ultimate circle and fire into it while the enemies are frozen.","cooperate_hero_id":101,"cooperate_rate":100}],"counters":[{"counter_desc":"Weak Against: Diggie (can't cleanse the freeze, but can shield through the aftermath) and Karrie (True Damage ignores his high defense).","counter_hero_id":48,"counter_rate":20}],"data_version":1,"dominants":[{"dominant_desc":"Focus on annoying the enemy Jungler or Marksman. Use your passive \"snaps\" to poke and gain shields. You are surprisingly tanky at level 1.","dominant_title":"Early Game"}],"emblems":[{"emblem_desc":"\n✨ Agility / Vitality: Higher movement speed helps you position your camera shots perfectly.\n\n✨ Tenacity: Increases physical and magic defense when HP is low—since your damage scales with defense, this actually makes you stronger when you're \"losing.\"\n\n✨ Focusing Mark: When you hit an enemy (which Clemar does automatically), your teammates deal 6% more damage to them. Perfect for a support.\n\n","emblem_gifts":[811,321,831],"emblem_id":20001,"emblem_title":"Emblem: Support Emblem (for Cooldown and Movement Speed) or Tank Emblem (for pure scaling)."}],"equips":[{"equip_desc":"Rapid Boots/Tough Boots: Roam blessing (Encourage or Conceal).  \n\nThunder Belt: This is his core item. It provides True Damage and scales with his defensive stats.\n\nDominance Ice: Essential for anti-heal and more defense scaling.\n\nOracle: Boosts the shields he gets from his passive.\n\nAthena's Shield / Antique Cuirass: Standard defense based on enemy composition.\n\nImmortality: For late-game insurance.","equip_ids":[3562,2212,3206,3204,3205,3207],"equip_title":"MARCEL'S BUILD ITEMS"}],"game_version":"2.1.18","hero":{"hero_id":132,"hero_lane":"3","hero_overview":"Marcel, the \"Soul Photographer\" of the Paxley family. Released on March 11, 2026, he is the 132nd hero in Mobile Legends: Bang Bang. Marcel is a unique Support/Tank who introduces the \"Frozen Moment\" mechanic—literally pausing time for friends and foes alike.  Marcel carries a sentient camera named Clemar. He does not just stun enemies; he freezes them in stasis. Interestingly, Marcel is a \"HP-to-Defense\" converter, meaning he gains tankiness from health items but scales his damage and shields through his defensive stats. \n\n\nHERO SKILLS:\n\n📸 Passive (Platinum Snap): Marcel cannot Crit and doesn't benefit from extra Attack Speed. Instead, Extra HP is converted into 1.5% Hybrid Defense. Clemar automatically \"snaps\" photos of nearby enemies, dealing True Damage based on their Max HP and granting Marcel a shield.\n\n📷 Skill 1 (Framed Moment): Clemar takes a delayed shot in an area. After a short delay, enemies inside are immobilized and take physical damage that scales with Marcel's Physical and Magic Defense.\n\n📷 Skill 2 (Tracking Shot): A mobility skill. Marcel enters a \"Tracking Haste\" state, gaining movement speed that increases as he nears enemies. Recasting allows him to dash, leaving a phantom behind. \n\n📸 Ultimate (Golden Hour): Marcel creates a massive wide-angle stasis field. Everything inside—enemies, allies, lord, turrets, and even flying projectiles—is frozen in time. Only Marcel can move and deal damage inside.\n\n\nStandard Combo:\nSkill 2 (Approach) > Skill 1 (Position) > Basic Attacks > Ultimate (to secure the kill or reset the fight).","hero_strength":"✨Anti-Projectile: His Ultimate can literally stop a Franco hook or a Novaria blast mid-air.\n\n✨Insane Durability: Because his HP converts to Hybrid Defense, he becomes incredibly difficult to kill with standard penetration.\n\n✨Objective Control: He can freeze the enemy Jungler to prevent them from using Retribution on the Lord.","hero_tags":[3,14,10],"hero_weakness":"✨Double-Edged Sword: A poorly timed Ultimate can freeze your own teammates, ruining their big plays.  \n\n✨Zero Burst: He relies on sustained True Damage and CC; he cannot \"delete\" enemies quickly.\n\n✨Vulnerable to True Damage: Since he relies on high Defense stats rather than massive HP pools, heroes like Karrie or Gord can melt him."},"language":"en","pages":["hero","spell","emblem","equip","dominant","cooperate"],"recommend":"Marcel Comprehensive Guide You Have Been Waiting For!","snapshot":"https://akmweb.youngjoygame.com/web/academy/image/fca9cfad744e7627f963e19dd8a74cd7.jpeg","spell":{"spell_desc":"📸 Flicker: Essential for \"Flash-Ult\" plays to catch the entire enemy backline.\n\nOTHER BATTLE SPELLS: \n📷 Vengeance: Great for soaking up damage while you wait for your Skill 1 or Ultimate to trigger.\n\n📷 Revitalize: Works well if you are playing a more \"stay-at-home\" support style.","spell_id":20100},"title":"Frame the Meta: A Grandmaster's Guide to Marcel"},"state":"release","type":"ugc_hero"},"dynamic":{"hot":1530.06,"views":368,"views_by_4h_0":5,"views_by_4h_1":8,"views_by_4h_3":1,"views_by_4h_4":1,"views_by_4h_total_24h":18,"votes":20},"form":{"id":2737553},"id":1093652237288192,"item_uin":[{"count":1,"item":{"access":"all","desc":"MLBB Academy Top Creators Reward","icon":"https://akmweb.youngjoygame.com/web/gms/image/222cad2f3870af05c1e45b5a4f2eba03.png","id":2758031,"tags":["badge","2"],"title":"Creative Star","usage":{"mode":"manual"}},"uin":"mlbb:10022:581066511","user":{"avatar":"https://akmpicture.youngjoygame.com/dist/face/10022/11/65/4_new_574293fa-09f9-4f11-bc78-a29e13b8f040.jpg","historyRankLevel":436,"level":139,"module":"mlbb","name":" coco","registerCountry":"ph","registerTime":1575135242,"roleId":581066511,"zoneId":10022}}],"uin":"mlbb:10022:581066511","updatedAt":1774498623794,"user":{"avatar":"https://akmpicture.youngjoygame.com/dist/face/10022/11/65/4_new_574293fa-09f9-4f11-bc78-a29e13b8f040.jpg","historyRankLevel":436,"level":139,"module":"mlbb","name":" coco","roleId":581066511,"zoneId":10022},"vote_all":{"average":1,"count":20,"target":"1093652237288192","total":20,"user_count":20,"vote":{"id":2758890}}}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes":{"get":{"tags":["academy"],"summary":"Hero Filters","description":"Retrieve a list of heroes with filtering options for role and lane. Supports query parameters for role, lane, pagination, sorting, and localization.\n\nQuery parameters:\n- **role**: Role filter. Multi allowed: `tank`, `fighter`, `assassin`, `mage`, `marksman`, `support`. Example: `role=tank&role=fighter`.\n- **lane**: Lane filter. Multi allowed: `exp`, `mid`, `roam`, `jungle`, `gold`. Example: `lane=exp&lane=mid`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **order**: Sort order for results. Allowed values: `asc`, `desc`.\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero filter data:\n- **records**: Array of hero entries, each containing:\n    - **data**:\n        - **hero_id**: Unique hero identifier.\n        - **head**: Hero portrait image URL.\n        - **hero**:\n            - **data**:\n                - **name**: Hero name (e.g., 'Miya').\n\nThis endpoint is useful for:\n- Filtering heroes by gameplay role.\n- Filtering heroes by lane assignment.\n- Displaying customized hero lists in MLBB Academy.","operationId":"api_academy_heroes_api_academy_heroes_get","parameters":[{"name":"role","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"title":"Role","description":"Filter heroes by role.","default":["tank","fighter","assassin","mage","marksman","support"]},"description":"Filter heroes by role."},{"name":"lane","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"title":"Lane","description":"Filter heroes by lane.","default":["exp","mid","roam","jungle","gold"]},"description":"Filter heroes by lane."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"title":"Sort Order","description":"Sort order by hero ID.","default":"asc"},"description":"Sort order by hero ID."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"data":{"head":"https://akmweb.youngjoygame.com/web/gms/image/299d8aab8de508fff88c1f1e935017cb.jpg","hero":{"data":{"name":"Miya"}},"hero_id":1}}],"total":132}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/{hero_identifier}/stats":{"get":{"tags":["academy"],"summary":"Hero Statistics","description":"Retrieve performance statistics for a specific hero by rank. Supports query parameters for rank, pagination, and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero statistics data:\n- **records**: Array of hero entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **main_hero**:\n            - **data**:\n                - **hero**:\n                    - **data**:\n                        - **head**: Main hero portrait image URL.\n                        - **name**: Main hero name.\n        - **main_heroid**: Main hero ID.\n        - **main_hero_appearance_rate**: Pick rate of the main hero.\n        - **main_hero_ban_rate**: Ban rate of the main hero.\n        - **main_hero_win_rate**: Win rate of the main hero.\n        - **sub_hero**: Array of synergy heroes, each containing:\n            - **heroid**: Hero ID.\n            - **hero_win_rate**: Win rate of the synergy hero.\n            - **hero_appearance_rate**: Pick rate of the synergy hero.\n            - **increase_win_rate**: Positive synergy impact on win rate.\n            - **min_win_rate6-20**: Win rate breakdown across match durations.\n            - **hero**:\n                - **data**:\n                    - **hero**:\n                        - **data**:\n                            - **head**: Synergy hero portrait image URL.\n        - **sub_hero_last**: Array of negative synergy heroes, each containing:\n            - **heroid**: Hero ID.\n            - **hero_win_rate**: Win rate of the sub-hero.\n            - **hero_appearance_rate**: Pick rate of the sub-hero.\n            - **increase_win_rate**: Negative impact on win rate.\n            - **min_win_rate6-20**: Win rate breakdown across match durations.\n\nThis endpoint is useful for:\n- Analyzing hero performance across different ranks.\n- Understanding meta trends.\n- Guiding players in hero selection and strategy.","operationId":"api_academy_heroes_stats_api_academy_heroes__hero_identifier__stats_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1725607499154,"_id":"66daae4baf5771f18c504066","_updatedAt":1774890906305,"data":{"bigrank":"101","camp_type":"1","main_hero":{"data":{"hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_3391df36d6dcc54dd1c417098e15ec59.png","name":"Fanny"}}}},"main_hero_appearance_rate":0.007866,"main_hero_ban_rate":0.042957,"main_hero_win_rate":0.442515,"main_heroid":17,"match_type":"1","sub_hero":[{"hero":{"data":{"hero":{"data":{"head":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_da02742f59013365923b216420bc4082.png"}}}},"hero_appearance_rate":0.007849,"hero_index":1,"hero_win_rate":0.540854,"heroid":107,"increase_win_rate":0.02013,"min_win_rate10_12":0.5543,"min_win_rate12_14":0.510571,"min_win_rate14_16":0.479701,"min_win_rate16_18":0.476889,"min_win_rate18_20":0.474236,"min_win_rate20":0.4885,"min_win_rate6":0.79602,"min_win_rate6_8":0.594158,"min_win_rate8_10":0.660306}],"sub_hero_last":[{"hero_appearance_rate":0.002212,"hero_index":1,"hero_win_rate":0.473875,"heroid":84,"increase_win_rate":-0.147216,"min_win_rate10_12":0.116807,"min_win_rate12_14":0.191547,"min_win_rate14_16":0.253222,"min_win_rate16_18":0.357298,"min_win_rate18_20":0.410104,"min_win_rate20":0.488372,"min_win_rate6":0.312,"min_win_rate6_8":0.137931,"min_win_rate8_10":0.092857}]},"id":102827,"sourceId":2755183}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/{hero_identifier}/lane":{"get":{"tags":["academy"],"summary":"Hero Lane Distribution","description":"Retrieve lane distribution information for a specific hero. Supports query parameters for pagination and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero lane distribution data:\n- **records**: Array of hero entries, each containing:\n    - **data**:\n        - **hero_id**: Unique hero identifier.\n        - **hero**:\n            - **data**:\n                - **roadsort**: Array of lane assignments, each containing:\n                    - **_id**: Unique record identifier.\n                    - **caption**: Localized lane caption (e.g., '打野').\n                    - **configId**: Configuration ID.\n                    - **createdAt**: Creation timestamp.\n                    - **createdUser**: Creator username.\n                    - **updatedAt**: Last update timestamp.\n                    - **updatedUser**: Last updater username.\n                    - **data**:\n                        - **road_sort_id**: Lane ID (e.g., '4').\n                        - **road_sort_title**: Lane title (e.g., 'Jungle').\n                        - **road_sort_icon**: Lane icon URL.\n\nThis endpoint is useful for:\n- Analyzing hero lane preferences.\n- Understanding optimal lane assignments.\n- Guiding players in hero positioning strategies.","operationId":"api_academy_heroes_lane_api_academy_heroes__hero_identifier__lane_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"data":{"hero":{"data":{"roadsort":[{"_id":"668541caaa8e7f6ec4703d8a","caption":"打野","configId":144237,"createdAt":1720009162509,"createdUser":"nickjin","data":{"_object":2732073,"road_sort_icon":"https://akmweb.youngjoygame.com/web/gms/image/de611167c7310681135f0b4198137bfa.svg","road_sort_id":"4","road_sort_title":"Jungle"},"id":2732080,"linkId":[2732073],"sort":0,"updatedAt":1723022951463,"updatedUser":"nickjin"},""]}},"hero_id":17}}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/{hero_identifier}/win-rate/timeline":{"get":{"tags":["academy"],"summary":"Hero Lane Time-based Win Rate","description":"Retrieve time-based win rate statistics for a specific hero in a given lane. Supports query parameters for rank, pagination, and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **lane**: Lane. Allowed values: `exp`, `mid`, `roam`, `jungle`, `gold`. from `/api/academy/heroes/{hero_identifier}/lane` \n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero lane time-based win rate data:\n- **records**: Array of hero entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **heroid**: Hero ID.\n        - **hero_name**: Hero name.\n        - **real_road**: Lane ID (e.g., 4 for Jungle).\n        - **total_win_rate**: Overall win rate for the hero in this lane.\n        - **time_win_rate**: Array of segmented win rates by match duration:\n            - **time_min**: Minimum time interval (minutes).\n            - **time_max**: Maximum time interval (minutes).\n            - **win_rate**: Win rate within that time range.\n\nThis endpoint is useful for:\n- Analyzing hero performance progression over match duration.\n- Understanding lane-specific strengths.\n- Guiding players in timing strategies for optimal hero usage.","operationId":"api_academy_heroes_time_win_rate_api_academy_heroes__hero_identifier__win_rate_timeline_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`. Name matching ignores spaces/symbols and is case-insensitive (e.g., `Luo Yi` to `luoyi`)."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`. Name matching ignores spaces/symbols and is case-insensitive (e.g., `Luo Yi` to `luoyi`)."},{"name":"lane","in":"query","required":true,"schema":{"$ref":"#/components/schemas/HeroLaneEnum","title":"Lane","description":"Filter heroes by lane `/api/academy/heroes/{hero_identifier}/lane`."},"description":"Filter heroes by lane `/api/academy/heroes/{hero_identifier}/lane`."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1774890905268,"_id":"69caaf9b54ae2bda46ed0aeb","_updatedAt":1774890905268,"data":{"big_rank":"101","hero_name":"梵妮","heroid":17,"real_road":1,"time_win_rate":[{"time_max":12,"time_min":10,"win_rate":0.3304550611370226}],"total_win_rate":0.4135894042088245},"id":4234813,"sourceId":2777027}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/{hero_identifier}/builds":{"get":{"tags":["academy"],"summary":"Hero Recommended Builds","description":"Path parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **lane**: Lane. Allowed values: `exp`, `mid`, `roam`, `jungle`, `gold`. from `/api/academy/heroes/{hero_identifier}/lane` \n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero build data:\n- **records**: Array of build entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **heroid**: Hero ID.\n        - **hero_name**: Hero name.\n        - **real_road**: Lane assignment ID.\n        - **build**: Array of recommended builds, each containing:\n            - **equipid**: List of equipment IDs.\n            - **emblem**: Emblem configuration:\n                - **emblemid**: Emblem ID.\n                - **emblemname**: Emblem name.\n                - **emblemattr**: Emblem attributes (e.g., '+10% Spell Vamp').\n                - **attriicon**: Emblem attribute icon URL.\n            - **battleskill**: Battle spell configuration:\n                - **battleskillid**: Battle spell ID.\n                - **skillname**: Spell name (e.g., 'Retribution').\n                - **skillshortdesc**: Short description.\n                - **skilldesc**: Full description of spell effects.\n                - **skillicon**: Spell icon URL.\n            - **runeid**: Rune ID.\n            - **new_rune_skill**: Array of rune skill IDs.\n            - **build_pick_rate**: Pick rate of the build.\n            - **build_win_rate**: Win rate of the build.\n\nThis endpoint is useful for:\n- Displaying historical or community-recommended builds.\n- Providing backward compatibility for older integrations.\n- Should be replaced with newer endpoints for up-to-date build recommendations.","operationId":"api_academy_heroes_builds_api_academy_heroes__hero_identifier__builds_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"lane","in":"query","required":true,"schema":{"$ref":"#/components/schemas/HeroLaneEnum","title":"Lane","description":"Filter heroes by lane (`/api/academy/heroes/{hero_identifier}/lane`)."},"description":"Filter heroes by lane (`/api/academy/heroes/{hero_identifier}/lane`)."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1774899901345,"_id":"69cad2be54ae2bda46ed4019","_updatedAt":1774899901345,"data":{"big_rank":"9","build":[{"battleskill":{"data":{"__data":{"skilldesc":"Deal 520 (+80*Hero Level) <font color=\"ffe63c\">True Damage</font> to the target Creep or Minion.\n<font color=\"62f8fe\">Passive</font>: Increases Creep rewards by 60% and reduces damage taken from basic Creeps by 40%. Also grants 15% additional Damage Reduction in the allied jungle during the first 2 min. Cannot share Minion rewards with allied heroes in the first 5 min.\n<font color=\"62f8fe\">Blessing:</font> Accumulate 5 Creep kills, hero kills, or assists to upgrade the spell according to the Jungling Boots' Blessing, and <Num9> kills or assists to gain <Num10> Physical Attack and Magic Power and <Num11> Max HP.","skilldescemblem":"Deal 520 (+80*Hero Level) <font color=\"ffe63c\">True Damage</font> to the target Creep or Minion.\n<font color=\"62f8fe\">Passive</font>: Increases Creep rewards by 60% and reduces damage taken from basic Creeps by 40%. Also grants 15% additional Damage Reduction in the allied jungle during the first 2 min. Cannot share Minion rewards with allied heroes in the first 5 min.\n<font color=\"62f8fe\">Blessing:</font> Accumulate 5 Creep kills, hero kills, or assists to upgrade the spell according to the Jungling Boots' Blessing, and <Num9> kills or assists to gain <Num10> Physical Attack and Magic Power and <Num11> Max HP.","skillicon":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_2cd084a2661c121c347facb060a80377.png","skillid":20020,"skillname":"Retribution"},"battleskillid":20020,"skillshortdesc":"Jungle Special"}},"build_pick_rate":0.0128607932777792,"build_win_rate":0.6308437856328392,"emblem":{"data":{"attriicon":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_ae89ce5b37dcd804686133c8d7044430.png","emblemattr":{"emblemattr":"+14 Adaptive Penetration\n+10 Adaptive Attack\n+3% Movement Speed\n","emblemattrid":"2000560","emblemname":"Assassin"},"emblemid":20005,"emblemname":"Assassin"}},"equipid":[3007,3001,2013],"new_rune_skill":[112,122,631],"runeid":20005,"skillid":20020}],"hero_name":"梵妮","heroid":17,"real_road":4},"id":4236127,"sourceId":2776688}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/{hero_identifier}/counters":{"get":{"tags":["academy"],"summary":"Hero Counters","description":"Retrieve counter information for a specific hero. Supports query parameters for rank, pagination, and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero counter data:\n- **records**: Array of hero entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **main_heroid**: Target hero ID.\n        - **main_hero_ban_rate**: Ban rate of the target hero.\n        - **main_hero_pick_rate**: Pick rate of the target hero.\n        - **main_hero_win_rate**: Win rate of the target hero.\n        - **sub_hero**: Array of counter heroes, each containing:\n            - **heroid**: Counter hero ID.\n            - **hero_win_rate**: Win rate of the counter hero.\n            - **increase_win_rate**: Impact value showing how much this hero improves or reduces win rate against the target.\n\nThis endpoint is useful for:\n- Analyzing which heroes perform well against the target hero.\n- Understanding matchup dynamics.\n- Guiding players in drafting strategies.","operationId":"api_academy_heroes_counters_api_academy_heroes__hero_identifier__counters_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1774899901719,"_id":"69cad2be54ae2bda46ed3d55","_updatedAt":1774899901719,"data":{"big_rank":"9","camp_type":"0","main_hero_ban_rate":0.08109399676322937,"main_hero_pick_rate":0.010181000456213951,"main_hero_win_rate":0.4657759964466095,"main_heroid":17,"sub_hero":[{"hero_win_rate":0.428453,"heroid":39,"increase_win_rate":-0.011633}]},"id":1756034,"sourceId":2777391}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/{hero_identifier}/teammates":{"get":{"tags":["academy"],"summary":"Hero Teammates","description":"Retrieve teammate information for a specific hero. Supports query parameters for rank, pagination, and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero teammate data:\n- **records**: Array of hero entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **main_heroid**: Target hero ID.\n        - **main_hero_ban_rate**: Ban rate of the target hero.\n        - **main_hero_pick_rate**: Pick rate of the target hero.\n        - **main_hero_win_rate**: Win rate of the target hero.\n        - **sub_hero**: Array of teammate heroes, each containing:\n            - **heroid**: Teammate hero ID.\n            - **hero_win_rate**: Win rate of the teammate hero.\n            - **increase_win_rate**: Impact value showing how much this hero improves or reduces win rate when paired with the target.\n\nThis endpoint is useful for:\n- Analyzing which heroes synergize well with the target hero.\n- Understanding team composition dynamics.\n- Guiding players in drafting strategies.","operationId":"api_academy_heroes_teammates_api_academy_heroes__hero_identifier__teammates_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1774899901719,"_id":"69cad2be54ae2bda46ed3ce7","_updatedAt":1774899901719,"data":{"big_rank":"9","camp_type":"1","main_hero_ban_rate":0.08109399676322937,"main_hero_pick_rate":0.010181000456213951,"main_hero_win_rate":0.4657759964466095,"main_heroid":17,"sub_hero":[{"hero_win_rate":0.442802,"heroid":69,"increase_win_rate":-0.114625}]},"id":1755924,"sourceId":2777391}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/{hero_identifier}/trends":{"get":{"tags":["academy"],"summary":"Hero Performance Trends","description":"Retrieve trend information for a specific hero over a selected time window. Supports query parameters for days, rank, pagination, and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **days**: Trend window in days. Allowed values: `7`, `15`, `30`.\n- **rank**: Rank filter. Allowed values: `all`, `epic`, `legend`, `mythic`, `honor`, `glory`.\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero performance trend data:\n- **records**: Array of hero entries, each containing:\n    - **_id**: Unique record identifier.\n    - **_createdAt**: Creation timestamp.\n    - **_updatedAt**: Last update timestamp.\n    - **data**:\n        - **main_heroid**: Hero ID.\n        - **bigrank**: Rank context ID.\n        - **camp_type**: Camp type indicator.\n        - **match_type**: Match type indicator.\n        - **win_rate**: Array of daily statistics, each containing:\n            - **date**: Date of record.\n            - **app_rate**: Appearance rate.\n            - **ban_rate**: Ban rate.\n            - **win_rate**: Win rate.\n\nThis endpoint is useful for:\n- Tracking hero performance changes over time.\n- Identifying meta shifts across ranks.\n- Guiding players in understanding how a hero’s effectiveness evolves across different ranks and timeframes.","operationId":"api_academy_heroes_trends_api_academy_heroes__hero_identifier__trends_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"days","in":"query","required":false,"schema":{"enum":["7","15","30"],"type":"string","title":"Trend Window (Days)","description":"Time window for trend data in days.","default":"7"},"description":"Time window for trend data in days."},{"name":"rank","in":"query","required":false,"schema":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"Rank","description":"Rank filter for hero statistics.","default":"all"},"description":"Rank filter for hero statistics."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"_createdAt":1725607498066,"_id":"66daae4b2bc97a5ed5c98d29","_updatedAt":1774965307654,"data":{"bigrank":"9","camp_type":"1","main_heroid":17,"match_type":"1","win_rate":[{"app_rate":0.00919,"ban_rate":0.058604,"date":"2026-03-30","win_rate":0.450255}]},"id":104186,"sourceId":2755185}],"total":1}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/{hero_identifier}/recommended":{"get":{"tags":["academy"],"summary":"Hero Recommended Content","description":"Retrieve recommended content for a specific hero. Supports query parameters for pagination, sorting, and localization.\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **size**: Number of items per page (minimum: 1).\n- **index**: Page index (starting from 1).\n- **order**: Sort order for recommendation hotness or creation time. Allowed values: `asc`, `desc`.\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero recommended content data:\n- **records**: Array of recommended entries, each containing:\n    - **createdAt**: Creation timestamp.\n    - **updatedAt**: Last update timestamp.\n    - **data**:\n        - **channels**: Content channels (e.g., 'UGC', 'recommend').\n        - **type**: Content type (e.g., 'ugc_hero').\n        - **state**: Content state (e.g., 'release').\n        - **data**:\n            - **hero**: Hero metadata including:\n                - **hero_id**: Hero ID.\n                - **hero_lane**: Lane assignment.\n                - **hero_tags**: Array of tag IDs.\n            - **equips**: Recommended equipment builds with IDs and descriptions.\n            - **emblems**: Recommended emblem sets with IDs and descriptions.\n            - **spell**: Recommended battle spell with ID and description.\n            - **cooperates**: Cooperative hero synergies with descriptions and rates.\n            - **counters**: Counter heroes with descriptions and rates.\n            - **dominants**: Dominant strategies or tips.\n            - **recommend**: General recommendation notes.\n            - **snapshot**: Snapshot image URL.\n            - **game_version**: Version reference.\n            - **language**: Content language.\n            - **pages**: Content sections (e.g., 'hero', 'spell', 'equip').\n            - **title**: Guide or build title.\n        - **user**: Author metadata including:\n            - **name**: Author name.\n            - **avatar**: Author avatar URL.\n            - **level**: Author level.\n            - **roleId**: Role ID.\n            - **zoneId**: Zone ID.\n        - **dynamic**: Engagement metrics:\n            - **views**: Total views.\n            - **hot**: Hotness score.\n            - **votes**: Total votes.\n            - **views_by_4h_total_24h**: Views in last 24h.\n        - **vote_all**: Voting metadata:\n            - **target**: Target content ID.\n            - **vote**: Vote ID reference.\n\nThis endpoint is useful for:\n- Surfacing curated or community-recommended hero guides.\n- Providing builds, emblems, and strategies tailored to a hero.\n- Highlighting cooperative and counter hero recommendations.\n- Guiding players with contextual tips and shared experiences.","operationId":"api_academy_heroes_recommended_api_academy_heroes__hero_identifier__recommended_get","parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Size","description":"Number of items per page.","default":20},"description":"Number of items per page."},{"name":"index","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Page Index","description":"Page index for pagination.","default":1},"description":"Page index for pagination."},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"title":"Sort Order","description":"Sort order for recommendation hotness and creation time.","default":"desc"},"description":"Sort order for recommendation hotness and creation time."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyCollectionResponse"},"example":{"code":0,"message":"OK","data":{"records":[{"createdAt":1774934989925,"data":{"channels":["UGC","recommend"],"data":{"cooperates":[{"cooperate_desc":"Tigreal's ulti helps a lot to finished up squishy hero like mm or mage.","cooperate_hero_id":6,"cooperate_rate":80}],"counters":[{"counter_desc":"One shot saber is very dangerous for late game fanny","counter_hero_id":3,"counter_rate":60}],"data_version":1,"dominants":[{"dominant_desc":"practice using her steel cables efficiently by aiming at walls to move faster and avoid wasting energy. Always secure the blue buff early, as Fanny depends heavily on energy to keep attacking and moving. Focus on targeting low-health backline heroes like marksmen and mages, and avoid engaging when enemy crowd control skills are available. Use quick in-and-out combos to finish enemies and escape safely, and constantly watch the map to plan your movement paths. With proper timing, energy management, and positioning, Fanny can dominate the game as a deadly finisher.","dominant_title":"Cable mastery"}],"emblems":[{"emblem_desc":"Fanny benefits greatly from a custom Assassin Emblem setup with Rapture, Seasoned Hunter, and Lethal Ignition in Mobile Legends: Bang Bang because it maximizes her jungle efficiency and burst potential. Rapture provides additional physical penetration, allowing Fanny to deal higher damage even against slightly tanky targets. Seasoned Hunter boosts her damage to jungle monsters and objectives like Turtle and Lord, helping her farm faster and secure objectives more reliably—crucial for maintaining energy through blue buff. Meanwhile, Lethal Ignition adds an extra burst of damage after consecutive hits, perfectly complementing her cable combo playstyle to quickly finish off enemies. This setup makes her more effective in both early-game farming and late-game assassinations.","emblem_gifts":[511,122,631],"emblem_id":20005,"emblem_title":"Farming and Damage"}],"equips":[{"equip_desc":"This build is very effective for finished off the low hp heros like marksman and mages. Its one shot at middle of the game.","equip_ids":[3007,3522,2014,3001,3012,3008],"equip_title":"Brust - one shot"}],"game_version":"2.1.18","hero":{"hero_id":17,"hero_lane":"4","hero_overview":"Fanny is a high-skill Assassin in Mobile Legends: Bang Bang, known for her incredible mobility using steel cables that let her fly across the battlefield. Once a determined soldier from the Moniyan Empire who trained relentlessly to protect her homeland, Fanny developed her unique combat style to strike enemies with unmatched speed and precision. As a jungler, she excels at fast farming routes—typically starting from the blue buff to sustain her energy, then quickly clearing nearby camps and rotating to secure kills or objectives.\nWith an aggressive, high-risk gameplay style, Fanny thrives as a finisher who dives into the backline to eliminate low-health enemies instantly. Her burst damage combined with precise cable control allows skilled players to snowball early and dominate the map. However, mastering her energy management and execution is crucial, as a single mistake can leave her vulnerable to crowd control and quick elimination.","hero_strength":"Fanny excels as one of the most mobile and explosive assassins in Mobile Legends: Bang Bang, with the ability to traverse the map at incredible speed using her steel cables. Her greatest strength lies in her high burst damage, allowing her to quickly eliminate squishy backline targets like marksmen and mages. Fanny also has exceptional snowball potential, meaning a strong early game can let her dominate the entire match. In skilled hands, she becomes extremely hard to catch or counter, making her a constant threat who can engage and disengage fights effortlessly.","hero_tags":[4,2,7],"hero_weakness":"Fanny has several significant weaknesses in Mobile Legends: Bang Bang, mainly due to her high skill dependency and energy limitations. She relies heavily on precise cable control and proper energy management, meaning even a small mistake can leave her unable to escape or deal damage. Fanny is also extremely vulnerable to crowd control effects like stun or suppression, which can instantly shut her down. Additionally, she struggles if she falls behind early, as she depends on snowballing to stay effective, making her a risky pick for inexperienced players."},"language":"en","pages":["hero","spell","emblem","equip","dominant","cooperate"],"recommend":"It's only for damage build jungler fanny role.","snapshot":"https://akmweb.youngjoygame.com/web/academy/image/2f2418601c0e1999393b45c90087991b.jpeg","spell":{"spell_desc":"Fanny requires Retribution as a jungler in Mobile Legends: Bang Bang because it significantly boosts her farming speed and overall efficiency in the early game. Since Fanny depends heavily on securing the blue buff to maintain her energy for continuous cable usage, Retribution helps her clear jungle camps faster and safely secure objectives like buffs, Turtle, and Lord. This spell also enhances her ability to snowball by allowing quicker rotations and level advantage, which is crucial for her aggressive playstyle as a finisher. Without Retribution, her jungle clear becomes slower and less reliable, making it harder for her to dominate the map.","spell_id":20020},"title":"Aggressive Fanny game style"},"state":"release","type":"ugc_hero"},"dynamic":{"hot":174.92,"views":1,"views_by_4h_1":1,"views_by_4h_total_24h":1},"form":{"id":2737553},"id":1097234759066688,"uin":"mlbb:2534:102531841","updatedAt":1774936017556,"user":{"avatar":"https://akmpicture.youngjoygame.com/dist/face/2534/41/18/31_new_37cc2e29-a6ff-43c5-a0ec-f126a7a5c96a.jpg","historyRankLevel":209,"level":123,"module":"mlbb","name":"Ɖѻñäs","roleId":102531841,"zoneId":2534},"vote_all":{"target":"1097234759066688","vote":{"id":2758890}}}],"total":359}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/ratings":{"get":{"tags":["academy"],"summary":"Hero Ratings Index","description":"Retrieve a list of all hero ratings and community polls. Supports query parameter for localization.\n\nQuery parameters:\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero ratings data:\n- **list**: Array of rating subjects, each containing:\n    - **subject**: Poll subject ID.\n    - **title**: Poll title (e.g., 'Vote for MLBB's Charismatic Queens!').\n    - **desc**: Poll description.\n    - **comment_count**: Number of comments.\n    - **ranking**: Array of ranked hero entries, each containing:\n        - **object**: Hero object ID.\n        - **title**: Hero name.\n        - **image**: Hero image URL.\n        - **image_big**: Larger hero image URL.\n        - **channel**: Array of channel IDs.\n        - **score**: Hero score value (e.g., '9.1').\n        - **score_total**: Total score points accumulated.\n        - **score_count**: Number of votes.\n        - **hot_comment**: Highlighted comment.\n        - **hashtags**: Optional hashtags associated with the poll.\n\nThis endpoint is useful for:\n- Displaying community-driven hero ratings.\n- Tracking popularity trends.\n- Surfacing thematic polls such as 'Most Charismatic Hero' or 'Top Jungler'.","operationId":"api_academy_heroes_ratings_api_academy_heroes_ratings_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyRatingsResponse"},"example":{"code":0,"message":"Success","traceID":"5eddcf24147754aadd27438d7634f630","data":{"total":12,"list":[{"subject":3275335,"title":"Vote for MLBB's Charismatic Queens! Which female hero in the Land of Dawn has the most mature charm?","desc":"They are battlefield leaders with commanding presence; mysterious, mature sages; and pillars of strength hiding their edge behind gentleness. With their unshakeable aura and mature elegance, these female heroes command attention the moment they enter the fray. Which MLBB female hero best embodies both mature charm and strength for you? Vote now to crown the Land of Dawn's ultimate Queen of Charisma!","comment_count":890,"ranking":[{"object":"3209965","title":"Zetian","image":"https://akmweb.youngjoygame.com/web/gms/image/20a263b2adb23ad40cd955b9abf4bbb0.jpg","image_big":"https://akmweb.youngjoygame.com/web/gms/image/b617a6b4d9e2c22a5bc24d886e453399.jpg","channel":[3168724,3168728],"score":"9.2","score_total":2398,"score_count":262,"hot_comment":"Gugu"}]}],"has_more":true}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/academy/heroes/ratings/{subject}":{"get":{"tags":["academy"],"summary":"Hero Ratings by Subject","description":"Retrieve hero ratings for a specific subject from the ratings index. Supports query parameter for localization.\n\nPath parameters:\n- **subject**: Rating subject key from the ratings index response (7 characters).\n\nQuery parameters:\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes hero rating data for the chosen subject:\n- **list**: Array of hero entries, each containing:\n    - **object**: Hero object ID.\n    - **title**: Hero name (e.g., 'Fanny').\n    - **image**: Hero image URL.\n    - **image_big**: Larger hero image URL.\n    - **channel**: Array of channel IDs.\n    - **score**: Hero score value (e.g., '8.8').\n    - **score_total**: Total score points accumulated.\n    - **score_count**: Number of votes.\n    - **hot_comment**: Highlighted community comment.\n    - **hashtags**: Optional hashtags associated with the poll.\n\nThis endpoint is useful for:\n- Displaying detailed ratings within a chosen poll or theme.\n- Allowing players to explore community sentiment.\n- Surfacing popularity for heroes in specific categories (e.g., 'Top Jungler', 'Most Charismatic Hero').","operationId":"api_academy_heroes_ratings_subject_api_academy_heroes_ratings__subject__get","parameters":[{"name":"subject","in":"path","required":true,"schema":{"type":"string","minLength":7,"maxLength":7,"title":"Rating Subject","description":"Rating subject ID from the ratings index response."},"description":"Rating subject ID from the ratings index response."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcademyRatingsResponse"},"example":{"code":0,"message":"Success","traceID":"69cf858d38125ea8f27eef33d6330a9d","data":{"total":20,"list":[{"object":"3209965","title":"Zetian","image":"https://akmweb.youngjoygame.com/web/gms/image/20a263b2adb23ad40cd955b9abf4bbb0.jpg","image_big":"https://akmweb.youngjoygame.com/web/gms/image/b617a6b4d9e2c22a5bc24d886e453399.jpg","channel":[3168724,3168728],"score":"9.2","score_total":2398,"score_count":262,"hot_comment":"Gugu"}],"subject":{"id":"3275335","title":"Vote for MLBB's Charismatic Queens! Which female hero in the Land of Dawn has the most mature charm?","desc":"They are battlefield leaders with commanding presence; mysterious, mature sages; and pillars of strength hiding their edge behind gentleness. With their unshakeable aura and mature elegance, these female heroes command attention the moment they enter the fray. Which MLBB female hero best embodies both mature charm and strength for you? Vote now to crown the Land of Dawn's ultimate Queen of Charisma!"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/auth/send-vc":{"post":{"tags":["user"],"summary":"Send Verification Code","description":"Send an in-game verification code to the player's account, valid for 5 mins. This endpoint is part of the authentication flow and is used to validate ownership of a game account.\n\nRequest body:\n- **role_id**: Player role identifier (Game ID).\n- **zone_id**: Server zone identifier (Server ID).\n\nThe response confirms whether the verification code was successfully dispatched:\n- **code**: Status code (0 indicates success).\n- **data**: Empty string (no payload returned).\n- **msg**: Message string (e.g., 'ok').\n\nUseful for account authentication flows, linking user identity, and validating account ownership.","operationId":"api_user_send_verification_code_api_user_auth_send_vc_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSendVcRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAuthSimpleResponse"},"example":{"code":0,"data":"","msg":"ok"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/auth/login":{"post":{"tags":["user"],"summary":"Login with Verification Code","description":"Authenticate the player using a verification code to obtain a JWT and session token. This endpoint completes the account login flow, establishes a secure session, and enables authorized access to user-specific resources.\n\nRequest body:\n- **role_id**: Player role identifier.\n- **zone_id**: Server zone identifier.\n- **vc**: Verification code sent to the player via in-game mail, valid 5 mins.\n\nThe response includes authentication details:\n- **code**: Status code (0 indicates success).\n- **data.jwt**: JSON Web Token used for subsequent authenticated requests.\n- **data.token**: Session token string.\n- **data.roleid**: Player role ID.\n- **data.zoneid**: Player zone ID.\n- **data.time**: Timestamp of login.\n- **data.module, name, email, mobile, open_id**: Metadata fields (may be empty depending on account).\n\nThe response confirms successful login and provides the credentials required for accessing other user endpoints.","operationId":"api_user_login_api_user_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLoginResponse"},"example":{"code":0,"data":{"email":"","jwt":"eyJhbGciOiJI...REDACTED","mobile":"","module":"","name":"","open_id":"","roleid":1234567890,"time":1774975992,"token":"MTc3ND...REDACTED","zoneid":1234},"msg":"ok"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/auth/logout":{"post":{"tags":["user"],"summary":"Logout","description":"Invalidate the player's session using the JWT obtained from `/api/user/auth/login`. This endpoint terminates the current authenticated session, ensuring that the JWT can no longer be used for authorized requests.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nThe response confirms whether the logout was successful:\n- **code**: Status code (0 indicates success).\n- **data**: Empty string (no payload returned).\n- **msg**: Message string (e.g., 'ok').\n\nNote: Although the login response also includes a `token` field, only the JWT is required for logout. The server uses the JWT to invalidate the session.","operationId":"api_user_logout_api_user_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAuthSimpleResponse"},"example":{"code":0,"data":"","msg":"ok"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/user/info":{"get":{"tags":["user"],"summary":"User Info","description":"Retrieve the authenticated player's base profile information using a valid JWT. Supports query parameter for localization (`lang`). Requires an Authorization header with the JWT from login.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nQuery parameters:\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes player details:\n- **avatar**: Avatar image URL.\n- **name**: Display name.\n- **level**: Current player level.\n- **rank_level**: Current rank level.\n- **history_rank_level**: Highest historical rank level.\n- **reg_country**: Registered country code.\n- **roleId**: Player role identifier.\n- **zoneId**: Server zone identifier.\n\nUseful for displaying identity card information, verifying account ownership, and populating player profile data in client applications.","operationId":"api_user_info_api_user_info_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfoResponse"},"example":{"code":0,"data":{"avatar":"https://akmpicture.youngjoygame.com/dist/face/57060/66/96/1149309666_26_new_9ced56d6-3625-48c3-85d1-0b862a2044e7.jpg","history_rank_level":9999,"level":200,"name":"SAYA AKAN LAWAN","rank_level":8000,"reg_country":"ID","roleId":1234567890,"zoneId":123456},"msg":"ok"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/stats":{"get":{"tags":["user"],"summary":"User Statistics","description":"Retrieve the authenticated player's overall statistics using a valid JWT. Supports query parameter for localization (`lang`). Requires an Authorization header with the JWT from login.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nQuery parameters:\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes general player statistics:\n- **wc**: Win Count (total matches won).\n- **tc**: Total Count (total matches played).\n- **as**: Average Score (overall performance rating, as/100).\n- **gt**: Game Time (total play time duration in hours).\n- **mvpc**: MVP Count (number of times player earned MVP).\n- **wsc**: Win Streak Count (longest consecutive wins).\n\nHero-specific highlights:\n- **mo**: Most Often (hero most damage dealt).\n- **hk**: Highest Kills (hero with the most kills).\n- **ma**: Most Assists (hero contributing the most assists).\n- **ms**: Most Score (hero with the highest accumulated score).\n- **mdt**: Most Damage Taken (hero absorbing the most damage).\n- **mg**: Most Gold (hero earning the most gold).\n- **mtd**: Most Total Damage (hero dealing the most damage overall).\n\nEach hero highlight includes metadata such as:\n    - **v**: Value or statistic for the highlight. if `ms` is used, it calculates `v/100`.\n    - **ts**: Timestamp of the highlight.\n    - **hid**: Hero ID.\n    - **n**: Hero name.\n    - **ix**: Hero image URL.\n    - **i2x**: Large hero image URL.\n    - **bid**: Battle ID reference.\n\nThis endpoint is useful for:\n- Analyzing overall player performance.\n- Identifying favorite heroes.\n- Showcasing personal achievements in MLBB.","operationId":"api_user_stats_api_user_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserStatsResponse"},"example":{"code":0,"message":"Success","traceID":"b506b47e790797eb1f9762d2f1586496","data":{"wc":188,"tc":308,"as":762.3552,"gt":77.95,"mvpc":73,"wsc":11,"mo":{"v":112848,"ts":1726010389,"hid":36,"bid":4110381620662451700,"sid":0,"hid_e":{"id":36,"n":"Aurora","ix":"https://akmweb.youngjoygame.com/web/gms/image/ed2295c60bd772b89b7bdbbc2aee6095.png","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_58b97db6a5c286059057d42289612b16.jpg"},"bid_s":"4110381620662451526"},"hk":{"v":25,"ts":1672500616,"hid":84,"bid":4108435467847910000,"sid":0,"hid_e":{"id":84,"n":"Ling","ix":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/community/100_af4312bae7aa443129b46a17b4dce3a6.png","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_f76a7dfe805afa316e5ec44295b75772.jpg"},"bid_s":"4108435467847910024"},"ma":{"v":31,"ts":1725653347,"hid":20,"bid":4109721990994840000,"sid":0,"hid_e":{"id":20,"n":"Lolita","ix":"https://akmweb.youngjoygame.com/web/gms/image/ce1c7af1a946f70585e40296ba85c9c0.jpg","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_1bc4973e512cf4958fe639e12391666e.jpg"},"bid_s":"4109721990994840266"},"ms":{"v":1330,"ts":1715555863,"hid":84,"bid":4110821683001146000,"sid":0,"hid_e":{"id":84,"n":"Ling","ix":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/community/100_af4312bae7aa443129b46a17b4dce3a6.png","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_f76a7dfe805afa316e5ec44295b75772.jpg"},"bid_s":"4110821683001146109"},"mdt":{"v":372063,"ts":1727227888,"hid":20,"bid":4109978035471765500,"sid":0,"hid_e":{"id":20,"n":"Lolita","ix":"https://akmweb.youngjoygame.com/web/gms/image/ce1c7af1a946f70585e40296ba85c9c0.jpg","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_1bc4973e512cf4958fe639e12391666e.jpg"},"bid_s":"4109978035471765660"},"mg":{"v":22282,"ts":1718939040,"hid":84,"bid":4116060748536699000,"sid":0,"hid_e":{"id":84,"n":"Ling","ix":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/community/100_af4312bae7aa443129b46a17b4dce3a6.png","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_f76a7dfe805afa316e5ec44295b75772.jpg"},"bid_s":"4116060748536698631"},"mtd":{"v":27152,"ts":1719290587,"hid":65,"bid":4110233968270030300,"sid":0,"hid_e":{"id":65,"n":"Claude","ix":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/community/100_7ed528f154dd4f460c59361ab0ed7942.png","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_1edf19b0839ffd2bffb60b4ee4953239.jpg"},"bid_s":"4110233968270030438"},"sids":[40,39,38,37]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/privacy/settings":{"get":{"tags":["user"],"summary":"User Privacy Settings","description":"Retrieve the authenticated player's privacy settings using a valid JWT. Supports query parameter for localization (`lang`). Requires an Authorization header with the JWT from login.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nQuery parameters:\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes:\n- **popup_shown**: Whether the privacy popup has been shown to the user.\n- **privacy**: Current privacy state (true/false).","operationId":"api_user_privacy_settings_api_user_privacy_settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPrivacySettingsResponse"},"example":{"code":0,"message":"Success","traceID":"410b98229c4a2ab35edddb49df774922","data":{"popup_shown":true,"privacy":false}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["user"],"summary":"Update User Privacy Settings","description":"Update the authenticated player's privacy settings using a valid JWT. Supports query parameter for localization (`lang`). Requires an Authorization header with the JWT from login.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nQuery parameters:\n- **visibility**: Visibility mode. Use `visible` to allow friends to view your profile, and `invisible` to hide your profile from friends. This parameter is required.\n- **lang**: Language code for localized content (default: `en`).","operationId":"api_user_update_privacy_settings_api_user_privacy_settings_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"visibility","in":"query","required":true,"schema":{"$ref":"#/components/schemas/VisibilityEnum","title":"Profile Visibility","description":"Profile visibility mode. Choose `visible` to let friends view your profile, or `invisible` to hide your profile from friends."},"description":"Profile visibility mode. Choose `visible` to let friends view your profile, or `invisible` to hide your profile from friends."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPrivacySettingsResponse"},"example":{"code":0,"message":"Success","traceID":"410b98229c4a2ab35edddb49df774922","data":{"popup_shown":true,"privacy":false}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/season":{"get":{"tags":["user"],"summary":"User Season List","description":"Retrieve the authenticated player's season information using a valid JWT. Supports query parameter for localization (`lang`). Requires an Authorization header with the JWT from login.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nQuery parameters:\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes:\n- **sids**: List of season identifiers representing the seasons in which the player has participated or has tracked statistics.\n\nThis endpoint is useful for:\n- Displaying season history.\n- Linking performance data to specific seasons.\n- Enabling clients to fetch season-specific stats or achievements.","operationId":"api_user_season_api_user_season_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSeasonResponse"},"example":{"code":0,"message":"Success","traceID":"74879d32961c1784a762671398979ac6","data":{"sids":[40,39,38,37]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/matches":{"get":{"tags":["user"],"summary":"User Matches","description":"Retrieve the authenticated player's recent matches information using a valid JWT. Supports query parameters for season filtering, pagination, and localization. Requires an Authorization header with the JWT from login.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nQuery parameters:\n- **sid**: Season ID for filtering matches (must be a valid season ID from `/api/user/season`).\n- **limit**: Maximum number of matches to retrieve (minimum: 1).\n- **last_cursor**: Cursor for pagination. Use the value from `pageInfo.nextCursor` in the current response. If `pageInfo.hasNext` is `false` or `pageInfo.nextCursor` is empty, there is no next page.\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes match details:\n- **sid**: Season ID.\n- **bid**: Battle ID (unique match reference).\n- **hid**: Hero ID used in the match.\n- **k**: Kills.\n- **d**: Deaths.\n- **a**: Assists.\n- **lid**: Lane ID (1 EXP, 2 Mid, 3 Roam, 4 Jungle, 5 Gold).\n- **s**: Score (performance rating for the match, s/100).\n- **mvp**: MVP flag (1 if MVP, 0 otherwise).\n- **res**: Result (1 = Win, 0 = Loss).\n- **ts**: Timestamp of the match.\n- **hid_e**: Hero entity metadata (hero ID, name, images).\n- **bid_s**: String battle ID representation.\n\nPagination example:\n    First request: `/api/user/matches?sid=40&limit=10&lang=en` → response includes `pageInfo.nextCursor = 4139649383291049463`.\n    Second request: `/api/user/matches?sid=40&limit=10&last_cursor=4139649383291049463&lang=en` → retrieves the next page, using `pageInfo.nextCursor` from the current response.\n    Stop pagination when `pageInfo.hasNext = false` or `pageInfo.nextCursor` is empty.\n\nThe response also includes pagination metadata:\n- **pageInfo.nextCursor**: Cursor value for the next page.\n- **pageInfo.hasNext**: Boolean flag indicating if more results are available.\n- **pageInfo.count**: Number of results returned in the current page.\n\nThis endpoint is useful for:\n- Reconstructing match history.\n- Analyzing player performance.\n- Enabling clients to paginate reliably through a player's matches.","operationId":"api_user_matches_api_user_matches_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sid","in":"query","required":true,"schema":{"type":"integer","title":"Season ID","description":"The season ID for filtering recent matches."},"description":"The season ID for filtering recent matches."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Limit","description":"The maximum number of recent matches to retrieve.","default":10},"description":"The maximum number of recent matches to retrieve."},{"name":"last_cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Cursor","description":"Pagination cursor from `pageInfo.nextCursor` of the current response."},"description":"Pagination cursor from `pageInfo.nextCursor` of the current response."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMatchesResponse"},"example":{"code":0,"message":"Success","traceID":"53cd62802d24dc512ffd908e1d6d06bc","data":{"pageInfo":{"nextCursor":"4143043017340290910","hasNext":true,"count":1},"result":[{"sid":40,"bid":4132717739868068400,"hid":17,"k":14,"d":1,"a":11,"lid":4,"s":1180,"mvp":0,"res":1,"ts":1774857999,"hid_e":{"id":17,"n":"Fanny","ix":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/community/100_ae8ca46da01da69619a6c03dc7069921.png","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_74fabc6c0d5db065fbb836b6879f36ca.jpg"},"bid_s":"4132717739868068534"}]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/matches/{match_id}":{"get":{"tags":["user"],"summary":"User Match Details","description":"Retrieve the authenticated player's detailed match information using a valid JWT. Supports query parameters for season filtering and localization. Requires an Authorization header with the JWT from login.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nPath parameters:\n- **match_id**: Unique identifier of the match (from `bid_s` in `/api/user/matches`).\n\nQuery parameters:\n- **sid**: Season ID for filtering (must be a valid season ID from `/api/user/season`).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes per-player match details:\n- **f**: Team flag (1 = Team A, 2 = Team B).\n- **hid**: Hero ID used in the match.\n- **rid**: Role ID (unique player identifier).\n- **zid**: Zone ID (server region).\n- **k**: Kills.\n- **d**: Deaths.\n- **a**: Assists.\n- **tfr**: Team Fight Rate (contribution ratio in team fights, `tfr*100`%).\n- **o**: Output (total damage dealt or hero damage).\n- **op**: Output Percentage (damage contribution relative to team).\n- **s**: Score (performance rating, `s/100`).\n- **mvp**: MVP flag (1 if MVP, 0 otherwise).\n- **its**: Item IDs equipped during the match.\n- **its_e**: Item entity metadata:\n    - **id**: Item ID.\n    - **n**: Item name.\n    - **ix**: Item image URL.\n    - **i2x**: Large item image URL.\n- **eq**: Equipment slot indicator.\n- **ts**: Timestamp of the match.\n- **bd**: Battle duration (seconds).\n- **fk**: First Kill flag (total kills in a team).\n- **fw**: First Win flag (`1` for Win, `0` for Loss).\n- **hid_e**: Hero entity metadata:\n    - **id**: Hero ID.\n    - **n**: Hero name.\n    - **ix**: Hero image URL.\n    - **i2x**: Large hero image URL.\n- **hlvl**: Hero level reached in the match.\n- **rname**: Role name (localized string, e.g., 'ジャングラー').\n\nThis endpoint provides a full breakdown of each participant in the match, including:\n    - Hero choice.\n    - Performance stats (kills, deaths, assists, damage).\n    - Items built with metadata.\n    - Role assignment and team contribution.\n\nIt is useful for:\n    - Reconstructing match history.\n    - Analyzing team compositions.\n    - Evaluating player performance in detail.","operationId":"api_user_match_details_api_user_matches__match_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"integer","title":"Match ID","description":"The unique identifier of the match to retrieve details for."},"description":"The unique identifier of the match to retrieve details for."},{"name":"sid","in":"query","required":true,"schema":{"type":"integer","title":"Season ID","description":"The season ID for filtering recent matches."},"description":"The season ID for filtering recent matches."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMatchDetailsResponse"},"example":{"code":0,"message":"Success","traceID":"4d96357b092ade76774481366567bcaf","data":{"result":[{"f":2,"hid":31,"rid":1880233572,"zid":57027,"k":4,"d":9,"a":6,"tfr":0.4167,"o":83974,"op":0.2202,"s":509,"mvp":0,"its":[2305,3002,3005,3015,3003,3013,0],"eq":0,"ts":1773837471,"bd":1292,"fk":24,"fw":0,"hid_e":{"id":31,"n":"Moskov","ix":"https://akmweb.youngjoygame.com/web/gms/image/5c4587c25e681be1aecfda0cfbe44714.png","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_843f1c2c3a1b2d4da2fc2ec73cf47cfa.jpg"},"its_e":[{"id":2305,"n":"Swift Boots","ix":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/homepage/100_b31a355cc85682eed8d9e0dc163fd756.png","i2x":""},null],"hlvl":15,"rname":"ᴵᵐŦungiℓ"}]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/heroes/frequent":{"get":{"tags":["user"],"summary":"User Frequent Heroes","description":"Retrieve the authenticated player's frequent heroes information using a valid JWT. Supports query parameters for season filtering, pagination, and localization. Requires an Authorization header with the JWT from login.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nQuery parameters:\n- **sid**: Season ID for filtering frequent heroes (must be a valid season ID from `/api/user/season`).\n- **limit**: Maximum number of heroes to retrieve (minimum: 1).\n- **last_cursor**: Cursor for pagination. Use the value from `pageInfo.nextCursor` in the current response. If `pageInfo.hasNext` is `false` or `pageInfo.nextCursor` is empty, there is no next page.\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes frequent hero usage details:\n- **hid**: Hero ID.\n- **tc**: Total Count (number of matches played with this hero).\n- **wc**: Win Count (number of matches won with this hero).\n- **bs**: Battle Score (average performance rating, `bs/100`).\n- **mr**: Match Rating (accumulated rating points).\n- **mrp**: Match Rating Percentage (rating contribution relative to overall performance).\n- **hid_e**: Hero entity metadata:\n    - **id**: Hero ID.\n    - **n**: Hero name.\n    - **ix**: Hero image URL.\n    - **i2x**: Large hero image URL.\n- **p**: Power score (weighted performance index for ranking frequent heroes, also called `MMR`).\n\nPagination example:\n    First request: `/api/user/heroes/frequent?sid=37&limit=5&lang=en` → response includes `pageInfo.nextCursor = 11`.\n    Second request: `/api/user/heroes/frequent?sid=37&limit=5&last_cursor=11&lang=en` → retrieves the next page, using `pageInfo.nextCursor` from the current response.\n    Stop pagination when `pageInfo.hasNext = false` or `pageInfo.nextCursor` is empty.\n\nThe response also includes pagination metadata:\n- **pageInfo.nextCursor**: Cursor value for the next page.\n- **pageInfo.hasNext**: Boolean flag indicating if more results are available.\n- **pageInfo.count**: Number of results returned in the current page.\n\nThis endpoint is useful for:\n- Analyzing which heroes a player uses most often.\n- Tracking win rates and performance scores.\n- Comparing hero usage across different seasons.","operationId":"api_user_frequent_heroes_api_user_heroes_frequent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sid","in":"query","required":true,"schema":{"type":"integer","title":"Season ID","description":"The season ID for filtering frequent heroes."},"description":"The season ID for filtering frequent heroes."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Limit","description":"The maximum number of frequent heroes to retrieve.","default":5},"description":"The maximum number of frequent heroes to retrieve."},{"name":"last_cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Cursor","description":"Pagination cursor from `pageInfo.nextCursor` of the current response."},"description":"Pagination cursor from `pageInfo.nextCursor` of the current response."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFrequentHeroesResponse"},"example":{"code":0,"message":"Success","traceID":"6b098c3c683f977217a91bb6c630e7be","data":{"pageInfo":{"nextCursor":"","hasNext":true,"count":0},"result":[{"hid":17,"tc":8,"wc":7,"bs":844.875,"mr":6626,"mrp":0.6188,"hid_e":{"id":17,"n":"Fanny","ix":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/community/100_ae8ca46da01da69619a6c03dc7069921.png","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_74fabc6c0d5db065fbb836b6879f36ca.jpg"},"p":1460}]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/matches/hero/{hero_identifier}":{"get":{"tags":["user"],"summary":"User Matches by Hero","description":"Retrieve the authenticated player's recent matches filtered by a specific hero using a valid JWT. Supports query parameters for season filtering, pagination, and localization. Requires an Authorization header with the JWT from login.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nPath parameters:\n- **hero_identifier**: Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`.\n\nQuery parameters:\n- **sid**: Season ID for filtering matches (must be a valid season ID from `/api/user/season`).\n- **limit**: Maximum number of matches to retrieve (minimum: 1).\n- **last_cursor**: Cursor for pagination. Use the value from `pageInfo.nextCursor` in the current response. If `pageInfo.hasNext` is `false` or `pageInfo.nextCursor` is empty, there is no next page.\n- **lang**: Language code for localized content (default: `en`).\n\nResponse structure:\n- **code**: Status code (0 indicates success).\n- **message**: Response message from upstream service.\n- **traceID**: Upstream trace identifier for request debugging/tracking.\n- **data**: Main payload object.\n    - **pageInfo**: Pagination metadata object.\n        - **nextCursor**: Cursor value for the next page, used for pagination.\n        - **hasNext**: Boolean flag indicating whether more results are available.\n        - **count**: Number of results returned in the current page.\n    - **hi**: Aggregated hero summary for the selected hero and season.\n        - **hid**: Hero ID.\n        - **tc**: Total Count (matches played with this hero).\n        - **wc**: Win Count (matches won with this hero).\n        - **bs**: Battle Score (average score; interpret as `bs/100` when non-zero).\n        - **mr**: Match Rating points for this hero.\n        - **mrp**: Match Rating percentage/contribution.\n        - **hid_e**: Hero metadata object.\n            - **id**: Hero ID metadata.\n            - **n**: Hero name.\n            - **ix**: Hero image URL.\n            - **i2x**: Large hero image URL.\n        - **p**: Hero power/MMR-style value.\n    - **result**: Array of match entries for this hero.\n        - **sid**: Season ID.\n        - **bid**: Battle ID (numeric).\n        - **hid**: Hero ID used in that match.\n        - **k**: Kills.\n        - **d**: Deaths.\n        - **a**: Assists.\n        - **lid**: Lane ID (1 EXP, 2 Mid, 3 Roam, 4 Jungle, 5 Gold).\n        - **s**: Match score/performance value (commonly interpreted as `s/100`).\n        - **mvp**: MVP flag (1 if MVP, 0 otherwise).\n        - **res**: Result (1 = Win, 0 = Loss).\n        - **ts**: Match timestamp (unix time).\n        - **hid_e**: Hero metadata object.\n            - **id**: Hero ID metadata.\n            - **n**: Hero name.\n            - **ix**: Hero image URL.\n            - **i2x**: Large hero image URL.\n        - **bid_s**: String battle ID.\n\nPagination example:\n    First request: `/api/user/matches/hero/17?sid=40&limit=10&lang=en`\n    Next request: `/api/user/matches/hero/17?sid=40&limit=10&last_cursor=<pageInfo.nextCursor>&lang=en`\n    Stop pagination when `pageInfo.hasNext = false` or `pageInfo.nextCursor` is empty.","operationId":"api_user_matches_by_hero_api_user_matches_hero__hero_identifier__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hero_identifier","in":"path","required":true,"schema":{"type":"string","title":"Hero Identifier","description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},"description":"Hero identifier as numeric hero ID or hero name. Accepts values like `30`, `Yi Sun-shin`, or `yisunshin`."},{"name":"sid","in":"query","required":true,"schema":{"type":"integer","title":"Season ID","description":"The season ID for filtering matches by hero."},"description":"The season ID for filtering matches by hero."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"title":"Limit","description":"The maximum number of matches to retrieve.","default":10},"description":"The maximum number of matches to retrieve."},{"name":"last_cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Last Cursor","description":"Pagination cursor from `pageInfo.nextCursor` of the current response."},"description":"Pagination cursor from `pageInfo.nextCursor` of the current response."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserMatchesByHeroResponse"},"example":{"code":0,"message":"Success","traceID":"15b79802139dd7766774f6e84ffc31bd","data":{"pageInfo":{"nextCursor":"","hasNext":false,"count":0},"hi":{"hid":17,"tc":9,"wc":8,"bs":0,"mr":6788,"mrp":0.6641,"hid_e":{"id":17,"n":"Fanny","ix":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/community/100_ae8ca46da01da69619a6c03dc7069921.png","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_74fabc6c0d5db065fbb836b6879f36ca.jpg"},"p":1496},"result":[{"sid":40,"bid":4138442308503475824,"hid":17,"k":7,"d":3,"a":7,"lid":4,"s":810,"mvp":0,"res":1,"ts":1774955310,"hid_e":{"id":17,"n":"Fanny","ix":"https://akmweb.youngjoygame.com/web/svnres/img/mlbb/community/100_ae8ca46da01da69619a6c03dc7069921.png","i2x":"https://akmweb.youngjoygame.com/web/svnres/file/mlbb/homepage/100_74fabc6c0d5db065fbb836b6879f36ca.jpg"},"bid_s":"4138442308503475824"}]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/user/friends":{"get":{"tags":["user"],"summary":"User Friends","description":"Retrieve the authenticated player's friends information using a valid JWT. Supports query parameters for season filtering and localization. Requires an Authorization header with the JWT from login.\n\nHeaders:\n- **Authorization**: `Bearer <jwt>` (JWT obtained during login).\n\nQuery parameters:\n- **sid**: Season ID for filtering friends (must be a valid season ID from `/api/user/season`).\n- **lang**: Language code for localized content (default: `en`).\n\nThe response includes friend statistics and metadata:\n- **bfs**: Best Friends (highlighted or prioritized friends list, may be null).\n- **wfs**: Weekly Friends (friends interacted with recently, may be empty).\n- **fs**: Friends list entries, each containing:\n    - **f**: Friend object with identifiers:\n        - **rid**: Role ID (unique player identifier).\n        - **zid**: Zone ID (server region).\n        - **n**: Name (may be empty if private).\n        - **ax**: Avatar URL (may be empty).\n        - **pri**: Privacy flag (true if details are hidden).\n    - **frid**: Friend Role ID (unique identifier for the friend).\n    - **fzid**: Friend Zone ID (server region for the friend).\n    - **cl**: Current Level of the friend.\n    - **l**: Level (same as cl, sometimes duplicated).\n    - **tbc**: Total Battle Count (matches played together).\n    - **twc**: Total Win Count (matches won together).\n\nThis endpoint is useful for:\n- Displaying a player's friend list.\n- Tracking shared match history.\n- Analyzing cooperative performance with friends across different seasons.","operationId":"api_user_friends_api_user_friends_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sid","in":"query","required":true,"schema":{"type":"integer","title":"Season ID","description":"The season ID for filtering friends."},"description":"The season ID for filtering friends."},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"Language","description":"Language code for localized content.","default":"en"},"description":"Language code for localized content."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserFriendsResponse"},"example":{"code":0,"message":"Success","traceID":"e0516a11c845c6ca93a1a43178c2f510","data":{"wfs":[],"fs":[{"f":{"rid":0,"zid":0,"n":"","ax":"","pri":true},"frid":0,"fzid":0,"cl":42,"l":42,"tbc":7,"twc":6}]}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/addon/win-rate-calculator":{"get":{"tags":["addon"],"summary":"Win Rate Calculator for Consecutive Wins","description":"Calculate the number of consecutive wins required to reach a target win rate based on current matches and current win rate.\n\nQuery parameters:\n- **match-now**: Current total number of matches played (minimum: 0).\n- **wr-now**: Current win rate in percent (range: 0-100).\n- **wr-future**: Target win rate in percent. Must be greater than current win rate and between 0-100.\n\nThe response includes win rate calculation data:\n- **status**: Response status (e.g., 'success').\n- **match_now**: Current total matches played.\n- **wr_now**: Current win rate.\n- **wr_future**: Target win rate.\n- **required_no_lose_matches**: Number of consecutive wins required without losses to reach the target win rate.\n- **message**: Explanation message summarizing the result.\n\nThis endpoint is useful for:\n- Calculating how many consecutive wins are needed to reach a desired win rate.\n- Helping players set realistic performance goals.\n- Providing analytics for win rate progression.","operationId":"api_addon_win_rate_calculator_api_addon_win_rate_calculator_get","parameters":[{"name":"match-now","in":"query","required":true,"schema":{"type":"integer","minimum":0,"title":"Current Matches Played","description":"Current total number of matches played. Must be a non-negative integer."},"description":"Current total number of matches played. Must be a non-negative integer."},{"name":"wr-now","in":"query","required":true,"schema":{"type":"number","maximum":100,"minimum":0,"title":"Current Win Rate","description":"Current win rate in percent. Must be a value between 0 and 100."},"description":"Current win rate in percent. Must be a value between 0 and 100."},{"name":"wr-future","in":"query","required":true,"schema":{"type":"number","maximum":100,"exclusiveMinimum":0,"title":"Target Win Rate","description":"Target win rate in percent. Must be greater than the current win rate and between 0 and 100."},"description":"Target win rate in percent. Must be greater than the current win rate and between 0 and 100."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddonWinRateResponse"},"example":{"status":"success","match_now":100,"wr_now":50,"wr_future":75,"required_no_lose_matches":100,"message":"To achieve a win rate of 75.0%, you need 100 consecutive wins without any losses."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/addon/ip":{"get":{"tags":["addon"],"summary":"Check IP address location details","description":"Retrieves geographic information associated with a given IP address. No parameters required.\n\nThe response includes IP location data:\n- **code**: Response code (e.g., 0).\n- **msg**: Status message (e.g., 'ok').\n- **data**:\n    - **city**: City name (e.g., 'Yogyakarta').\n    - **state**: State or region (e.g., 'Yogyakarta').\n    - **country**: Country code (e.g., 'id').\n    - **lang**: Language code (e.g., 'en').\n\nThis endpoint is useful for:\n- Identifying approximate geographic location of an IP address.\n- Supporting analytics and personalization.\n- Performing security checks and contextual validation.","operationId":"api_addon_ip_location_api_addon_ip_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddonIpResponse"},"example":{"code":0,"data":{"city":"Yogyakarta","country":"id","lang":"en","state":"Yogyakarta"},"msg":"ok"}}}}}}}},"components":{"schemas":{"AcademyCollectionData":{"properties":{"records":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Records"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"}},"additionalProperties":true,"type":"object","title":"AcademyCollectionData"},"AcademyCollectionResponse":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/AcademyCollectionData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"AcademyCollectionResponse"},"AcademyRatingsData":{"properties":{"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"list":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"List"},"has_more":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has More"},"subject":{"anyOf":[{"$ref":"#/components/schemas/AcademyRatingsSubjectData"},{"type":"null"}]}},"additionalProperties":true,"type":"object","title":"AcademyRatingsData"},"AcademyRatingsResponse":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"},"data":{"anyOf":[{"$ref":"#/components/schemas/AcademyRatingsData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"}},"additionalProperties":true,"type":"object","required":["code"],"title":"AcademyRatingsResponse"},"AcademyRatingsSubjectData":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"desc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Desc"}},"additionalProperties":true,"type":"object","title":"AcademyRatingsSubjectData"},"AddonIpData":{"properties":{"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang"},"client_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Ip"}},"additionalProperties":true,"type":"object","title":"AddonIpData"},"AddonIpResponse":{"properties":{"code":{"type":"integer","title":"Code"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"data":{"anyOf":[{"$ref":"#/components/schemas/AddonIpData"},{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object"},{"type":"null"}],"title":"Data"}},"additionalProperties":true,"type":"object","required":["code"],"title":"AddonIpResponse"},"AddonWinRateResponse":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"match_now":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Match Now"},"wr_now":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wr Now"},"wr_future":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wr Future"},"required_no_lose_matches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Required No Lose Matches"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"additionalProperties":true,"type":"object","title":"AddonWinRateResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HeroLaneEnum":{"type":"string","enum":["exp","mid","roam","jungle","gold"],"title":"HeroLaneEnum","description":"Enum for hero lanes."},"LanguageEnum":{"type":"string","enum":["en","id","ru","es","pt","tr","ar","de","fr","it","ja","ko","th","vi","zh-CN","zh-TW"],"title":"LanguageEnum","description":"Language codes for localized content."},"MlbbCollectionData":{"properties":{"records":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Records"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"}},"additionalProperties":true,"type":"object","title":"MlbbCollectionData"},"MlbbCollectionResponse":{"properties":{"code":{"type":"integer","title":"Code"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{"$ref":"#/components/schemas/MlbbCollectionData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"MlbbCollectionResponse"},"RankEnum":{"type":"string","enum":["all","epic","legend","mythic","honor","glory"],"title":"RankEnum","description":"Rank filter for hero statistics."},"SortOrderEnum":{"type":"string","enum":["asc","desc"],"title":"SortOrderEnum","description":"Sort order for query results."},"UserAuthSimpleResponse":{"properties":{"code":{"type":"integer","title":"Code"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"data":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserAuthSimpleResponse"},"UserEntity":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"n":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"N"},"ix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ix"},"i2x":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"I2X"}},"additionalProperties":true,"type":"object","title":"UserEntity"},"UserFrequentHeroEntry":{"properties":{"hid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hid"},"tc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tc"},"wc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wc"},"bs":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bs"},"mr":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mr"},"mrp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mrp"},"hid_e":{"anyOf":[{"$ref":"#/components/schemas/UserEntity"},{"type":"null"}]},"p":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"P"}},"additionalProperties":true,"type":"object","title":"UserFrequentHeroEntry"},"UserFrequentHeroesData":{"properties":{"pageInfo":{"anyOf":[{"$ref":"#/components/schemas/UserPageInfo"},{"type":"null"}]},"result":{"items":{"$ref":"#/components/schemas/UserFrequentHeroEntry"},"type":"array","title":"Result"}},"additionalProperties":true,"type":"object","title":"UserFrequentHeroesData"},"UserFrequentHeroesResponse":{"properties":{"code":{"type":"integer","title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/UserFrequentHeroesData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserFrequentHeroesResponse"},"UserFriendEntry":{"properties":{"f":{"anyOf":[{"$ref":"#/components/schemas/UserFriendProfile"},{"type":"null"}]},"frid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Frid"},"fzid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fzid"},"cl":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cl"},"l":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"L"},"tbc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tbc"},"twc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Twc"}},"additionalProperties":true,"type":"object","title":"UserFriendEntry"},"UserFriendProfile":{"properties":{"rid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rid"},"zid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Zid"},"n":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"N"},"ax":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ax"},"pri":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pri"}},"additionalProperties":true,"type":"object","title":"UserFriendProfile"},"UserFriendsData":{"properties":{"bfs":{"anyOf":[{},{"type":"null"}],"title":"Bfs"},"wfs":{"items":{},"type":"array","title":"Wfs"},"fs":{"items":{"$ref":"#/components/schemas/UserFriendEntry"},"type":"array","title":"Fs"}},"additionalProperties":true,"type":"object","title":"UserFriendsData"},"UserFriendsResponse":{"properties":{"code":{"type":"integer","title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/UserFriendsData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserFriendsResponse"},"UserInfoData":{"properties":{"avatar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Level"},"rank_level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank Level"},"history_rank_level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"History Rank Level"},"reg_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reg Country"},"roleId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Roleid"},"zoneId":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Zoneid"}},"additionalProperties":true,"type":"object","title":"UserInfoData"},"UserInfoResponse":{"properties":{"code":{"type":"integer","title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/UserInfoData"},{"additionalProperties":true,"type":"object"},{"type":"string"},{"type":"null"}],"title":"Data"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserInfoResponse"},"UserItemEntity":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"n":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"N"},"ix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ix"},"i2x":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"I2X"}},"additionalProperties":true,"type":"object","title":"UserItemEntity"},"UserLoginData":{"properties":{"jwt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jwt"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"roleid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Roleid"},"zoneid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Zoneid"},"time":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Time"}},"additionalProperties":true,"type":"object","title":"UserLoginData"},"UserLoginRequest":{"properties":{"role_id":{"type":"integer","title":"Role ID","description":"The unique role ID of the player's account. (Game ID)","examples":[1234567890]},"zone_id":{"type":"integer","title":"Zone ID","description":"The zone ID associated with the player's server region. (Server ID)","examples":[1234]},"vc":{"type":"integer","title":"Verification Code","description":"The 4-digit verification code, obtained through in-game mail via the send-vc endpoint, remains valid for 5 minutes.","examples":[1234]}},"additionalProperties":false,"type":"object","required":["role_id","zone_id","vc"],"title":"UserLoginRequest","description":"Request model for user login with verification code.","example":{"role_id":1234567890,"zone_id":1234,"vc":1234}},"UserLoginResponse":{"properties":{"code":{"type":"integer","title":"Code"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"data":{"anyOf":[{"$ref":"#/components/schemas/UserLoginData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserLoginResponse"},"UserMatchDetailEntry":{"properties":{"f":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"F"},"hid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hid"},"rid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rid"},"zid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Zid"},"k":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K"},"d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"D"},"a":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"A"},"tfr":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tfr"},"o":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"O"},"op":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Op"},"s":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"S"},"mvp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mvp"},"its":{"items":{"type":"integer"},"type":"array","title":"Its"},"eq":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Eq"},"ts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ts"},"bd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bd"},"fk":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fk"},"fw":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fw"},"hid_e":{"anyOf":[{"$ref":"#/components/schemas/UserEntity"},{"type":"null"}]},"its_e":{"items":{"anyOf":[{"$ref":"#/components/schemas/UserItemEntity"},{"type":"null"}]},"type":"array","title":"Its E"},"hlvl":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hlvl"},"rname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rname"}},"additionalProperties":true,"type":"object","title":"UserMatchDetailEntry"},"UserMatchDetailsData":{"properties":{"result":{"items":{"$ref":"#/components/schemas/UserMatchDetailEntry"},"type":"array","title":"Result"}},"additionalProperties":true,"type":"object","title":"UserMatchDetailsData"},"UserMatchDetailsResponse":{"properties":{"code":{"type":"integer","title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/UserMatchDetailsData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserMatchDetailsResponse"},"UserMatchSummary":{"properties":{"sid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sid"},"bid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bid"},"hid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hid"},"k":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"K"},"d":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"D"},"a":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"A"},"lid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lid"},"s":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"S"},"mvp":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mvp"},"res":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Res"},"ts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ts"},"hid_e":{"anyOf":[{"$ref":"#/components/schemas/UserEntity"},{"type":"null"}]},"bid_s":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bid S"}},"additionalProperties":true,"type":"object","title":"UserMatchSummary"},"UserMatchesByHeroData":{"properties":{"pageInfo":{"anyOf":[{"$ref":"#/components/schemas/UserPageInfo"},{"type":"null"}]},"hi":{"anyOf":[{"$ref":"#/components/schemas/UserMatchesByHeroHeroInfo"},{"type":"null"}]},"result":{"items":{"$ref":"#/components/schemas/UserMatchSummary"},"type":"array","title":"Result"}},"additionalProperties":true,"type":"object","title":"UserMatchesByHeroData","description":"Data payload for matches filtered by a specific hero."},"UserMatchesByHeroHeroInfo":{"properties":{"hid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hid"},"tc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tc"},"wc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wc"},"bs":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bs"},"mr":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mr"},"mrp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mrp"},"hid_e":{"anyOf":[{"$ref":"#/components/schemas/UserEntity"},{"type":"null"}]},"p":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"P"}},"additionalProperties":true,"type":"object","title":"UserMatchesByHeroHeroInfo"},"UserMatchesByHeroResponse":{"properties":{"code":{"type":"integer","title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/UserMatchesByHeroData"},{"type":"null"}]},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserMatchesByHeroResponse","description":"Response model for user matches filtered by hero."},"UserMatchesData":{"properties":{"pageInfo":{"anyOf":[{"$ref":"#/components/schemas/UserPageInfo"},{"type":"null"}]},"result":{"items":{"$ref":"#/components/schemas/UserMatchSummary"},"type":"array","title":"Result"}},"additionalProperties":true,"type":"object","title":"UserMatchesData"},"UserMatchesResponse":{"properties":{"code":{"type":"integer","title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/UserMatchesData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserMatchesResponse"},"UserPageInfo":{"properties":{"nextCursor":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Nextcursor"},"hasNext":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hasnext"},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count"}},"additionalProperties":true,"type":"object","title":"UserPageInfo"},"UserPrivacySettingsData":{"properties":{"popup_shown":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Popup Shown"},"privacy":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Privacy"}},"additionalProperties":true,"type":"object","title":"UserPrivacySettingsData"},"UserPrivacySettingsResponse":{"properties":{"code":{"type":"integer","title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/UserPrivacySettingsData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserPrivacySettingsResponse"},"UserSeasonData":{"properties":{"sids":{"items":{"type":"integer"},"type":"array","title":"Sids"}},"additionalProperties":true,"type":"object","title":"UserSeasonData"},"UserSeasonResponse":{"properties":{"code":{"type":"integer","title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/UserSeasonData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserSeasonResponse"},"UserSendVcRequest":{"properties":{"role_id":{"type":"integer","title":"Role ID","description":"The unique role ID of the player's account. (Game ID)","examples":[1234567890]},"zone_id":{"type":"integer","title":"Zone ID","description":"The zone ID associated with the player's server region. (Server ID)","examples":[1234]}},"additionalProperties":false,"type":"object","required":["role_id","zone_id"],"title":"UserSendVcRequest","description":"Request model for sending a verification code.","example":{"role_id":1234567890,"zone_id":1234}},"UserStatHighlight":{"properties":{"v":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"V"},"ts":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ts"},"hid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Hid"},"bid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bid"},"sid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sid"},"hid_e":{"anyOf":[{"$ref":"#/components/schemas/UserEntity"},{"type":"null"}]},"bid_s":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bid S"}},"additionalProperties":true,"type":"object","title":"UserStatHighlight"},"UserStatsData":{"properties":{"wc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wc"},"tc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tc"},"as":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"As"},"gt":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gt"},"mvpc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mvpc"},"wsc":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wsc"},"mo":{"anyOf":[{"$ref":"#/components/schemas/UserStatHighlight"},{"type":"null"}]},"hk":{"anyOf":[{"$ref":"#/components/schemas/UserStatHighlight"},{"type":"null"}]},"ma":{"anyOf":[{"$ref":"#/components/schemas/UserStatHighlight"},{"type":"null"}]},"ms":{"anyOf":[{"$ref":"#/components/schemas/UserStatHighlight"},{"type":"null"}]},"mdt":{"anyOf":[{"$ref":"#/components/schemas/UserStatHighlight"},{"type":"null"}]},"mg":{"anyOf":[{"$ref":"#/components/schemas/UserStatHighlight"},{"type":"null"}]},"mtd":{"anyOf":[{"$ref":"#/components/schemas/UserStatHighlight"},{"type":"null"}]},"sids":{"items":{"type":"integer"},"type":"array","title":"Sids"}},"additionalProperties":true,"type":"object","title":"UserStatsData"},"UserStatsResponse":{"properties":{"code":{"type":"integer","title":"Code"},"data":{"anyOf":[{"$ref":"#/components/schemas/UserStatsData"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"msg":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Msg"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"traceID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceid"}},"additionalProperties":true,"type":"object","required":["code"],"title":"UserStatsResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VisibilityEnum":{"type":"string","enum":["visible","invisible"],"title":"VisibilityEnum","description":"Visibility mode for user privacy setting update."}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}},"tags":[{"name":"user","description":"Authentication and player-related data."},{"name":"mlbb","description":"Hero data, stats, and in-game analytics."},{"name":"academy","description":"Game guides, builds, and reference data."},{"name":"addon","description":"Utility tools and extra features."}]}