{"openapi":"3.0.3","info":{"title":"Cito API","version":"1.0.0","description":"Utilities API — QR code generation and sports/esports data (Fortnite, CoD, LoL, Apex, Dota 2, CS2, UFC, Tennis, RAF Wrestling, BKFC).","contact":{"name":"Cito API Support","url":"https://citoapi.com"},"x-logo":{"url":"https://citoapi.com/logo.png"}},"servers":[{"url":"https://api.citoapi.com/api/v1","description":"Production"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your Cito API key. Get one at https://citoapi.com"}},"schemas":{"Error":{"type":"object","properties":{"success":{"type":"boolean","example":false},"error":{"type":"string","example":"Validation error message"}}},"QrGenerateBody":{"type":"object","required":["data"],"properties":{"data":{"type":"string","description":"Text or URL to encode into the QR code.","example":"https://citoapi.com","maxLength":2048},"size":{"type":"integer","description":"Output image size in pixels (width = height).","default":300,"minimum":100,"maximum":2000,"example":400},"format":{"type":"string","description":"Output format.","enum":["png","svg","base64"],"default":"png"},"foreground":{"type":"string","description":"Foreground (dark module) hex color.","default":"#000000","example":"#000000"},"background":{"type":"string","description":"Background hex color.","default":"#ffffff","example":"#ffffff"},"margin":{"type":"integer","description":"Quiet zone width in modules.","default":4,"minimum":0,"maximum":10},"errorCorrection":{"type":"string","description":"Error correction level. Automatically forced to H when a logo is provided.","enum":["L","M","Q","H"],"default":"M"},"logo":{"type":"object","description":"Optional logo to overlay in the center of the QR code. Requires error correction H (set automatically).","required":["image"],"properties":{"image":{"type":"string","description":"Base64-encoded image with data URL prefix (e.g. data:image/png;base64,...).","example":"data:image/png;base64,iVBORw0KGgo..."},"sizeRatio":{"type":"number","description":"Logo size as a fraction of the QR code size. Capped at 0.35 to preserve scannability.","default":0.25,"minimum":0.1,"maximum":0.35},"padding":{"type":"integer","description":"White padding around the logo in pixels.","default":8,"minimum":0,"maximum":50}}}}},"TennisAllTimeTitleLeader":{"properties":{"player_id":{"type":"string","title":"Player Id","description":"Player ID"},"player_name":{"type":"string","title":"Player Name","description":"Player full name"},"titles":{"type":"integer","title":"Titles","description":"Titles count"}},"type":"object","required":["player_id","player_name","titles"],"title":"AllTimeTitleLeader","description":"Player with most titles at a tournament."},"TennisCalendarTournamentItem":{"properties":{"id":{"type":"string","title":"Id","description":"Tournament edition ID"},"name":{"type":"string","title":"Name","description":"Tournament name"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year","description":"Edition year; this route requires year as a query parameter and did not return it"},"tour":{"type":"string","title":"Tour","description":"ATP or WTA"},"level":{"type":"string","title":"Level","description":"Tier code"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Canonical event category: grand_slam, masters_1000, wta_1000, tour_finals, atp_tour, wta_tour, challenger, itf, davis_cup, billie_jean_king_cup, other. ATP 250 and ATP 500 both report atp_tour because the source does not separate them"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","description":"Tier name"},"surface":{"type":"string","title":"Surface","description":"Surface"},"start_date":{"type":"string","title":"Start Date","description":"Start date (YYYY-MM-DD)"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date","description":"End date (YYYY-MM-DD)"},"draw_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Draw Size","description":"Draw size","default":32},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"Host city"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code","description":"Country code"},"is_live_shell":{"type":"boolean","title":"Is Live Shell","description":"True for a live-feed container (s365_*) or a tour_year_code alias resolving to one; the archive has not caught up to this edition yet","default":false}},"type":"object","required":["id","name","tour","level","surface","start_date"],"title":"CalendarTournamentItem","description":"Tournament calendar event item."},"TennisCareerSummary":{"properties":{"matches_played":{"type":"integer","title":"Matches Played","description":"Total official matches played"},"matches_won":{"type":"integer","title":"Matches Won","description":"Total matches won"},"matches_lost":{"type":"integer","title":"Matches Lost","description":"Total matches lost"},"win_percentage":{"type":"number","title":"Win Percentage","description":"Career win percentage (0.0 to 100.0)"},"titles_count":{"type":"integer","title":"Titles Count","description":"Singles titles won"},"grand_slam_titles":{"type":"integer","title":"Grand Slam Titles","description":"Grand Slam singles titles won","default":0},"masters_titles":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Masters Titles","description":"Masters 1000 singles titles where computed; null when not"},"finals_reached":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Finals Reached","description":"Singles finals reached where computed; null when not"},"prize_money_usd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Prize Money Usd","description":"Not held by this dataset; always null"}},"type":"object","required":["matches_played","matches_won","matches_lost","win_percentage","titles_count"],"title":"CareerSummary","description":"Aggregated career singles win-loss and title statistics."},"TennisClutchStats":{"properties":{"tiebreaks_played":{"type":"integer","title":"Tiebreaks Played","description":"Total tiebreaks played","default":0},"tiebreaks_won":{"type":"integer","title":"Tiebreaks Won","description":"Total tiebreaks won","default":0},"tiebreak_win_pct":{"type":"number","title":"Tiebreak Win Pct","description":"Tiebreak win percentage","default":0},"deciding_set_matches":{"type":"integer","title":"Deciding Set Matches","description":"Matches that went to a deciding set","default":0},"deciding_set_wins":{"type":"integer","title":"Deciding Set Wins","description":"Deciding set matches won","default":0},"deciding_set_win_pct":{"type":"number","title":"Deciding Set Win Pct","description":"Deciding set win percentage","default":0},"after_winning_first_set_win_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"After Winning First Set Win Pct","description":"Win % after winning 1st set"},"after_losing_first_set_win_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"After Losing First Set Win Pct","description":"Win % after losing 1st set"},"vs_top_10_matches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vs Top 10 Matches","description":"Matches played against Top 10 ranked players","default":0},"vs_top_10_wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vs Top 10 Wins","description":"Matches won against Top 10 ranked players","default":0},"vs_top_10_win_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vs Top 10 Win Pct","description":"Win % against Top 10 ranked players","default":0}},"type":"object","title":"ClutchStats","description":"Clutch situational and tiebreak metrics."},"TennisDrawMatch":{"properties":{"match_id":{"type":"string","title":"Match Id","description":"Match ID"},"match_num":{"type":"integer","title":"Match Num","description":"Match order number"},"player1":{"$ref":"#/components/schemas/TennisDrawPlayer","description":"Top / First player in bracket slot"},"player2":{"$ref":"#/components/schemas/TennisDrawPlayer","description":"Bottom / Second player in bracket slot"},"score":{"type":"string","title":"Score","description":"Scoreline"},"next_match_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Match Id","description":"Target match ID in subsequent round"}},"type":"object","required":["match_id","match_num","player1","player2","score"],"title":"DrawMatch","description":"Match node in tournament draw bracket."},"TennisDrawPlayer":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Player ID"},"name":{"type":"string","title":"Name","description":"Player display name"},"ioc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ioc","description":"Country IOC code, the same key the match and h2h participant objects use"},"seed":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Seed","description":"Seeding number"},"entry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry","description":"Entry type (WC, Q, LL)"},"is_winner":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Winner","description":"Whether player advanced from this match"}},"type":"object","required":["name"],"title":"DrawPlayer","description":"Player participant node in bracket draw."},"TennisDrawRound":{"properties":{"round_code":{"type":"string","title":"Round Code","description":"Round code (e.g. F, SF, QF, R16, R32, R64, R128)"},"round_name":{"type":"string","title":"Round Name","description":"Human-readable round name"},"matches":{"items":{"$ref":"#/components/schemas/TennisDrawMatch"},"type":"array","title":"Matches","description":"Matches in this round"}},"type":"object","required":["round_code","round_name"],"title":"DrawRound","description":"Round grouping in bracket tree."},"TennisGrandSlamBreakdown":{"properties":{"australian_open":{"$ref":"#/components/schemas/TennisGrandSlamTournamentRecord"},"roland_garros":{"$ref":"#/components/schemas/TennisGrandSlamTournamentRecord"},"wimbledon":{"$ref":"#/components/schemas/TennisGrandSlamTournamentRecord"},"us_open":{"$ref":"#/components/schemas/TennisGrandSlamTournamentRecord"}},"type":"object","required":["australian_open","roland_garros","wimbledon","us_open"],"title":"GrandSlamBreakdown","description":"Career performance across the four Grand Slam majors."},"TennisGrandSlamTournamentRecord":{"properties":{"titles":{"type":"integer","title":"Titles","description":"Titles won","default":0},"finals":{"type":"integer","title":"Finals","description":"Finals reached","default":0},"win_loss":{"type":"string","title":"Win Loss","description":"Career win-loss record string","default":"0-0"},"win_pct":{"type":"number","title":"Win Pct","description":"Match win percentage","default":0}},"type":"object","title":"GrandSlamTournamentRecord","description":"Performance metrics for an individual Grand Slam tournament."},"TennisH2HDecidingSetsRecord":{"properties":{"player1_deciding_set_wins":{"type":"integer","title":"Player1 Deciding Set Wins","description":"Deciding set matches won by Player 1","default":0},"player2_deciding_set_wins":{"type":"integer","title":"Player2 Deciding Set Wins","description":"Deciding set matches won by Player 2","default":0},"total_deciding_sets":{"type":"integer","title":"Total Deciding Sets","description":"Total deciding set matches played","default":0}},"type":"object","title":"H2HDecidingSetsRecord","description":"Head-to-head deciding sets tally."},"TennisH2HFormatBreakdown":{"properties":{"best_of_3":{"$ref":"#/components/schemas/TennisH2HLevelItem"},"best_of_5":{"$ref":"#/components/schemas/TennisH2HLevelItem"}},"type":"object","title":"H2HFormatBreakdown","description":"Head-to-head breakdown by match length (best of 3 vs best of 5)."},"TennisH2HLevelBreakdown":{"properties":{"grand_slam":{"$ref":"#/components/schemas/TennisH2HLevelItem"},"masters_1000":{"$ref":"#/components/schemas/TennisH2HLevelItem"},"tour_finals":{"$ref":"#/components/schemas/TennisH2HLevelItem"},"atp_500_250":{"$ref":"#/components/schemas/TennisH2HLevelItem"},"olympics_davis_cup":{"$ref":"#/components/schemas/TennisH2HLevelItem"}},"type":"object","title":"H2HLevelBreakdown","description":"Head-to-head breakdown by tournament tier."},"TennisH2HLevelItem":{"properties":{"player1_wins":{"type":"integer","title":"Player1 Wins","description":"Wins by Player 1 at this level","default":0},"player2_wins":{"type":"integer","title":"Player2 Wins","description":"Wins by Player 2 at this level","default":0},"total":{"type":"integer","title":"Total","description":"Total matches at this level","default":0}},"type":"object","title":"H2HLevelItem","description":"Level-specific head-to-head record."},"TennisH2HMatchSummary":{"properties":{"id":{"type":"string","title":"Id","description":"Match ID"},"date":{"type":"string","title":"Date","description":"Match date"},"tournament_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tournament Name","description":"Tournament name"},"surface":{"type":"string","title":"Surface","description":"Surface"},"level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Level","description":"Tournament tier"},"round":{"type":"string","title":"Round","description":"Round code"},"winner_id":{"type":"string","title":"Winner Id","description":"Winning player ID"},"winner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Winner Name","description":"Winning player name"},"score":{"type":"string","title":"Score","description":"Scoreline"}},"type":"object","required":["id","date","surface","round","winner_id","score"],"title":"H2HMatchSummary","description":"Match summary in H2H chronology."},"TennisH2HPlayerSummary":{"properties":{"id":{"type":"string","title":"Id","description":"Player ID"},"name":{"type":"string","title":"Name","description":"Player full name"},"ioc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ioc","description":"Country IOC code"},"current_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Rank","description":"Current rank"},"career_high_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Career High Rank","description":"Peak career rank"},"wins":{"type":"integer","title":"Wins","description":"Total wins against opponent"}},"type":"object","required":["id","name","wins"],"title":"H2HPlayerSummary","description":"Player summary for H2H rivalry comparison."},"TennisH2HSummary":{"properties":{"total_matches":{"type":"integer","title":"Total Matches","description":"Total encounters between the two players"},"player1_wins":{"type":"integer","title":"Player1 Wins","description":"Encounters won by Player 1"},"player2_wins":{"type":"integer","title":"Player2 Wins","description":"Encounters won by Player 2"},"player1_lead":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Player1 Lead","description":"Net lead in wins by Player 1 (can be negative)"},"finals_matches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Finals Matches","description":"Encounters in finals","default":0},"player1_finals_wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Player1 Finals Wins","description":"Finals won by Player 1","default":0},"player2_finals_wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Player2 Finals Wins","description":"Finals won by Player 2","default":0},"grand_slam_matches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Grand Slam Matches","description":"Encounters at Grand Slams","default":0},"player1_grand_slam_wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Player1 Grand Slam Wins","description":"Grand Slam matches won by Player 1","default":0},"player2_grand_slam_wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Player2 Grand Slam Wins","description":"Grand Slam matches won by Player 2","default":0}},"type":"object","required":["total_matches","player1_wins","player2_wins"],"title":"H2HSummary","description":"Head-to-head overall tallies."},"TennisH2HSurfaceBreakdown":{"properties":{"hard":{"$ref":"#/components/schemas/TennisH2HSurfaceItem"},"clay":{"$ref":"#/components/schemas/TennisH2HSurfaceItem"},"grass":{"$ref":"#/components/schemas/TennisH2HSurfaceItem"},"carpet":{"$ref":"#/components/schemas/TennisH2HSurfaceItem"}},"type":"object","title":"H2HSurfaceBreakdown","description":"Head-to-head surface breakdown across Hard, Clay, Grass, Carpet."},"TennisH2HSurfaceItem":{"properties":{"player1_wins":{"type":"integer","title":"Player1 Wins","description":"Wins by Player 1 on this surface","default":0},"player2_wins":{"type":"integer","title":"Player2 Wins","description":"Wins by Player 2 on this surface","default":0},"total":{"type":"integer","title":"Total","description":"Total matches on this surface","default":0}},"type":"object","title":"H2HSurfaceItem","description":"Surface-specific head-to-head record."},"TennisH2HTiebreakRecord":{"properties":{"player1_tiebreaks_won":{"type":"integer","title":"Player1 Tiebreaks Won","description":"Tiebreaks won by Player 1","default":0},"player2_tiebreaks_won":{"type":"integer","title":"Player2 Tiebreaks Won","description":"Tiebreaks won by Player 2","default":0},"total_tiebreaks":{"type":"integer","title":"Total Tiebreaks","description":"Total tiebreaks played between the two","default":0}},"type":"object","title":"H2HTiebreakRecord","description":"Head-to-head tiebreak tally."},"TennisHTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/TennisValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"TennisHeadToHeadMatrixResponse":{"properties":{"players":{"items":{"$ref":"#/components/schemas/TennisH2HPlayerSummary"},"type":"array","title":"Players","description":"List of compared players"},"matrix":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"type":"object","title":"Matrix","description":"H2H win-loss grid indexed by player ID pairs"}},"type":"object","required":["players","matrix"],"title":"HeadToHeadMatrixResponse","description":"Multi-player Head-to-Head comparison grid."},"TennisHeadToHeadResponse":{"properties":{"player1":{"$ref":"#/components/schemas/TennisH2HPlayerSummary","description":"Player 1 summary"},"player2":{"$ref":"#/components/schemas/TennisH2HPlayerSummary","description":"Player 2 summary"},"summary":{"$ref":"#/components/schemas/TennisH2HSummary","description":"Overall tally and key milestones"},"surface_breakdown":{"$ref":"#/components/schemas/TennisH2HSurfaceBreakdown","description":"Surface breakdown"},"level_breakdown":{"anyOf":[{"$ref":"#/components/schemas/TennisH2HLevelBreakdown"},{"type":"null"}],"description":"Tournament tier breakdown"},"format_breakdown":{"anyOf":[{"$ref":"#/components/schemas/TennisH2HFormatBreakdown"},{"type":"null"}],"description":"Best-of-3 / Best-of-5 breakdown"},"tiebreak_record":{"anyOf":[{"$ref":"#/components/schemas/TennisH2HTiebreakRecord"},{"type":"null"}],"description":"Tiebreak record"},"deciding_sets":{"anyOf":[{"$ref":"#/components/schemas/TennisH2HDecidingSetsRecord"},{"type":"null"}],"description":"Deciding sets record"},"matches":{"items":{"$ref":"#/components/schemas/TennisH2HMatchSummary"},"type":"array","title":"Matches","description":"Chronological match list"}},"type":"object","required":["player1","player2","summary","surface_breakdown"],"title":"HeadToHeadResponse","description":"Complete Head-to-Head rivalry dossier."},"TennisListResponse_CalendarTournamentItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TennisCalendarTournamentItem"},"type":"array","title":"Items","description":"The rows"},"total":{"type":"integer","title":"Total","description":"Rows matching the filter, not rows in this response"},"page":{"type":"integer","title":"Page","description":"Current page; these routes return a single page","default":1},"page_size":{"type":"integer","title":"Page Size","description":"Rows requested for this page","default":0},"total_pages":{"type":"integer","title":"Total Pages","description":"Total pages available","default":1},"has_next":{"type":"boolean","title":"Has Next","description":"Whether a subsequent page exists","default":false},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether a preceding page exists","default":false}},"type":"object","required":["items","total"],"title":"ListResponse[CalendarTournamentItem]"},"TennisListResponse_Dict_str__Any__":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items","description":"The rows"},"total":{"type":"integer","title":"Total","description":"Rows matching the filter, not rows in this response"},"page":{"type":"integer","title":"Page","description":"Current page; these routes return a single page","default":1},"page_size":{"type":"integer","title":"Page Size","description":"Rows requested for this page","default":0},"total_pages":{"type":"integer","title":"Total Pages","description":"Total pages available","default":1},"has_next":{"type":"boolean","title":"Has Next","description":"Whether a subsequent page exists","default":false},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether a preceding page exists","default":false}},"type":"object","required":["items","total"],"title":"ListResponse[Dict[str, Any]]"},"TennisListResponse_LiveMatchSummary_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TennisLiveMatchSummary"},"type":"array","title":"Items","description":"The rows"},"total":{"type":"integer","title":"Total","description":"Rows matching the filter, not rows in this response"},"page":{"type":"integer","title":"Page","description":"Current page; these routes return a single page","default":1},"page_size":{"type":"integer","title":"Page Size","description":"Rows requested for this page","default":0},"total_pages":{"type":"integer","title":"Total Pages","description":"Total pages available","default":1},"has_next":{"type":"boolean","title":"Has Next","description":"Whether a subsequent page exists","default":false},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether a preceding page exists","default":false}},"type":"object","required":["items","total"],"title":"ListResponse[LiveMatchSummary]"},"TennisListResponse_PlayerListItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TennisPlayerListItem"},"type":"array","title":"Items","description":"The rows"},"total":{"type":"integer","title":"Total","description":"Rows matching the filter, not rows in this response"},"page":{"type":"integer","title":"Page","description":"Current page; these routes return a single page","default":1},"page_size":{"type":"integer","title":"Page Size","description":"Rows requested for this page","default":0},"total_pages":{"type":"integer","title":"Total Pages","description":"Total pages available","default":1},"has_next":{"type":"boolean","title":"Has Next","description":"Whether a subsequent page exists","default":false},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether a preceding page exists","default":false}},"type":"object","required":["items","total"],"title":"ListResponse[PlayerListItem]"},"TennisListResponse_str_":{"properties":{"items":{"items":{"type":"string"},"type":"array","title":"Items","description":"The rows"},"total":{"type":"integer","title":"Total","description":"Rows matching the filter, not rows in this response"},"page":{"type":"integer","title":"Page","description":"Current page; these routes return a single page","default":1},"page_size":{"type":"integer","title":"Page Size","description":"Rows requested for this page","default":0},"total_pages":{"type":"integer","title":"Total Pages","description":"Total pages available","default":1},"has_next":{"type":"boolean","title":"Has Next","description":"Whether a subsequent page exists","default":false},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether a preceding page exists","default":false}},"type":"object","required":["items","total"],"title":"ListResponse[str]"},"TennisLiveMatchDetail":{"properties":{"id":{"type":"string","title":"Id","description":"Canonical match identifier (same value as match_id)"},"match_id":{"type":"string","title":"Match Id","description":"Unique live match ID"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At","description":"When the match went in-play (ISO 8601)"},"round_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Round Name","description":"Human label for the round code"},"tour":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour","description":"ATP or WTA"},"tournament_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tournament Id","description":"Tournament id once this match is reconciled to a tournament; null while it is still on the live feed"},"tournament_name":{"type":"string","title":"Tournament Name","description":"Tournament name"},"court":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Court","description":"Court name"},"best_of":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Best Of","description":"Best of 3 or 5","default":3},"round":{"type":"string","title":"Round","description":"Round"},"surface":{"type":"string","title":"Surface","description":"Surface","default":"Hard"},"status":{"type":"string","title":"Status","description":"Status","default":"IN_PROGRESS"},"player1":{"$ref":"#/components/schemas/TennisLivePlayerState","description":"Player 1 state"},"player2":{"$ref":"#/components/schemas/TennisLivePlayerState","description":"Player 2 state"},"winner_side":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Winner Side","description":"1 or 2 once decided; null while in progress"},"current_set":{"type":"integer","title":"Current Set","description":"Current set number","default":1},"game_score":{"type":"string","title":"Game Score","description":"Current game point score","default":"0-0"},"server":{"type":"integer","title":"Server","description":"Current server index (1 or 2)","default":1},"tiebreak_score":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tiebreak Score","description":"Active tiebreak score"},"sets":{"items":{"$ref":"#/components/schemas/TennisLiveSetScore"},"type":"array","title":"Sets","description":"Set scores"},"point_history":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Point History","description":"Recent point timeline"},"stats":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Stats","description":"Per-side match statistics"}},"type":"object","required":["id","match_id","tournament_name","round","player1","player2"],"title":"LiveMatchDetail","description":"Detailed live match state snapshot."},"TennisLiveMatchSummary":{"properties":{"id":{"type":"string","title":"Id","description":"Canonical match identifier (same value as match_id)"},"match_id":{"type":"string","title":"Match Id","description":"Unique live match ID"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At","description":"When the match went in-play (ISO 8601)"},"round_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Round Name","description":"Human label for the round code"},"tour":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour","description":"ATP or WTA"},"tournament_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tournament Id","description":"Tournament id once this match is reconciled to a tournament; null while it is still on the live feed"},"tournament_name":{"type":"string","title":"Tournament Name","description":"Tournament name"},"court":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Court","description":"Court name"},"surface":{"type":"string","title":"Surface","description":"Court surface","default":"Hard"},"round":{"type":"string","title":"Round","description":"Round code"},"best_of":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Best Of","description":"Best of 3 or 5","default":3},"status":{"type":"string","title":"Status","description":"State: NOT_STARTED, IN_PROGRESS, FINISHED","default":"IN_PROGRESS"},"outcome":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outcome","description":"Decided-match outcome (COMPLETED, RETIREMENT, ...); null while in progress (TENNIS-25 canonical-shape parity)"},"player1":{"$ref":"#/components/schemas/TennisLivePlayerState","description":"Player 1 live state"},"player2":{"$ref":"#/components/schemas/TennisLivePlayerState","description":"Player 2 live state"},"winner":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Winner","description":"Winning side once decided; null while in progress (TENNIS-25 canonical-shape parity)"},"loser":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Loser","description":"Losing side once decided; null while in progress (TENNIS-25 canonical-shape parity)"},"winner_side":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Winner Side","description":"1 or 2 once decided; null while in progress"},"current_set":{"type":"integer","title":"Current Set","description":"Current active set number","default":1},"game_score":{"type":"string","title":"Game Score","description":"Current game point score","default":"0-0"},"server":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Server","description":"Current server: 1 for Player 1, 2 for Player 2","default":1},"sets":{"items":{"$ref":"#/components/schemas/TennisLiveSetScore"},"type":"array","title":"Sets","description":"Set-by-set scores"},"stats":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Stats","description":"Per-side match statistics"},"source":{"type":"string","title":"Source","description":"Origin of this live record.","default":"simulator"}},"type":"object","required":["id","match_id","tournament_name","round","player1","player2"],"title":"LiveMatchSummary","description":"Live match summary in active feed list."},"TennisLivePlayerState":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Player ID"},"name":{"type":"string","title":"Name","description":"Player display name"},"ioc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ioc","description":"Country IOC code, the same key the match and h2h participant objects use"},"seed":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Seed","description":"Tournament seed"},"sets_won":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sets Won","description":"Completed sets won in this match","default":0},"current_game_score":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Game Score","description":"Current point score (0, 15, 30, 40, AD)","default":"0"},"is_serving":{"type":"boolean","title":"Is Serving","description":"Whether this player is currently serving","default":false}},"type":"object","required":["name"],"title":"LivePlayerState","description":"Player status in an active live match."},"TennisLiveSetScore":{"properties":{"set_num":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Set Num","description":"Set number"},"set_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Set Number","description":"Canonical set number (same value as set_num)"},"score":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Score","description":"Set score string"},"player1_games":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Player1 Games","description":"Games won by Player 1"},"player2_games":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Player2 Games","description":"Games won by Player 2"},"tiebreak":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tiebreak","description":"Tiebreak score if applicable"},"is_completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Completed","description":"Whether this set is concluded"}},"type":"object","title":"LiveSetScore","description":"Set score item in live match.\n\n``set_number`` is the canonical field name (shared with the match\narchive, which otherwise calls this ``winner_games``/``loser_games``'s\ncounterpart ``set_number``); ``set_num`` stays for back-compat."},"TennisMatchDetailResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Unique match identifier"},"tournament_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tournament Id","description":"Tournament ID"},"tournament":{"anyOf":[{"$ref":"#/components/schemas/TennisTournamentSummaryInfo"},{"type":"null"}],"description":"Tournament metadata"},"match_date":{"type":"string","title":"Match Date","description":"Match date (YYYY-MM-DD)"},"tour":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour","description":"Tour: ATP or WTA","default":"ATP"},"surface":{"type":"string","title":"Surface","description":"Surface"},"round":{"type":"string","title":"Round","description":"Round code"},"best_of":{"type":"integer","title":"Best Of","description":"Best of 3 or 5 sets","default":3},"score":{"type":"string","title":"Score","description":"Official score string (or the live scoreline while in progress)"},"outcome":{"type":"string","title":"Outcome","description":"Match outcome","default":"COMPLETED"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Canonical status: SCHEDULED, IN_PROGRESS, COMPLETED, RETIREMENT, ..."},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes","description":"Duration in minutes"},"winner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Winner Id","description":"Winner ID (null while the match is in progress)"},"loser_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loser Id","description":"Loser ID (null while the match is in progress)"},"winner_sets_won":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Winner Sets Won","description":"Sets won by the winner; null while the match is in progress, when there is no winner yet -- read sets[] for the running count"},"loser_sets_won":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Loser Sets Won","description":"Sets won by the loser; null while the match is in progress, when there is no loser yet -- read sets[] for the running count"},"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheduled At","description":"Full scheduled/kickoff timestamp (ISO 8601), when the source provides one"},"tournament_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tournament Name","description":"Tournament name as free text; populated even when `tournament`/`tournament_id` are not yet linked (e.g. a live match not yet reconciled to a tournament id)"},"round_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Round Name","description":"Human-readable round name, the same label the list routes return"},"winner":{"anyOf":[{"$ref":"#/components/schemas/TennisMatchParticipant"},{"type":"null"}],"description":"Winner details (null while in progress)"},"loser":{"anyOf":[{"$ref":"#/components/schemas/TennisMatchParticipant"},{"type":"null"}],"description":"Loser details (null while in progress)"},"player1":{"anyOf":[{"$ref":"#/components/schemas/TennisMatchParticipant"},{"type":"null"}],"description":"Canonical player1 (the winner once decided; always populated for a resolved match)"},"player2":{"anyOf":[{"$ref":"#/components/schemas/TennisMatchParticipant"},{"type":"null"}],"description":"Canonical player2 (the loser once decided; always populated for a resolved match)"},"winner_side":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Winner Side","description":"Which side won: 1 (player1), 2 (player2), or null while in progress / unknown"},"sets":{"items":{"$ref":"#/components/schemas/TennisMatchSetItem"},"type":"array","title":"Sets","description":"Set-by-set box score"},"stats":{"anyOf":[{"$ref":"#/components/schemas/TennisMatchStatsSummary"},{"type":"null"}],"description":"Match serving and return statistics"}},"type":"object","required":["id","match_date","surface","round","score"],"title":"MatchDetailResponse","description":"Comprehensive match detail response including set scores and stats.\n\nServes both archived (completed) matches and matches still on the live\nboard: the canonical ``id``/``player1``/``player2``/``status``/``sets``\nvocabulary is shared by both, so a customer can write one Match type\nagainst ``/matches/{id}`` whatever state the match is in. ``winner_id``/\n``loser_id``/``winner``/``loser`` are null while a match is still in\nprogress (there is no winner yet); ``player1``/``player2`` are always\npopulated."},"TennisMatchListItem":{"properties":{"id":{"type":"string","title":"Id","description":"Unique match identifier"},"tournament_id":{"type":"string","title":"Tournament Id","description":"Tournament identifier"},"tournament_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tournament Name","description":"Tournament name"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year","description":"Tournament year"},"match_date":{"type":"string","title":"Match Date","description":"Date of match (YYYY-MM-DD)"},"tour":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour","description":"Tour: ATP or WTA","default":"ATP"},"surface":{"type":"string","title":"Surface","description":"Court surface: Hard, Clay, Grass, Carpet"},"level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Level","description":"Tournament level tier code"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Canonical event category: grand_slam, masters_1000, wta_1000, tour_finals, atp_tour, wta_tour, challenger, itf, davis_cup, billie_jean_king_cup, other. ATP 250 and ATP 500 both report atp_tour because the source does not separate them"},"round":{"type":"string","title":"Round","description":"Round code: F, SF, QF, R16, R32, R64, R128, RR"},"round_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Round Name","description":"Human-readable round name"},"best_of":{"type":"integer","title":"Best Of","description":"Best of 3 or 5 sets","default":3},"score":{"type":"string","title":"Score","description":"Official scoreline string"},"outcome":{"type":"string","title":"Outcome","description":"Outcome: COMPLETED, RETIREMENT, WALKOVER, DEFAULT","default":"COMPLETED"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Canonical status (same vocabulary as the live feed: COMPLETED, RETIREMENT, ...)"},"duration_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Duration Minutes","description":"Match duration in minutes"},"winner_id":{"type":"string","title":"Winner Id","description":"Winning player identifier"},"loser_id":{"type":"string","title":"Loser Id","description":"Losing player identifier"},"winner":{"anyOf":[{"$ref":"#/components/schemas/TennisMatchParticipant"},{"type":"null"}],"description":"Winning player summary"},"loser":{"anyOf":[{"$ref":"#/components/schemas/TennisMatchParticipant"},{"type":"null"}],"description":"Losing player summary"},"player1":{"anyOf":[{"$ref":"#/components/schemas/TennisMatchParticipant"},{"type":"null"}],"description":"Canonical player1 (mapped from winner)"},"player2":{"anyOf":[{"$ref":"#/components/schemas/TennisMatchParticipant"},{"type":"null"}],"description":"Canonical player2 (mapped from loser)"},"sets":{"items":{"$ref":"#/components/schemas/TennisMatchSetItem"},"type":"array","title":"Sets","description":"Set-by-set box score (TENNIS-25: always present on list routes; empty until sets are played)"}},"type":"object","required":["id","tournament_id","match_date","surface","round","score","winner_id","loser_id"],"title":"MatchListItem","description":"Summary item for match directory listing."},"TennisMatchParticipant":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Player ID (null when unresolved, e.g. an unlinked doubles pair)"},"name":{"type":"string","title":"Name","description":"Player full name"},"ioc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ioc","description":"Country IOC code"},"seed":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Seed","description":"Tournament seed"},"entry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entry","description":"Entry code (e.g. Q, WC, LL, PR)"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank","description":"Official rank at time of match"},"is_winner":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Winner","description":"Winner indicator"}},"type":"object","required":["name"],"title":"MatchParticipant","description":"Player participant summary in a match.\n\n``id`` is optional so this model also covers doubles pairs and live rows,\nwhere the feed has not resolved an individual player id (e.g. a combined\npair name like \"Bolelli S./Vavassori A.\" with no per-partner id)."},"TennisMatchSetItem":{"properties":{"set_number":{"type":"integer","title":"Set Number","description":"Set number (1, 2, 3, 4, 5)"},"winner_games":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Winner Games","description":"Games won by match winner, once decided"},"loser_games":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Loser Games","description":"Games won by match loser, once decided"},"player1_games":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Player1 Games","description":"Games won by player1 (canonical, always populated)"},"player2_games":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Player2 Games","description":"Games won by player2 (canonical, always populated)"},"tiebreak":{"anyOf":[{"$ref":"#/components/schemas/TennisTiebreakDetail"},{"type":"null"}],"description":"Tiebreak points if set reached tiebreak"}},"type":"object","required":["set_number"],"title":"MatchSetItem","description":"Set-by-set box score item.\n\n``set_number`` is the canonical field name shared with the live feed\n(which otherwise calls this ``set_num``). ``player1_games``/``player2_games``\nare the canonical per-side fields, always populated; ``winner_games``/\n``loser_games`` stay for back-compat and are populated once a winner is\nknown (null while the match this set belongs to is still in progress)."},"TennisMatchStatsSummary":{"properties":{"winner":{"$ref":"#/components/schemas/TennisPlayerMatchStats"},"loser":{"$ref":"#/components/schemas/TennisPlayerMatchStats"}},"type":"object","required":["winner","loser"],"title":"MatchStatsSummary","description":"Combined match statistics for winner and loser."},"TennisPaginatedResponse_MatchListItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TennisMatchListItem"},"type":"array","title":"Items","description":"List of items for current page"},"total":{"type":"integer","title":"Total","description":"Total count of items matching filter criteria"},"page":{"type":"integer","title":"Page","description":"Current page number (1-indexed)"},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page"},"total_pages":{"type":"integer","title":"Total Pages","description":"Total number of available pages"},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there is a subsequent page"},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether there is a preceding page"}},"type":"object","required":["items","total","page","page_size","total_pages","has_next","has_prev"],"title":"PaginatedResponse[MatchListItem]"},"TennisPaginatedResponse_PlayerListItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TennisPlayerListItem"},"type":"array","title":"Items","description":"List of items for current page"},"total":{"type":"integer","title":"Total","description":"Total count of items matching filter criteria"},"page":{"type":"integer","title":"Page","description":"Current page number (1-indexed)"},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page"},"total_pages":{"type":"integer","title":"Total Pages","description":"Total number of available pages"},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there is a subsequent page"},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether there is a preceding page"}},"type":"object","required":["items","total","page","page_size","total_pages","has_next","has_prev"],"title":"PaginatedResponse[PlayerListItem]"},"TennisPaginatedResponse_TournamentListItem_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TennisTournamentListItem"},"type":"array","title":"Items","description":"List of items for current page"},"total":{"type":"integer","title":"Total","description":"Total count of items matching filter criteria"},"page":{"type":"integer","title":"Page","description":"Current page number (1-indexed)"},"page_size":{"type":"integer","title":"Page Size","description":"Number of items per page"},"total_pages":{"type":"integer","title":"Total Pages","description":"Total number of available pages"},"has_next":{"type":"boolean","title":"Has Next","description":"Whether there is a subsequent page"},"has_prev":{"type":"boolean","title":"Has Prev","description":"Whether there is a preceding page"}},"type":"object","required":["items","total","page","page_size","total_pages","has_next","has_prev"],"title":"PaginatedResponse[TournamentListItem]"},"TennisPlayerBatchResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TennisPlayerListItem"},"type":"array","title":"Items","description":"Players, in the order the ids were given"},"total":{"type":"integer","title":"Total","description":"Number of players returned"},"missing":{"items":{"type":"string"},"type":"array","title":"Missing","description":"Requested ids that do not exist"}},"type":"object","required":["items","total"],"title":"PlayerBatchResponse","description":"Many players in one call. `missing` names the ids that did not resolve."},"TennisPlayerListItem":{"properties":{"id":{"type":"string","title":"Id","description":"Unique player identifier"},"tour":{"type":"string","title":"Tour","description":"Tour federation: ATP or WTA"},"first_name":{"type":"string","title":"First Name","description":"Player given name"},"last_name":{"type":"string","title":"Last Name","description":"Player surname"},"full_name":{"type":"string","title":"Full Name","description":"Full canonical display name"},"ioc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ioc","description":"3-letter IOC country code"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code","description":"Same 3-letter code as ioc, under the key most client integrations read"},"portrait_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Portrait Url","description":"Player portrait image URL, hosted by Cito; null when we hold no photo"},"portrait_attribution":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Portrait Attribution","description":"Who to credit for the portrait; display it with the image"},"portrait_license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Portrait License","description":"Licence the portrait is published under, as stated by its source"},"portrait_source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Portrait Source Url","description":"Page the portrait came from, for attribution and licence checks"},"country_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Name","description":"Country name derived from the IOC/ISO code; null when the code is unmapped"},"nationality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nationality","description":"Same value as country_name, under the key most client integrations read"},"hand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hand","description":"Playing hand: R, L, A, U","default":"U"},"backhand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backhand","description":"Backhand style (1H/2H) where known; not held for most players"},"dob":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dob","description":"Date of birth in YYYY-MM-DD format"},"height_cm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height Cm","description":"Height in centimeters"},"weight_kg":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weight Kg","description":"Weight in kilograms"},"turned_pro":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Turned Pro","description":"Year turned professional"},"career_high_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Career High Rank","description":"Peak career ranking"},"career_high_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Career High Date","description":"Date peak ranking was attained"},"current_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Rank","description":"Current rolling ranking"},"titles_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Titles Count","description":"Total singles titles; computed on the profile route, null on the list"},"grand_slam_titles":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Grand Slam Titles","description":"Grand Slam singles titles; computed on the profile route, null on the list"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether player is currently active","default":true}},"type":"object","required":["id","tour","first_name","last_name","full_name"],"title":"PlayerListItem","description":"Summary item for player listing and filtering."},"TennisPlayerMatchStats":{"properties":{"aces":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Aces","description":"Aces served"},"double_faults":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Double Faults","description":"Double faults committed"},"serve_points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Serve Points","description":"Total service points played"},"first_serves_in":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"First Serves In","description":"First serves in"},"first_serves_won":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"First Serves Won","description":"First serve points won"},"second_serves_won":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Second Serves Won","description":"Second serve points won"},"first_serve_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"First Serve Pct","description":"1st serve in %"},"first_serve_win_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"First Serve Win Pct","description":"1st serve points won %"},"second_serve_win_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Second Serve Win Pct","description":"2nd serve points won %"},"service_games_played":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Service Games Played","description":"Service games played"},"break_points_saved":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Break Points Saved","description":"Break points saved"},"break_points_faced":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Break Points Faced","description":"Break points faced"},"break_points_converted":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Break Points Converted","description":"Break points converted"},"break_point_opportunities":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Break Point Opportunities","description":"Break point chances"},"total_points_won":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Points Won","description":"Total points won"}},"type":"object","title":"PlayerMatchStats","description":"Granular match statistics for a single player."},"TennisPlayerProfile":{"properties":{"id":{"type":"string","title":"Id","description":"Unique player identifier"},"tour":{"type":"string","title":"Tour","description":"Tour federation: ATP or WTA"},"first_name":{"type":"string","title":"First Name","description":"Given name"},"last_name":{"type":"string","title":"Last Name","description":"Surname"},"full_name":{"type":"string","title":"Full Name","description":"Canonical display name"},"ioc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ioc","description":"3-letter country code"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code","description":"Same 3-letter code as ioc, under the key most client integrations read"},"portrait_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Portrait Url","description":"Player portrait image URL, hosted by Cito; null when we hold no photo"},"portrait_attribution":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Portrait Attribution","description":"Who to credit for the portrait; display it with the image"},"portrait_license":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Portrait License","description":"Licence the portrait is published under, as stated by its source"},"portrait_source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Portrait Source Url","description":"Page the portrait came from, for attribution and licence checks"},"country_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Name","description":"Country name derived from the IOC/ISO code; null when the code is unmapped"},"nationality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nationality","description":"Same value as country_name, under the key most client integrations read"},"hand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hand","description":"Playing hand","default":"U"},"backhand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Backhand","description":"Backhand style (1H/2H) where known; not held for most players"},"dob":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dob","description":"Date of birth"},"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age","description":"Current age in years"},"height_cm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height Cm","description":"Height in cm"},"weight_kg":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weight Kg","description":"Weight in kg"},"turned_pro":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Turned Pro","description":"Year turned pro"},"career_high_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Career High Rank","description":"Career peak ranking"},"career_high_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Career High Date","description":"Date peak ranking was attained"},"weeks_at_no_1":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weeks At No 1","description":"Total weeks ranked at world No. 1","default":0},"current_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Rank","description":"Current ranking"},"current_rank_points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Rank Points","description":"Current ranking points"},"career_summary":{"$ref":"#/components/schemas/TennisCareerSummary","description":"Overall career summary record"},"surface_breakdown":{"anyOf":[{"$ref":"#/components/schemas/TennisSurfaceBreakdown"},{"type":"null"}],"description":"Surface win-loss splits"},"is_active":{"type":"boolean","title":"Is Active","description":"Active status","default":true}},"type":"object","required":["id","tour","first_name","last_name","full_name","career_summary"],"title":"PlayerProfile","description":"Comprehensive player profile and biographical record."},"TennisPlayerRankingHistoryResponse":{"properties":{"player_id":{"type":"string","title":"Player Id","description":"Player ID"},"player_name":{"type":"string","title":"Player Name","description":"Player full name"},"tour":{"type":"string","title":"Tour","description":"ATP or WTA"},"career_high_rank":{"type":"integer","title":"Career High Rank","description":"Peak career ranking position"},"career_high_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Career High Date","description":"Date peak ranking was attained"},"total_weeks_at_no_1":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Weeks At No 1","description":"Weeks ranked at world No. 1","default":0},"history":{"items":{"$ref":"#/components/schemas/TennisRankingHistoryPoint"},"type":"array","title":"History","description":"Chronological ranking list"}},"type":"object","required":["player_id","player_name","tour","career_high_rank"],"title":"PlayerRankingHistoryResponse","description":"Career historical ranking time-series and peak records."},"TennisPlayerStatsResponse":{"properties":{"player_id":{"type":"string","title":"Player Id","description":"Player identifier"},"player_name":{"type":"string","title":"Player Name","description":"Full canonical display name"},"filters":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}]},"type":"object","title":"Filters","description":"Active query filters"},"career_summary":{"$ref":"#/components/schemas/TennisCareerSummary","description":"Career summary record"},"surface_breakdown":{"$ref":"#/components/schemas/TennisSurfaceBreakdown","description":"Surface breakdown"},"serving_stats":{"$ref":"#/components/schemas/TennisServingStats","description":"Serving metrics"},"return_stats":{"anyOf":[{"$ref":"#/components/schemas/TennisReturnStats"},{"type":"null"}],"description":"Return metrics"},"clutch_and_situational":{"anyOf":[{"$ref":"#/components/schemas/TennisClutchStats"},{"type":"null"}],"description":"Clutch metrics"},"grand_slam_breakdown":{"anyOf":[{"$ref":"#/components/schemas/TennisGrandSlamBreakdown"},{"type":"null"}],"description":"Grand Slam breakdown"}},"type":"object","required":["player_id","player_name","career_summary","surface_breakdown","serving_stats"],"title":"PlayerStatsResponse","description":"Detailed career statistics response with optional filtering."},"TennisRankingHistoryPoint":{"properties":{"date":{"type":"string","title":"Date","description":"Ranking publication date (YYYY-MM-DD)"},"rank":{"type":"integer","title":"Rank","description":"Rank on this date"},"points":{"type":"number","title":"Points","description":"Points on this date"}},"type":"object","required":["date","rank","points"],"title":"RankingHistoryPoint","description":"Single time-series ranking data point for a player."},"TennisRankingItem":{"properties":{"rank":{"type":"integer","title":"Rank","description":"Official ranking position"},"player_id":{"type":"string","title":"Player Id","description":"Player unique identifier"},"player_name":{"type":"string","title":"Player Name","description":"Player canonical full name"},"ioc":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ioc","description":"Country IOC code"},"country_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Name","description":"Full country name, the same value the player routes return under this key"},"nationality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nationality","description":"Same value as country_name, under the key most client integrations read"},"points":{"type":"number","title":"Points","description":"Official ranking points"},"rank_movement":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank Movement","description":"previous_rank - rank against the previous published list; positive is a climb; null when the player was not on it"},"previous_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Previous Rank","description":"Rank on the previous published list; null when the player was not on it"},"tournaments_played":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tournaments Played","description":"52-week counting tournament count"}},"type":"object","required":["rank","player_id","player_name","points"],"title":"RankingItem","description":"Single ranking entry in weekly leaderboard."},"TennisRankingsListResponse":{"properties":{"ranking_date":{"type":"string","title":"Ranking Date","description":"Publication date of rankings (YYYY-MM-DD)"},"tour":{"type":"string","title":"Tour","description":"ATP or WTA"},"items":{"items":{"$ref":"#/components/schemas/TennisRankingItem"},"type":"array","title":"Items","description":"List of ranked players"},"total":{"type":"integer","title":"Total","description":"Total players in this ranking week"},"page":{"type":"integer","title":"Page","description":"Current page"},"page_size":{"type":"integer","title":"Page Size","description":"Page size"},"total_pages":{"type":"integer","title":"Total Pages","description":"Total pages"},"has_next":{"type":"boolean","title":"Has Next","description":"Next page available"},"has_prev":{"type":"boolean","title":"Has Prev","description":"Previous page available"}},"type":"object","required":["ranking_date","tour","items","total","page","page_size","total_pages","has_next","has_prev"],"title":"RankingsListResponse","description":"Paginated ranking leaderboard for a given tour and week."},"TennisReturnStats":{"properties":{"first_return_points_won_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"First Return Points Won Pct","description":"1st return points won %"},"second_return_points_won_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Second Return Points Won Pct","description":"2nd return points won %"},"return_games_won_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Return Games Won Pct","description":"Return games won (break %) %"},"break_point_opportunities":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Break Point Opportunities","description":"Total break point opportunities"},"break_points_converted_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Break Points Converted Pct","description":"Break points converted %"}},"type":"object","title":"ReturnStats","description":"Detailed return metrics and percentages."},"TennisServingStats":{"properties":{"total_aces":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Aces","description":"Career total aces"},"total_double_faults":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Double Faults","description":"Career total double faults"},"aces_per_match":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aces Per Match","description":"Average aces per match"},"first_serve_in_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"First Serve In Pct","description":"First serve in percentage"},"first_serve_points_won_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"First Serve Points Won Pct","description":"First serve points won %"},"second_serve_points_won_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Second Serve Points Won Pct","description":"Second serve points won %"},"service_games_played":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Service Games Played","description":"Total service games played"},"service_games_won_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Service Games Won Pct","description":"Percentage of service games held"},"break_points_faced":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Break Points Faced","description":"Total break points faced"},"break_points_saved_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Break Points Saved Pct","description":"Percentage of break points saved"}},"type":"object","title":"ServingStats","description":"Detailed serving metrics and percentages."},"TennisSimulationRequest":{"properties":{"action":{"type":"string","title":"Action","description":"Simulation action: step, start, pause, reset, inject"},"match_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Id","description":"Target match ID","default":"live-usopen-2024-f"},"player1_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Player1 Id","description":"Optional custom Player 1 ID"},"player2_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Player2 Id","description":"Optional custom Player 2 ID"}},"type":"object","required":["action"],"title":"SimulationRequest","description":"Control request to simulate live match state transitions."},"TennisSimulationResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Status","default":"ok"},"action":{"type":"string","title":"Action","description":"Action performed"},"match_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Id","description":"Match ID"},"new_score":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Score","description":"Updated game/match score"},"event":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event","description":"Scoring event triggered"}},"type":"object","required":["action"],"title":"SimulationResponse","description":"Result of live simulation action."},"TennisSurfaceBreakdown":{"properties":{"hard":{"$ref":"#/components/schemas/TennisSurfaceStatItem"},"clay":{"$ref":"#/components/schemas/TennisSurfaceStatItem"},"grass":{"$ref":"#/components/schemas/TennisSurfaceStatItem"},"carpet":{"$ref":"#/components/schemas/TennisSurfaceStatItem"}},"type":"object","required":["hard","clay","grass","carpet"],"title":"SurfaceBreakdown","description":"Breakdown of matches and records across surface types."},"TennisSurfaceStatItem":{"properties":{"matches":{"type":"integer","title":"Matches","description":"Matches played on this surface"},"won":{"type":"integer","title":"Won","description":"Matches won on this surface"},"lost":{"type":"integer","title":"Lost","description":"Matches lost on this surface"},"win_pct":{"type":"number","title":"Win Pct","description":"Win percentage on this surface"},"titles":{"type":"integer","title":"Titles","description":"Titles won on this surface","default":0}},"type":"object","required":["matches","won","lost","win_pct"],"title":"SurfaceStatItem","description":"Statistics for a specific court surface."},"TennisTiebreakDetail":{"properties":{"winner_points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Winner Points","description":"Points scored by tiebreak winner"},"loser_points":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Loser Points","description":"Points scored by tiebreak loser"}},"type":"object","title":"TiebreakDetail","description":"Tiebreak point breakdown."},"TennisTournamentDetailResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Tournament ID"},"name":{"type":"string","title":"Name","description":"Tournament name"},"tour":{"type":"string","title":"Tour","description":"Tour"},"level":{"type":"string","title":"Level","description":"Level tier"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Canonical event category: grand_slam, masters_1000, wta_1000, tour_finals, atp_tour, wta_tour, challenger, itf, davis_cup, billie_jean_king_cup, other. ATP 250 and ATP 500 both report atp_tour because the source does not separate them"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","description":"Tier name"},"surface":{"type":"string","title":"Surface","description":"Surface"},"draw_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Draw Size","description":"Draw size","default":32},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"City"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code","description":"Country code"},"first_edition_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"First Edition Year","description":"First recorded edition of this event"},"most_recent_edition_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Most Recent Edition Year","description":"Most recent recorded edition"},"all_time_title_leader":{"anyOf":[{"$ref":"#/components/schemas/TennisAllTimeTitleLeader"},{"type":"null"}],"description":"Most finals won across every edition; ties broken by most recent"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year","description":"Edition year, the same field the list, draw and embedded forms of this tournament carry"},"is_live_shell":{"type":"boolean","title":"Is Live Shell","description":"True for a live-feed container (s365_*) holding archived live results, with default tier/surface and no geography","default":false}},"type":"object","required":["id","name","tour","level","surface"],"title":"TournamentDetailResponse","description":"Comprehensive tournament dossier and historical editions."},"TennisTournamentDrawResponse":{"properties":{"tournament_id":{"type":"string","title":"Tournament Id","description":"Tournament ID"},"tournament_name":{"type":"string","title":"Tournament Name","description":"Tournament name"},"year":{"type":"integer","title":"Year","description":"Tournament edition year"},"draw_size":{"type":"integer","title":"Draw Size","description":"Draw size (e.g. 128, 64, 32)"},"surface":{"type":"string","title":"Surface","description":"Court surface"},"rounds":{"items":{"$ref":"#/components/schemas/TennisDrawRound"},"type":"array","title":"Rounds","description":"Bracket rounds sorted from Final backward or R1 forward"},"surface_badge":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Surface Badge","description":"UI badge convention for the surface: label plus hex color (presentation constant, not official tournament artwork; logo assets remain unavailable)"}},"type":"object","required":["tournament_id","tournament_name","year","draw_size","surface"],"title":"TournamentDrawResponse","description":"Full interactive draw bracket tree."},"TennisTournamentListItem":{"properties":{"id":{"type":"string","title":"Id","description":"Tournament unique identifier"},"name":{"type":"string","title":"Name","description":"Canonical tournament name"},"tour":{"type":"string","title":"Tour","description":"ATP or WTA"},"level":{"type":"string","title":"Level","description":"Tournament tier (e.g. Grand Slam, Masters 1000)"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Canonical event category: grand_slam, masters_1000, wta_1000, tour_finals, atp_tour, wta_tour, challenger, itf, davis_cup, billie_jean_king_cup, other. ATP 250 and ATP 500 both report atp_tour because the source does not separate them"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","description":"Tournament tier name"},"surface":{"type":"string","title":"Surface","description":"Court surface: Hard, Clay, Grass, Carpet"},"draw_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Draw Size","description":"Draw size"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year","description":"Edition year (every id is a per-year edition, e.g. atp_2026_540)"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"Host city"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code","description":"Host country 3-letter IOC code"},"first_edition_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"First Edition Year","description":"First recorded year"},"most_recent_edition_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Most Recent Edition Year","description":"Most recent year"},"all_time_title_leader":{"anyOf":[{"$ref":"#/components/schemas/TennisAllTimeTitleLeader"},{"type":"null"}],"description":"Most successful champion"}},"type":"object","required":["id","name","tour","level","surface"],"title":"TournamentListItem","description":"Summary item for tournament catalog."},"TennisTournamentSummaryInfo":{"properties":{"id":{"type":"string","title":"Id","description":"Tournament ID"},"name":{"type":"string","title":"Name","description":"Tournament name"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year","description":"Tournament year"},"surface":{"type":"string","title":"Surface","description":"Surface"},"level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Level","description":"Tier code"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"Canonical event category: grand_slam, masters_1000, wta_1000, tour_finals, atp_tour, wta_tour, challenger, itf, davis_cup, billie_jean_king_cup, other. ATP 250 and ATP 500 both report atp_tour because the source does not separate them"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"Host city"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country","description":"Host country code"}},"type":"object","required":["id","name","surface"],"title":"TournamentSummaryInfo","description":"Tournament context metadata embedded in match detail."},"TennisValidationError":{"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"},"RafError":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"integer"},"docs":{"type":"string"}}}}},"RafSearchResult":{"type":"object","properties":{"type":{"type":"string","enum":["athlete","event"]},"slug":{"type":"string"},"name":{"type":"string"},"score":{"type":"number"}}},"RafEvent":{"type":"object","properties":{"slug":{"type":"string","example":"raf07"},"name":{"type":"string","example":"RAF 07"},"headline":{"type":"string","example":"Tsarukyan vs Poullas"},"type":{"type":"string","enum":["flagship","international"]},"number":{"type":"integer","nullable":true},"sequence":{"type":"integer"},"status":{"type":"string","enum":["scheduled","live","completed","postponed","cancelled"]},"cancellation":{"type":"object","nullable":true,"description":"Present when status is cancelled.","properties":{"reason":{"type":"string","nullable":true,"example":"event_page_removed"}}},"previousDates":{"type":"array","items":{"type":"string","format":"date"}},"date":{"type":"string","format":"date"},"localTime":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"startsAt":{"type":"string","format":"date-time","nullable":true},"location":{"type":"object","properties":{"text":{"type":"string"},"venue":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}}},"attendance":{"type":"integer","nullable":true},"bouts":{"type":"object","properties":{"total":{"type":"integer"},"completed":{"type":"integer"}}},"card":{"type":"array","items":{"$ref":"#/components/schemas/RafBout"}}}},"RafBout":{"type":"object","properties":{"boutId":{"type":"string","example":"raf07--arman-tsarukyan--georgio-poullas"},"event":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"date":{"type":"string","format":"date"}}},"order":{"type":"integer","description":"1 = main event"},"slot":{"type":"string","nullable":true,"example":"MAIN EVENT"},"weightClass":{"type":"object","properties":{"label":{"type":"string"},"key":{"type":"string","nullable":true},"limitLb":{"type":"integer","nullable":true},"gender":{"type":"string","nullable":true},"crossover":{"type":"boolean"}}},"titleFight":{"type":"string","enum":["championship","interim"],"nullable":true},"status":{"type":"string","enum":["scheduled","completed","cancelled"]},"athletes":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"country":{"type":"string","nullable":true,"description":"ISO-3"},"age":{"type":"integer","nullable":true},"club":{"type":"string","nullable":true},"hometown":{"type":"string","nullable":true},"score":{"type":"integer","nullable":true},"takedowns":{"type":"integer","nullable":true},"result":{"type":"string","enum":["win","loss"],"nullable":true}}}},"winner":{"type":"object","nullable":true,"properties":{"slug":{"type":"string"},"name":{"type":"string"}}},"result":{"type":"object","nullable":true,"properties":{"method":{"type":"string","enum":["decision","criteria","tech_fall","fall","injury_default","disqualification","forfeit"],"nullable":true},"methodConfirmed":{"type":"boolean","description":"false when the method is derived from the score (tie = criteria, 10+ margin = tech fall)"},"score":{"type":"string","nullable":true,"example":"9-3"},"winnerScore":{"type":"integer","nullable":true},"loserScore":{"type":"integer","nullable":true},"margin":{"type":"integer","nullable":true},"endPeriod":{"type":"integer","nullable":true},"endClock":{"type":"string","nullable":true},"elapsedSeconds":{"type":"integer","nullable":true}}},"periods":{"type":"array","items":{"type":"object","properties":{"period":{"type":"integer"},"scores":{"type":"array","items":{"type":"integer","nullable":true}}}}},"periodScoresReliable":{"type":"boolean"},"cancellation":{"type":"object","nullable":true,"description":"Present when status is cancelled (bouts off the card are kept, never deleted; ask with includeCancelled=true).","properties":{"reason":{"type":"string","enum":["removed_from_card","moved","opponent_changed","event_cancelled"]},"movedToEvent":{"type":"string","nullable":true,"description":"Event slug the same two athletes are now booked on."},"replacedByBoutId":{"type":"string","nullable":true,"description":"Bout on the same card where one of the athletes now competes."},"removedAt":{"type":"string","format":"date-time","nullable":true}}}}},"RafAthlete":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"gender":{"type":"string","nullable":true},"country":{"type":"string","nullable":true},"hometown":{"type":"string","nullable":true},"club":{"type":"string","nullable":true},"age":{"type":"integer","nullable":true},"record":{"type":"object","properties":{"wins":{"type":"integer"},"losses":{"type":"integer"},"draws":{"type":"integer"},"bouts":{"type":"integer"}}},"titles":{"type":"array","items":{"type":"object"}}}},"RafTitle":{"type":"object","properties":{"titleKey":{"type":"string","example":"men-heavyweight"},"name":{"type":"string"},"type":{"type":"string"},"gender":{"type":"string"},"vacant":{"type":"boolean"},"champion":{"type":"object","nullable":true,"properties":{"slug":{"type":"string"},"name":{"type":"string"}}}}},"BkfcError":{"type":"object","properties":{"success":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"integer"},"docs":{"type":"string"}}}}},"BkfcStatLine":{"type":"object","nullable":true,"properties":{"landed":{"type":"integer","nullable":true},"thrown":{"type":"integer","nullable":true},"missed":{"type":"integer","nullable":true},"knockdowns":{"type":"integer","nullable":true},"headLanded":{"type":"integer","nullable":true},"headThrown":{"type":"integer","nullable":true},"bodyLanded":{"type":"integer","nullable":true},"bodyThrown":{"type":"integer","nullable":true},"distanceLanded":{"type":"integer","nullable":true},"distanceThrown":{"type":"integer","nullable":true},"clinchLanded":{"type":"integer","nullable":true},"clinchThrown":{"type":"integer","nullable":true},"distanceHeadLanded":{"type":"integer","nullable":true},"distanceBodyLanded":{"type":"integer","nullable":true},"clinchHeadLanded":{"type":"integer","nullable":true},"clinchBodyLanded":{"type":"integer","nullable":true},"accuracyPct":{"type":"number","nullable":true}}},"BkfcEvent":{"type":"object","properties":{"slug":{"type":"string","example":"bkfc-50-denver"},"name":{"type":"string"},"type":{"type":"string"},"number":{"type":"integer","nullable":true},"status":{"type":"string","enum":["scheduled","live","completed","cancelled","postponed"]},"date":{"type":"string","format":"date"},"localTime":{"type":"string","nullable":true},"timezone":{"type":"string","nullable":true},"startsAt":{"type":"string","format":"date-time","nullable":true},"previousDates":{"type":"array","items":{"type":"string","format":"date"}},"location":{"type":"object","properties":{"venue":{"type":"string","nullable":true},"text":{"type":"string","nullable":true},"city":{"type":"string","nullable":true},"region":{"type":"string","nullable":true},"country":{"type":"string","nullable":true}}},"bouts":{"type":"object","properties":{"total":{"type":"integer"},"completed":{"type":"integer"}}},"card":{"type":"array","items":{"$ref":"#/components/schemas/BkfcBout"}}}},"BkfcBout":{"type":"object","properties":{"boutId":{"type":"string"},"event":{"type":"object"},"order":{"type":"integer","nullable":true,"description":"1 = main event"},"section":{"type":"string","nullable":true},"slot":{"type":"string","nullable":true},"weightClass":{"type":"object"},"titleFight":{"type":"boolean"},"scheduledRounds":{"type":"integer","nullable":true},"roundSeconds":{"type":"integer","nullable":true},"status":{"type":"string","enum":["scheduled","live","completed","cancelled"]},"fighters":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"object","properties":{"corner":{"type":"string","enum":["red","blue"]},"slug":{"type":"string"},"name":{"type":"string"},"nickname":{"type":"string","nullable":true},"weighInLb":{"type":"number","nullable":true},"result":{"type":"string","nullable":true},"totals":{"$ref":"#/components/schemas/BkfcStatLine"}}}},"winner":{"type":"object","nullable":true},"result":{"type":"object","nullable":true,"properties":{"outcome":{"type":"string"},"method":{"type":"string"},"methodText":{"type":"string"},"round":{"type":"integer"},"time":{"type":"string"},"elapsedSeconds":{"type":"integer"}}},"referee":{"type":"string","nullable":true},"statsAvailable":{"type":"boolean"},"rounds":{"type":"array","items":{"type":"object","properties":{"round":{"type":"integer"},"red":{"$ref":"#/components/schemas/BkfcStatLine"},"blue":{"$ref":"#/components/schemas/BkfcStatLine"}}}},"cancellation":{"type":"object","nullable":true,"properties":{"reason":{"type":"string","enum":["removed_from_card","moved","opponent_changed","event_cancelled","not_in_official_results"]},"movedToEvent":{"type":"string","nullable":true},"replacedByBoutId":{"type":"string","nullable":true},"removedAt":{"type":"string","nullable":true}}}}},"BkfcFighter":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"nickname":{"type":"string","nullable":true},"gender":{"type":"string","nullable":true},"division":{"type":"string","nullable":true},"status":{"type":"string","nullable":true},"nationality":{"type":"string","nullable":true},"birthMonth":{"type":"string","nullable":true,"example":"1987-09"},"heightCm":{"type":"number","nullable":true},"reachCm":{"type":"number","nullable":true},"record":{"type":"object","properties":{"wins":{"type":"integer"},"losses":{"type":"integer"},"draws":{"type":"integer"},"noContests":{"type":"integer"},"koWins":{"type":"integer"}}}}}}},"paths":{"/health":{"get":{"summary":"Health check","description":"Returns server status and uptime.","operationId":"getHealth","security":[],"tags":["Utility"],"responses":{"200":{"description":"Server is healthy","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"healthy"},"timestamp":{"type":"string","example":"2026-03-29T00:00:00.000Z"},"uptime":{"type":"number","example":3600.5}}}}}}}}},"/dota2":{"get":{"summary":"Dota 2 API overview","description":"Returns Dota 2 coverage counts, source status, and sync metadata.","operationId":"getDota2Overview","tags":["Dota 2"],"responses":{"200":{"description":"Dota 2 overview."}}}},"/dota2/search":{"get":{"summary":"Search Dota 2 data","description":"Search Dota 2 teams, players, tournaments, and matches.","operationId":"searchDota2","tags":["Dota 2"],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Search results."}}}},"/dota2/matches/live":{"get":{"summary":"Live Dota 2 matches","description":"Cito Dota live board. When a series safely links to Valve/OpenDota live, each match may include a `live` snapshot (clock, kills, gold lead, roster). Series map wins stay on schedule fields.","operationId":"getDota2LiveMatches","tags":["Dota 2"],"responses":{"200":{"description":"Live matches (optional per-match Cito live snapshot)."}}}},"/dota2/matches/{matchId}/live":{"get":{"summary":"Cito Dota match live snapshot","description":"Cito live snapshot for a series via safe team-pair link to Valve/OpenDota. Does not invent positions or map winners from gold. Sticky Valve match ids support postgame draft/stats. Optional Steam scoreboard when STEAM_WEB_API_KEY is set.","operationId":"getDota2MatchLive","tags":["Dota 2"],"parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Cito live snapshot (clock, kills, lead, roster; seriesWinner always null)."},"404":{"description":"Match not found or no safe Valve live link."},"503":{"description":"Live enrichment temporarily disabled."}}}},"/dota2/matches/upcoming":{"get":{"summary":"Upcoming Dota 2 matches","description":"Returns upcoming Dota 2 matches from the synced schedule.","operationId":"getDota2UpcomingMatches","tags":["Dota 2"],"responses":{"200":{"description":"Upcoming matches."}}}},"/dota2/matches/recent":{"get":{"summary":"Recent Dota 2 matches","description":"Returns recent Dota 2 results.","operationId":"getDota2RecentMatches","tags":["Dota 2"],"responses":{"200":{"description":"Recent matches."}}}},"/dota2/matches/{matchId}":{"get":{"summary":"Dota 2 match details","description":"Returns match metadata, teams, tournament context, games, draft rows, and player stats where available.","operationId":"getDota2Match","tags":["Dota 2"],"parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Match detail."},"404":{"description":"Match not found."}}}},"/dota2/matches/{matchId}/player-stats":{"get":{"summary":"Dota 2 match player stats","description":"Returns per-game player stat rows for a Dota 2 match where enrichment has populated them.","operationId":"getDota2MatchPlayerStats","tags":["Dota 2"],"parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Player stats or availability metadata."}}}},"/dota2/players/{playerIdOrSlug}/radar":{"get":{"summary":"Dota 2 player radar","description":"Returns precomputed percentile radar/spider graph scores for carry, mid, offlane, or support where enough source data exists.","operationId":"getDota2PlayerRadar","tags":["Dota 2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"schema":{"type":"string"}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["carry","mid","offlane","support","unknown"]}},{"name":"window","in":"query","required":false,"schema":{"type":"string","example":"90d"}}],"responses":{"200":{"description":"Radar scores or availability metadata."}}}},"/dota2/teams/{teamIdOrSlug}/radar":{"get":{"summary":"Dota 2 team radar","description":"Returns precomputed percentile radar scores for team style metrics where enough source data exists.","operationId":"getDota2TeamRadar","tags":["Dota 2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Team radar scores or availability metadata."}}}},"/dota2/teams":{"get":{"summary":"List Dota 2 teams","operationId":"listDota2Teams","tags":["Dota 2"],"responses":{"200":{"description":"Dota 2 teams."}}}},"/dota2/players":{"get":{"summary":"List Dota 2 players","operationId":"listDota2Players","tags":["Dota 2"],"responses":{"200":{"description":"Dota 2 players."}}}},"/dota2/tournaments":{"get":{"summary":"List Dota 2 tournaments","operationId":"listDota2Tournaments","tags":["Dota 2"],"responses":{"200":{"description":"Dota 2 tournaments."}}}},"/qr/generate":{"get":{"summary":"Generate QR code (simple)","description":"Generate a QR code via query parameters. Returns a raw PNG, SVG, or base64 JSON. Use the POST endpoint for logo overlay.","operationId":"generateQrGet","tags":["QR Code"],"parameters":[{"name":"data","in":"query","required":true,"description":"Text or URL to encode.","schema":{"type":"string","maxLength":2048,"example":"https://citoapi.com"}},{"name":"size","in":"query","description":"Output size in pixels.","schema":{"type":"integer","default":300,"minimum":100,"maximum":2000}},{"name":"format","in":"query","description":"Output format.","schema":{"type":"string","enum":["png","svg","base64"],"default":"png"}},{"name":"fg","in":"query","description":"Foreground hex color.","schema":{"type":"string","default":"#000000","example":"#000000"}},{"name":"bg","in":"query","description":"Background hex color.","schema":{"type":"string","default":"#ffffff","example":"#ffffff"}},{"name":"margin","in":"query","description":"Quiet zone width (0–10).","schema":{"type":"integer","default":4,"minimum":0,"maximum":10}},{"name":"ec","in":"query","description":"Error correction level.","schema":{"type":"string","enum":["L","M","Q","H"],"default":"M"}}],"responses":{"200":{"description":"QR code image (PNG binary or SVG string) or JSON with base64 image.","content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/svg+xml":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"object","properties":{"image":{"type":"string","example":"data:image/png;base64,..."},"format":{"type":"string","example":"png"},"size":{"type":"integer","example":300}}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Generate QR code (with logo)","description":"Generate a QR code with full options including an optional centered logo overlay. Logo is provided as a base64 data URL.","operationId":"generateQrPost","tags":["QR Code"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QrGenerateBody"},"example":{"data":"https://citoapi.com","size":400,"format":"png","foreground":"#000000","background":"#ffffff","logo":{"image":"data:image/png;base64,iVBORw0KGgo...","sizeRatio":0.25,"padding":8}}}}},"responses":{"200":{"description":"QR code image or base64 JSON.","content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/svg+xml":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"object","properties":{"image":{"type":"string","example":"data:image/png;base64,..."},"format":{"type":"string","example":"png"},"size":{"type":"integer","example":400}}}}}}}},"400":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc":{"get":{"summary":"UFC API overview","description":"Returns UFC coverage counts and key endpoint paths.","operationId":"getUfcOverview","tags":["UFC"],"responses":{"200":{"description":"UFC overview payload"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/rankings":{"get":{"summary":"UFC rankings (compatibility)","description":"Compatibility rankings feed. Prefer GET /ufc/rankings/media for the canonical UFC.com Media Panel rankings feed with freshness metadata.","operationId":"getUfcRankings","tags":["UFC"],"parameters":[{"name":"division","in":"query","required":false,"schema":{"type":"string"},"example":"lightweight"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200}}],"responses":{"200":{"description":"Ranking rows"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/rankings/media":{"get":{"summary":"UFC Media Panel rankings","description":"Canonical UFC.com Media Panel rankings feed. Includes champions, official ranks (including ties), rank changes, fighter slugs, and freshness metadata (syncedAt / dataAgeHours).","operationId":"getUfcMediaRankings","tags":["UFC"],"parameters":[{"name":"division","in":"query","required":false,"schema":{"type":"string"},"example":"lightweight"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200}}],"responses":{"200":{"description":"Media Panel ranking rows with freshness meta"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/rankings/media/{division}":{"get":{"summary":"UFC Media Panel rankings by division","description":"Canonical Media Panel rankings for one division (for example lightweight or middleweight).","operationId":"getUfcMediaRankingsByDivision","tags":["UFC"],"parameters":[{"name":"division","in":"path","required":true,"schema":{"type":"string"},"example":"lightweight"}],"responses":{"200":{"description":"Media Panel ranking rows for one division"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/fighters":{"get":{"summary":"List UFC fighters","description":"Returns UFC fighters with profile metadata. Use includeStats=true to include striking, grappling, defense, and bio stat fields when populated.","operationId":"listUfcFighters","tags":["UFC"],"parameters":[{"name":"division","in":"query","required":false,"schema":{"type":"string"},"example":"welterweight"},{"name":"active","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"includeStats","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50}}],"responses":{"200":{"description":"Fighter rows"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/fighters/{slug}":{"get":{"summary":"Get UFC fighter profile","description":"Returns one fighter profile with bio, record, ranking links, image URLs, and fighter stats when available.","operationId":"getUfcFighter","tags":["UFC"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"islam-makhachev"}],"responses":{"200":{"description":"Fighter profile"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Fighter not found"}}}},"/ufc/fighters/{slug}/stats":{"get":{"summary":"Get UFC fighter stats","description":"Returns fighter stats such as striking accuracy, significant strikes landed/attempted, takedown accuracy, SLpM, SApM, takedown defense, and average fight time.","operationId":"getUfcFighterStats","tags":["UFC"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"islam-makhachev"}],"responses":{"200":{"description":"Fighter stat row"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Stats not found"}}}},"/ufc/events":{"get":{"summary":"List UFC events","description":"Returns UFC events with pagination. Use hasStats=true to list events with fight-level and round-level statistics.","operationId":"listUfcEvents","tags":["UFC"],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["scheduled","completed","live"]}},{"name":"hasStats","in":"query","required":false,"schema":{"type":"boolean"},"description":"Only return events with fight-level or round-level stats."},{"name":"includeBouts","in":"query","required":false,"schema":{"type":"boolean"},"description":"Include bouts and stat rows in each event."},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Search by title, slug, or location."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50}}],"responses":{"200":{"description":"Event rows"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/events/recent":{"get":{"summary":"List recent UFC events","description":"Returns recent completed UFC events with pagination. Use hasStats=true for events with fight and round stats.","operationId":"listRecentUfcEvents","tags":["UFC"],"parameters":[{"name":"hasStats","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"includeBouts","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25}}],"responses":{"200":{"description":"Recent event rows"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/events/upcoming":{"get":{"summary":"List upcoming UFC events","description":"Returns upcoming UFC events with pagination.","operationId":"listUpcomingUfcEvents","tags":["UFC"],"parameters":[{"name":"includeBouts","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25}}],"responses":{"200":{"description":"Upcoming event rows"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/events/{eventIdOrSlug}":{"get":{"summary":"Get UFC event detail","description":"Returns one UFC event by event id, slug, or dataId, including bouts and stats when available.","operationId":"getUfcEvent","tags":["UFC"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"schema":{"type":"string"},"example":"ufc-328-chimaev-vs-strickland"}],"responses":{"200":{"description":"Event detail"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Event not found"}}}},"/ufc/events/{slug}/bouts":{"get":{"summary":"Get UFC event bouts","description":"Returns fight-card bouts for an event, including fighters, result, winner, method, round, time, bout stats, and round stats when available. Each bout includes nested `referee: { id, name, firstName, lastName } | null` (null when unknown).","operationId":"getUfcEventBouts","tags":["UFC"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"ufc-328-chimaev-vs-strickland"},{"name":"round","in":"query","required":false,"schema":{"type":"integer"},"example":1,"description":"Return only round-level stat rows for a specific round."}],"responses":{"200":{"description":"Event bouts"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Event not found"}}}},"/ufc/events/{slug}/stats":{"get":{"summary":"Get UFC event stats","description":"Returns all bout-level and round-level stat rows for one UFC event.","operationId":"getUfcEventStats","tags":["UFC"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"ufc-328-chimaev-vs-strickland"}],"responses":{"200":{"description":"Event stats"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Event not found"}}}},"/ufc/bouts":{"get":{"summary":"List UFC bouts","description":"Returns UFC bouts with pagination. Filter by event, fighter, weight class, status, and stat availability. Each bout includes nested `referee: { id, name, firstName, lastName } | null`.","operationId":"listUfcBouts","tags":["UFC"],"parameters":[{"name":"event","in":"query","required":false,"schema":{"type":"string"},"description":"Event id, slug, or dataId."},{"name":"fighter","in":"query","required":false,"schema":{"type":"string"},"description":"Fighter name or slug."},{"name":"weightClass","in":"query","required":false,"schema":{"type":"string"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"}},{"name":"hasStats","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"includeStats","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50}}],"responses":{"200":{"description":"Bout rows"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/bouts/{boutId}":{"get":{"summary":"Get UFC bout detail","description":"Returns one UFC bout with fighters, event context, bout stats, and round stats when available. Includes nested `referee: { id, name, firstName, lastName } | null` (null when unknown).","operationId":"getUfcBout","tags":["UFC"],"parameters":[{"name":"boutId","in":"path","required":true,"schema":{"type":"string"},"example":"770c5302e32916ea"},{"name":"round","in":"query","required":false,"schema":{"type":"integer"},"example":1,"description":"Return only round-level stat rows for a specific round."}],"responses":{"200":{"description":"Bout detail"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Bout not found"}}}},"/ufc/bouts/{boutId}/stats":{"get":{"summary":"Get UFC bout stats","description":"Returns bout-level fighter totals and round-by-round fighter stats for one bout.","operationId":"getUfcBoutStats","tags":["UFC"],"parameters":[{"name":"boutId","in":"path","required":true,"schema":{"type":"string"},"example":"770c5302e32916ea"},{"name":"round","in":"query","required":false,"schema":{"type":"integer"},"example":1,"description":"Return only rows for a specific round."}],"responses":{"200":{"description":"Bout stats"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Bout not found"}}}},"/ufc/bouts/{boutId}/rounds":{"get":{"summary":"Get UFC bout round stats","description":"Returns round-by-round fighter stat rows for one bout.","operationId":"getUfcBoutRounds","tags":["UFC"],"parameters":[{"name":"boutId","in":"path","required":true,"schema":{"type":"string"},"example":"770c5302e32916ea"}],"responses":{"200":{"description":"Round stat rows"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Bout not found"}}}},"/tennis/live/ws":{"get":{"summary":"Tennis Live WebSocket (point-by-point)","operationId":"tennisLiveWebsocket","tags":["Tennis"],"description":"WebSocket endpoint, not a plain GET: open it with an HTTP Upgrade to wss://api.citoapi.com/api/v1/tennis/live/ws. Push feed for live tennis. Requires an API key with tennis access AND the live-WebSocket add-on; without the add-on the upgrade is refused. Auth on the upgrade, any one of: x-api-key header, Authorization: Bearer, ?apiKey= or ?x-api-key= in the query string. On connect the server sends a self-describing {\"type\":\"ready\"} frame carrying the protocol and event list, so a client can discover the contract at runtime. Client frames: {\"action\":\"subscribe\",\"rooms\":[\"match:{matchId}\",\"all\"]}, {\"action\":\"unsubscribe\",\"rooms\":[...]}, {\"action\":\"ping\"}. Max 32 rooms per connection. Server frames: {\"type\":\"subscribed\"}, {\"type\":\"pong\"}, {\"type\":\"error\",\"code\":\"INVALID_JSON\"|\"BAD_ROOMS\"}, and the events {\"type\":\"POINT_UPDATE\"} and {\"type\":\"MATCH_FINISHED\"}, each carrying a data object keyed by match_id. matchId values come from /tennis/matches/live. There is no SSE variant for tennis; the WebSocket is the only push transport.","responses":{"101":{"description":"Switching Protocols: the WebSocket is open."},"401":{"description":"Missing or invalid API key on the upgrade request."},"403":{"description":"API key lacks tennis access or the live-WebSocket add-on."}}}},"/ufc/bouts/{boutId}/odds":{"get":{"summary":"Get UFC bout odds","description":"Every bookmaker line for one bout: moneyline per fighter plus prop markets (method of victory, round totals, fight goes the distance). Each outcome carries fighter.slug for a stable join and isAvailable, which is false for a finished fight's closing line. Pass ?available=true to receive only markets a book is offering right now.","operationId":"getUfcBoutOdds","tags":["UFC"],"parameters":[{"name":"boutId","in":"path","required":true,"schema":{"type":"string"},"example":"770c5302e32916ea"},{"name":"available","in":"query","required":false,"schema":{"type":"boolean"},"description":"true = only lines currently offered"},{"name":"bookmaker","in":"query","required":false,"schema":{"type":"string"},"description":"Filter to one bookmaker slug or group"}],"responses":{"200":{"description":"Markets with outcomes per bookmaker"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Bout not found"}}}},"/ufc/events/{slug}/odds":{"get":{"summary":"Get UFC event odds","description":"Odds for every bout on a card in one call, grouped by fight. Same outcome shape and ?available / ?bookmaker filters as the bout route.","operationId":"getUfcEventOdds","tags":["UFC"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"ufc-330"},{"name":"available","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"bookmaker","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Odds grouped by fight"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Event not found"}}}},"/ufc/live":{"get":{"summary":"UFC live overview","description":"Live fight-night overview. `liveBouts` = fights in progress; `nextBouts` / `nextArmedBout` = fights up next (not live yet); `events` = fight-night cards being tracked (not matchups). `meta` includes `emptyReason` when nothing is live and `lagSeconds` (data freshness). Prefer SSE `/ufc/live/stream` or WebSocket `/ufc/live/ws` for push updates.","operationId":"getUfcLiveOverview","tags":["UFC"],"responses":{"200":{"description":"liveBouts + nextBouts + events; meta.emptyReason / lagSeconds","content":{"application/json":{"example":{"success":true,"data":{"liveBouts":[{"boutId":"ufc-1234567","status":"live","currentRound":2,"currentTime":"3:12","lagSeconds":8,"recommendedPollSeconds":12}],"events":[{"eventSlug":"ufc-fight-night-example","status":"live","currentLiveFmid":"1234567","recommendedPollSeconds":12}]},"meta":{"stream":"/api/v1/ufc/live/stream","websocket":"/api/v1/ufc/live/ws"}}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/live/events":{"get":{"summary":"List UFC live events","description":"Fight-night events currently tracked live, with their status.","operationId":"listUfcLiveEvents","tags":["UFC"],"responses":{"200":{"description":"Live event rows with lagSeconds + recommendedPollSeconds"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/live/events/{slug}":{"get":{"summary":"Get UFC live event","description":"Live status and tracked fights for one event. Alias: GET /ufc/events/{slug}/live.","operationId":"getUfcLiveEvent","tags":["UFC"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"ufc-fight-night-example"}],"responses":{"200":{"description":"Live event + tracking"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Live event not found"}}}},"/ufc/live/{boutId}":{"get":{"summary":"Get UFC live bout","description":"Live state and fight details for one bout (use a boutId from /live). Includes lagSeconds and recommendedPollSeconds.","operationId":"getUfcLiveBout","tags":["UFC"],"parameters":[{"name":"boutId","in":"path","required":true,"schema":{"type":"string"},"example":"ufc-1234567"}],"responses":{"200":{"description":"Live bout payload"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Bout not found"}}}},"/ufc/live/{boutId}/state":{"get":{"summary":"Get UFC live bout state","description":"Compact live state with lagSeconds and recommendedPollSeconds for polling clients.","operationId":"getUfcLiveBoutState","tags":["UFC"],"parameters":[{"name":"boutId","in":"path","required":true,"schema":{"type":"string"},"example":"ufc-1234567"}],"responses":{"200":{"description":"Live state"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"State not found"}}}},"/ufc/live/{boutId}/snapshots":{"get":{"summary":"List UFC live bout snapshots","description":"Timestamped live snapshots for one bout (round, time and method as the fight progresses).","operationId":"listUfcLiveBoutSnapshots","tags":["UFC"],"parameters":[{"name":"boutId","in":"path","required":true,"schema":{"type":"string"},"example":"ufc-1234567"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50}}],"responses":{"200":{"description":"Snapshot rows"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/live/stream":{"get":{"summary":"UFC live SSE stream","description":"Server-Sent Events push feed of live bout updates, on every plan. Filter with `boutId` and/or `eventSlug`. Events: `ready` (sent first; carries `delay_seconds` and `billing`), `ufc.live.snapshot` (the bout's current state, when `boutId` is set), `ufc.live.update`, `ping` every 15 seconds, and `error` just before the server closes the stream.\n\n**Billing.** An open stream counts toward your monthly quota like polling: one request when it connects, then one request for every 15 seconds it stays open (the same as polling `/ufc/live` every 15 seconds). When the quota runs out the stream sends an `error` event with code `RATE_LIMIT_EXCEEDED` and closes; connecting with no quota left returns 429.\n\n**Delay.** Free and Starter plans receive every event 60 seconds late, the same delay as the polled live endpoints. Other plans are real-time.\n\n**Bout ids.** Live payloads (stream, WebSocket, `/ufc/live/{boutId}/state`) carry `boutId` in the live form (`ufc-...`, also the room name) and `cardBoutId`, the id the card itself uses (`/ufc/events/{slug}/bouts`, `/ufc/bouts/{id}`). Join live updates to the card on `cardBoutId`; every endpoint accepts either form.\n\nRoom-based WebSockets: `/ufc/live/ws`.","operationId":"streamUfcLive","tags":["UFC"],"parameters":[{"name":"boutId","in":"query","required":false,"schema":{"type":"string"},"example":"ufc-1234567"},{"name":"eventSlug","in":"query","required":false,"schema":{"type":"string"},"example":"ufc-fight-night-example"}],"responses":{"200":{"description":"text/event-stream (events: ready, ufc.live.snapshot, ufc.live.update, ping, error)","content":{"text/event-stream":{"schema":{"type":"string"},"example":"event: ready\ndata: {\"success\":true,\"stream\":\"ufc.live\",\"boutId\":\"ufc-1234567\",\"eventSlug\":null,\"redis_configured\":true,\"redis_subscriber_ready\":true,\"websocket\":\"/api/v1/ufc/live/ws\",\"recommendedPollSeconds\":12,\"delay_seconds\":0,\"billing\":{\"requests_per_interval\":1,\"interval_seconds\":15}}\n\nevent: ping\ndata: {\"ok\":true,\"ts\":\"2026-09-25T20:15:00.000Z\"}\n\nevent: error\ndata: {\"success\":false,\"error\":{\"code\":\"RATE_LIMIT_EXCEEDED\",\"message\":\"You have used 500 of 500 requests in your current period. It resets on 2026-10-01 (about 6 days).\"}}\n\n"}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Monthly request quota already used up when connecting. Mid-stream, the same limit arrives as an `error` event and the stream closes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/live/{boutId}/socket":{"get":{"summary":"UFC live transport contract (SSE + WebSocket)","description":"Documents UFC live SSE and WebSocket auth, rooms (bout:{id}|event:{slug}), and envelope shape. UFC WebSocket is available at /api/v1/ufc/live/ws. Does not claim LoL/CS2 WebSocket availability.","operationId":"getUfcLiveSocketDocs","tags":["UFC"],"parameters":[{"name":"boutId","in":"path","required":true,"schema":{"type":"string"},"example":"ufc-1234567"}],"responses":{"200":{"description":"Transport contract"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/live/health":{"get":{"summary":"UFC live worker health","description":"Health of the UFC live service: whether live tracking is running and how fresh its data is (`freshestHeartbeatLagSeconds`), plus `emptyReason`, `activeTracking`, `nextArmedBout` and `degradedReason`.","operationId":"getUfcLiveHealth","tags":["UFC"],"responses":{"200":{"description":"Health payload (emptyReason, lag, nextArmedBout)"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ufc/events/{slug}/live":{"get":{"summary":"Event live alias","description":"Alias of GET /ufc/live/events/{slug}.","operationId":"getUfcEventLive","tags":["UFC"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"ufc-fight-night-example"}],"responses":{"200":{"description":"Live event + tracking"},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Live event not found"}}}},"/cod/search":{"get":{"summary":"Search Call of Duty data","description":"Search COD players, organizations, and tournaments. Returns a `{ success, data }` envelope.","operationId":"searchCod","tags":["Call of Duty"],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Search text."},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["players","orgs","tournaments"]},"description":"Restrict to one entity type."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"Max results per type."}],"responses":{"200":{"description":"Search results."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cod/matches":{"get":{"summary":"Recent Call of Duty matches","description":"Convenience alias for recently completed COD matches. Same filters and shape as /cod/matches/recent.","operationId":"listCodMatches","tags":["Call of Duty"],"parameters":[{"name":"team","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by team/org slug."},{"name":"tournamentId","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by tournament id."},{"name":"season","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by season (e.g. 2026)."},{"name":"days","in":"query","required":false,"schema":{"type":"integer"},"description":"Only matches from the last N days."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Recently completed matches."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cod/matches/live":{"get":{"summary":"Live Call of Duty matches","description":"Returns currently live CDL matches (alias of /cod/cdl/live).","operationId":"getCodLiveMatches","tags":["Call of Duty"],"responses":{"200":{"description":"Live matches."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cod/matches/upcoming":{"get":{"summary":"Upcoming Call of Duty matches","description":"Returns upcoming scheduled/live COD matches from the database.","operationId":"listCodUpcomingMatches","tags":["Call of Duty"],"parameters":[{"name":"team","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by team/org slug."},{"name":"tournamentId","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by tournament id."},{"name":"season","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by season (e.g. 2026)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Upcoming matches."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cod/matches/recent":{"get":{"summary":"Recently completed Call of Duty matches","description":"Returns recently completed COD matches with scores and map counts.","operationId":"listCodRecentMatches","tags":["Call of Duty"],"parameters":[{"name":"team","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by team/org slug."},{"name":"tournamentId","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by tournament id."},{"name":"season","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by season (e.g. 2026)."},{"name":"days","in":"query","required":false,"schema":{"type":"integer"},"description":"Only matches from the last N days."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Recently completed matches."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cod/matches/{id}":{"get":{"summary":"Call of Duty match details","description":"Returns one COD match with teams, score, tournament context, and status.","operationId":"getCodMatch","tags":["Call of Duty"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Match id."}],"responses":{"200":{"description":"Match details."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Match not found."}}}},"/cod/matches/{id}/maps":{"get":{"summary":"Call of Duty match map breakdown","description":"Returns the map-by-map breakdown for a match (mode, map name, scores, per-map stats).","operationId":"getCodMatchMaps","tags":["Call of Duty"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Match id."}],"responses":{"200":{"description":"Map-by-map breakdown."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Match not found."}}}},"/cod/matches/{id}/player-stats":{"get":{"summary":"Call of Duty match player stats","description":"Returns match-level player stats aggregated from per-map stats.","operationId":"getCodMatchPlayerStats","tags":["Call of Duty"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Match id."},{"name":"includeMaps","in":"query","required":false,"schema":{"type":"boolean","default":true},"description":"Include per-map stat rows."}],"responses":{"200":{"description":"Player stats for the match."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Match not found."}}}},"/cod/players":{"get":{"summary":"List Call of Duty players","description":"Lists COD players with optional filters. Returns players with pagination counts.","operationId":"listCodPlayers","tags":["Call of Duty"],"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string"},"description":"Case-insensitive IGN search (alias: q)."},{"name":"team","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by current team/org slug."},{"name":"nationality","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by nationality."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Player list."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cod/players/{id}":{"get":{"summary":"Call of Duty player details","description":"Returns one COD player. Accepts a codPlayerId, current IGN, or activisionId as the id.","operationId":"getCodPlayer","tags":["Call of Duty"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"codPlayerId, IGN, or activisionId."}],"responses":{"200":{"description":"Player details."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Player not found."}}}},"/cod/players/{id}/stats":{"get":{"summary":"Call of Duty player season stats","description":"Returns player season stats (K/D, damage, hill time, and related aggregates).","operationId":"getCodPlayerStats","tags":["Call of Duty"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"codPlayerId, IGN, or activisionId."},{"name":"season","in":"query","required":false,"schema":{"type":"string"},"description":"Season filter (e.g. 2026)."}],"responses":{"200":{"description":"Player season stats."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Player not found."}}}},"/cod/players/{id}/matches":{"get":{"summary":"Call of Duty player match history","description":"Returns a player's recent match history with their per-match stats.","operationId":"getCodPlayerMatches","tags":["Call of Duty"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"codPlayerId, IGN, or activisionId."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}},{"name":"includeMapStats","in":"query","required":false,"schema":{"type":"boolean"},"description":"Include per-map stats per match."}],"responses":{"200":{"description":"Player match history."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Player not found."}}}},"/cod/orgs":{"get":{"summary":"List Call of Duty organizations","description":"Lists COD organizations (also mounted as /cod/teams).","operationId":"listCodOrgs","tags":["Call of Duty"],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by region."},{"name":"franchiseOnly","in":"query","required":false,"schema":{"type":"boolean"},"description":"Only CDL franchise teams."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Organization list."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cod/orgs/{slug}":{"get":{"summary":"Call of Duty organization details","description":"Returns one COD organization (also mounted as /cod/teams/{slug}).","operationId":"getCodOrg","tags":["Call of Duty"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Organization slug."}],"responses":{"200":{"description":"Organization details."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Organization not found."}}}},"/cod/orgs/{slug}/roster":{"get":{"summary":"Call of Duty organization roster","description":"Returns the current roster of a COD organization.","operationId":"getCodOrgRoster","tags":["Call of Duty"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Organization slug."},{"name":"includeFormer","in":"query","required":false,"schema":{"type":"boolean"},"description":"Include former roster members."}],"responses":{"200":{"description":"Organization roster."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Organization not found."}}}},"/cod/tournaments":{"get":{"summary":"List Call of Duty tournaments","description":"Lists COD tournaments with optional filters.","operationId":"listCodTournaments","tags":["Call of Duty"],"parameters":[{"name":"game","in":"query","required":false,"schema":{"type":"string","enum":["bo6","mw3","mw2"]},"description":"Filter by game title."},{"name":"tier","in":"query","required":false,"schema":{"type":"string","enum":["S","A","B"]},"description":"Filter by tournament tier."},{"name":"completed","in":"query","required":false,"schema":{"type":"boolean"},"description":"Only completed (or only open) tournaments."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Tournament list."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cod/tournaments/{id}":{"get":{"summary":"Call of Duty tournament details","description":"Returns one COD tournament with results and matches.","operationId":"getCodTournament","tags":["Call of Duty"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Tournament id."}],"responses":{"200":{"description":"Tournament details."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Tournament not found."}}}},"/cod/tournaments/{id}/results":{"get":{"summary":"Call of Duty tournament results","description":"Returns final placements (team results) for one COD tournament.","operationId":"getCodTournamentResults","tags":["Call of Duty"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Tournament id."}],"responses":{"200":{"description":"Tournament placements."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Tournament not found."}}}},"/cod/standings":{"get":{"summary":"CDL standings","description":"Returns current Call of Duty League standings (alias of /cod/cdl/standings).","operationId":"getCodStandings","tags":["Call of Duty"],"parameters":[{"name":"season","in":"query","required":false,"schema":{"type":"string"},"description":"Season filter (e.g. 2026)."},{"name":"stage","in":"query","required":false,"schema":{"type":"string"},"description":"Stage/major filter."}],"responses":{"200":{"description":"CDL standings."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cod/transfers":{"get":{"summary":"List Call of Duty transfers","description":"Lists recent COD roster transfers.","operationId":"listCodTransfers","tags":["Call of Duty"],"parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["join","leave","transfer","retire"]},"description":"Filter by transfer type."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Transfer list."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/cod/leaderboards/earnings":{"get":{"summary":"Call of Duty earnings leaderboard","description":"Returns the COD player earnings leaderboard.","operationId":"getCodEarningsLeaderboard","tags":["Call of Duty"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"game","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by game title."},{"name":"year","in":"query","required":false,"schema":{"type":"integer"},"description":"Filter by year."}],"responses":{"200":{"description":"Earnings leaderboard."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fortnite/search":{"get":{"summary":"Search Fortnite data","description":"Global Fortnite search across players, orgs, and tournaments.","operationId":"searchFortnite","tags":["Fortnite"],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Search text."}],"responses":{"200":{"description":"Search results."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fortnite/matches":{"get":{"summary":"List Fortnite competitive matches","description":"Lists Fortnite competitive matches (individual games within tournament windows).","operationId":"listFortniteMatches","tags":["Fortnite"],"parameters":[{"name":"eventId","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by Epic event id."},{"name":"eventWindowId","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by Epic event window id."},{"name":"tournamentId","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by internal tournament id."},{"name":"hasTimeline","in":"query","required":false,"schema":{"type":"boolean"},"description":"Only matches with replay timeline data."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Match list."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fortnite/matches/{matchId}":{"get":{"summary":"Fortnite match details","description":"Returns one Fortnite competitive match with session metadata.","operationId":"getFortniteMatch","tags":["Fortnite"],"parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"},"description":"Match id (Epic session id)."}],"responses":{"200":{"description":"Match details."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Match not found."}}}},"/fortnite/matches/{matchId}/stats":{"get":{"summary":"Fortnite match player stats","description":"Returns per-player stats (placement, kills, damage) for one Fortnite match.","operationId":"getFortniteMatchStats","tags":["Fortnite"],"parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"},"description":"Match id."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Match player stats."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Match not found."}}}},"/fortnite/matches/{matchId}/kill-feed":{"get":{"summary":"Fortnite match kill feed","description":"Returns the elimination feed for one Fortnite match (from replay data when available).","operationId":"getFortniteMatchKillFeed","tags":["Fortnite"],"parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string"},"description":"Match id."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}},{"name":"type","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by elimination type."}],"responses":{"200":{"description":"Kill feed."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Match not found."}}}},"/fortnite/tournaments":{"get":{"summary":"List Fortnite tournaments","description":"Lists Fortnite tournaments (events) with filters. Also mounted as /fortnite/events.","operationId":"listFortniteTournaments","tags":["Fortnite"],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["upcoming","ongoing","completed"]}},{"name":"region","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by region (e.g. NA, EU)."},{"name":"year","in":"query","required":false,"schema":{"type":"integer"}},{"name":"tier","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by tournament tier."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Tournament list with pagination counts."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fortnite/tournaments/live":{"get":{"summary":"Live Fortnite tournaments","description":"Returns currently live Fortnite tournaments/events (also /fortnite/matches/live).","operationId":"getFortniteLiveTournaments","tags":["Fortnite"],"responses":{"200":{"description":"Live tournaments."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fortnite/tournaments/upcoming":{"get":{"summary":"Upcoming Fortnite tournaments","description":"Returns upcoming Fortnite tournaments/events (also /fortnite/matches/upcoming).","operationId":"getFortniteUpcomingTournaments","tags":["Fortnite"],"responses":{"200":{"description":"Upcoming tournaments."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fortnite/tournaments/live/{eventId}/{windowId}":{"get":{"summary":"Live Fortnite event leaderboard","description":"Returns the live leaderboard for one tournament window (eventId + windowId from Epic). Epic serves 100 teams per page. Use pages (or leaderboardPages) to aggregate multiple pages (default 40 → up to 4000 teams; hard max 50 / FORTNITE_LIVE_LEADERBOARD_MAX_PAGES). Use page (0-based) to start at a given page; alone with pages unset it returns that single page.","operationId":"getFortniteLiveEventLeaderboard","tags":["Fortnite"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"},"description":"Epic event id."},{"name":"windowId","in":"path","required":true,"schema":{"type":"string"},"description":"Epic event window id."},{"name":"pages","in":"query","required":false,"schema":{"type":"integer","default":40,"minimum":1,"maximum":50},"description":"Number of Epic pages to aggregate (100 teams each). Alias: leaderboardPages. Default 40 (up to 4000 teams)."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":0,"minimum":0},"description":"0-based starting Epic page. Alone (without pages) returns a single page of 100 teams."},{"name":"leaderboardPages","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50},"description":"Alias of pages."}],"responses":{"200":{"description":"Live leaderboard."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Event or window not found."}}}},"/fortnite/tournaments/{id}":{"get":{"summary":"Fortnite tournament details","description":"Returns one Fortnite tournament/event.","operationId":"getFortniteTournament","tags":["Fortnite"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Tournament id."}],"responses":{"200":{"description":"Tournament details."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Tournament not found."}}}},"/fortnite/tournaments/{id}/results":{"get":{"summary":"Fortnite tournament results","description":"Returns the final leaderboard/results for one Fortnite tournament (alias of /leaderboard).","operationId":"getFortniteTournamentResults","tags":["Fortnite"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Tournament id."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Tournament results."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Tournament not found."}}}},"/fortnite/players":{"get":{"summary":"List Fortnite players","description":"Lists Fortnite pro players (search with q). Defaults to pro-earnings-filtered results unless includeAll=true.","operationId":"listFortnitePlayers","tags":["Fortnite"],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Search text."},{"name":"org","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by org slug."},{"name":"minEarnings","in":"query","required":false,"schema":{"type":"number"},"description":"Minimum career earnings (USD)."},{"name":"includeAll","in":"query","required":false,"schema":{"type":"boolean"},"description":"Include non-pro players (alias: all)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Player list with pagination counts."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fortnite/players/{identifier}":{"get":{"summary":"Fortnite player details","description":"Returns one Fortnite player by account id or username.","operationId":"getFortnitePlayer","tags":["Fortnite"],"parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string"},"description":"Epic account id or username."}],"responses":{"200":{"description":"Player details."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Player not found."}}}},"/fortnite/players/{identifier}/profile":{"get":{"summary":"Fortnite player lifetime profile stats","description":"Returns lifetime profile stats for one Fortnite player (aliases: /lifetime, /lifetime-stats).","operationId":"getFortnitePlayerProfileStats","tags":["Fortnite"],"parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string"},"description":"Epic account id or username."}],"responses":{"200":{"description":"Lifetime profile stats."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Player not found."}}}},"/fortnite/players/{identifier}/earnings":{"get":{"summary":"Fortnite player earnings","description":"Returns the earnings history/summary for one Fortnite player.","operationId":"getFortnitePlayerEarnings","tags":["Fortnite"],"parameters":[{"name":"identifier","in":"path","required":true,"schema":{"type":"string"},"description":"Epic account id or username."}],"responses":{"200":{"description":"Player earnings."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Player not found."}}}},"/fortnite/orgs":{"get":{"summary":"List Fortnite organizations","description":"Lists Fortnite organizations (also mounted as /fortnite/teams).","operationId":"listFortniteOrgs","tags":["Fortnite"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Organization list."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fortnite/orgs/{slug}":{"get":{"summary":"Fortnite organization details","description":"Returns one Fortnite organization.","operationId":"getFortniteOrg","tags":["Fortnite"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Organization slug."}],"responses":{"200":{"description":"Organization details."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Organization not found."}}}},"/fortnite/orgs/{slug}/roster":{"get":{"summary":"Fortnite organization roster","description":"Returns the current roster of a Fortnite organization.","operationId":"getFortniteOrgRoster","tags":["Fortnite"],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Organization slug."}],"responses":{"200":{"description":"Organization roster."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Organization not found."}}}},"/fortnite/pros/rankings":{"get":{"summary":"Fortnite pro rankings (Cito PR)","description":"Transparent Cito PR-style Fortnite pro rankings calculated from Cito-ingested tournament history (not FortniteTracker PR). Returns `{ success, ... }` with the formula version.","operationId":"listFortniteProRankings","tags":["Fortnite"],"parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by region."},{"name":"country","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by country."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Pro rankings with formula version."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fortnite/leaderboards/earnings":{"get":{"summary":"Fortnite earnings leaderboard","description":"Returns the Fortnite player earnings leaderboard (top earners).","operationId":"getFortniteEarningsLeaderboard","tags":["Fortnite"],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Earnings leaderboard."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/fortnite/transfers":{"get":{"summary":"List Fortnite transfers","description":"Lists recent Fortnite roster transfers.","operationId":"listFortniteTransfers","tags":["Fortnite"],"parameters":[{"name":"org","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by org slug."},{"name":"player","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by player."},{"name":"type","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by transfer type."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"Transfer list."},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/tennis/health":{"get":{"tags":["Tennis"],"summary":"Service Health Check","description":"Returns application health and database connection status.","operationId":"tennis_health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Check Health Get"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/health/sync":{"get":{"tags":["Tennis"],"summary":"Background Sync Status","description":"Returns status and execution timestamps of background sync jobs.","operationId":"tennis_health_sync_health_sync_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Sync Health Sync Get"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches/live":{"get":{"tags":["Tennis"],"summary":"List Active Live Matches","description":"Retrieves all currently active in-progress tennis matches with live scores.","operationId":"tennis_list_live_matches_matches_live_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Max live matches to return","title":"Limit"},"description":"Max live matches to return"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for limit","title":"Page Size"},"description":"Alias for limit"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisListResponse_LiveMatchSummary_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches/upcoming":{"get":{"tags":["Tennis"],"summary":"Upcoming Scheduled Matches","description":"Scheduled fixtures for the next ~3 days, soonest first.\n\nFed by the same source as the live board; a fixture keeps its match_id\nwhen it goes live, so ids are stable across upcoming -> live -> finished.","operationId":"tennis_list_upcoming_matches_matches_upcoming_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max fixtures to return","default":100,"title":"Limit"},"description":"Max fixtures to return"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for limit","title":"Page Size"},"description":"Alias for limit"},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisListResponse_Dict_str__Any__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches/live/{match_id}":{"get":{"tags":["Tennis"],"summary":"Get Detailed Live Match State","description":"Retrieves real-time score, point history, and server for an active match.","operationId":"tennis_get_live_match_matches_live__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisLiveMatchDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/players":{"get":{"tags":["Tennis"],"summary":"List & Filter Players","description":"Retrieves a paginated list of tennis players matching search and filter criteria.","operationId":"tennis_list_players_players_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Player name search query","title":"Q"},"description":"Player name search query"},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tour: ATP or WTA","title":"Tour"},"description":"Tour: ATP or WTA"},{"name":"ioc","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"3-letter country IOC code","title":"Ioc"},"description":"3-letter country IOC code"},{"name":"hand","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Hand: R, L, A, U","title":"Hand"},"description":"Hand: R, L, A, U"},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Active status","title":"Is Active"},"description":"Active status"},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort field: rank (default, ranked players first) | full_name | last_name | dob","default":"rank","title":"Sort By"},"description":"Sort field: rank (default, ranked players first) | full_name | last_name | dob"},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sort order: asc or desc","default":"asc","title":"Order"},"description":"Sort order: asc or desc"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (1-indexed)","default":1,"title":"Page"},"description":"Page number (1-indexed)"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page (max 100)","default":20,"title":"Page Size"},"description":"Items per page (max 100)"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"description":"Alias for page_size","title":"Limit"},"description":"Alias for page_size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisPaginatedResponse_PlayerListItem_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/players/search":{"get":{"tags":["Tennis"],"summary":"Player Autocomplete Search","description":"Fast prefix search for player autocomplete dropdowns.","operationId":"tennis_search_players_players_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Prefix search term (min 2 characters)","title":"Q"},"description":"Prefix search term (min 2 characters)"},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional tour filter (ATP/WTA)","title":"Tour"},"description":"Optional tour filter (ATP/WTA)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max results limit","default":10,"title":"Limit"},"description":"Max results limit"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for limit, matching the paginated routes","title":"Page Size"},"description":"Alias for limit, matching the paginated routes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisListResponse_PlayerListItem_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/players/batch":{"get":{"tags":["Tennis"],"summary":"Fetch Many Players by ID","description":"One call for a roster. Rows use the same shape as /players; ids that\ndo not resolve are listed in `missing` rather than silently dropped.","operationId":"tennis_get_players_batch_players_batch_get","parameters":[{"name":"ids","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated player ids, at most 50 (e.g. atp_207989,wta_211768)","title":"Ids"},"description":"Comma-separated player ids, at most 50 (e.g. atp_207989,wta_211768)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisPlayerBatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/players/{player_id}":{"get":{"tags":["Tennis"],"summary":"Get Player Biographical Profile","description":"Retrieves full biographical profile and career summary for a specific player.","operationId":"tennis_get_player_players__player_id__get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string","title":"Player Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisPlayerProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/players/{player_id}/stats":{"get":{"tags":["Tennis"],"summary":"Get Player Detailed Career Statistics","description":"Retrieves deep career metrics: surface breakdown, serving metrics, and return records.","operationId":"tennis_get_player_stats_players__player_id__stats_get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string","title":"Player Id"}},{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Court surface: Hard, Clay, Grass, Carpet","title":"Surface"},"description":"Court surface: Hard, Clay, Grass, Carpet"},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tournament level tier: G, M, A, F, D, C","title":"Level"},"description":"Tournament level tier: G, M, A, F, D, C"},{"name":"year_from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter matches from year","title":"Year From"},"description":"Filter matches from year"},{"name":"year_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter matches up to year","title":"Year To"},"description":"Filter matches up to year"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisPlayerStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches":{"get":{"tags":["Tennis"],"summary":"Query Match Archive","description":"Retrieves paginated match history with flexible filters.","operationId":"tennis_list_matches_matches_get","parameters":[{"name":"player_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Matches involving this player","title":"Player Id"},"description":"Matches involving this player"},{"name":"opponent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Matches against this opponent","title":"Opponent Id"},"description":"Matches against this opponent"},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tour: ATP or WTA","title":"Tour"},"description":"Tour: ATP or WTA"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Calendar year","title":"Year"},"description":"Calendar year"},{"name":"date_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Date Start"},"description":"Start date (YYYY-MM-DD)"},{"name":"date_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"Date End"},"description":"End date (YYYY-MM-DD)"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Single day (YYYY-MM-DD); same as date_start=date_end","title":"Date"},"description":"Single day (YYYY-MM-DD); same as date_start=date_end"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Alias for date_start","title":"From"},"description":"Alias for date_start"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Alias for date_end","title":"To"},"description":"Alias for date_end"},{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Surface: Hard, Clay, Grass, Carpet","title":"Surface"},"description":"Surface: Hard, Clay, Grass, Carpet"},{"name":"tournament_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific tournament ID","title":"Tournament Id"},"description":"Specific tournament ID"},{"name":"round","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Round code: F, SF, QF, R16, R32, R64, R128, RR, Q, Q1, Q2, Q3, BR, ER. Prose forms ('Final', 'Round of 32') are accepted too","title":"Round"},"description":"Round code: F, SF, QF, R16, R32, R64, R128, RR, Q, Q1, Q2, Q3, BR, ER. Prose forms ('Final', 'Round of 32') are accepted too"},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Level: G, M, A, F, D, C, itf, junior, or an ITF prize level (15, 25, M25, W100)","title":"Level"},"description":"Level: G, M, A, F, D, C, itf, junior, or an ITF prize level (15, 25, M25, W100)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (1-indexed)","default":1,"title":"Page"},"description":"Page number (1-indexed)"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Page Size"},"description":"Items per page"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"description":"Alias for page_size","title":"Limit"},"description":"Alias for page_size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisPaginatedResponse_MatchListItem_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches/recent":{"get":{"tags":["Tennis"],"summary":"Get Recent Tour Matches","description":"Retrieves recent completed matches.","operationId":"tennis_get_recent_matches_matches_recent_get","parameters":[{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ATP or WTA","title":"Tour"},"description":"ATP or WTA"},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Level","title":"Level"},"description":"Level"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Limit count","default":20,"title":"Limit"},"description":"Limit count"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for limit, matching the paginated routes","title":"Page Size"},"description":"Alias for limit, matching the paginated routes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisListResponse_Dict_str__Any__"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches/completed":{"get":{"tags":["Tennis"],"summary":"Completed Matches for a Day","description":"Returns finalised ATP/WTA match records for one calendar day.\n\nThis is the convenient daily-results endpoint; use ``/matches`` for broader\narchive filters. Dates use the source match date rather than request-local time.","operationId":"tennis_get_completed_matches_for_day_matches_completed_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Match date in YYYY-MM-DD (UTC match date)","title":"Date"},"description":"Match date in YYYY-MM-DD (UTC match date)"},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional tour filter: ATP or WTA","title":"Tour"},"description":"Optional tour filter: ATP or WTA"},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional tournament level filter","title":"Level"},"description":"Optional tournament level filter"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (1-indexed)","default":1,"title":"Page"},"description":"Page number (1-indexed)"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Items per page","default":50,"title":"Page Size"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisPaginatedResponse_MatchListItem_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches/{match_id}":{"get":{"tags":["Tennis"],"summary":"Get Match Details & Box Score","description":"Retrieves full match score, set breakdown, and match serving/return stats.","operationId":"tennis_get_match_matches__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisMatchDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches/{match_id}/tournament-link":{"get":{"tags":["Tennis"],"summary":"Resolve a Match Id to Its Tournament (Any Id Dialect)","description":"Accepts any match id dialect (bare live s365_, archived\ns365__, or atp___) and reports what\ntournament it belongs to. `tournament_id` is only ever a verified FK from\nthe match archive; a live/upcoming match that has not been reconciled to\na tournament row yet reports `tournament_id: null` with `tournament_name`\n(free text) and a `reason`, rather than a guessed id.","operationId":"tennis_get_match_tournament_link_matches__match_id__tournament_link_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Match Tournament Link Matches Match Id Tournament Link Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/h2h":{"get":{"tags":["Tennis"],"summary":"Head-to-Head Rivalry Record","description":"Calculates symmetric Head-to-Head match records, win-loss tallies, and surface splits.","operationId":"tennis_get_head_to_head_h2h_get","parameters":[{"name":"player1_id","in":"query","required":true,"schema":{"type":"string","description":"First player ID","title":"Player1 Id"},"description":"First player ID"},{"name":"player2_id","in":"query","required":true,"schema":{"type":"string","description":"Second player ID","title":"Player2 Id"},"description":"Second player ID"},{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by surface (Hard, Clay, Grass, Carpet)","title":"Surface"},"description":"Filter by surface (Hard, Clay, Grass, Carpet)"},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by tournament tier (G, M, A, F, D, C)","title":"Level"},"description":"Filter by tournament tier (G, M, A, F, D, C)"},{"name":"year_from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Start year","title":"Year From"},"description":"Start year"},{"name":"year_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"End year","title":"Year To"},"description":"End year"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHeadToHeadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/h2h/matrix":{"get":{"tags":["Tennis"],"summary":"Multi-Player H2H Grid","description":"Generates comparison grid matrix for a group of players.","operationId":"tennis_get_head_to_head_matrix_h2h_matrix_get","parameters":[{"name":"player_ids","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"description":"Player IDs, either repeated (player_ids=a&player_ids=b) or comma-separated (player_ids=a,b), matching /players/batch","title":"Player Ids"},"description":"Player IDs, either repeated (player_ids=a&player_ids=b) or comma-separated (player_ids=a,b), matching /players/batch"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHeadToHeadMatrixResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/rankings":{"get":{"tags":["Tennis"],"summary":"Weekly ATP/WTA Rankings Table","description":"Retrieves weekly ATP/WTA rankings. If mid-week date is provided, resolves to preceding Monday.","operationId":"tennis_list_rankings_rankings_get","parameters":[{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tour federation: ATP or WTA","title":"Tour"},"description":"Tour federation: ATP or WTA"},{"name":"circuit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Synonym for tour, matching the /rankings/{circuit} path form: ATP or WTA","title":"Circuit"},"description":"Synonym for tour, matching the /rankings/{circuit} path form: ATP or WTA"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Ranking publication date (YYYY-MM-DD)","title":"Date"},"description":"Ranking publication date (YYYY-MM-DD)"},{"name":"rank_min","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Minimum rank number","default":1,"title":"Rank Min"},"description":"Minimum rank number"},{"name":"rank_max","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"description":"Maximum rank number","default":100,"title":"Rank Max"},"description":"Maximum rank number"},{"name":"country_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by 3-letter IOC code","title":"Country Code"},"description":"Filter by 3-letter IOC code"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (1-indexed)","default":1,"title":"Page"},"description":"Page number (1-indexed)"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Items per page","default":50,"title":"Page Size"},"description":"Items per page"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for page_size","title":"Limit"},"description":"Alias for page_size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisRankingsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/rankings/top":{"get":{"tags":["Tennis"],"summary":"Top N Rankings Snapshot","description":"Instant snapshot of top ranked players.","operationId":"tennis_get_top_rankings_rankings_top_get","parameters":[{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ATP or WTA","title":"Tour"},"description":"ATP or WTA"},{"name":"circuit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Synonym for tour, matching the /rankings/{circuit} path form: ATP or WTA","title":"Circuit"},"description":"Synonym for tour, matching the /rankings/{circuit} path form: ATP or WTA"},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Number of top players (e.g. 10, 20, 50, 100)","default":10,"title":"Top N"},"description":"Number of top players (e.g. 10, 20, 50, 100)"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for top_n","title":"Limit"},"description":"Alias for top_n"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for top_n","title":"Page Size"},"description":"Alias for top_n"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Top Rankings Rankings Top Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/rankings/movers":{"get":{"tags":["Tennis"],"summary":"Ranking Movers Between Published Lists","description":"Climbers, fallers, new entries and drop-outs between a published list and the one before it.\nThe two lists can be weeks apart when the archive has gaps, which is why both dates are in the response.\nmovement = previous_rank - rank; both dates are named so the number can be checked.","operationId":"tennis_get_ranking_movers_rankings_movers_get","parameters":[{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ATP or WTA","title":"Tour"},"description":"ATP or WTA"},{"name":"circuit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Synonym for tour, matching the /rankings/{circuit} path form: ATP or WTA","title":"Circuit"},"description":"Synonym for tour, matching the /rankings/{circuit} path form: ATP or WTA"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Ranking date to compare against its predecessor (default: latest)","title":"Date"},"description":"Ranking date to compare against its predecessor (default: latest)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Rows per list","default":20,"title":"Limit"},"description":"Rows per list"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for limit, matching the paginated routes","title":"Page Size"},"description":"Alias for limit, matching the paginated routes"},{"name":"within","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"description":"Only players inside the top N on either list","default":100,"title":"Within"},"description":"Only players inside the top N on either list"},{"name":"direction","in":"query","required":false,"schema":{"type":"string","description":"up (climbers), down (fallers), or both (largest absolute change)","default":"up","title":"Direction"},"description":"up (climbers), down (fallers), or both (largest absolute change)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Ranking Movers Rankings Movers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/rankings/dates":{"get":{"tags":["Tennis"],"summary":"List Available Ranking Dates","description":"Retrieves all distinct official ranking publication dates.","operationId":"tennis_get_ranking_dates_rankings_dates_get","parameters":[{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ATP or WTA","title":"Tour"},"description":"ATP or WTA"},{"name":"circuit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Synonym for tour, matching the /rankings/{circuit} path form: ATP or WTA","title":"Circuit"},"description":"Synonym for tour, matching the /rankings/{circuit} path form: ATP or WTA"},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Optional year","title":"Year"},"description":"Optional year"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Max dates to return (most recent first)","title":"Limit"},"description":"Max dates to return (most recent first)"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for limit","title":"Page Size"},"description":"Alias for limit"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisListResponse_str_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/standings":{"get":{"tags":["Tennis"],"summary":"Tour Standings (latest singles rankings)","description":"Current tour standings: the latest published singles list, top first.\n\n`tour`/`circuit` pick the federation exactly as on /rankings. `category`\nis accepted for competitor parity; this dataset holds singles rankings\nonly, so doubles answers the same structured 404 the circuit guard uses\nrather than an empty table that looks like nobody plays doubles.","operationId":"tennis_get_standings_standings_get","parameters":[{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ATP or WTA","title":"Tour"},"description":"ATP or WTA"},{"name":"circuit","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Synonym for tour: ATP or WTA","title":"Circuit"},"description":"Synonym for tour: ATP or WTA"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"singles or doubles","default":"singles","title":"Category"},"description":"singles or doubles"},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Standings rows (e.g. 10, 20, 50, 100)","default":10,"title":"Top N"},"description":"Standings rows (e.g. 10, 20, 50, 100)"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for top_n","title":"Limit"},"description":"Alias for top_n"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for top_n","title":"Page Size"},"description":"Alias for top_n"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Ranking publication date (YYYY-MM-DD, default: latest)","title":"Date"},"description":"Ranking publication date (YYYY-MM-DD, default: latest)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Standings Standings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/rankings/history/{player_id}":{"get":{"tags":["Tennis"],"summary":"Player Career Ranking Trajectory","description":"Retrieves career historical ranking progression and peak ranking for a player.","operationId":"tennis_get_ranking_history_rankings_history__player_id__get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string","title":"Player Id"}},{"name":"date_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date","title":"Date Start"},"description":"Start date"},{"name":"date_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date","title":"Date End"},"description":"End date"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisPlayerRankingHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/tournaments":{"get":{"tags":["Tennis"],"summary":"List & Filter Tournaments","description":"Retrieves catalog of tennis tournaments across history.","operationId":"tennis_list_tournaments_tournaments_get","parameters":[{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ATP or WTA","title":"Tour"},"description":"ATP or WTA"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive name search, same as /players?q=","title":"Q"},"description":"Case-insensitive name search, same as /players?q="},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Edition year, e.g. 2026","title":"Year"},"description":"Edition year, e.g. 2026"},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Level tier code: G, M, A, F, D, C","title":"Level"},"description":"Level tier code: G, M, A, F, D, C"},{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Surface: Hard, Clay, Grass, Carpet","title":"Surface"},"description":"Surface: Hard, Clay, Grass, Carpet"},{"name":"include_live_shells","in":"query","required":false,"schema":{"type":"boolean","description":"Include live-feed containers (s365_*) that hold archived live results; excluded by default because they are not real events","default":false,"title":"Include Live Shells"},"description":"Include live-feed containers (s365_*) that hold archived live results; excluded by default because they are not real events"},{"name":"country_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country IOC code","title":"Country Code"},"description":"Country IOC code"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (1-indexed)","default":1,"title":"Page"},"description":"Page number (1-indexed)"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Items per page","default":20,"title":"Page Size"},"description":"Items per page"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for page_size","title":"Limit"},"description":"Alias for page_size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisPaginatedResponse_TournamentListItem_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/tournaments/calendar":{"get":{"tags":["Tennis"],"summary":"Annual Season Calendar","description":"Retrieves annual schedule of tournaments for a given season.","operationId":"tennis_get_tournament_calendar_tournaments_calendar_get","parameters":[{"name":"year","in":"query","required":true,"schema":{"type":"integer","description":"Calendar year (e.g. 2023, 2024)","title":"Year"},"description":"Calendar year (e.g. 2023, 2024)"},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ATP or WTA","title":"Tour"},"description":"ATP or WTA"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Max tournaments to return","title":"Limit"},"description":"Max tournaments to return"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for limit","title":"Page Size"},"description":"Alias for limit"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisListResponse_CalendarTournamentItem_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/tournaments/{tournament_id}":{"get":{"tags":["Tennis"],"summary":"Get Tournament Profile","description":"Retrieves full profile, surface, and title records for a tournament.","operationId":"tennis_get_tournament_tournaments__tournament_id__get","parameters":[{"name":"tournament_id","in":"path","required":true,"schema":{"type":"string","title":"Tournament Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisTournamentDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/tournaments/{tournament_id}/draw":{"get":{"tags":["Tennis"],"summary":"Get Tournament Draw Bracket","description":"Builds interactive bracket draw tree for a tournament edition.","operationId":"tennis_get_tournament_draw_tournaments__tournament_id__draw_get","parameters":[{"name":"tournament_id","in":"path","required":true,"schema":{"type":"string","title":"Tournament Id"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Optional year edition","title":"Year"},"description":"Optional year edition"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisTournamentDrawResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/tournaments/{tournament_id}/editions/{year}/draw":{"get":{"tags":["Tennis"],"summary":"Get Specific Tournament Edition Draw","description":"Builds interactive bracket draw tree for a specific tournament year edition.","operationId":"tennis_get_tournament_edition_draw_tournaments__tournament_id__editions__year__draw_get","parameters":[{"name":"tournament_id","in":"path","required":true,"schema":{"type":"string","title":"Tournament Id"}},{"name":"year","in":"path","required":true,"schema":{"type":"integer","title":"Year"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisTournamentDrawResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/tournaments/{tournament_id}/bracket":{"get":{"tags":["Tennis"],"summary":"Get Tournament Bracket (draw-tree alias)","description":"Bracket-tree alias of the draw endpoint: the same verified R128-to-Final\ntree with seeds and entry designations (WC/Q/LL/PR), under the requested\n/bracket path. Additive alias; the /draw routes are untouched.","operationId":"tennis_get_tournament_bracket_tournaments__tournament_id__bracket_get","parameters":[{"name":"tournament_id","in":"path","required":true,"schema":{"type":"string","title":"Tournament Id"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Optional year edition","title":"Year"},"description":"Optional year edition"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisTournamentDrawResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/odds/upcoming":{"get":{"tags":["Tennis"],"summary":"Upcoming Matches With Odds","description":"Fixtures with odds on the board (pre-match fixtures may not exist in the\nresults archive yet — use odds_event_id with /odds/{id}).","operationId":"tennis_get_upcoming_odds_odds_upcoming_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for limit","title":"Page Size"},"description":"Alias for limit"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Upcoming Odds Odds Upcoming Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/odds/{match_id}":{"get":{"tags":["Tennis"],"summary":"Pre-Match Odds","description":"Latest stored odds for a match. spreads/totals are GAMES lines, decimal prices.","operationId":"tennis_get_prematch_odds_odds__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"bookmakers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated book slugs (pinnacle,bet365,draftkings,fanduel,betfair_ex). Default: all available.","title":"Bookmakers"},"description":"Comma-separated book slugs (pinnacle,bet365,draftkings,fanduel,betfair_ex). Default: all available."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Prematch Odds Odds Match Id Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/odds/{match_id}/live":{"get":{"tags":["Tennis"],"summary":"Live (In-Play) Odds","description":"Odds captured while the match is in play. Same shape and rules as pre-match.","operationId":"tennis_get_live_odds_odds__match_id__live_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"bookmakers","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated book slugs. Default: all available.","title":"Bookmakers"},"description":"Comma-separated book slugs. Default: all available."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Live Odds Odds Match Id Live Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches/{match_id}/timeline":{"get":{"tags":["Tennis"],"summary":"Completed Match Timeline","description":"Returns persisted set events; point-level history is retained for live-feed matches only.","operationId":"tennis_match_timeline_matches__match_id__timeline_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Timeline Matches Match Id Timeline Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches/{match_id}/status":{"get":{"tags":["Tennis"],"summary":"Unified Match Status","description":"Normalizes scheduled/live/final and exceptional match states into one small payload.","operationId":"tennis_match_status_matches__match_id__status_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Status Matches Match Id Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/schedule":{"get":{"tags":["Tennis"],"summary":"Daily Tennis Schedule","operationId":"tennis_daily_schedule_schedule_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Calendar date in the requested timezone","title":"Date"},"description":"Calendar date in the requested timezone"},{"name":"timezone","in":"query","required":false,"schema":{"type":"string","description":"IANA timezone, e.g. America/New_York","default":"UTC","title":"Timezone"},"description":"IANA timezone, e.g. America/New_York"},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Max scheduled matches to return","title":"Limit"},"description":"Max scheduled matches to return"},{"name":"page_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Alias for limit","title":"Page Size"},"description":"Alias for limit"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Daily Schedule Schedule Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/players/{player_id}/form":{"get":{"tags":["Tennis"],"summary":"Player Recent Form","operationId":"tennis_player_form_players__player_id__form_get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string","title":"Player Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}},{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Player Form Players Player Id Form Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/leaderboards/aces":{"get":{"tags":["Tennis"],"summary":"Season Aces Leaderboard","description":"Season ace totals per player, summed over winner and loser sides of real\nmatch_stats rows joined to matches in the season. No defaults, no estimates:\na player with no stat rows simply does not appear.","operationId":"tennis_leaderboard_aces_leaderboards_aces_get","parameters":[{"name":"season","in":"query","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1968,"default":2026,"title":"Season"}},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Aces Leaderboards Aces Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/leaderboards/break-points-saved":{"get":{"tags":["Tennis"],"summary":"Season Break-Points-Saved Leaderboard","description":"Share of break points saved per player, summed over winner and loser\nsides of real match_stats rows joined to matches in the season. Only\nplayers facing at least 50 break points qualify.","operationId":"tennis_leaderboard_bp_saved_leaderboards_break_points_saved_get","parameters":[{"name":"season","in":"query","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1968,"default":2026,"title":"Season"}},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Bp Saved Leaderboards Break Points Saved Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/leaderboards/1st-serve-won":{"get":{"tags":["Tennis"],"summary":"Season First-Serve-Won Leaderboard","description":"Share of first-serve points won per player, summed over winner and\nloser sides of real match_stats rows joined to matches in the season.\nOnly players with at least 300 first serves in qualify.","operationId":"tennis_leaderboard_first_serve_won_leaderboards_1st_serve_won_get","parameters":[{"name":"season","in":"query","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1968,"default":2026,"title":"Season"}},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard First Serve Won Leaderboards 1St Serve Won Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/leaderboards/break-conversion":{"get":{"tags":["Tennis"],"summary":"Season Break-Conversion Leaderboard","description":"Share of break opportunities converted per player, from real\nmatch_stats rows joined to matches in the season. Breaks are the exact\nreturn-side mirror of the stored serve-side columns: a winner converts\n(loser faced minus loser saved), a loser converts (winner faced minus\nwinner saved), over the corresponding faced total. Only players with at\nleast 50 break opportunities qualify (ATP 2026: 1089 eligible, tops\n54.9-60.4). No defaults, no estimates: a player with no stat rows\nsimply does not appear.","operationId":"tennis_leaderboard_break_conversion_leaderboards_break_conversion_get","parameters":[{"name":"season","in":"query","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1968,"default":2026,"title":"Season"}},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Break Conversion Leaderboards Break Conversion Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/leaderboards/return-games-won":{"get":{"tags":["Tennis"],"summary":"Season Return-Games-Won Leaderboard","description":"Share of return games won per player, from real match_stats rows\njoined to matches in the season. Return games won are breaks achieved --\nthe exact return-side mirror of the stored serve-side columns: a winner\nbreaks (loser faced minus loser saved), a loser breaks (winner faced\nminus winner saved) -- over the opponent's service games played\n(loser/winner sv_gms). sv_gms semantics are verified, not assumed: over\n234,635 tiebreak-free matches, winner+loser sv_gms equals total set games\nin 98.05%; over 96,174 tiebreak matches it equals total minus tiebreak\nsets in 97.0% (tiebreaks are not service games, the correct tour\nconvention); derived breaks fit within sv_gms in 99.5% of 330,922\nfully-populated rows; Alcaraz ATP 2026 comes out 31.3%, the realistic\ntour-level band. Only players with at least 100 return games played\nqualify (ATP 2026: 987 eligible, top 51.5; WTA 2026: 567 eligible, top\n64.0). Rows missing any of the three opponent-side inputs are excluded,\nnever defaulted. No estimates: a player with no stat rows simply does\nnot appear.","operationId":"tennis_leaderboard_return_games_won_leaderboards_return_games_won_get","parameters":[{"name":"season","in":"query","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1968,"default":2026,"title":"Season"}},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Return Games Won Leaderboards Return Games Won Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/leaderboards/tiebreak-win-pct":{"get":{"tags":["Tennis"],"summary":"Season Tiebreak-Win-Pct Leaderboard","description":"Share of tiebreaks won per player, from real match_sets rows joined to\nmatches in the season. Set rows are stored from the match winner side,\nso a tiebreak goes to the winner side when winner_games > loser_games and\nto the loser side otherwise; a 7-6 set without tiebreak point columns\ncounts the same way (the /h2h tiebreak_record predicate). Super tiebreaks\n(10-point match tiebreaks) are excluded: this board rates classic 7-point\ntiebreak play. Only players contesting at least 10 tiebreaks qualify\n(ATP 2026: 361 eligible; WTA 2026: 13 eligible). No defaults, no\nestimates: a player with no tiebreak sets simply does not appear.","operationId":"tennis_leaderboard_tiebreak_pct_leaderboards_tiebreak_win_pct_get","parameters":[{"name":"season","in":"query","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1968,"default":2026,"title":"Season"}},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Tiebreak Pct Leaderboards Tiebreak Win Pct Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/leaderboards/deciding-set-record":{"get":{"tags":["Tennis"],"summary":"Season Deciding-Set-Record Leaderboard","description":"Share of deciding sets won per player, from real matches rows in the\nseason. A match reaches a decider exactly when winner_sets_won plus\nloser_sets_won equals best_of (a Bo3 going the full 3 sets, a Bo5 going\nthe full 5); the match winner won that decider by definition, so winner\nsides count won and loser sides count lost -- no set-level inference, no\nestimates. best_of=1 exhibition rows are excluded: this board rates\nfull-format pressure play. Only players contesting at least 10 deciders\nqualify (ATP 2026: 291 eligible; WTA 2026: 64 eligible; both tours\ntop 90.0 at ship time). A player with no deciders simply does not\nappear.","operationId":"tennis_leaderboard_deciding_set_record_leaderboards_deciding_set_record_get","parameters":[{"name":"season","in":"query","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1968,"default":2026,"title":"Season"}},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Deciding Set Record Leaderboards Deciding Set Record Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/leaderboards/comeback-wins":{"get":{"tags":["Tennis"],"summary":"Season Comeback-Wins Leaderboard","description":"Share of matches won after losing the first set, from real match_sets\nrows (set_num=1) joined to matches in the season. Set rows are stored from\nthe match winner side, so the winner lost the opener exactly when\nwinner_games < loser_games on the set-1 row (verified 5/5 against\nscore_raw first sets); the match winner took that comeback by definition,\nso winner sides count won when the opener went against them and loser\nsides always count lost -- no inference, no estimates. Only COMPLETED\nmatches count: a retirement or walkover after set 1 is not a comeback.\nOnly players with first-set data on at least 20 matches qualify (ATP\n2026: 594 eligible; WTA 2026: 210 eligible; tops ~27.6 at ship time). A\nplayer with no set-1 rows simply does not appear.","operationId":"tennis_leaderboard_comeback_wins_leaderboards_comeback_wins_get","parameters":[{"name":"season","in":"query","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1968,"default":2026,"title":"Season"}},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Comeback Wins Leaderboards Comeback Wins Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/leaderboards/finals-record":{"get":{"tags":["Tennis"],"summary":"Season Finals-Record Leaderboard","description":"Share of finals won per player, from real matches rows in the\nseason. A final is exactly round='F' (the only final code in the\nstore -- a FINAL-like round probe returns zero other variants); the\nmatch winner lifted the title by definition, so winner sides count\nwon and loser sides count lost -- no inference, no estimates. Only\nCOMPLETED finals count: a retirement or walkover is not a title.\nOnly players contesting at least 3 finals qualify (ATP 2026: 66\neligible; WTA 2026: 31 eligible at ship time). A player with no\nfinals simply does not appear.","operationId":"tennis_leaderboard_finals_record_leaderboards_finals_record_get","parameters":[{"name":"season","in":"query","required":false,"schema":{"type":"integer","maximum":2030,"minimum":1968,"default":2026,"title":"Season"}},{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tour"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Leaderboard Finals Record Leaderboards Finals Record Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/tournaments/{tournament_id}/edition":{"get":{"tags":["Tennis"],"summary":"Tournament Edition Metadata","operationId":"tennis_tournament_edition_tournaments__tournament_id__edition_get","parameters":[{"name":"tournament_id","in":"path","required":true,"schema":{"type":"string","title":"Tournament Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Tournament Edition Tournaments Tournament Id Edition Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/coverage":{"get":{"tags":["Tennis"],"summary":"Dataset Coverage","operationId":"tennis_dataset_coverage_coverage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Dataset Coverage Coverage Get"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/h2h/{player1_id}/{player2_id}":{"get":{"tags":["Tennis"],"summary":"Head-to-Head (path form)","description":"Path-parameter variant of /h2h for clients expecting /h2h/{a}/{b}.","operationId":"tennis_h2h_path_form_h2h__player1_id___player2_id__get","parameters":[{"name":"player1_id","in":"path","required":true,"schema":{"type":"string","title":"Player1 Id"}},{"name":"player2_id","in":"path","required":true,"schema":{"type":"string","title":"Player2 Id"}},{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Hard, Clay, Grass, Carpet","title":"Surface"},"description":"Hard, Clay, Grass, Carpet"},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tier code: G, M, A, F, D, C","title":"Level"},"description":"Tier code: G, M, A, F, D, C"},{"name":"year_from","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year From"}},{"name":"year_to","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response H2H Path Form H2H Player1 Id Player2 Id Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/players/{player_id}/matches":{"get":{"tags":["Tennis"],"summary":"Player Match Log","description":"All matches for one player, newest first — profile match logs in one call.","operationId":"tennis_player_matches_players__player_id__matches_get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string","title":"Player Id"}},{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year"}},{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Surface"}},{"name":"level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Level"}},{"name":"opponent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Opponent Id"}},{"name":"date_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Start"}},{"name":"date_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date End"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Player Matches Players Player Id Matches Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/tournaments/{tournament_id}/schedule":{"get":{"tags":["Tennis"],"summary":"Tournament Edition Schedule","description":"Matches of one tournament edition in date/round order — order of play, results view.","operationId":"tennis_tournament_schedule_tournaments__tournament_id__schedule_get","parameters":[{"name":"tournament_id","in":"path","required":true,"schema":{"type":"string","title":"Tournament Id"}},{"name":"round","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Round code filter: F, SF, QF, R16…","title":"Round"},"description":"Round code filter: F, SF, QF, R16…"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Tournament Schedule Tournaments Tournament Id Schedule Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/matches/{match_id}/stats":{"get":{"tags":["Tennis"],"summary":"Match Statistics Slice","description":"Serving/return statistics for one match (subset of the full match detail).","operationId":"tennis_match_stats_matches__match_id__stats_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Match Stats Matches Match Id Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/competitions":{"get":{"tags":["Tennis"],"summary":"Competitions Index","description":"Distinct competitions across editions (name + tour), with edition counts and year span.\n\nA 'competition' here is the recurring event (e.g. Wimbledon), whereas\n/tournaments lists individual yearly editions.\n\nEach item carries an `id`: the most recent real tournament_id sharing\nthat exact name+tour, so a caller (or the MCP's resolve_entity, which\nreads this route for tennis tournament search) always gets a usable,\nchainable id -- never a bare name with nothing to look up next.","operationId":"tennis_list_competitions_competitions_get","parameters":[{"name":"tour","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ATP or WTA","title":"Tour"},"description":"ATP or WTA"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name search","title":"Q"},"description":"Name search"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Competitions Competitions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/tennis/rankings/{circuit}":{"get":{"tags":["Tennis"],"summary":"Rankings by Circuit (path form)","description":"Circuit-style rankings path: /rankings/atp, /rankings/wta (singles).\n\nDoubles and race standings are not in this dataset; those circuits return\na structured 404 saying so rather than an empty table.","operationId":"tennis_rankings_by_circuit_rankings__circuit__get","parameters":[{"name":"circuit","in":"path","required":true,"schema":{"type":"string","title":"Circuit"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date"}},{"name":"rank_min","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Rank Min"}},{"name":"rank_max","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":100,"title":"Rank Max"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rankings By Circuit Rankings Circuit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TennisHTTPValidationError"}}}}},"security":[{"ApiKeyAuth":[]}]}},"/cs2":{"get":{"summary":"CS2 API overview","description":"Coverage counts (matches, teams, players, events, demos) and links to the main endpoints.","operationId":"getCs2","tags":["CS2"],"responses":{"200":{"description":"CS2 API overview","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_api_overview","name":"Counter-Strike 2 API","status":"available","coverage":{"matches":14398,"live":1,"upcoming":120,"teams":4470,"players":8545,"events":1502,"rosterChanges":149615,"demos":26893,"playerPeriodStats":47466,"teamPeriodStats":1677},"endpoints":{"live":"/api/v1/cs2/live","liveState":"/api/v1/cs2/live/{matchId}/state","liveScoreboard":"/api/v1/cs2/live/{matchId}/scoreboard","liveEvents":"/api/v1/cs2/live/{matchId}/events","matches":"/api/v1/cs2/matches","matchPlayerStats":"/api/v1/cs2/matches/{matchId}/player-stats","matchMaps":"/api/v1/cs2/matches/{matchId}/maps","matchDemos":"/api/v1/cs2/matches/{matchId}/demos","gameStats":"/api/v1/cs2/games/{gameId}/stats","gameRounds":"/api/v1/cs2/games/{gameId}/rounds","gameEvents":"/api/v1/cs2/games/{gameId}/events","teams":"/api/v1/cs2/teams","teamRosterHistory":"/api/v1/cs2/teams/{teamId}/roster-history","teamTrends":"/api/v1/cs2/teams/{teamId}/trends","players":"/api/v1/cs2/players","playerCareer":"/api/v1/cs2/players/{playerId}/career","playerSeasons":"/api/v1/cs2/players/{playerId}/seasons","playerTransfers":"/api/v1/cs2/players/{playerId}/transfers","events":"/api/v1/cs2/events","activeEvents":"/api/v1/cs2/events/active","eventCalendar":"/api/v1/cs2/events/calendar","eventParticipants":"/api/v1/cs2/events/{eventId}/participants","rosterChanges":"/api/v1/cs2/roster-changes/recent","rankings":"/api/v1/cs2/rankings/teams","aggregateStats":{"players":"/api/v1/cs2/stats/players","teams":"/api/v1/cs2/stats/teams","maps":"/api/v1/cs2/stats/maps","weapons":"/api/v1/cs2/stats/weapons","pistolRounds":"/api/v1/cs2/stats/pistol-rounds","openingDuels":"/api/v1/cs2/stats/opening-duels","clutches":"/api/v1/cs2/stats/clutches","flashAssists":"/api/v1/cs2/stats/flash-assists","utility":"/api/v1/cs2/stats/utility","economy":"/api/v1/cs2/stats/economy","mapPool":"/api/v1/cs2/map-pool"}}},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/status/sync":{"get":{"summary":"CS2 data freshness","description":"Whether CS2 data is current: `current_status`, `freshness` (`fresh` or `stale`) and the time of the last successful update.","operationId":"getCs2StatusSync","tags":["CS2"],"responses":{"200":{"description":"CS2 data freshness","content":{"application/json":{"example":{"success":true,"data":{"entity_type":"cs2_sync_health","current_status":"healthy","freshness":"fresh","last_successful_sync_at":"2026-09-23T01:21:07.356Z","checked_at":"2026-09-23T01:21:30.000Z"},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/changelog":{"get":{"summary":"CS2 data changelog","description":"Recent changes to stored CS2 records (field, old value, new value, time). Values longer than 500 characters are truncated; pass `entity_id` with `full=true` for complete values.","operationId":"getCs2Changelog","tags":["CS2"],"parameters":[{"name":"action","in":"query","required":false,"description":"Filter by `action`.","schema":{"type":"string"}},{"name":"entity_id","in":"query","required":false,"description":"Only changes to this record.","schema":{"type":"string"}},{"name":"entity_type","in":"query","required":false,"description":"Only changes to this kind of record.","schema":{"type":"string"}},{"name":"full","in":"query","required":false,"description":"`true` returns complete values instead of truncated ones.","schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"CS2 data changelog","content":{"application/json":{"example":{"success":true,"data":[{"id":"cmudj3yqa00pi10aqe361juo3","entityType":"cs2_match","entityId":"cs2-match-2398521","fieldPath":"liveState","oldValue":"{\"teams\":{\"team1Name\":\"Club 333\",\"team2Name\":\"DETONATE\",\"ctTeamName\":\"CT\",\"terroristTeamName\":\"Terrorist\"},\"sourceId\":\"2398521\",\"source\":\"live feed_polling\",\"status\":\"live\",\"matchId\":\"source-match-2398521\",\"roundEnds\":[{\"winner\":\"CT\",\"ev...","newValue":{"status":"upcoming","team1Score":null,"team2Score":null,"winnerTeamId":null},"action":"merge_rejected","createdAt":"2026-09-23T03:13:58.161Z"},{"id":"cmudj23cl00ph10aq427s8v0b","entityType":"cs2_map_player_stat","entityId":"cs2-match-2398520-map-2:twigs","fieldPath":"rating,headshotPercent","oldValue":"{\"id\":\"live-source-match-2398520-map-2-twigs\",\"adr\":52.5,\"raw\":{\"hp\":55,\"adr\":52.5,\"raw\":{\"hp\":55,\"dbId\":23376,\"name\":\"twigs\",\"nick\":\"twigs\",\"alive\":true,\"facts\":[],\"money\":1050,\"score\":13,\"deaths\":16,\"helmet\":true,\"kevlar\":true,\"assists...","newValue":"{\"id\":\"live-source-match-2398520-map-2-twigs\",\"adr\":52.5,\"raw\":{\"hp\":55,\"adr\":52.5,\"raw\":{\"hp\":55,\"dbId\":23376,\"name\":\"twigs\",\"nick\":\"twigs\",\"alive\":true,\"facts\":[],\"money\":1050,\"score\":13,\"deaths\":16,\"helmet\":true,\"kevlar\":true,\"assists...","action":"merge_accepted","createdAt":"2026-09-23T03:12:30.837Z"}],"meta":{"total":1242453,"limit":2,"valuesTruncatedAt":500,"count":2,"page":1,"totalPages":621227,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/webhooks/events":{"get":{"summary":"CS2 webhook event types","description":"The event types a CS2 webhook can subscribe to, with example payloads.","operationId":"getCs2WebhooksEvents","tags":["CS2"],"responses":{"200":{"description":"CS2 webhook event types","content":{"application/json":{"example":{"success":true,"available_on_plans":["PRO","BUSINESS"],"management_endpoint":"/api/v1/webhooks","create_endpoint":"POST /api/v1/webhooks","events":["cs2.match.started","cs2.match.live_started"],"example_payload":{"event":"cs2.score.updated","id":"7f4c2d0d8f2f4b2ca6c6f35c4d53c2aa","timestamp":"2026-09-23T03:15:09.506Z","data":{"matchId":"cs2_match_2395230","team1Score":1,"team2Score":0,"currentMap":"mirage"}},"signature_headers":["X-Cito-Signature","X-Cito-Event"],"signing":{"algorithm":"HMAC-SHA256","signedContent":"UTF-8 bytes of the exact JSON request body sent by Cito","bodySerialization":"JSON.stringify(payload)","signatureHeader":"X-Cito-Signature","signatureEncoding":"hex","signaturePrefix":"none","secretFormat":"Use the exact webhook secret value shown when the webhook is created or regenerated. No whsec_ prefix is used.","verificationRule":"Verify against the raw request body bytes before reparsing or reserializing JSON.","sampleSecret":"cito_test_secret_123","samplePayload":{"event":"lol.live.state","id":"sample-event-id-123","timestamp":"2026-06-07T16:00:00.000Z","data":{"gameId":"lol-game-123","matchId":"lol-match-123","league":"LEC","gameTime":1337,"blueTeam":{"tag":"G2","kills":7,"gold":24800,"towers":3,"dragons":2,"barons":0},"redTeam":{"tag":"FNC","kills":5,"gold":23700,"towers":2,"dragons":1,"barons":0}}},"samplePayloadString":"{\"event\":\"lol.live.state\",\"id\":\"sample-event-id-123\",\"timestamp\":\"2026-06-07T16:00:00.000Z\",\"data\":{\"gameId\":\"lol-game-123\",\"matchId\":\"lol-match-123\",\"league\":\"LEC\",\"gameTime\":1337,\"blueTeam\":{\"tag\":\"G2\",\"kills\":7,\"gold\":24800,\"towers\":3...","sampleSignature":"97db77f5cd96e09a70dcf6cc75fc5d92d780c41ce82c853b51e4070954c54171","sampleHeaders":{"Content-Type":"application/json","X-Cito-Signature":"97db77f5cd96e09a70dcf6cc75fc5d92d780c41ce82c853b51e4070954c54171","X-Cito-Event":"lol.live.state","X-Cito-Event-Id":"sample-event-id-123","X-Cito-Timestamp":"2026-06-07T16:00:00.000Z","X-Cito-Delivery-Attempt":"1"}},"live_sse_stream":"/api/v1/cs2/live/stream?matchId={matchId}","docs":"https://citoapi.com/docs/api/cs2"}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/webhooks":{"get":{"summary":"CS2 webhook event types","description":"The event types a CS2 webhook can subscribe to, with example payloads.\n\nSame response as `GET /api/v1/cs2/webhooks/events`.","operationId":"getCs2Webhooks","tags":["CS2"],"responses":{"200":{"description":"CS2 webhook event types"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/webhooks/events"},"post":{"summary":"How to register a CS2 webhook","description":"Returns the steps and payload for registering a CS2 webhook in the dashboard. It does not create a subscription.\n\nSame response as `GET /api/v1/cs2/webhooks/events`.","operationId":"postCs2Webhooks","tags":["CS2"],"responses":{"200":{"description":"How to register a CS2 webhook"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/webhooks/events"}},"/cs2/search":{"get":{"summary":"Search CS2","description":"Search teams, players, events and matches by name. Requires `q`.","operationId":"getCs2Search","tags":["CS2"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text.","schema":{"type":"string"}}],"responses":{"200":{"description":"Search CS2","content":{"application/json":{"example":{"success":true,"data":{"teams":[{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},{"id":"cs2-team-13815","name":"Vitality Academy","slug":"vitality-academy","teamTag":"VA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/ad13083b7d0f2fdc6fc7032fe719467f.webp","countryName":"Estonia","countryCode":"EE","region":"Europe","worldRanking":null,"lastSyncedAt":"2026-09-16T18:43:52.802Z","lastVerified":"2026-09-16T18:43:52.802Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/88a33f664082f564bcdea7a4c2983cfa.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/88a33f664082f564bcdea7a4c2983cfa.webp"}],"players":[],"events":[],"matches":[{"id":"cs2-match-2398108","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T18:49:47.000Z","endsAt":null,"bestOf":5,"status":"completed","team1Id":"cs2-team-11861","team2Id":"cs2-team-9565","team1Name":"Aurora","team2Name":"Vitality","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565","liveState":{"status":"completed","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565"},"vetoOrder":[{"map":null,"order":1,"action":"ban","teamId":"cs2-team-11861","teamName":"Aurora"},{"map":"ancient","order":2,"action":"ban","teamId":"cs2-team-9565","teamName":"Vitality"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:07:06.893Z","lastVerified":"2026-09-23T03:07:06.893Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","prizePool":5000008,"currency":"USD","location":null,"format":null,"teamCount":8,"standings":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","status":"completed","tier":"A","prestigeScore":75,"region":null,"isLan":true,"confirmedStatus":"detail_unavailable","streamLinks":null,"vodLinks":null,"lastSyncedAt":"2026-09-18T21:20:27.349Z","lastVerified":"2026-09-18T21:00:01.788Z","confidence":"high"},"team1":{"id":"cs2-team-11861","name":"Aurora","slug":"aurora","teamTag":"AURORA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cf72686d65237eb4fe4365d8070d068.webp","countryName":"Türkiye","countryCode":"TR","region":"Europe","worldRanking":9,"lastSyncedAt":"2026-09-23T03:11:10.359Z","lastVerified":"2026-09-23T03:11:10.359Z","confidence":"high"},"team2":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"maps":[{"id":"cs2-match-2398108-map-1","matchId":"cs2-match-2398108","mapNumber":1,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[3,1],"team2Halves":[9,4],"winnerTeamId":"cs2-team-9565","durationRounds":17,"lastSyncedAt":"2026-09-22T19:46:26.632Z","playerStats":[],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/fe1f1d8335462dc6a8f3efc197aaec0a.webp","pickTeamId":"cs2-team-11861","objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{},"scorePending":true},{"id":"cs2-match-2398108-map-2","matchId":"cs2-match-2398108","mapNumber":2,"mapName":"Inferno","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[7,6],"team2Halves":[5,6],"winnerTeamId":"cs2-team-11861","durationRounds":24,"lastSyncedAt":"2026-09-22T19:46:37.002Z","playerStats":[],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/4004b70cfe62cef3b711c587bd0d342c.webp","pickTeamId":"cs2-team-9565","objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{},"scorePending":true}],"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}},{"id":"cs2-match-2398107","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T12:00:00.000Z","endsAt":null,"bestOf":3,"status":"completed","team1Id":"cs2-team-9565","team2Id":"cs2-team-8297","team1Name":"Vitality","team2Name":"FURIA","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-9565","liveState":{"status":"completed","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-9565"},"vetoOrder":[{"map":null,"order":1,"action":"ban","teamId":"cs2-team-8297","teamName":"FURIA"},{"map":"ancient","order":2,"action":"ban","teamId":"cs2-team-9565","teamName":"Vitality"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:03:45.610Z","lastVerified":"2026-09-23T03:03:45.610Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","prizePool":5000008,"currency":"USD","location":null,"format":null,"teamCount":8,"standings":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","status":"completed","tier":"A","prestigeScore":75,"region":null,"isLan":true,"confirmedStatus":"detail_unavailable","streamLinks":null,"vodLinks":null,"lastSyncedAt":"2026-09-18T21:20:27.349Z","lastVerified":"2026-09-18T21:00:01.788Z","confidence":"high"},"team1":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"team2":{"id":"cs2-team-8297","name":"FURIA","slug":"furia","teamTag":"FURIA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/ae2903ad6662885facbfedf1183a1b22.svg","countryName":"Brazil","countryCode":"BR","region":"South America","worldRanking":4,"lastSyncedAt":"2026-09-23T03:09:12.077Z","lastVerified":"2026-09-23T03:09:12.077Z","confidence":"high"},"maps":[{"id":"cs2-match-2398107-map-1","matchId":"cs2-match-2398107","mapNumber":1,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,1],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:43.662Z","playerStats":[],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp","pickTeamId":"cs2-team-8297","objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{}},{"id":"cs2-match-2398107-map-2","matchId":"cs2-match-2398107","mapNumber":2,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,4],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:52.776Z","playerStats":[],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/fe1f1d8335462dc6a8f3efc197aaec0a.webp","pickTeamId":"cs2-team-9565","objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{}}],"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}]},"meta":{"query":"vitality"}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/autocomplete":{"get":{"summary":"CS2 autocomplete","description":"Fast name completion across teams, players and events for search boxes. Requires `q`.","operationId":"getCs2Autocomplete","tags":["CS2"],"responses":{"200":{"description":"CS2 autocomplete","content":{"application/json":{"example":{"success":true,"data":{"teams":[{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},{"id":"cs2-team-13815","name":"Vitality Academy","slug":"vitality-academy","teamTag":"VA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/ad13083b7d0f2fdc6fc7032fe719467f.webp","countryName":"Estonia","countryCode":"EE","region":"Europe","worldRanking":null,"lastSyncedAt":"2026-09-16T18:43:52.802Z","lastVerified":"2026-09-16T18:43:52.802Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/88a33f664082f564bcdea7a4c2983cfa.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/88a33f664082f564bcdea7a4c2983cfa.webp"}],"players":[],"events":[],"matches":[{"id":"cs2-match-2398108","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T18:49:47.000Z","endsAt":null,"bestOf":5,"status":"completed","team1Id":"cs2-team-11861","team2Id":"cs2-team-9565","team1Name":"Aurora","team2Name":"Vitality","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565","liveState":{"status":"completed","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565"},"vetoOrder":[{"map":null,"order":1,"action":"ban","teamId":"cs2-team-11861","teamName":"Aurora"},{"map":"ancient","order":2,"action":"ban","teamId":"cs2-team-9565","teamName":"Vitality"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:07:06.893Z","lastVerified":"2026-09-23T03:07:06.893Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","prizePool":5000008,"currency":"USD","location":null,"format":null,"teamCount":8,"standings":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","status":"completed","tier":"A","prestigeScore":75,"region":null,"isLan":true,"confirmedStatus":"detail_unavailable","streamLinks":null,"vodLinks":null,"lastSyncedAt":"2026-09-18T21:20:27.349Z","lastVerified":"2026-09-18T21:00:01.788Z","confidence":"high"},"team1":{"id":"cs2-team-11861","name":"Aurora","slug":"aurora","teamTag":"AURORA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cf72686d65237eb4fe4365d8070d068.webp","countryName":"Türkiye","countryCode":"TR","region":"Europe","worldRanking":9,"lastSyncedAt":"2026-09-23T03:11:10.359Z","lastVerified":"2026-09-23T03:11:10.359Z","confidence":"high"},"team2":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"maps":[{"id":"cs2-match-2398108-map-1","matchId":"cs2-match-2398108","mapNumber":1,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[3,1],"team2Halves":[9,4],"winnerTeamId":"cs2-team-9565","durationRounds":17,"lastSyncedAt":"2026-09-22T19:46:26.632Z","playerStats":[],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/fe1f1d8335462dc6a8f3efc197aaec0a.webp","pickTeamId":"cs2-team-11861","objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{},"scorePending":true},{"id":"cs2-match-2398108-map-2","matchId":"cs2-match-2398108","mapNumber":2,"mapName":"Inferno","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[7,6],"team2Halves":[5,6],"winnerTeamId":"cs2-team-11861","durationRounds":24,"lastSyncedAt":"2026-09-22T19:46:37.002Z","playerStats":[],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/4004b70cfe62cef3b711c587bd0d342c.webp","pickTeamId":"cs2-team-9565","objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{},"scorePending":true}],"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}},{"id":"cs2-match-2398107","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T12:00:00.000Z","endsAt":null,"bestOf":3,"status":"completed","team1Id":"cs2-team-9565","team2Id":"cs2-team-8297","team1Name":"Vitality","team2Name":"FURIA","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-9565","liveState":{"status":"completed","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-9565"},"vetoOrder":[{"map":null,"order":1,"action":"ban","teamId":"cs2-team-8297","teamName":"FURIA"},{"map":"ancient","order":2,"action":"ban","teamId":"cs2-team-9565","teamName":"Vitality"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:03:45.610Z","lastVerified":"2026-09-23T03:03:45.610Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","prizePool":5000008,"currency":"USD","location":null,"format":null,"teamCount":8,"standings":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","status":"completed","tier":"A","prestigeScore":75,"region":null,"isLan":true,"confirmedStatus":"detail_unavailable","streamLinks":null,"vodLinks":null,"lastSyncedAt":"2026-09-18T21:20:27.349Z","lastVerified":"2026-09-18T21:00:01.788Z","confidence":"high"},"team1":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"team2":{"id":"cs2-team-8297","name":"FURIA","slug":"furia","teamTag":"FURIA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/ae2903ad6662885facbfedf1183a1b22.svg","countryName":"Brazil","countryCode":"BR","region":"South America","worldRanking":4,"lastSyncedAt":"2026-09-23T03:09:12.077Z","lastVerified":"2026-09-23T03:09:12.077Z","confidence":"high"},"maps":[{"id":"cs2-match-2398107-map-1","matchId":"cs2-match-2398107","mapNumber":1,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,1],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:43.662Z","playerStats":[],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp","pickTeamId":"cs2-team-8297","objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{}},{"id":"cs2-match-2398107-map-2","matchId":"cs2-match-2398107","mapNumber":2,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,4],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:52.776Z","playerStats":[],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/fe1f1d8335462dc6a8f3efc197aaec0a.webp","pickTeamId":"cs2-team-9565","objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{}}],"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}]},"meta":{"query":"vitality"}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/roster-changes/recent":{"get":{"summary":"Recent roster changes","description":"Players joining and leaving teams, newest first. Filter with `teamId` or `playerId`.","operationId":"getCs2RosterChangesRecent","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"playerId","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"teamId","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Recent roster changes","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_roster_changes","dataAvailable":true,"changes":[{"changeId":"f4a51ba2-9a2a-4e0c-9fe7-9da6ef3b663c","changeType":"leave","teamId":"cs2-team-11838","fromTeamId":"cs2-team-11838","toTeamId":null,"teamName":"Partizan","playerId":"cs2-player-25471","playerName":"rajkeza","roleBefore":null,"roleAfter":null,"effectiveAt":"2026-09-15T22:00:00.000Z","detectedAt":"2026-09-22T20:00:10.568Z","confidence":"medium"},{"changeId":"fe45f322-e64c-4b1e-9f35-ef517f4a827f","changeType":"leave","teamId":"cs2-team-11838","fromTeamId":"cs2-team-11838","toTeamId":null,"teamName":"Partizan","playerId":"cs2-player-4476","playerName":"BAXACHA","roleBefore":"coach","roleAfter":null,"effectiveAt":"2026-09-21T22:00:00.000Z","detectedAt":"2026-09-22T20:00:07.032Z","confidence":"medium"}]},"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/transfers/recent":{"get":{"summary":"Recent transfers","description":"Player moves between teams, newest first.","operationId":"getCs2TransfersRecent","tags":["CS2"],"parameters":[{"name":"after","in":"query","required":false,"description":"Only rows after this time (ISO 8601).","schema":{"type":"string"}},{"name":"before","in":"query","required":false,"description":"Only rows before this time (ISO 8601).","schema":{"type":"string"}},{"name":"from_team","in":"query","required":false,"description":"Filter by `from_team`.","schema":{"type":"string"}},{"name":"include_computed","in":"query","required":false,"description":"Filter by `include_computed`.","schema":{"type":"string"}},{"name":"include_undated","in":"query","required":false,"description":"Filter by `include_undated`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"player","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"player_id","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Sort order.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Filter by status.","schema":{"type":"string"}},{"name":"team","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"team_id","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"to_team","in":"query","required":false,"description":"Filter by `to_team`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Recent transfers","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_transfers","dataAvailable":true,"transfers":[{"transferKey":"source-transfer:2026-09-21:4476:11838:none:left:6d47eb95dc","playerId":"cs2-player-4476","playerName":"BAXACHA","playerImageUrl":null,"fromTeamId":"cs2-team-11838","fromTeamName":"Partizan","fromTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/448e59bfe484b2c37a485c66408b9079.webp","fromTeamAlternateLogoUrl":null,"fromTeamDarkUiLogoUrl":null,"fromTeamIsNoTeam":false,"toTeamId":"no-team","toTeamName":"No team","toTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/noteam.png","toTeamAlternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/noteam.png","toTeamDarkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/noteam.png","toTeamIsNoTeam":true,"status":"left","role":"coach","transferDate":"2026-09-21T22:00:00.000Z","joinDate":null,"leaveDate":"2026-09-21T22:00:00.000Z","detectedAt":"2026-09-22T20:00:06.346Z"},{"transferKey":"source-transfer:2026-09-21:18545:13486:12878:unknown:eb757cb310","playerId":"cs2-player-18545","playerName":"asap","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/de0f55ab3f608f1b241f21c0db647a08.webp","fromTeamId":"cs2-team-13486","fromTeamName":"THUNDER dOWNUNDER","fromTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b4c915e53b28f03de6595dd0195a7745.webp","fromTeamAlternateLogoUrl":null,"fromTeamDarkUiLogoUrl":null,"fromTeamIsNoTeam":false,"toTeamId":"cs2-team-12878","toTeamName":"BC.Game","toTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/281b61f68eb0586d9f0b0e2635426924.webp","toTeamAlternateLogoUrl":null,"toTeamDarkUiLogoUrl":null,"toTeamIsNoTeam":false,"status":"unknown","role":null,"transferDate":"2026-09-21T22:00:00.000Z","joinDate":"2026-09-21T22:00:00.000Z","leaveDate":null,"detectedAt":"2026-09-22T19:30:03.976Z"}]},"meta":{"count":2,"total":47086,"page":1,"limit":2,"dataAvailable":true,"totalPages":23543,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/transfers":{"get":{"summary":"Transfers","description":"Player transfers with filters for team, player and date range.","operationId":"getCs2Transfers","tags":["CS2"],"parameters":[{"name":"after","in":"query","required":false,"description":"Only rows after this time (ISO 8601).","schema":{"type":"string"}},{"name":"before","in":"query","required":false,"description":"Only rows before this time (ISO 8601).","schema":{"type":"string"}},{"name":"from_team","in":"query","required":false,"description":"Filter by `from_team`.","schema":{"type":"string"}},{"name":"include_computed","in":"query","required":false,"description":"Filter by `include_computed`.","schema":{"type":"string"}},{"name":"include_undated","in":"query","required":false,"description":"Filter by `include_undated`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"player","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"player_id","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Filter by status.","schema":{"type":"string"}},{"name":"team","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"team_id","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"to_team","in":"query","required":false,"description":"Filter by `to_team`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Transfers","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_transfers","dataAvailable":true,"transfers":[{"transferKey":"source-transfer:2026-09-21:4476:11838:none:left:6d47eb95dc","playerId":"cs2-player-4476","playerName":"BAXACHA","playerImageUrl":null,"fromTeamId":"cs2-team-11838","fromTeamName":"Partizan","fromTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/448e59bfe484b2c37a485c66408b9079.webp","fromTeamAlternateLogoUrl":null,"fromTeamDarkUiLogoUrl":null,"fromTeamIsNoTeam":false,"toTeamId":"no-team","toTeamName":"No team","toTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/noteam.png","toTeamAlternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/noteam.png","toTeamDarkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/noteam.png","toTeamIsNoTeam":true,"status":"left","role":"coach","transferDate":"2026-09-21T22:00:00.000Z","joinDate":null,"leaveDate":"2026-09-21T22:00:00.000Z","detectedAt":"2026-09-22T20:00:06.346Z"},{"transferKey":"source-transfer:2026-09-21:18545:13486:12878:unknown:eb757cb310","playerId":"cs2-player-18545","playerName":"asap","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/de0f55ab3f608f1b241f21c0db647a08.webp","fromTeamId":"cs2-team-13486","fromTeamName":"THUNDER dOWNUNDER","fromTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b4c915e53b28f03de6595dd0195a7745.webp","fromTeamAlternateLogoUrl":null,"fromTeamDarkUiLogoUrl":null,"fromTeamIsNoTeam":false,"toTeamId":"cs2-team-12878","toTeamName":"BC.Game","toTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/281b61f68eb0586d9f0b0e2635426924.webp","toTeamAlternateLogoUrl":null,"toTeamDarkUiLogoUrl":null,"toTeamIsNoTeam":false,"status":"unknown","role":null,"transferDate":"2026-09-21T22:00:00.000Z","joinDate":"2026-09-21T22:00:00.000Z","leaveDate":null,"detectedAt":"2026-09-22T19:30:03.976Z"}]},"meta":{"count":2,"total":47086,"page":1,"limit":2,"dataAvailable":true,"totalPages":23543,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/live/stream":{"get":{"summary":"Live update stream (SSE)","description":"Server-Sent Events stream of live match updates, on every plan. Keep the connection open; each `cs2.live.update` event carries the changed match. Pass `matchId` to follow one match.\n\nEvents: `ready` (sent first; carries `delay_seconds` and `billing`), `cs2.live.update`, `ping` every 15 seconds, and `error` just before the server closes the stream.\n\n**Billing.** An open stream counts toward your monthly quota like polling: one request when it connects, then one request for every 15 seconds it stays open (the same as polling `/cs2/live` every 15 seconds; 5,760 requests a day if held open around the clock). When the quota runs out the stream sends an `error` event with code `RATE_LIMIT_EXCEEDED` and closes; connecting with no quota left returns 429.\n\n**Delay.** Free and Starter plans receive every update 60 seconds late, the same delay as the polled live endpoints. Other plans are real-time.\n\nRoom-based WebSockets (Scale and Enterprise, or the Live WebSockets add-on): `wss://api.citoapi.com/api/v1/cs2/live/ws`.","operationId":"getCs2LiveStream","tags":["CS2"],"parameters":[{"name":"matchId","in":"query","required":false,"description":"Match id.","schema":{"type":"string"}}],"responses":{"200":{"description":"Live update stream (SSE)","content":{"text/event-stream":{"schema":{"type":"string"},"example":"event: ready\ndata: {\"success\":true,\"stream\":\"cs2.live\",\"matchId\":null,\"live\":true,\"delay_seconds\":0,\"billing\":{\"requests_per_interval\":1,\"interval_seconds\":15}}\n\nevent: cs2.live.update\ndata: {\"type\":\"cs2.live.update\",\"matchId\":\"cs2-match-2398654\",\"status\":\"live\",\"team1Score\":0,\"team2Score\":0,\"currentMap\":\"de_inferno\",\"currentRound\":1,\"roundTimeSeconds\":null,\"bombPlanted\":false,\"playerStatsChanged\":true,\"fullState\":true,\"capturedAt\":\"2026-09-25T16:29:17.470Z\"}\n\nevent: ping\ndata: {\"ok\":true,\"ts\":\"2026-09-25T16:29:30.000Z\"}\n\nevent: error\ndata: {\"success\":false,\"error\":{\"code\":\"RATE_LIMIT_EXCEEDED\",\"message\":\"You have used 500 of 500 requests in your current period. It resets on 2026-10-01 (about 6 days).\"}}\n"}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"429":{"description":"Monthly request quota already used up when connecting. Mid-stream, the same limit arrives as an `error` event and the stream closes."}}}},"/cs2/live/{matchId}/socket":{"get":{"summary":"Live socket details","description":"Connection details for subscribing to one live match over the live stream.","operationId":"getCs2LiveMatchIdSocket","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Live socket details","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_live_transport","matchId":"cs2-match-2398068","transports":{"websocket":{"url":"wss://api.citoapi.com/api/v1/cs2/live/ws?matchId=cs2-match-2398068","auth":"x-api-key header, Authorization: Bearer, or ?apiKey=","subscribe":{"action":"subscribe","rooms":["match:cs2-match-2398068"]},"allLiveMatches":{"action":"subscribe","rooms":["all"]},"messages":["ready","cs2.live.snapshot (on subscribe)"],"plans":"Scale / Enterprise, or the Live WebSockets add-on"},"sse":{"url":"/api/v1/cs2/live/stream?matchId=cs2-match-2398068","note":"Same events as the WebSocket. Connect with Accept: text/event-stream. Available on every plan.","billing":"Counts like polling: one request at connect, then one for every 15 seconds the stream stays open. When the monthly quota runs out the stream sends an error event (RATE_LIMIT_EXCEEDED) and closes.","delay":"Free and Starter plans receive every update 60 seconds late, like the polled live endpoints. Other plans are real-time."}},"v2Shape":"Append ?shape=v2 on REST live endpoints or send Accept: application/vnd.cito.cs2.v2+json"},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/live/{matchId}/scoreboard":{"get":{"summary":"Live scoreboard","description":"Series score, current map and round, the round score (`game.score`, per team `mapScore`), and per-player kills, deaths, money and equipment for a live match.","operationId":"getCs2LiveMatchIdScoreboard","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}},{"name":"shape","in":"query","required":false,"description":"Filter by `shape`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Live scoreboard","content":{"application/json":{"example":{"success":true,"data":{"matchId":"cs2-match-2398520","status":"live","bestOf":null,"currentGame":3,"seriesScore":{"teamA":1,"teamB":1},"game":{"id":"cs2-match-2398520_de_dust2","map":"de_dust2","round":1,"phase":"live","clockSeconds":null,"bomb":null,"score":{"ct":0,"t":0},"sides":{"ctTeamId":"cs2-team-11955","tTeamId":"cs2-team-12164"}},"teams":[{"id":"cs2-team-11955","name":"LAG","side":"CT","score":1,"mapScore":0,"playersAlive":4,"equipmentValue":null,"money":13100,"timeoutsRemaining":null},{"id":"cs2-team-12164","name":"Zomblers","side":"T","score":1,"mapScore":0,"playersAlive":1,"equipmentValue":null,"money":14350,"timeoutsRemaining":null}],"players":[{"id":"cs2-player-20273","nickname":"CAJUN","teamId":"cs2-team-12164","side":"T","alive":false,"hp":0,"armor":null,"helmet":false,"money":3250,"weapon":null,"kills":1,"assists":0,"deaths":4,"adr":100,"kast":null,"rating":null},{"id":"cs2-player-23410","nickname":"CoolComs","teamId":"cs2-team-12164","side":"T","alive":true,"hp":100,"armor":null,"helmet":false,"money":3550,"weapon":null,"kills":0,"assists":0,"deaths":0,"adr":0,"kast":null,"rating":null}],"lastEvent":{"id":null,"type":"BombPlanted","round":1,"clockSeconds":null,"killerPlayerId":null,"victimPlayerId":null,"weapon":null,"headshot":null,"throughSmoke":null},"meta":{"updatedAt":"2026-09-23T03:14:58.810Z","latencyMs":null,"coverage":"realtime","source":"live","unavailableFields":["game.clockSeconds"]}},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/live/{matchId}/rounds":{"get":{"summary":"Live rounds","description":"Round-by-round results so far in a live match: winner, side and how the round ended.","operationId":"getCs2LiveMatchIdRounds","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Live rounds","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_live_rounds","matchId":"cs2-match-2398520","rounds":[{"eventId":"b9b7ddfa1ac438bc372af0aecee74d9e","eventType":"RoundEnd","winner":"CT","winType":"CTs_Win","terroristScore":9,"counterTerroristScore":9,"payload":{"counterTerroristScore":9,"terroristScore":9,"winner":"CT","winType":"CTs_Win"},"webhookEligible":true,"observedAt":"2026-09-23T02:49:58.502Z"},{"eventId":"402ca7aa8bca01623a10d2377fa2748d","eventType":"RoundEnd","winner":"CT","winType":"CTs_Win","terroristScore":9,"counterTerroristScore":8,"payload":{"counterTerroristScore":8,"terroristScore":9,"winner":"CT","winType":"CTs_Win"},"webhookEligible":true,"observedAt":"2026-09-23T02:49:58.502Z"}],"currentRound":1},"meta":{"count":44,"limit":44,"total":44,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/live/{matchId}/events":{"get":{"summary":"Live events","description":"Kills, bomb plants and defuses, and round ends recorded during a live match.","operationId":"getCs2LiveMatchIdEvents","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Live events","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_live_events","matchId":"cs2-match-2398520","events":[{"eventId":"8aedca15ed03f6cbf683ce5d92ae430e","eventType":"BombPlanted","playerName":"Zoker","playerNick":"Zoker","ctPlayers":4,"tPlayers":4,"bombSite":"A","payload":{"playerName":"Zoker","playerNick":"Zoker","ctPlayers":4,"tPlayers":4,"bombSite":"A"},"source":"live","webhookEligible":true,"observedAt":"2026-09-23T02:49:58.502Z"},{"eventId":"ed4ddb86ad56fd364e84cd32ab4c0cbf","eventType":"BombPlanted","playerName":"CoolComs","playerNick":"CoolComs","ctPlayers":4,"tPlayers":5,"bombSite":"B","payload":{"playerName":"CoolComs","playerNick":"CoolComs","ctPlayers":4,"tPlayers":5,"bombSite":"B"},"source":"live","webhookEligible":true,"observedAt":"2026-09-23T02:49:58.502Z"}]},"meta":{"count":70,"limit":70,"total":70,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/live/{matchId}/player-stats":{"get":{"summary":"Live player stats","description":"Running per-player stats for a live match.","operationId":"getCs2LiveMatchIdPlayerStats","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Live player stats","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_live_player_stats","matchId":"cs2-match-2398520","status":"live","isCurrent":true,"dataAvailable":true,"unavailableReason":null,"source":"live","capturedAt":"2026-09-23T03:15:13.832Z","players":[{"playerId":"cs2-player-20273","name":"CAJUN","nick":"CAJUN","side":"T","steamId":"1:1:40089995","alive":false,"hp":57,"money":3250,"kills":1,"assists":0,"deaths":4,"adr":100,"weapon":null,"weaponIconUrl":null,"hasDefuseKit":false,"kevlar":false,"helmet":false},{"playerId":"cs2-player-23410","name":"CoolComs","nick":"CoolComs","side":"T","steamId":"1:1:188019378","alive":true,"hp":100,"money":3550,"kills":0,"assists":0,"deaths":0,"adr":0,"weapon":null,"weaponIconUrl":null,"hasDefuseKit":false,"kevlar":false,"helmet":false}],"lastVerified":"2026-09-23T03:15:14.115Z"},"meta":{"count":9,"dataAvailable":true,"confirmationMaxAgeMs":45000,"limit":9,"total":9,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/live/{matchId}/maps":{"get":{"summary":"Live maps","description":"Map list for a live match with per-map score and status.","operationId":"getCs2LiveMatchIdMaps","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Live maps","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_map","id":"cs2-match-2398520-map-1","matchId":"cs2-match-2398520","mapNumber":1,"mapName":"Mirage","status":"completed","team1Score":13,"team2Score":8,"team1Halves":[7,6],"team2Halves":[5,3],"winnerTeamId":"cs2-team-11955","durationRounds":21,"lastSyncedAt":"2026-09-23T03:14:03.598Z","playerStats":[{"id":"live-source-match-2398520-map-1-Bwills","mapId":"cs2-match-2398520-map-1","matchId":"cs2-match-2398520","playerId":"cs2-player-16647","playerName":"Bwills","teamId":"cs2-team-11955","teamName":"LAG","kills":9,"deaths":17,"assists":3,"plusMinus":-8,"adr":null,"kast":null,"rating":0.5,"ratingVersion":"source_rating_3_0","headshots":4,"headshotPercent":null,"firstKills":0,"firstDeaths":3,"source":"live","lastSyncedAt":"2026-09-23T03:04:10.092Z","mapNameCanonical":null,"imageUrl":null,"mapImageUrl":null,"coverImageUrl":null,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},{"id":"live-source-match-2398520-map-1-CAJUN","mapId":"cs2-match-2398520-map-1","matchId":"cs2-match-2398520","playerId":"cs2-player-20273","playerName":"CAJUN","teamId":"cs2-team-12164","teamName":"Zomblers","kills":11,"deaths":19,"assists":8,"plusMinus":-8,"adr":null,"kast":null,"rating":0.73,"ratingVersion":"source_rating_3_0","headshots":7,"headshotPercent":null,"firstKills":2,"firstDeaths":2,"source":"live","lastSyncedAt":"2026-09-23T03:04:10.832Z","mapNameCanonical":null,"imageUrl":null,"mapImageUrl":null,"coverImageUrl":null,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{}}}],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png","pickTeamId":"cs2-team-12164","objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"availableSubresources":["player_stats"],"unavailableSubresources":["objective_stats"],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-23T03:14:03.598Z","mapNameCanonical":"Mirage","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}},{"entityType":"cs2_map","id":"cs2-match-2398520-map-2","matchId":"cs2-match-2398520","mapNumber":2,"mapName":"Inferno","status":"completed","team1Score":11,"team2Score":13,"team1Halves":[6],"team2Halves":[6],"winnerTeamId":"cs2-team-12164","durationRounds":24,"lastSyncedAt":"2026-09-23T03:14:03.631Z","playerStats":[{"id":"live-source-match-2398520-map-2-Bwills","mapId":"cs2-match-2398520-map-2","matchId":"cs2-match-2398520","playerId":"cs2-player-16647","playerName":"Bwills","teamId":"cs2-team-11955","teamName":"LAG","kills":15,"deaths":12,"assists":8,"plusMinus":3,"adr":null,"kast":null,"rating":0.98,"ratingVersion":"source_rating_3_0","headshots":12,"headshotPercent":null,"firstKills":3,"firstDeaths":3,"source":"live","lastSyncedAt":"2026-09-23T03:12:29.936Z","mapNameCanonical":null,"imageUrl":null,"mapImageUrl":null,"coverImageUrl":null,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},{"id":"live-source-match-2398520-map-2-CAJUN","mapId":"cs2-match-2398520-map-2","matchId":"cs2-match-2398520","playerId":"cs2-player-20273","playerName":"CAJUN","teamId":"cs2-team-12164","teamName":"Zomblers","kills":12,"deaths":16,"assists":12,"plusMinus":-4,"adr":null,"kast":null,"rating":1.15,"ratingVersion":"source_rating_3_0","headshots":7,"headshotPercent":null,"firstKills":3,"firstDeaths":3,"source":"live","lastSyncedAt":"2026-09-23T03:12:30.472Z","mapNameCanonical":null,"imageUrl":null,"mapImageUrl":null,"coverImageUrl":null,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{}}}],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/inferno.png","pickTeamId":"cs2-team-11955","objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"availableSubresources":["player_stats"],"unavailableSubresources":["objective_stats"],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-23T03:14:03.631Z","mapNameCanonical":"Inferno","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/inferno.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/inferno.png","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}}],"meta":{"count":3,"dataAvailable":true,"limit":3,"total":3,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/live/{matchId}/snapshots":{"get":{"summary":"Live snapshots","description":"Timestamped snapshots of a live match (score, round, players) so the match can be replayed over time. Filter with `from` / `to`.","operationId":"getCs2LiveMatchIdSnapshots","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Start of the date range (ISO 8601, UTC).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"source","in":"query","required":false,"description":"Ranking to use: omit for Valve Regional Standings, or `world` for the world ranking filtered to this region.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"End of the date range (ISO 8601, UTC).","schema":{"type":"string"}}],"responses":{"200":{"description":"Live snapshots","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_live_snapshot","snapshotId":"56a8f338-abb9-41ff-b77f-5479dec17966","matchId":"cs2-match-2398520","status":"live","source":"live","capturedAt":"2026-09-23T03:15:13.928Z","teams":{"team1Name":"LAG","team2Name":"Zomblers","terroristTeamName":"Zomblers","counterTerroristTeamName":"LAG"},"score":{"team1":0,"team2":0},"currentMap":"de_dust2","currentRound":1,"roundTimeSeconds":null,"currentScoreCt":11,"currentScoreT":13,"roundTimeLeft":null,"bombPlanted":false,"players":[{"playerId":"cs2-player-20273","name":"CAJUN","nick":"CAJUN","side":"T","steamId":"1:1:40089995","alive":false,"hp":57,"money":3250,"kills":1,"assists":0,"deaths":4,"adr":100,"weapon":null,"weaponIconUrl":null,"hasDefuseKit":false,"kevlar":false,"helmet":false},{"playerId":"cs2-player-23410","name":"CoolComs","nick":"CoolComs","side":"T","steamId":"1:1:188019378","alive":true,"hp":100,"money":3550,"kills":0,"assists":0,"deaths":0,"adr":0,"weapon":null,"weaponIconUrl":null,"hasDefuseKit":false,"kevlar":false,"helmet":false}],"liveBombEvents":[{"eventId":"8aedca15ed03f6cbf683ce5d92ae430e","eventType":"BombPlanted","playerName":"Zoker","playerNick":"Zoker","ctPlayers":4,"tPlayers":4,"bombSite":"A","observedAt":"2026-09-23T02:49:58.502Z"},{"eventId":"ed4ddb86ad56fd364e84cd32ab4c0cbf","eventType":"BombPlanted","playerName":"CoolComs","playerNick":"CoolComs","ctPlayers":4,"tPlayers":5,"bombSite":"B","observedAt":"2026-09-23T02:49:58.502Z"}],"roundEndEvents":[{"eventId":"b9b7ddfa1ac438bc372af0aecee74d9e","winnerSide":"CT","winnerSideIcon":"ct","winnerSideIconUrl":"/icons/cs2/ct_win.svg","winType":"CTs_Win","winKind":"elim","winKindIconUrl":"/icons/cs2/ct_win.svg","terroristScore":9,"counterTerroristScore":9,"observedAt":"2026-09-23T02:49:58.502Z"},{"eventId":"402ca7aa8bca01623a10d2377fa2748d","winnerSide":"CT","winnerSideIcon":"ct","winnerSideIconUrl":"/icons/cs2/ct_win.svg","winType":"CTs_Win","winKind":"elim","winKindIconUrl":"/icons/cs2/ct_win.svg","terroristScore":9,"counterTerroristScore":8,"observedAt":"2026-09-23T02:49:58.502Z"}]},{"entityType":"cs2_live_snapshot","snapshotId":"4ff63372-5eff-40e2-97ad-eb8ab913adbc","matchId":"cs2-match-2398520","status":"live","source":"live","capturedAt":"2026-09-23T03:15:12.550Z","teams":{"team1Name":"LAG","team2Name":"Zomblers","terroristTeamName":null,"counterTerroristTeamName":null},"score":{"team1":1,"team2":1},"currentMap":null,"currentRound":null,"roundTimeSeconds":null,"currentScoreCt":0,"currentScoreT":0,"roundTimeLeft":null,"bombPlanted":null,"players":[],"liveBombEvents":[],"roundEndEvents":[]}],"meta":{"count":2,"dataAvailable":true,"source":"live","limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/live/{matchId}/state":{"get":{"summary":"Live state","description":"The latest state of one live match: score, round, round timer, bomb status and players.","operationId":"getCs2LiveMatchIdState","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Live state","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_live_state","matchId":"cs2-match-2398520","status":"live","source":"live","teams":{"team1Id":"cs2-team-11955","team1Name":"LAG","team1LogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/297f07ea26dbfe4dc4342ad164a661e2.webp","team1AlternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8bb92ff4ccd53fb7cc88c565b3ddbd92.webp","team1DarkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8bb92ff4ccd53fb7cc88c565b3ddbd92.webp","team2Id":"cs2-team-12164","team2Name":"Zomblers","team2LogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f04294231ef12b6d1f708e5ec505209e.webp","team2AlternateLogoUrl":null,"team2DarkUiLogoUrl":null},"score":{"team1":0,"team2":0},"currentMap":"de_dust2","currentRound":1,"roundTimeSeconds":null,"roundTimeLeft":null,"currentScoreCt":11,"currentScoreT":13,"bombPlanted":false,"players":[{"playerId":"cs2-player-20273","name":"CAJUN","nick":"CAJUN","side":"T","steamId":"1:1:40089995","alive":false,"hp":57,"money":3250,"kills":1,"assists":0,"deaths":4,"adr":100,"weapon":null,"weaponIconUrl":null,"hasDefuseKit":false,"kevlar":false,"helmet":false},{"playerId":"cs2-player-23410","name":"CoolComs","nick":"CoolComs","side":"T","steamId":"1:1:188019378","alive":true,"hp":100,"money":3550,"kills":0,"assists":0,"deaths":0,"adr":0,"weapon":null,"weaponIconUrl":null,"hasDefuseKit":false,"kevlar":false,"helmet":false}],"liveBombEvents":[{"eventId":"8aedca15ed03f6cbf683ce5d92ae430e","eventType":"BombPlanted","playerName":"Zoker","playerNick":"Zoker","ctPlayers":4,"tPlayers":4,"bombSite":"A","observedAt":"2026-09-23T02:49:58.502Z"},{"eventId":"ed4ddb86ad56fd364e84cd32ab4c0cbf","eventType":"BombPlanted","playerName":"CoolComs","playerNick":"CoolComs","ctPlayers":4,"tPlayers":5,"bombSite":"B","observedAt":"2026-09-23T02:49:58.502Z"}],"roundEndEvents":[{"eventId":"b9b7ddfa1ac438bc372af0aecee74d9e","winnerSide":"CT","winnerSideIcon":"ct","winnerSideIconUrl":"/icons/cs2/ct_win.svg","winType":"CTs_Win","winKind":"elim","winKindIconUrl":"/icons/cs2/ct_win.svg","terroristScore":9,"counterTerroristScore":9,"observedAt":"2026-09-23T02:49:58.502Z"},{"eventId":"402ca7aa8bca01623a10d2377fa2748d","winnerSide":"CT","winnerSideIcon":"ct","winnerSideIconUrl":"/icons/cs2/ct_win.svg","winType":"CTs_Win","winKind":"elim","winKindIconUrl":"/icons/cs2/ct_win.svg","terroristScore":9,"counterTerroristScore":8,"observedAt":"2026-09-23T02:49:58.502Z"}],"latestSnapshot":{"entityType":"cs2_live_snapshot","snapshotId":null,"matchId":"cs2-match-2398520","status":"live","source":"live","capturedAt":"2026-09-23T03:15:13.832Z","teams":{"team1Name":"LAG","team2Name":"Zomblers","terroristTeamName":"Zomblers","counterTerroristTeamName":"LAG"},"score":{"team1":0,"team2":0},"currentMap":"de_dust2","currentRound":1,"roundTimeSeconds":null,"currentScoreCt":11,"currentScoreT":13,"roundTimeLeft":null,"bombPlanted":false,"players":[{"playerId":"cs2-player-20273","name":"CAJUN","nick":"CAJUN","side":"T","steamId":"1:1:40089995","alive":false,"hp":57,"money":3250,"kills":1,"assists":0,"deaths":4,"adr":100,"weapon":null,"weaponIconUrl":null,"hasDefuseKit":false,"kevlar":false,"helmet":false},{"playerId":"cs2-player-23410","name":"CoolComs","nick":"CoolComs","side":"T","steamId":"1:1:188019378","alive":true,"hp":100,"money":3550,"kills":0,"assists":0,"deaths":0,"adr":0,"weapon":null,"weaponIconUrl":null,"hasDefuseKit":false,"kevlar":false,"helmet":false}],"liveBombEvents":[{"eventId":"8aedca15ed03f6cbf683ce5d92ae430e","eventType":"BombPlanted","playerName":"Zoker","playerNick":"Zoker","ctPlayers":4,"tPlayers":4,"bombSite":"A","observedAt":"2026-09-23T02:49:58.502Z"},{"eventId":"ed4ddb86ad56fd364e84cd32ab4c0cbf","eventType":"BombPlanted","playerName":"CoolComs","playerNick":"CoolComs","ctPlayers":4,"tPlayers":5,"bombSite":"B","observedAt":"2026-09-23T02:49:58.502Z"}],"roundEndEvents":[{"eventId":"b9b7ddfa1ac438bc372af0aecee74d9e","winnerSide":"CT","winnerSideIcon":"ct","winnerSideIconUrl":"/icons/cs2/ct_win.svg","winType":"CTs_Win","winKind":"elim","winKindIconUrl":"/icons/cs2/ct_win.svg","terroristScore":9,"counterTerroristScore":9,"observedAt":"2026-09-23T02:49:58.502Z"},{"eventId":"402ca7aa8bca01623a10d2377fa2748d","winnerSide":"CT","winnerSideIcon":"ct","winnerSideIconUrl":"/icons/cs2/ct_win.svg","winType":"CTs_Win","winKind":"elim","winKindIconUrl":"/icons/cs2/ct_win.svg","terroristScore":9,"counterTerroristScore":8,"observedAt":"2026-09-23T02:49:58.502Z"}]},"tracking":{"status":"active","detectedAt":"2026-09-23T01:02:58.192Z","lastPolledAt":"2026-09-23T03:15:14.830Z","lastSnapshotAt":"2026-09-23T03:15:14.552Z","pollCount":2655},"dataAvailable":true,"unavailableReason":null,"lastVerified":"2026-09-23T03:15:14.115Z"},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/live/{matchId}":{"get":{"summary":"Live match","description":"One live match with teams, series score and live-coverage details.","operationId":"getCs2LiveMatchId","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Live match","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_live_match","id":"cs2-match-2398520","matchId":"cs2-match-2398520","status":"live","eventId":"cs2-event-9356","eventName":"ESL Challenger League Season 52 North America Cup 2","eventSlug":"esl-challenger-league-season-52-north-america-cup-2","eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/cd79123cf4afe29db63f20edda3125dc.webp","eventImageUrl":null,"eventBannerImageUrl":null,"event":{"eventId":"cs2-event-9356","name":"ESL Challenger League Season 52 North America Cup 2","slug":"esl-challenger-league-season-52-north-america-cup-2","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/cd79123cf4afe29db63f20edda3125dc.webp","imageUrl":null,"bannerImageUrl":null},"bestOf":null,"teams":{"team1Id":"cs2-team-11955","team1Name":"LAG","team1LogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/297f07ea26dbfe4dc4342ad164a661e2.webp","team1AlternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8bb92ff4ccd53fb7cc88c565b3ddbd92.webp","team1DarkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8bb92ff4ccd53fb7cc88c565b3ddbd92.webp","team2Id":"cs2-team-12164","team2Name":"Zomblers","team2LogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f04294231ef12b6d1f708e5ec505209e.webp","team2AlternateLogoUrl":null,"team2DarkUiLogoUrl":null},"score":{"team1":1,"team2":1},"currentMapScore":{"team1":0,"team2":0},"team1Id":"cs2-team-11955","team2Id":"cs2-team-12164","team1Name":"LAG","team2Name":"Zomblers","team1Score":1,"team2Score":1,"currentMap":"de_dust2","currentRound":1,"roundTimeSeconds":null,"roundTimeLeft":null,"currentScoreCt":11,"currentScoreT":13,"latestSnapshotAt":"2026-09-23T03:15:13.832Z","liveDataAvailable":true,"streamLinks":[{"url":"https://www.twitch.tv/endiezcasts","label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"twitch"}],"startsAt":"2026-09-23T01:00:00.000Z","endsAt":null,"lastVerified":"2026-09-23T03:15:14.115Z","availableSubresources":["live_state","snapshots"]},"meta":{"source":"live","dataAvailable":true}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/live":{"get":{"summary":"Live matches","description":"Matches in progress now. `score` / `team1Score` / `team2Score` are the series (maps won); the map being played is `currentMapScore`. Use a `matchId` with the `/cs2/live/{matchId}/…` endpoints for round-level detail.","operationId":"getCs2Live","tags":["CS2"],"responses":{"200":{"description":"Live matches","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_live_match","id":"cs2-match-2398520","matchId":"cs2-match-2398520","status":"live","eventId":"cs2-event-9356","eventName":"ESL Challenger League Season 52 North America Cup 2","eventSlug":"esl-challenger-league-season-52-north-america-cup-2","eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","eventImageUrl":null,"eventBannerImageUrl":null,"event":{"eventId":"cs2-event-9356","name":"ESL Challenger League Season 52 North America Cup 2","slug":"esl-challenger-league-season-52-north-america-cup-2","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","imageUrl":null,"bannerImageUrl":null},"bestOf":null,"teams":{"team1Id":"cs2-team-11955","team1Name":"LAG","team1LogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/297f07ea26dbfe4dc4342ad164a661e2.webp","team1AlternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8bb92ff4ccd53fb7cc88c565b3ddbd92.webp","team1DarkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8bb92ff4ccd53fb7cc88c565b3ddbd92.webp","team2Id":"cs2-team-12164","team2Name":"Zomblers","team2LogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f04294231ef12b6d1f708e5ec505209e.webp","team2AlternateLogoUrl":null,"team2DarkUiLogoUrl":null},"score":{"team1":1,"team2":1},"currentMapScore":{"team1":0,"team2":0},"team1Id":"cs2-team-11955","team2Id":"cs2-team-12164","team1Name":"LAG","team2Name":"Zomblers","team1Score":1,"team2Score":1,"currentMap":"de_dust2","currentRound":1,"roundTimeSeconds":null,"roundTimeLeft":null,"currentScoreCt":11,"currentScoreT":13,"latestSnapshotAt":"2026-09-23T03:15:13.832Z","liveDataAvailable":true,"streamLinks":[{"url":"https://www.twitch.tv/endiezcasts","label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"twitch"}],"startsAt":"2026-09-23T01:00:00.000Z","endsAt":null,"lastVerified":"2026-09-23T03:15:14.115Z","availableSubresources":["live_state","snapshots"]}],"meta":{"count":1,"source":"live","filteredUnconfirmedLive":0,"confirmationMaxAgeMs":45000,"limit":1,"total":1,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/matches/live":{"get":{"summary":"Live matches","description":"Matches in progress now. `score` / `team1Score` / `team2Score` are the series (maps won); the map being played is `currentMapScore`. Use a `matchId` with the `/cs2/live/{matchId}/…` endpoints for round-level detail.\n\nSame response as `GET /api/v1/cs2/live`.","operationId":"getCs2MatchesLive","tags":["CS2"],"responses":{"200":{"description":"Live matches"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/live"}},"/cs2/matches/today":{"get":{"summary":"Today's matches","description":"Matches scheduled, live or finished today (UTC).","operationId":"getCs2MatchesToday","tags":["CS2"],"parameters":[{"name":"eventId","in":"query","required":false,"description":"Filter by `eventId`.","schema":{"type":"string"}},{"name":"event_id","in":"query","required":false,"description":"Filter by `event_id`.","schema":{"type":"string"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated list of fields to return.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Start of the date range (ISO 8601, UTC).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":25}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"order","in":"query","required":false,"description":"Filter by `order`.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"playerId","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"player_id","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Sort order.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Filter by status.","schema":{"type":"string"}},{"name":"summary","in":"query","required":false,"description":"`true` returns a summary instead of full rows.","schema":{"type":"boolean"}},{"name":"team","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"teamId","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"team_id","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"End of the date range (ISO 8601, UTC).","schema":{"type":"string"}}],"responses":{"200":{"description":"Today's matches","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_match","id":"cs2-match-2398319","eventId":"cs2-event-9410","eventName":"CROSSFIRE Season 6","eventSlug":"crossfire-season-6","stageName":null,"startsAt":"2026-09-23T23:30:00.000Z","endsAt":null,"bestOf":null,"status":"upcoming","team1Id":"cs2-team-14047","team2Id":"cs2-team-13201","team1Name":"Fathom","team2Name":"F5","team1Score":null,"team2Score":null,"winnerTeamId":null,"lastSyncedAt":"2026-09-23T03:05:37.960Z","lastVerified":"2026-09-23T03:05:37.960Z","confidence":"high","event":{"id":"cs2-event-9410","name":"CROSSFIRE Season 6","slug":"crossfire-season-6","imageUrl":null,"prizePool":10000,"currency":"USD","tier":null,"prestigeScore":null,"status":"live","region":null,"startsAt":"2026-09-16T00:30:00.000Z","endsAt":"2026-10-11T23:59:59.000Z","eventId":"cs2-event-9410","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8cdf74d32db95514d3dc287ea44a5fa4.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-14047","name":"Fathom","slug":"fathom","teamTag":"FATHOM","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7b669c0c2e7d42990dffdd61ee1e97f7.webp","countryName":null,"countryCode":null,"worldRanking":null},"team2":{"id":"cs2-team-13201","name":"F5","slug":"f5","teamTag":"F5","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/d20b8f3544cd148e95f33111fe6b47be.webp","countryName":"United States","countryCode":"US","worldRanking":213,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/63afa5f59017a2af260f1b23a3b31ed4.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/63afa5f59017a2af260f1b23a3b31ed4.webp"},"maps":[],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8cdf74d32db95514d3dc287ea44a5fa4.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":[],"unavailableSubresources":["maps","player_stats"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_played"}}},{"entityType":"cs2_match","id":"cs2-match-2398557","eventId":"cs2-event-9425","eventName":"CCT 2026 South America Series 6","eventSlug":"cct-2026-south-america-series-6","stageName":null,"startsAt":"2026-09-23T22:00:00.000Z","endsAt":null,"bestOf":null,"status":"upcoming","team1Id":"cs2-team-11905","team2Id":"cs2-team-13978","team1Name":"paiN Academy","team2Name":"Sementes do Mal","team1Score":null,"team2Score":null,"winnerTeamId":null,"lastSyncedAt":"2026-09-23T03:05:37.546Z","lastVerified":"2026-09-23T03:05:37.546Z","confidence":"high","event":{"id":"cs2-event-9425","name":"CCT 2026 South America Series 6","slug":"cct-2026-south-america-series-6","imageUrl":null,"prizePool":null,"currency":null,"tier":"B","prestigeScore":55,"status":"live","region":null,"startsAt":"2026-09-22T15:59:32.000Z","endsAt":"2026-10-04T23:59:59.000Z","eventId":"cs2-event-9425","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/6576d7901af03eaa076d5fb65af3cc14.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-11905","name":"paiN Academy","slug":"pain-academy","teamTag":"PA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/4a3870c1d26f1c9ca4cbe2831f4ac8d1.webp","countryName":"Brazil","countryCode":"BR","worldRanking":null,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/68ab1a3c2ad5410bbe716e1b5a85028a.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/68ab1a3c2ad5410bbe716e1b5a85028a.webp"},"team2":{"id":"cs2-team-13978","name":"Sementes do Mal","slug":"sementes-do-mal","teamTag":"SDM","logoUrl":null,"countryName":null,"countryCode":null,"worldRanking":246},"maps":[],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/6576d7901af03eaa076d5fb65af3cc14.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":[],"unavailableSubresources":["maps","player_stats"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_played"}}}],"meta":{"page":1,"limit":2,"total":63,"filteredUnconfirmedLive":0,"count":2,"totalPages":32,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/matches/past":{"get":{"summary":"Past matches","description":"Finished matches, newest first, with date-range filters.","operationId":"getCs2MatchesPast","tags":["CS2"],"parameters":[{"name":"eventId","in":"query","required":false,"description":"Filter by `eventId`.","schema":{"type":"string"}},{"name":"event_id","in":"query","required":false,"description":"Filter by `event_id`.","schema":{"type":"string"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated list of fields to return.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Start of the date range (ISO 8601, UTC).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":25}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"order","in":"query","required":false,"description":"Filter by `order`.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"playerId","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"player_id","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Sort order.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Filter by status.","schema":{"type":"string"}},{"name":"summary","in":"query","required":false,"description":"`true` returns a summary instead of full rows.","schema":{"type":"boolean"}},{"name":"team","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"teamId","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"team_id","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"End of the date range (ISO 8601, UTC).","schema":{"type":"string"}}],"responses":{"200":{"description":"Past matches","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_match","id":"cs2-match-2398526","eventId":"cs2-event-9356","eventName":"ESL Challenger League Season 52 North America Cup 2","eventSlug":"esl-challenger-league-season-52-north-america-cup-2","stageName":null,"startsAt":"2026-09-23T02:58:01.000Z","endsAt":"2026-09-23T03:00:58.213Z","bestOf":3,"status":"completed","team1Id":"cs2-team-13857","team2Id":"cs2-team-12971","team1Name":"Iowa Stormboar","team2Name":"Wanted Goons","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-13857","lastSyncedAt":"2026-09-23T03:06:07.518Z","lastVerified":"2026-09-23T03:06:07.518Z","confidence":"high","event":{"id":"cs2-event-9356","name":"ESL Challenger League Season 52 North America Cup 2","slug":"esl-challenger-league-season-52-north-america-cup-2","imageUrl":null,"prizePool":17500,"currency":"USD","tier":"A","prestigeScore":80,"status":"live","region":"North America","startsAt":"2026-09-23T01:00:00.000Z","endsAt":"2026-09-29T23:59:59.000Z","eventId":"cs2-event-9356","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-13857","name":"Iowa Stormboar","slug":"iowa-stormboar","teamTag":"IS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c875a66adefc7e50e0b34ba4b97bed5c.webp","countryName":"United States","countryCode":"US","worldRanking":177},"team2":{"id":"cs2-team-12971","name":"Wanted Goons","slug":"wanted-goons","teamTag":"WG","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/2fd6ff3bc5a226dfa92640ab178d60cb.webp","countryName":null,"countryCode":null,"worldRanking":230,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7ff257ba3339dbf5bd82c1457bcd0e4c.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7ff257ba3339dbf5bd82c1457bcd0e4c.webp"},"maps":[{"id":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","mapNumber":1,"mapName":"Dust2","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[10,3],"team2Halves":[2,0],"winnerTeamId":"cs2-team-13857","durationRounds":15,"lastSyncedAt":"2026-09-23T03:04:18.990Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398526-map-2","matchId":"cs2-match-2398526","mapNumber":2,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[5,7],"team2Halves":[7,5],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-23T03:04:28.968Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}},{"entityType":"cs2_match","id":"cs2-match-2398527","eventId":"cs2-event-9356","eventName":"ESL Challenger League Season 52 North America Cup 2","eventSlug":"esl-challenger-league-season-52-north-america-cup-2","stageName":null,"startsAt":"2026-09-23T02:43:06.000Z","endsAt":"2026-09-23T02:44:02.768Z","bestOf":3,"status":"completed","team1Id":"cs2-team-12301","team2Id":"cs2-team-13124","team1Name":"FlyQuest RED","team2Name":"Marsborne","team1Score":0,"team2Score":2,"winnerTeamId":"cs2-team-13124","lastSyncedAt":"2026-09-23T03:06:08.339Z","lastVerified":"2026-09-23T03:06:08.339Z","confidence":"high","event":{"id":"cs2-event-9356","name":"ESL Challenger League Season 52 North America Cup 2","slug":"esl-challenger-league-season-52-north-america-cup-2","imageUrl":null,"prizePool":17500,"currency":"USD","tier":"A","prestigeScore":80,"status":"live","region":"North America","startsAt":"2026-09-23T01:00:00.000Z","endsAt":"2026-09-29T23:59:59.000Z","eventId":"cs2-event-9356","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-12301","name":"FlyQuest RED","slug":"flyquest-red","teamTag":"FR","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/55414f2cbe99ee64615c4f961b981446.webp","countryName":"United States","countryCode":"US","worldRanking":null},"team2":{"id":"cs2-team-13124","name":"Marsborne","slug":"marsborne","teamTag":"MARSBORN","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7d1b9c59f37fb864efc779a704207c23.webp","countryName":"Canada","countryCode":"CA","worldRanking":94},"maps":[{"id":"cs2-match-2398527-map-1","matchId":"cs2-match-2398527","mapNumber":1,"mapName":"Mirage","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[2],"team2Halves":[10],"winnerTeamId":"cs2-team-13124","durationRounds":23,"lastSyncedAt":"2026-09-23T02:53:38.850Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398527-map-2","matchId":"cs2-match-2398527","mapNumber":2,"mapName":"Ancient","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[2,0],"team2Halves":[10,3],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-23T02:54:00.863Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}],"meta":{"page":1,"limit":2,"total":296,"filteredUnconfirmedLive":0,"count":2,"totalPages":148,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/matches/search":{"get":{"summary":"Search matches","description":"Find matches by team or event name.","operationId":"getCs2MatchesSearch","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"q","in":"query","required":true,"description":"Search text.","schema":{"type":"string"}},{"name":"query","in":"query","required":false,"description":"Filter by `query`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Search matches","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_match","id":"cs2-match-2398108","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":"Grand final","startsAt":"2026-09-20T18:49:47.000Z","endsAt":null,"bestOf":5,"status":"completed","team1Id":"cs2-team-11861","team2Id":"cs2-team-9565","team1Name":"Aurora","team2Name":"Vitality","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565","lastSyncedAt":"2026-09-23T03:07:06.893Z","lastVerified":"2026-09-23T03:07:06.893Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":null,"prizePool":5000008,"currency":"USD","tier":"A","prestigeScore":75,"status":"completed","region":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","eventId":"cs2-event-8057","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-11861","name":"Aurora","slug":"aurora","teamTag":"AURORA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cf72686d65237eb4fe4365d8070d068.webp","countryName":"Türkiye","countryCode":"TR","worldRanking":9},"team2":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","worldRanking":2,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"maps":[{"id":"cs2-match-2398108-map-1","matchId":"cs2-match-2398108","mapNumber":1,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[3,1],"team2Halves":[9,4],"winnerTeamId":"cs2-team-9565","durationRounds":17,"lastSyncedAt":"2026-09-22T19:46:26.632Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398108-map-2","matchId":"cs2-match-2398108","mapNumber":2,"mapName":"Inferno","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[7,6],"team2Halves":[5,6],"winnerTeamId":"cs2-team-11861","durationRounds":24,"lastSyncedAt":"2026-09-22T19:46:37.002Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vetoOrder":[{"map":null,"order":1,"action":"ban","teamId":"cs2-team-11861","teamName":"Aurora"},{"map":"ancient","order":2,"action":"ban","teamId":"cs2-team-9565","teamName":"Vitality"}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}},{"entityType":"cs2_match","id":"cs2-match-2398107","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T12:00:00.000Z","endsAt":null,"bestOf":3,"status":"completed","team1Id":"cs2-team-9565","team2Id":"cs2-team-8297","team1Name":"Vitality","team2Name":"FURIA","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-9565","lastSyncedAt":"2026-09-23T03:03:45.610Z","lastVerified":"2026-09-23T03:03:45.610Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":null,"prizePool":5000008,"currency":"USD","tier":"A","prestigeScore":75,"status":"completed","region":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","eventId":"cs2-event-8057","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","worldRanking":2,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"team2":{"id":"cs2-team-8297","name":"FURIA","slug":"furia","teamTag":"FURIA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/ae2903ad6662885facbfedf1183a1b22.svg","countryName":"Brazil","countryCode":"BR","worldRanking":4},"maps":[{"id":"cs2-match-2398107-map-1","matchId":"cs2-match-2398107","mapNumber":1,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,1],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:43.662Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},{"id":"cs2-match-2398107-map-2","matchId":"cs2-match-2398107","mapNumber":2,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,4],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:52.776Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}}}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vetoOrder":[{"map":null,"order":1,"action":"ban","teamId":"cs2-team-8297","teamName":"FURIA"},{"map":"ancient","order":2,"action":"ban","teamId":"cs2-team-9565","teamName":"Vitality"}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}],"meta":{"query":"vitality","count":2,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/matches/upcoming":{"get":{"summary":"Upcoming matches","description":"Scheduled matches, soonest first.","operationId":"getCs2MatchesUpcoming","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Upcoming matches","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_match","id":"cs2-match-2398521","eventId":"cs2-event-9356","eventName":"ESL Challenger League Season 52 North America Cup 2","eventSlug":"esl-challenger-league-season-52-north-america-cup-2","stageName":"Upper bracket","startsAt":"2026-09-23T01:00:00.000Z","endsAt":null,"bestOf":3,"status":"completed","team1Id":"cs2-team-13574","team2Id":"cs2-team-11336","team1Name":"Club 333","team2Name":"DETONATE","team1Score":null,"team2Score":null,"winnerTeamId":null,"liveState":{"teams":{"team1Name":"Club 333","team2Name":"DETONATE","ctTeamName":"CT","terroristTeamName":"Terrorist"},"source":"live","status":"live","matchId":"cs2-match-2398521","roundEnds":[{"winner":"CT","eventId":"6a19b74f123044bfcbf42b460d5f21ec","payload":{},"winType":"Target_Saved","eventType":"RoundEnd","observedAt":"2026-09-23T01:46:56.985Z","terroristScore":6,"webhookEligible":true,"counterTerroristScore":9},{"winner":"TERRORIST","eventId":"c7f8fba3d7d5b7bbb7f1668449061212","payload":{},"winType":"Terrorists_Win","eventType":"RoundEnd","observedAt":"2026-09-23T01:46:56.985Z","terroristScore":6,"webhookEligible":true,"counterTerroristScore":8}],"bombEvents":[{"source":"live","eventId":"40d059e2be763195ef839829a670ee76","payload":{},"bombSite":"A","tPlayers":5,"ctPlayers":2,"eventType":"BombPlanted","observedAt":"2026-09-23T01:46:56.985Z","playerName":"THOR","playerNick":"THOR","webhookEligible":true},{"source":"live","eventId":"be03766dd75eeac21efad1573b3ad734","payload":{},"bombSite":"A","tPlayers":2,"ctPlayers":0,"eventType":"BombPlanted","observedAt":"2026-09-23T01:46:56.985Z","playerName":"carn","playerNick":"carN","webhookEligible":true}],"capturedAt":"2026-09-23T03:13:21.736Z","currentMap":"de_nuke","team1Score":1,"team2Score":1,"bombPlanted":false,"playerStats":[],"currentRound":1,"scoreSummary":null,"winnerTeamId":null,"responseCount":2590,"eventNamesSeen":["Assist","BombPlanted"],"roundTimeSeconds":null,"mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":true,"unavailableReason":null,"confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[{},{}]}},"vetoOrder":[{"map":"anubis","order":1,"action":"ban","teamId":"cs2-team-13574","teamName":"Club 333"},{"map":null,"order":2,"action":"ban","teamId":"cs2-team-11336","teamName":"DETONATE"}],"streamLinks":[{"url":"https://www.twitch.tv/blakert_cs","label":null,"language":null,"platform":"twitch"},{"url":"https://www.twitch.tv/sv_theunknown","label":null,"language":null,"platform":"twitch"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:13:58.144Z","lastVerified":"2026-09-23T03:13:58.144Z","confidence":"high","event":{"id":"cs2-event-9356","name":"ESL Challenger League Season 52 North America Cup 2","slug":"esl-challenger-league-season-52-north-america-cup-2","imageUrl":null,"prizePool":17500,"currency":"USD","location":null,"format":null,"teamCount":null,"standings":null,"startsAt":"2026-09-23T01:00:00.000Z","endsAt":"2026-09-29T23:59:59.000Z","status":"live","tier":"A","prestigeScore":80,"region":"North America","isLan":null,"confirmedStatus":"source_listed","streamLinks":null,"vodLinks":null,"lastSyncedAt":"2026-09-23T03:15:01.834Z","lastVerified":"2026-09-23T03:15:01.834Z","confidence":"high","eventId":"cs2-event-9356","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-13574","name":"Club 333","slug":"club-333","teamTag":"CLUB333","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/3044c1d39c711d18de8e4c02609cc7f0.webp","countryName":null,"countryCode":null,"region":"Americas","worldRanking":232,"lastSyncedAt":"2026-09-23T03:13:57.870Z","lastVerified":"2026-09-23T03:13:57.870Z","confidence":"high"},"team2":{"id":"cs2-team-11336","name":"DETONATE","slug":"detonate","teamTag":"DETONATE","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/49233722c0c25a3066de35dc0915eb9a.webp","countryName":"United States","countryCode":"US","region":"Americas","worldRanking":205,"lastSyncedAt":"2026-09-23T03:13:57.959Z","lastVerified":"2026-09-23T03:13:57.959Z","confidence":"high"},"maps":[{"id":"cs2-match-2398521-map-1","matchId":"cs2-match-2398521","mapNumber":1,"mapName":"Inferno","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8],"team2Halves":[4],"winnerTeamId":"cs2-team-13574","durationRounds":24,"lastSyncedAt":"2026-09-23T03:13:58.482Z","playerStats":[{},{}],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/4004b70cfe62cef3b711c587bd0d342c.webp","pickTeamId":"cs2-team-13574","objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398521-map-2","matchId":"cs2-match-2398521","mapNumber":2,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,2],"team2Halves":[4,9],"winnerTeamId":"cs2-team-11336","durationRounds":23,"lastSyncedAt":"2026-09-23T03:13:58.518Z","playerStats":[{},{}],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp","pickTeamId":"cs2-team-11336","objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps","player_stats"],"unavailableSubresources":["objective_stats"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}},{"entityType":"cs2_match","id":"cs2-match-2398318","eventId":"cs2-event-9410","eventName":"CROSSFIRE Season 6","eventSlug":"crossfire-season-6","stageName":null,"startsAt":"2026-09-23T03:30:00.000Z","endsAt":null,"bestOf":3,"status":"upcoming","team1Id":"cs2-team-13994","team2Id":"cs2-team-11955","team1Name":"KODEX","team2Name":"LAG","team1Score":null,"team2Score":null,"winnerTeamId":null,"liveState":{"status":"upcoming","team1Score":null,"team2Score":null,"winnerTeamId":null},"vetoOrder":null,"streamLinks":null,"vodLinks":[],"lastSyncedAt":"2026-09-23T03:05:48.672Z","lastVerified":"2026-09-23T03:05:48.672Z","confidence":"high","event":{"id":"cs2-event-9410","name":"CROSSFIRE Season 6","slug":"crossfire-season-6","imageUrl":null,"prizePool":10000,"currency":"USD","location":null,"format":"Playoffs: Double elimination Bo3 - Grand final Bo5","teamCount":null,"standings":null,"startsAt":"2026-09-16T00:30:00.000Z","endsAt":"2026-10-11T23:59:59.000Z","status":"live","tier":null,"prestigeScore":null,"region":null,"isLan":true,"confirmedStatus":"source_listed","streamLinks":null,"vodLinks":null,"lastSyncedAt":"2026-09-23T03:15:04.607Z","lastVerified":"2026-09-23T03:15:04.607Z","confidence":"high","eventId":"cs2-event-9410","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8cdf74d32db95514d3dc287ea44a5fa4.webp","bannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/ac2ccf9a9eda59f4657a37018b13de0d.webp"},"team1":{"id":"cs2-team-13994","name":"KODEX","slug":"kodex","teamTag":"KODEX","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8ad88a29fc8c6dc13223f71dc2164d12.webp","countryName":null,"countryCode":null,"region":"North America","worldRanking":241,"lastSyncedAt":"2026-09-23T03:09:58.509Z","lastVerified":"2026-09-23T03:09:58.509Z","confidence":"high"},"team2":{"id":"cs2-team-11955","name":"LAG","slug":"lag","teamTag":"LAG","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/297f07ea26dbfe4dc4342ad164a661e2.webp","countryName":"Canada","countryCode":"CA","region":"Americas","worldRanking":98,"lastSyncedAt":"2026-09-23T03:14:03.000Z","lastVerified":"2026-09-23T03:14:03.000Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8bb92ff4ccd53fb7cc88c565b3ddbd92.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8bb92ff4ccd53fb7cc88c565b3ddbd92.webp"},"maps":[{"id":"cs2-match-2398318-map-1","matchId":"cs2-match-2398318","mapNumber":1,"mapName":"TBA","status":"upcoming","team1Score":null,"team2Score":null,"team1Halves":null,"team2Halves":null,"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-23T03:05:48.717Z","playerStats":[],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{}}},{"id":"cs2-match-2398318-map-2","matchId":"cs2-match-2398318","mapNumber":2,"mapName":"TBA","status":"upcoming","team1Score":null,"team2Score":null,"team1Halves":null,"team2Halves":null,"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-23T03:05:48.747Z","playerStats":[],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{}}}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/8cdf74d32db95514d3dc287ea44a5fa4.webp","eventImageUrl":null,"eventBannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/ac2ccf9a9eda59f4657a37018b13de0d.webp","availableSubresources":["maps","live_state"],"unavailableSubresources":["player_stats","objective_stats"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_played"}}}],"meta":{"count":2,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/matches/recent":{"get":{"summary":"Recent results","description":"Finished matches with final series score and winner, newest first.","operationId":"getCs2MatchesRecent","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Recent results","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_match","id":"cs2-match-2398526","eventId":"cs2-event-9356","eventName":"ESL Challenger League Season 52 North America Cup 2","eventSlug":"esl-challenger-league-season-52-north-america-cup-2","stageName":null,"startsAt":"2026-09-23T02:58:01.000Z","endsAt":"2026-09-23T03:00:58.213Z","bestOf":3,"status":"completed","team1Id":"cs2-team-13857","team2Id":"cs2-team-12971","team1Name":"Iowa Stormboar","team2Name":"Wanted Goons","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-13857","lastSyncedAt":"2026-09-23T03:06:07.518Z","lastVerified":"2026-09-23T03:06:07.518Z","confidence":"high","event":{"id":"cs2-event-9356","name":"ESL Challenger League Season 52 North America Cup 2","slug":"esl-challenger-league-season-52-north-america-cup-2","imageUrl":null,"prizePool":17500,"currency":"USD","tier":"A","prestigeScore":80,"status":"live","region":"North America","startsAt":"2026-09-23T01:00:00.000Z","endsAt":"2026-09-29T23:59:59.000Z","eventId":"cs2-event-9356","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-13857","name":"Iowa Stormboar","slug":"iowa-stormboar","teamTag":"IS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c875a66adefc7e50e0b34ba4b97bed5c.webp","countryName":"United States","countryCode":"US","worldRanking":177},"team2":{"id":"cs2-team-12971","name":"Wanted Goons","slug":"wanted-goons","teamTag":"WG","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/2fd6ff3bc5a226dfa92640ab178d60cb.webp","countryName":null,"countryCode":null,"worldRanking":230,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7ff257ba3339dbf5bd82c1457bcd0e4c.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7ff257ba3339dbf5bd82c1457bcd0e4c.webp"},"maps":[{"id":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","mapNumber":1,"mapName":"Dust2","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[10,3],"team2Halves":[2,0],"winnerTeamId":"cs2-team-13857","durationRounds":15,"lastSyncedAt":"2026-09-23T03:04:18.990Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398526-map-2","matchId":"cs2-match-2398526","mapNumber":2,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[5,7],"team2Halves":[7,5],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-23T03:04:28.968Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}},{"entityType":"cs2_match","id":"cs2-match-2398527","eventId":"cs2-event-9356","eventName":"ESL Challenger League Season 52 North America Cup 2","eventSlug":"esl-challenger-league-season-52-north-america-cup-2","stageName":null,"startsAt":"2026-09-23T02:43:06.000Z","endsAt":"2026-09-23T02:44:02.768Z","bestOf":3,"status":"completed","team1Id":"cs2-team-12301","team2Id":"cs2-team-13124","team1Name":"FlyQuest RED","team2Name":"Marsborne","team1Score":0,"team2Score":2,"winnerTeamId":"cs2-team-13124","lastSyncedAt":"2026-09-23T03:06:08.339Z","lastVerified":"2026-09-23T03:06:08.339Z","confidence":"high","event":{"id":"cs2-event-9356","name":"ESL Challenger League Season 52 North America Cup 2","slug":"esl-challenger-league-season-52-north-america-cup-2","imageUrl":null,"prizePool":17500,"currency":"USD","tier":"A","prestigeScore":80,"status":"live","region":"North America","startsAt":"2026-09-23T01:00:00.000Z","endsAt":"2026-09-29T23:59:59.000Z","eventId":"cs2-event-9356","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-12301","name":"FlyQuest RED","slug":"flyquest-red","teamTag":"FR","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/55414f2cbe99ee64615c4f961b981446.webp","countryName":"United States","countryCode":"US","worldRanking":null},"team2":{"id":"cs2-team-13124","name":"Marsborne","slug":"marsborne","teamTag":"MARSBORN","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7d1b9c59f37fb864efc779a704207c23.webp","countryName":"Canada","countryCode":"CA","worldRanking":94},"maps":[{"id":"cs2-match-2398527-map-1","matchId":"cs2-match-2398527","mapNumber":1,"mapName":"Mirage","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[2],"team2Halves":[10],"winnerTeamId":"cs2-team-13124","durationRounds":23,"lastSyncedAt":"2026-09-23T02:53:38.850Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398527-map-2","matchId":"cs2-match-2398527","mapNumber":2,"mapName":"Ancient","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[2,0],"team2Halves":[10,3],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-23T02:54:00.863Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}],"meta":{"count":2,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/matches/results":{"get":{"summary":"Recent results","description":"Finished matches with final series score and winner, newest first.\n\nSame response as `GET /api/v1/cs2/matches/recent`.","operationId":"getCs2MatchesResults","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Recent results"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/matches/recent"}},"/cs2/matches/completed":{"get":{"summary":"Recent results","description":"Finished matches with final series score and winner, newest first.\n\nSame response as `GET /api/v1/cs2/matches/recent`.","operationId":"getCs2MatchesCompleted","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Recent results"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/matches/recent"}},"/cs2/matches/{matchId}/streams":{"get":{"summary":"Match streams","description":"Broadcast links for a match, when known.","operationId":"getCs2MatchesMatchIdStreams","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Match streams","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_match_streams","matchId":"cs2-match-2398526","streams":[]},"meta":{"count":0,"limit":0,"total":0,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/matches/{matchId}/head-to-head":{"get":{"summary":"Match head-to-head","description":"Previous meetings between the two teams in this match.","operationId":"getCs2MatchesMatchIdHeadToHead","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}}],"responses":{"200":{"description":"Match head-to-head","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_team_h2h","team":{"id":"cs2-team-13857","name":"Iowa Stormboar"},"opponent":{"id":"cs2-team-12971","name":"Wanted Goons"},"totalMatches":2,"matchRecord":{"teamWins":2,"opponentWins":0,"teamWinPercent":100,"opponentWinPercent":0},"mapRecord":{"teamWins":3,"opponentWins":0,"totalDecidedMaps":3,"teamWinPercent":100,"opponentWinPercent":0},"mapBreakdown":[{"mapName":"Dust2","played":1,"teamWins":1,"opponentWins":0,"teamWinPercent":100,"opponentWinPercent":0,"roundsFor":13,"roundsAgainst":2,"roundDifferential":11},{"mapName":"Cache","played":1,"teamWins":1,"opponentWins":0,"teamWinPercent":100,"opponentWinPercent":0,"roundsFor":16,"roundsAgainst":13,"roundDifferential":3}],"recent5Matches":[{"matchId":"cs2-match-2398526","status":"completed","startsAt":"2026-09-23T02:58:01.000Z","eventName":"ESL Challenger League Season 52 North America Cup 2","bestOf":null,"opponentId":"cs2-team-12971","opponentName":"Wanted Goons","teamScore":2,"opponentScore":0,"score":"2-0","result":"W","maps":[{"mapId":"cs2-match-2398526-map-1","mapNumber":1,"mapName":"Dust2","status":"completed","teamScore":13,"opponentScore":2,"score":"13-2","result":"W","winnerTeamId":"cs2-team-13857","roundsFor":13,"roundsAgainst":2},{"mapId":"cs2-match-2398526-map-2","mapNumber":2,"mapName":"Cache","status":"completed","teamScore":16,"opponentScore":13,"score":"16-13","result":"W","winnerTeamId":"cs2-team-13857","roundsFor":16,"roundsAgainst":13}]},{"matchId":"cs2-match-2397468","status":"completed","startsAt":"2026-09-05T01:00:00.000Z","eventName":"NSTLGA League Season 2","bestOf":1,"opponentId":"cs2-team-12971","opponentName":"Wanted Goons","teamScore":1,"opponentScore":0,"score":"1-0","result":"W","maps":[{"mapId":"cs2-match-2397468-map-1","mapNumber":1,"mapName":"Mirage","status":"completed","teamScore":13,"opponentScore":7,"score":"13-7","result":"W","winnerTeamId":"cs2-team-13857","roundsFor":13,"roundsAgainst":7}]}],"matches":[{"matchId":"cs2-match-2398526","status":"completed","startsAt":"2026-09-23T02:58:01.000Z","eventName":"ESL Challenger League Season 52 North America Cup 2","bestOf":null,"opponentId":"cs2-team-12971","opponentName":"Wanted Goons","teamScore":2,"opponentScore":0,"score":"2-0","result":"W","maps":[{"mapId":"cs2-match-2398526-map-1","mapNumber":1,"mapName":"Dust2","status":"completed","teamScore":13,"opponentScore":2,"score":"13-2","result":"W","winnerTeamId":"cs2-team-13857","roundsFor":13,"roundsAgainst":2},{"mapId":"cs2-match-2398526-map-2","mapNumber":2,"mapName":"Cache","status":"completed","teamScore":16,"opponentScore":13,"score":"16-13","result":"W","winnerTeamId":"cs2-team-13857","roundsFor":16,"roundsAgainst":13}]},{"matchId":"cs2-match-2397468","status":"completed","startsAt":"2026-09-05T01:00:00.000Z","eventName":"NSTLGA League Season 2","bestOf":1,"opponentId":"cs2-team-12971","opponentName":"Wanted Goons","teamScore":1,"opponentScore":0,"score":"1-0","result":"W","maps":[{"mapId":"cs2-match-2397468-map-1","mapNumber":1,"mapName":"Mirage","status":"completed","teamScore":13,"opponentScore":7,"score":"13-7","result":"W","winnerTeamId":"cs2-team-13857","roundsFor":13,"roundsAgainst":7}]}],"dataAvailable":true},"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/matches/{matchId}/demos":{"get":{"summary":"Match demos","description":"Demo availability per map, and whether each demo has been parsed into round data.","operationId":"getCs2MatchesMatchIdDemos","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Match demos","content":{"application/json":{"example":{"success":true,"data":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","dataQuality":"unavailable","message":"Demo archive availability has not been indexed for this CS2 match yet."},"meta":{"count":0,"dataAvailable":false,"limit":0,"total":0,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/matches/{matchId}/maps":{"get":{"summary":"Match maps","description":"Maps played or scheduled in a match: map name, score, halves and winner.","operationId":"getCs2MatchesMatchIdMaps","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Match maps","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_map","id":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","mapNumber":1,"mapName":"Dust2","status":"completed","team1Score":13,"team2Score":2,"team1Halves":[10,3],"team2Halves":[2,0],"winnerTeamId":"cs2-team-13857","durationRounds":15,"lastSyncedAt":"2026-09-23T03:04:18.990Z","playerStats":[{"id":"live-source-match-2398526-map-1-H0NeST","mapId":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","playerId":"cs2-player-24045","playerName":"H0NeST","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":16,"deaths":9,"assists":3,"plusMinus":7,"adr":null,"kast":null,"rating":1.41,"ratingVersion":"source_rating_3_0","headshots":11,"headshotPercent":null,"firstKills":1,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-23T02:57:57.779Z","mapNameCanonical":null,"imageUrl":null,"mapImageUrl":null,"coverImageUrl":null,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},{"id":"live-source-match-2398526-map-1-Johan","mapId":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","playerId":"cs2-player-24467","playerName":"Johan","teamId":"cs2-team-12971","teamName":"Wanted Goons","kills":3,"deaths":14,"assists":2,"plusMinus":-11,"adr":null,"kast":null,"rating":0.41,"ratingVersion":"source_rating_3_0","headshots":2,"headshotPercent":null,"firstKills":1,"firstDeaths":2,"source":"live","lastSyncedAt":"2026-09-23T02:57:58.661Z","mapNameCanonical":null,"imageUrl":null,"mapImageUrl":null,"coverImageUrl":null,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{}}}],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png","pickTeamId":"cs2-team-12971","objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"availableSubresources":["player_stats"],"unavailableSubresources":["objective_stats"],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-23T03:04:18.990Z","mapNameCanonical":"Dust2","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/dust2.png","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}},{"entityType":"cs2_map","id":"cs2-match-2398526-map-2","matchId":"cs2-match-2398526","mapNumber":2,"mapName":"Cache","status":"completed","team1Score":16,"team2Score":13,"team1Halves":[5,7],"team2Halves":[7,5],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-23T03:04:28.968Z","playerStats":[{"id":"live-source-match-2398526-map-2-H0NeST","mapId":"cs2-match-2398526-map-2","matchId":"cs2-match-2398526","playerId":"cs2-player-24045","playerName":"H0NeST","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":27,"deaths":18,"assists":7,"plusMinus":9,"adr":94.03,"kast":0.8276,"rating":1.103,"ratingVersion":"live_approx","headshots":12,"headshotPercent":0.4444,"firstKills":8,"firstDeaths":4,"source":"live","lastSyncedAt":"2026-09-23T02:59:53.078Z","mapNameCanonical":null,"imageUrl":null,"mapImageUrl":null,"coverImageUrl":null,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},{"id":"live-source-match-2398526-map-2-Johan","mapId":"cs2-match-2398526-map-2","matchId":"cs2-match-2398526","playerId":"cs2-player-24467","playerName":"Johan","teamId":"cs2-team-12971","teamName":"Wanted Goons","kills":9,"deaths":23,"assists":5,"plusMinus":-14,"adr":45.79,"kast":0.5517,"rating":0.532,"ratingVersion":"live_approx","headshots":4,"headshotPercent":0.4444,"firstKills":1,"firstDeaths":7,"source":"live","lastSyncedAt":"2026-09-23T02:59:53.078Z","mapNameCanonical":null,"imageUrl":null,"mapImageUrl":null,"coverImageUrl":null,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{}}}],"bombEvents":[],"bombStats":[],"weaponAggregates":[],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/cache.png","pickTeamId":"cs2-team-13857","objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"availableSubresources":["player_stats"],"unavailableSubresources":["objective_stats"],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-23T03:04:28.968Z","mapNameCanonical":"Cache","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/cache.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/cache.png","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}}],"meta":{"count":3,"dataAvailable":true,"limit":3,"total":3,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/matches/{matchId}/games":{"get":{"summary":"Match games","description":"The match's maps as games, each with the `gameId` used by `/cs2/games/{gameId}`.","operationId":"getCs2MatchesMatchIdGames","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Match games","content":{"application/json":{"example":{"success":true,"data":[{"id":"cs2-match-2398526-map-1","entityType":"cs2_game","matchId":"cs2-match-2398526","mapNumber":1,"map":"Dust2","pickTeamId":null,"winnerTeamId":"cs2-team-13857","score":{"team1":13,"team2":2},"halfScores":{"team1":[10,3],"team2":[2,0]},"team1Halves":[10,3],"team2Halves":[2,0],"overtime":null,"durationRounds":15,"duration":{"rounds":15,"source":"stored"},"status":"completed","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"playerStatsAvailable":true,"playerStats":[{"playerId":"cs2-player-24045","playerName":"H0NeST","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":16,"deaths":9,"assists":3,"plusMinus":7,"adr":null,"kast":null,"rating":1.41,"ratingVersion":"source_rating_3_0","headshots":11,"headshotPercent":null,"openingKills":1,"openingDeaths":1,"rating3Profile":{"rating3":null,"rating3Available":false,"subratings":{},"openingDuels":{},"unavailableSubratings":["multi_kills","round_swing"],"rating2":1.41},"source":"live","lastSyncedAt":"2026-09-23T02:57:57.779Z"},{"playerId":"cs2-player-24467","playerName":"Johan","teamId":"cs2-team-12971","teamName":"Wanted Goons","kills":3,"deaths":14,"assists":2,"plusMinus":-11,"adr":null,"kast":null,"rating":0.41,"ratingVersion":"source_rating_3_0","headshots":2,"headshotPercent":null,"openingKills":1,"openingDeaths":2,"rating3Profile":{"rating3":null,"rating3Available":false,"subratings":{},"openingDuels":{},"unavailableSubratings":["multi_kills","round_swing"],"rating2":0.41},"source":"live","lastSyncedAt":"2026-09-23T02:57:58.661Z"}],"roundsAvailable":false,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"weaponStatsAvailable":false,"weaponUsage":[],"dataCompleteness":{"score":true,"winner":true,"halfScores":true,"playerStats":true,"objectiveStats":false,"weaponUsage":false},"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}},{"id":"cs2-match-2398526-map-2","entityType":"cs2_game","matchId":"cs2-match-2398526","mapNumber":2,"map":"Cache","pickTeamId":null,"winnerTeamId":null,"score":{"team1":16,"team2":13},"halfScores":{"team1":[5,7],"team2":[7,5]},"team1Halves":[5,7],"team2Halves":[7,5],"overtime":{"rounds":5,"team1":4,"team2":1},"durationRounds":29,"duration":{"rounds":29,"source":"score_inferred"},"status":"completed","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"playerStatsAvailable":true,"playerStats":[{"playerId":"cs2-player-24045","playerName":"H0NeST","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":27,"deaths":18,"assists":7,"plusMinus":9,"adr":94.03,"kast":0.8276,"rating":1.103,"ratingVersion":"live_approx","headshots":12,"headshotPercent":0.4444,"openingKills":8,"openingDeaths":4,"rating3Profile":{"rating3":null,"rating3Available":false,"subratings":{},"openingDuels":{},"unavailableSubratings":["multi_kills","round_swing"],"rating2":1.103},"source":"live","lastSyncedAt":"2026-09-23T02:59:53.078Z"},{"playerId":"cs2-player-24467","playerName":"Johan","teamId":"cs2-team-12971","teamName":"Wanted Goons","kills":9,"deaths":23,"assists":5,"plusMinus":-14,"adr":45.79,"kast":0.5517,"rating":0.532,"ratingVersion":"live_approx","headshots":4,"headshotPercent":0.4444,"openingKills":1,"openingDeaths":7,"rating3Profile":{"rating3":null,"rating3Available":false,"subratings":{},"openingDuels":{},"unavailableSubratings":["multi_kills","round_swing"],"rating2":0.532},"source":"live","lastSyncedAt":"2026-09-23T02:59:53.078Z"}],"roundsAvailable":false,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"weaponStatsAvailable":false,"weaponUsage":[],"dataCompleteness":{"score":true,"winner":false,"halfScores":true,"playerStats":true,"objectiveStats":false,"weaponUsage":false},"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}}],"meta":{"count":3,"dataAvailable":true,"limit":3,"total":3,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/matches/{matchId}/player-stats":{"get":{"summary":"Match player stats","description":"Per-player stats for each map of a match: kills, deaths, ADR, KAST and rating.","operationId":"getCs2MatchesMatchIdPlayerStats","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Match player stats","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_player_stat","id":"live-source-match-2398526-map-1-H0NeST","mapId":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","playerId":"cs2-player-24045","playerName":"H0NeST","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":16,"deaths":9,"assists":3,"plusMinus":7,"adr":null,"kast":null,"rating":1.41,"ratingVersion":"source_rating_3_0","headshots":11,"headshotPercent":null,"firstKills":1,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-23T02:57:57.779Z","player":{"id":"cs2-player-24045","nickname":"H0NeST","slug":"h0nest","realName":"Nazar Stefinko","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f2972c1aaaea60879f3c33ed6058b227.webp","countryName":"Ukraine","countryCode":"UA","age":18,"rating":1.26,"mapsPlayed":44,"careerStats":{"rating":1.31,"window":"past_3_months","opening":null,"sniping":null,"trading":null,"utility":null,"entrying":null,"clutching":null,"firepower":null,"mapsPlayed":50,"prizeMoney":3100,"careerRating":1.31,"windowRating":null,"missingFields":["age"],"profileStatus":"partial","lastKnownRating":1.31,"lastActiveTournament":"LiveFISSURE Playground 3","profileImageStatus":"success","profileImageClaimedAt":"2026-06-26T02:34:40.140807+02:00"},"currentTeamId":"cs2-team-13857","status":"inactive","primaryRole":"entry","roleConfidence":"medium","statusUpdatedAt":"2026-07-05T00:40:56.174Z","lastSyncedAt":"2026-09-23T03:04:06.671Z","lastVerified":"2026-09-23T03:04:06.671Z"},"team":{"id":"cs2-team-13857","name":"Iowa Stormboar","slug":"iowa-stormboar","teamTag":"IS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c875a66adefc7e50e0b34ba4b97bed5c.webp","countryName":"United States","countryCode":"US","region":"Americas","worldRanking":177,"lastSyncedAt":"2026-09-23T03:09:17.179Z","lastVerified":"2026-09-23T03:09:17.179Z","confidence":"high"},"ctKills":null,"ctDeaths":null,"ctAdr":null,"ctKast":null,"ctRating":null,"tKills":null,"tDeaths":null,"tAdr":null,"tKast":null,"tRating":null,"sideDataAvailable":false,"availableSubresources":[],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-23T02:57:57.779Z"},{"entityType":"cs2_player_stat","id":"live-source-match-2398526-map-1-Scorchyy","mapId":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","playerId":"cs2-player-24528","playerName":"Scorchyy","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":12,"deaths":6,"assists":1,"plusMinus":6,"adr":null,"kast":null,"rating":1.46,"ratingVersion":"source_rating_3_0","headshots":4,"headshotPercent":null,"firstKills":3,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-23T02:57:57.477Z","player":{"id":"cs2-player-24528","nickname":"Scorchyy","slug":"scorchyy","realName":"Brett Coolen","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/039375d98261969fba392fe26c052bab.webp","countryName":"Canada","countryCode":"CA","age":25,"rating":1.04,"mapsPlayed":44,"careerStats":{"rating":1.04,"window":"past_3_months","opening":37,"sniping":90,"trading":79,"utility":45,"entrying":53,"clutching":82,"firepower":50,"mapsPlayed":37,"prizeMoney":2700,"careerRating":1.04,"windowRating":1.04,"missingFields":[],"profileStatus":"success","lastKnownRating":1.04,"lastActiveTournament":"Live XSE Pro League","profileImageStatus":"success","profileImageResetAt":"2026-07-12T00:58:40.232478+00:00","profileImageClaimedAt":"2026-09-11T01:44:23.437477+00:00"},"currentTeamId":"cs2-team-13857","status":"active","primaryRole":"AWPer","roleConfidence":"high","statusUpdatedAt":"2026-07-05T20:54:28.233Z","lastSyncedAt":"2026-09-23T03:04:06.573Z","lastVerified":"2026-09-23T03:04:06.573Z"},"team":{"id":"cs2-team-13857","name":"Iowa Stormboar","slug":"iowa-stormboar","teamTag":"IS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c875a66adefc7e50e0b34ba4b97bed5c.webp","countryName":"United States","countryCode":"US","region":"Americas","worldRanking":177,"lastSyncedAt":"2026-09-23T03:09:17.179Z","lastVerified":"2026-09-23T03:09:17.179Z","confidence":"high"},"ctKills":null,"ctDeaths":null,"ctAdr":null,"ctKast":null,"ctRating":null,"tKills":null,"tDeaths":null,"tAdr":null,"tKast":null,"tRating":null,"sideDataAvailable":false,"availableSubresources":[],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-23T02:57:57.477Z"}],"meta":{"count":20,"dataAvailable":true,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"limit":20,"total":20,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/matches/{matchId}/lineup-stats":{"get":{"summary":"Match lineup stats","description":"Each team's lineup for the match with recent form stats.","operationId":"getCs2MatchesMatchIdLineupStats","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}},{"name":"windowDays","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Match lineup stats","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_match_lineup_stats","matchId":"cs2-match-2398526","windowDays":90,"dataAvailable":true,"teams":[{"teamId":"cs2-team-13857","players":[{"playerId":"cs2-player-24045","teamId":"cs2-team-13857","nickname":"H0NeST","name":"Nazar Stefinko","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f2972c1aaaea60879f3c33ed6058b227.webp","slug":"h0nest","countryName":"Ukraine","countryCode":"UA","role":"entry","windowDays":90,"dataAvailable":true,"maps":42,"matches":20,"rating":1.21,"adr":95.7,"kast":0.758,"kdRatio":1.14,"kills":762,"deaths":666,"assists":169,"unavailableSubratings":["multi_kill_rating","round_swing"]},{"playerId":"cs2-player-23690","teamId":"cs2-team-13857","nickname":"TyRa","name":"Ty Aron","imageUrl":null,"slug":"tyra","countryName":"United States","countryCode":"US","role":"entry","windowDays":90,"dataAvailable":true,"maps":33,"matches":16,"rating":1,"adr":77.4,"kast":0.574,"kdRatio":0.89,"kills":456,"deaths":515,"assists":117,"unavailableSubratings":["multi_kill_rating","round_swing"]}]},{"teamId":"cs2-team-12971","players":[{"playerId":"cs2-player-24664","teamId":"cs2-team-12971","nickname":"killerPandas","name":"Dylan Pellegrino","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f610dd85b90e96df36b58b51a2587384.png","slug":"killerpandas","countryName":"United States","countryCode":"US","role":"AWPer","windowDays":90,"dataAvailable":true,"maps":16,"matches":8,"rating":1,"adr":73.1,"kast":0.669,"kdRatio":0.97,"kills":232,"deaths":238,"assists":29,"unavailableSubratings":["multi_kill_rating","round_swing"]},{"playerId":"cs2-player-26098","teamId":"cs2-team-12971","nickname":"hibui","name":"Hunter Conklin","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e529872541a36b595ef27153a38c8dd1.webp","slug":"hibui","countryName":"United States","countryCode":"US","role":"support","windowDays":90,"dataAvailable":true,"maps":18,"matches":9,"rating":0.95,"adr":65.6,"kast":0.679,"kdRatio":0.87,"kills":221,"deaths":255,"assists":51,"unavailableSubratings":["multi_kill_rating","round_swing"]}]}],"players":[{"playerId":"cs2-player-24045","teamId":"cs2-team-13857","nickname":"H0NeST","name":"Nazar Stefinko","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f2972c1aaaea60879f3c33ed6058b227.webp","slug":"h0nest","countryName":"Ukraine","countryCode":"UA","role":"entry","windowDays":90,"dataAvailable":true,"maps":42,"matches":20,"rating":1.21,"adr":95.7,"kast":0.758,"kdRatio":1.14,"kills":762,"deaths":666,"assists":169,"unavailableSubratings":["multi_kill_rating","round_swing"]},{"playerId":"cs2-player-23690","teamId":"cs2-team-13857","nickname":"TyRa","name":"Ty Aron","imageUrl":null,"slug":"tyra","countryName":"United States","countryCode":"US","role":"entry","windowDays":90,"dataAvailable":true,"maps":33,"matches":16,"rating":1,"adr":77.4,"kast":0.574,"kdRatio":0.89,"kills":456,"deaths":515,"assists":117,"unavailableSubratings":["multi_kill_rating","round_swing"]}]},"meta":{"count":10,"dataAvailable":true,"limit":10,"total":10,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/matches/{matchId}/players":{"get":{"summary":"Match player stats","description":"Per-player stats for each map of a match: kills, deaths, ADR, KAST and rating.\n\nSame response as `GET /api/v1/cs2/matches/{matchId}/player-stats`.","operationId":"getCs2MatchesMatchIdPlayers","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Match player stats"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/matches/{matchId}/player-stats"}},"/cs2/matches/{matchId}/stats":{"get":{"summary":"Match player stats","description":"Per-player stats for each map of a match: kills, deaths, ADR, KAST and rating.\n\nSame response as `GET /api/v1/cs2/matches/{matchId}/player-stats`.","operationId":"getCs2MatchesMatchIdStats","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Match player stats"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/matches/{matchId}/player-stats"}},"/cs2/matches/{matchId}":{"get":{"summary":"Match details","description":"One match: event, teams, series score, maps, veto and which sub-resources have data.","operationId":"getCs2MatchesMatchId","tags":["CS2"],"parameters":[{"name":"matchId","in":"path","required":true,"description":"Match id, e.g. `cs2-match-2398421`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Match details","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_match","id":"cs2-match-2398526","eventId":"cs2-event-9356","eventName":"ESL Challenger League Season 52 North America Cup 2","eventSlug":"esl-challenger-league-season-52-north-america-cup-2","stageName":"Upper bracket","startsAt":"2026-09-23T02:58:01.000Z","endsAt":"2026-09-23T03:00:58.213Z","bestOf":3,"status":"completed","team1Id":"cs2-team-13857","team2Id":"cs2-team-12971","team1Name":"Iowa Stormboar","team2Name":"Wanted Goons","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-13857","liveState":{"teams":{"team1Name":"Iowa Stormboar","team2Name":"Wanted Goons","ctTeamName":"Wanted Goons","terroristTeamName":"Iowa Stormboar"},"source":"live","status":"live","matchId":"cs2-match-2398526","roundEnds":[{"winner":"TERRORIST","eventId":"645db6f393fca49e22e4bf48eb2f213d","payload":{"winner":"TERRORIST","winType":"Terrorists_Win","terroristScore":16,"counterTerroristScore":13},"winType":"Terrorists_Win","eventType":"RoundEnd","observedAt":"2026-09-23T02:59:52.534Z","terroristScore":16,"webhookEligible":true,"counterTerroristScore":13},{"winner":"TERRORIST","eventId":"9165facec222a504457850548c7e5020","payload":{"winner":"TERRORIST","winType":"Terrorists_Win","terroristScore":15,"counterTerroristScore":13},"winType":"Terrorists_Win","eventType":"RoundEnd","observedAt":"2026-09-23T02:59:52.535Z","terroristScore":15,"webhookEligible":true,"counterTerroristScore":13}],"bombEvents":[{"source":"live","eventId":"3d6e19c0feb325ab753bc9cefe47430a","payload":{"bombSite":"A","tPlayers":2,"ctPlayers":1,"playerName":"TyRa","playerNick":"TyRa"},"bombSite":"A","tPlayers":2,"ctPlayers":1,"eventType":"BombPlanted","observedAt":"2026-09-23T02:59:52.534Z","playerName":"TyRa","playerNick":"TyRa","webhookEligible":true},{"source":"live","eventId":"d5e85dd74809ea07557b244c6ab64254","payload":{"bombSite":"B","tPlayers":4,"ctPlayers":3,"playerName":"Valter0k","playerNick":"Valter0k"},"bombSite":"B","tPlayers":4,"ctPlayers":3,"eventType":"BombPlanted","observedAt":"2026-09-23T02:59:52.535Z","playerName":"Valter0k","playerNick":"Valter0k","webhookEligible":true}],"capturedAt":"2026-09-23T02:59:52.535Z","currentMap":"de_cache","team1Score":16,"team2Score":13,"bombPlanted":false,"playerStats":[{"hp":0,"adr":94.03448275862068,"name":"H0NeST","nick":"H0NeST","side":"T","alive":false,"kills":27,"money":8050,"deaths":18,"helmet":false,"kevlar":false,"assists":7,"steamId":"1:0:222104593","hasDefuseKit":false,"primaryWeapon":null},{"hp":0,"adr":91.96551724137932,"name":"TyRa","nick":"TyRa","side":"T","alive":false,"kills":24,"money":6850,"deaths":20,"helmet":false,"kevlar":false,"assists":10,"steamId":"1:1:438688670","hasDefuseKit":false,"primaryWeapon":null}],"currentRound":29,"scoreSummary":null,"winnerTeamId":null,"responseCount":1,"eventNamesSeen":["Assist","BombPlanted"],"roundTimeSeconds":null,"mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":true,"unavailableReason":null,"confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[{"source":"live","eventId":"3d6e19c0feb325ab753bc9cefe47430a","payload":{},"bombSite":"A","tPlayers":2,"ctPlayers":1,"eventType":"BombPlanted","observedAt":"2026-09-23T02:59:52.534Z","playerName":"TyRa","playerNick":"TyRa","webhookEligible":true},{"source":"live","eventId":"d5e85dd74809ea07557b244c6ab64254","payload":{},"bombSite":"B","tPlayers":4,"ctPlayers":3,"eventType":"BombPlanted","observedAt":"2026-09-23T02:59:52.535Z","playerName":"Valter0k","playerNick":"Valter0k","webhookEligible":true}]}},"vetoOrder":[{"map":"mirage","order":1,"action":"ban","teamId":"cs2-team-12971","teamName":"Wanted Goons"},{"map":"inferno","order":2,"action":"ban","teamId":"cs2-team-13857","teamName":"Iowa Stormboar"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:06:07.518Z","lastVerified":"2026-09-23T03:06:07.518Z","confidence":"high","event":{"id":"cs2-event-9356","name":"ESL Challenger League Season 52 North America Cup 2","slug":"esl-challenger-league-season-52-north-america-cup-2","imageUrl":null,"prizePool":17500,"currency":"USD","location":null,"format":null,"teamCount":null,"standings":null,"startsAt":"2026-09-23T01:00:00.000Z","endsAt":"2026-09-29T23:59:59.000Z","status":"live","tier":"A","prestigeScore":80,"region":"North America","isLan":null,"confirmedStatus":"source_listed","streamLinks":null,"vodLinks":null,"lastSyncedAt":"2026-09-23T03:15:01.834Z","lastVerified":"2026-09-23T03:15:01.834Z","confidence":"high","eventId":"cs2-event-9356","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-13857","name":"Iowa Stormboar","slug":"iowa-stormboar","teamTag":"IS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c875a66adefc7e50e0b34ba4b97bed5c.webp","countryName":"United States","countryCode":"US","region":"Americas","worldRanking":177,"lastSyncedAt":"2026-09-23T03:09:17.179Z","lastVerified":"2026-09-23T03:09:17.179Z","confidence":"high"},"team2":{"id":"cs2-team-12971","name":"Wanted Goons","slug":"wanted-goons","teamTag":"WG","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/2fd6ff3bc5a226dfa92640ab178d60cb.webp","countryName":null,"countryCode":null,"region":"Americas","worldRanking":230,"lastSyncedAt":"2026-09-23T03:11:05.451Z","lastVerified":"2026-09-23T03:11:05.451Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7ff257ba3339dbf5bd82c1457bcd0e4c.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7ff257ba3339dbf5bd82c1457bcd0e4c.webp"},"maps":[{"id":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","mapNumber":1,"mapName":"Dust2","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[10,3],"team2Halves":[2,0],"winnerTeamId":"cs2-team-13857","durationRounds":15,"lastSyncedAt":"2026-09-23T03:04:18.990Z","playerStats":[{"id":"live-source-match-2398526-map-1-H0NeST","mapId":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","playerId":"cs2-player-24045","playerName":"H0NeST","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":16,"deaths":9,"assists":3,"plusMinus":7,"adr":null,"kast":null,"rating":1.41,"ratingVersion":"source_rating_3_0","headshots":11,"headshotPercent":null,"firstKills":1,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-23T02:57:57.779Z","player":{},"ctKills":null,"ctDeaths":null,"ctAdr":null,"ctKast":null,"ctRating":null,"tKills":null,"tDeaths":null,"tAdr":null,"tKast":null,"tRating":null,"sideDataAvailable":false},{"id":"live-source-match-2398526-map-1-Scorchyy","mapId":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","playerId":"cs2-player-24528","playerName":"Scorchyy","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":12,"deaths":6,"assists":1,"plusMinus":6,"adr":null,"kast":null,"rating":1.46,"ratingVersion":"source_rating_3_0","headshots":4,"headshotPercent":null,"firstKills":3,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-23T02:57:57.477Z","player":{},"ctKills":null,"ctDeaths":null,"ctAdr":null,"ctKast":null,"ctRating":null,"tKills":null,"tDeaths":null,"tAdr":null,"tKast":null,"tRating":null,"sideDataAvailable":false}],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/16948a6107149d6bce6ea2a0ace54d43.webp","pickTeamId":"cs2-team-12971","objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_stats_eligible"}},"scorePending":true},{"id":"cs2-match-2398526-map-2","matchId":"cs2-match-2398526","mapNumber":2,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[5,7],"team2Halves":[7,5],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-23T03:04:28.968Z","playerStats":[{"id":"live-source-match-2398526-map-2-H0NeST","mapId":"cs2-match-2398526-map-2","matchId":"cs2-match-2398526","playerId":"cs2-player-24045","playerName":"H0NeST","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":27,"deaths":18,"assists":7,"plusMinus":9,"adr":94.03,"kast":0.8276,"rating":1.103,"ratingVersion":"live_approx","headshots":12,"headshotPercent":0.4444,"firstKills":8,"firstDeaths":4,"source":"live","lastSyncedAt":"2026-09-23T02:59:53.078Z","player":{},"ctKills":null,"ctDeaths":null,"ctAdr":null,"ctKast":null,"ctRating":null,"tKills":null,"tDeaths":null,"tAdr":null,"tKast":null,"tRating":null,"sideDataAvailable":false},{"id":"live-source-match-2398526-map-2-Scorchyy","mapId":"cs2-match-2398526-map-2","matchId":"cs2-match-2398526","playerId":"cs2-player-24528","playerName":"Scorchyy","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":18,"deaths":18,"assists":1,"plusMinus":0,"adr":54.93,"kast":0.6897,"rating":0.78,"ratingVersion":"live_approx","headshots":5,"headshotPercent":0.2778,"firstKills":1,"firstDeaths":2,"source":"live","lastSyncedAt":"2026-09-23T02:59:53.078Z","player":{},"ctKills":null,"ctDeaths":null,"ctAdr":null,"ctKast":null,"ctRating":null,"tKills":null,"tDeaths":null,"tAdr":null,"tKast":null,"tRating":null,"sideDataAvailable":false}],"mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp","pickTeamId":"cs2-team-13857","objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_stats_eligible"}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/738f1b6567ed5bf2813a2ef99b09ecfd.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps","player_stats"],"unavailableSubresources":["objective_stats"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/matches":{"get":{"summary":"List matches","description":"Matches with filters for status, team, event and date range.","operationId":"getCs2Matches","tags":["CS2"],"parameters":[{"name":"eventId","in":"query","required":false,"description":"Filter by `eventId`.","schema":{"type":"string"}},{"name":"event_id","in":"query","required":false,"description":"Filter by `event_id`.","schema":{"type":"string"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated list of fields to return.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Start of the date range (ISO 8601, UTC).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":25}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"order","in":"query","required":false,"description":"Filter by `order`.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"playerId","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"player_id","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Sort order.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Filter by status.","schema":{"type":"string"}},{"name":"summary","in":"query","required":false,"description":"`true` returns a summary instead of full rows.","schema":{"type":"boolean"}},{"name":"team","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"teamId","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"team_id","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"End of the date range (ISO 8601, UTC).","schema":{"type":"string"}}],"responses":{"200":{"description":"List matches","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_match","id":"cs2-match-2397941","eventId":"cs2-event-9256","eventName":"Stake Ranked Episode","eventSlug":"stake-ranked-episode-4","stageName":null,"startsAt":"2026-10-01T17:30:00.000Z","endsAt":null,"bestOf":3,"status":"upcoming","team1Id":"cs2-team-6667","team2Id":"cs2-team-7969","team1Name":"FaZe","team2Name":"Nemiga","team1Score":null,"team2Score":null,"winnerTeamId":null,"lastSyncedAt":"2026-09-23T03:06:07.226Z","lastVerified":"2026-09-23T03:06:07.226Z","confidence":"high","event":{"id":"cs2-event-9256","name":"Stake Ranked Episode","slug":"stake-ranked-episode-4","imageUrl":null,"prizePool":100000,"currency":"USD","tier":"B","prestigeScore":55,"status":"upcoming","region":null,"startsAt":"2026-10-01T00:00:00.000Z","endsAt":"2026-10-04T23:59:59.000Z","eventId":"cs2-event-9256","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/21396af31d05530bf62f7baa70ee6f59.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-6667","name":"FaZe","slug":"faze","teamTag":"FAZE","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/2c2c7af6d0a6aad17cd9e46ce44fd133.webp","countryName":"Slovakia","countryCode":"SK","worldRanking":13,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/2653bc97908a106127134d6d94d50157.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/2653bc97908a106127134d6d94d50157.webp"},"team2":{"id":"cs2-team-7969","name":"Nemiga","slug":"nemiga","teamTag":"NEMIGA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f2950ddfe847711229d534feda9e6c0a.webp","countryName":"Russia","countryCode":"RU","worldRanking":36},"maps":[{"id":"cs2-match-2397941-map-1","matchId":"cs2-match-2397941","mapNumber":1,"mapName":"TBA","status":"upcoming","team1Score":null,"team2Score":null,"team1Halves":null,"team2Halves":null,"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-18T05:59:15.176Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{}}},{"id":"cs2-match-2397941-map-2","matchId":"cs2-match-2397941","mapNumber":2,"mapName":"TBA","status":"upcoming","team1Score":null,"team2Score":null,"team1Halves":null,"team2Halves":null,"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-18T05:59:15.209Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{}}}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/21396af31d05530bf62f7baa70ee6f59.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_played"}}},{"entityType":"cs2_match","id":"cs2-match-2397940","eventId":"cs2-event-9256","eventName":"Stake Ranked Episode","eventSlug":"stake-ranked-episode-4","stageName":null,"startsAt":"2026-10-01T15:00:00.000Z","endsAt":null,"bestOf":3,"status":"upcoming","team1Id":"cs2-team-6665","team2Id":"cs2-team-12474","team1Name":"Astralis","team2Name":"Alliance","team1Score":null,"team2Score":null,"winnerTeamId":null,"lastSyncedAt":"2026-09-23T03:06:06.797Z","lastVerified":"2026-09-23T03:06:06.797Z","confidence":"high","event":{"id":"cs2-event-9256","name":"Stake Ranked Episode","slug":"stake-ranked-episode-4","imageUrl":null,"prizePool":100000,"currency":"USD","tier":"B","prestigeScore":55,"status":"upcoming","region":null,"startsAt":"2026-10-01T00:00:00.000Z","endsAt":"2026-10-04T23:59:59.000Z","eventId":"cs2-event-9256","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/21396af31d05530bf62f7baa70ee6f59.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-6665","name":"Astralis","slug":"astralis","teamTag":"ASTRALIS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/115a7a4271abd37bd4103803c8361afd.svg","countryName":"Denmark","countryCode":"DK","worldRanking":11},"team2":{"id":"cs2-team-12474","name":"Alliance","slug":"alliance","teamTag":"ALLIANCE","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/cccad477eb24a51ef1c9909e0b7f1c22.webp","countryName":"Sweden","countryCode":"SE","worldRanking":21},"maps":[{"id":"cs2-match-2397940-map-1","matchId":"cs2-match-2397940","mapNumber":1,"mapName":"TBA","status":"upcoming","team1Score":null,"team2Score":null,"team1Halves":null,"team2Halves":null,"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-18T05:59:10.372Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{}}},{"id":"cs2-match-2397940-map-2","matchId":"cs2-match-2397940","mapNumber":2,"mapName":"TBA","status":"upcoming","team1Score":null,"team2Score":null,"team1Halves":null,"team2Halves":null,"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-18T05:59:10.402Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{}}}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/21396af31d05530bf62f7baa70ee6f59.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"not_played","resultStatus":"upcoming","isForfeit":false,"statsEligible":false,"unavailableReason":"not_played","dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_played"}}}],"meta":{"page":1,"limit":2,"total":14369,"filteredUnconfirmedLive":0,"count":2,"totalPages":7185,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/games/{gameId}/stats":{"get":{"summary":"Map player stats","description":"Per-player stats for one map (game).","operationId":"getCs2GamesGameIdStats","tags":["CS2"],"parameters":[{"name":"gameId","in":"path","required":true,"description":"Game (map) id from `/cs2/matches/{matchId}/games`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Map player stats","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_player_stat","id":"live-source-match-2398526-map-1-H0NeST","mapId":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","playerId":"cs2-player-24045","playerName":"H0NeST","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":16,"deaths":9,"assists":3,"plusMinus":7,"adr":null,"kast":null,"rating":1.41,"ratingVersion":"source_rating_3_0","headshots":11,"headshotPercent":null,"firstKills":1,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-23T02:57:57.779Z","player":{"id":"cs2-player-24045","nickname":"H0NeST","slug":"h0nest","realName":"Nazar Stefinko","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f2972c1aaaea60879f3c33ed6058b227.webp","countryName":"Ukraine","countryCode":"UA","age":18,"rating":1.26,"mapsPlayed":44,"careerStats":{"rating":1.31,"window":"past_3_months","opening":null,"sniping":null,"trading":null,"utility":null,"entrying":null,"clutching":null,"firepower":null,"mapsPlayed":50,"prizeMoney":3100,"careerRating":1.31,"windowRating":null,"missingFields":["age"],"profileStatus":"partial","lastKnownRating":1.31,"lastActiveTournament":"LiveFISSURE Playground 3","profileImageStatus":"success","profileImageClaimedAt":"2026-06-26T02:34:40.140807+02:00"},"currentTeamId":"cs2-team-13857","status":"inactive","primaryRole":"entry","roleConfidence":"medium","statusUpdatedAt":"2026-07-05T00:40:56.174Z","lastSyncedAt":"2026-09-23T03:04:06.671Z","lastVerified":"2026-09-23T03:04:06.671Z"},"team":{"id":"cs2-team-13857","name":"Iowa Stormboar","slug":"iowa-stormboar","teamTag":"IS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c875a66adefc7e50e0b34ba4b97bed5c.webp","countryName":"United States","countryCode":"US","region":"Americas","worldRanking":177,"lastSyncedAt":"2026-09-23T03:09:17.179Z","lastVerified":"2026-09-23T03:09:17.179Z","confidence":"high"},"availableSubresources":[],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-23T02:57:57.779Z"},{"entityType":"cs2_player_stat","id":"live-source-match-2398526-map-1-Scorchyy","mapId":"cs2-match-2398526-map-1","matchId":"cs2-match-2398526","playerId":"cs2-player-24528","playerName":"Scorchyy","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":12,"deaths":6,"assists":1,"plusMinus":6,"adr":null,"kast":null,"rating":1.46,"ratingVersion":"source_rating_3_0","headshots":4,"headshotPercent":null,"firstKills":3,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-23T02:57:57.477Z","player":{"id":"cs2-player-24528","nickname":"Scorchyy","slug":"scorchyy","realName":"Brett Coolen","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/039375d98261969fba392fe26c052bab.webp","countryName":"Canada","countryCode":"CA","age":25,"rating":1.04,"mapsPlayed":44,"careerStats":{"rating":1.04,"window":"past_3_months","opening":37,"sniping":90,"trading":79,"utility":45,"entrying":53,"clutching":82,"firepower":50,"mapsPlayed":37,"prizeMoney":2700,"careerRating":1.04,"windowRating":1.04,"missingFields":[],"profileStatus":"success","lastKnownRating":1.04,"lastActiveTournament":"Live XSE Pro League","profileImageStatus":"success","profileImageResetAt":"2026-07-12T00:58:40.232478+00:00","profileImageClaimedAt":"2026-09-11T01:44:23.437477+00:00"},"currentTeamId":"cs2-team-13857","status":"active","primaryRole":"AWPer","roleConfidence":"high","statusUpdatedAt":"2026-07-05T20:54:28.233Z","lastSyncedAt":"2026-09-23T03:04:06.573Z","lastVerified":"2026-09-23T03:04:06.573Z"},"team":{"id":"cs2-team-13857","name":"Iowa Stormboar","slug":"iowa-stormboar","teamTag":"IS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c875a66adefc7e50e0b34ba4b97bed5c.webp","countryName":"United States","countryCode":"US","region":"Americas","worldRanking":177,"lastSyncedAt":"2026-09-23T03:09:17.179Z","lastVerified":"2026-09-23T03:09:17.179Z","confidence":"high"},"availableSubresources":[],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-23T02:57:57.477Z"}],"meta":{"count":10,"dataAvailable":true,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"playerSkins":[],"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"limit":10,"total":10,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/games/{gameId}/player-stats":{"get":{"summary":"Map player stats","description":"Per-player stats for one map (game).\n\nSame response as `GET /api/v1/cs2/games/{gameId}/stats`.","operationId":"getCs2GamesGameIdPlayerStats","tags":["CS2"],"parameters":[{"name":"gameId","in":"path","required":true,"description":"Game (map) id from `/cs2/matches/{matchId}/games`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Map player stats"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/games/{gameId}/stats"}},"/cs2/games/{gameId}/rounds":{"get":{"summary":"Map rounds","description":"Round-by-round results for one map: winner, side and how each round ended.","operationId":"getCs2GamesGameIdRounds","tags":["CS2"],"parameters":[{"name":"gameId","in":"path","required":true,"description":"Game (map) id from `/cs2/matches/{matchId}/games`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Map rounds","content":{"application/json":{"example":{"success":true,"data":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","dataQuality":"unavailable","message":"Round-level bomb event data is not available for this map yet."},"meta":{"count":0,"dataAvailable":false,"limit":0,"total":0,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/games/{gameId}/events":{"get":{"summary":"Map events","description":"Kills, utility, bomb and round events for one map, where demo data exists.","operationId":"getCs2GamesGameIdEvents","tags":["CS2"],"parameters":[{"name":"gameId","in":"path","required":true,"description":"Game (map) id from `/cs2/matches/{matchId}/games`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 5000; larger values are reduced to 5000.","schema":{"type":"integer","minimum":1,"maximum":5000,"default":1000}}],"responses":{"200":{"description":"Map events","content":{"application/json":{"example":{"success":true,"data":[{"id":"live_evt_0","type":"BombPlanted","round":null,"source":"live","eventId":"3d6e19c0feb325ab753bc9cefe47430a","payload":{"bombSite":"A","tPlayers":2,"ctPlayers":1,"playerName":"TyRa","playerNick":"TyRa"},"bombSite":"A","tPlayers":2,"ctPlayers":1,"eventType":"BombPlanted","observedAt":"2026-09-23T02:59:52.534Z","playerName":"TyRa","playerNick":"TyRa","webhookEligible":true},{"id":"live_evt_1","type":"BombPlanted","round":null,"source":"live","eventId":"d5e85dd74809ea07557b244c6ab64254","payload":{"bombSite":"B","tPlayers":4,"ctPlayers":3,"playerName":"Valter0k","playerNick":"Valter0k"},"bombSite":"B","tPlayers":4,"ctPlayers":3,"eventType":"BombPlanted","observedAt":"2026-09-23T02:59:52.535Z","playerName":"Valter0k","playerNick":"Valter0k","webhookEligible":true}],"meta":{"count":64,"dataAvailable":true,"source":"live_state","dataScope":"live_live feed_events","unavailableEventTypes":[],"limit":64,"total":64,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/games/{gameId}":{"get":{"summary":"Game details","description":"One map (game) of a match with score, halves and winner.","operationId":"getCs2GamesGameId","tags":["CS2"],"parameters":[{"name":"gameId","in":"path","required":true,"description":"Game (map) id from `/cs2/matches/{matchId}/games`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Game details","content":{"application/json":{"example":{"success":true,"data":{"id":"cs2-match-2398526-map-1","entityType":"cs2_game","matchId":"cs2-match-2398526","mapNumber":1,"map":"Dust2","pickTeamId":null,"winnerTeamId":"cs2-team-13857","score":{"team1":13,"team2":2},"halfScores":{"team1":[10,3],"team2":[2,0]},"team1Halves":[10,3],"team2Halves":[2,0],"overtime":null,"durationRounds":15,"duration":{"rounds":15,"source":"stored"},"status":"completed","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"playerStatsAvailable":true,"playerStats":[{"playerId":"cs2-player-24045","playerName":"H0NeST","teamId":"cs2-team-13857","teamName":"Iowa Stormboar","kills":16,"deaths":9,"assists":3,"plusMinus":7,"adr":null,"kast":null,"rating":1.41,"ratingVersion":"source_rating_3_0","headshots":11,"headshotPercent":null,"openingKills":1,"openingDeaths":1,"rating3Profile":{"rating3":null,"rating3Available":false,"subratings":{"kills":16,"damage":null,"survival":2.1111,"kast":null,"multiKills":null,"roundSwing":null},"openingDuels":{"openingKills":1,"openingDeaths":1,"successRate":0.5},"unavailableSubratings":["multi_kills","round_swing"],"rating2":1.41},"source":"live","lastSyncedAt":"2026-09-23T02:57:57.779Z"},{"playerId":"cs2-player-24467","playerName":"Johan","teamId":"cs2-team-12971","teamName":"Wanted Goons","kills":3,"deaths":14,"assists":2,"plusMinus":-11,"adr":null,"kast":null,"rating":0.41,"ratingVersion":"source_rating_3_0","headshots":2,"headshotPercent":null,"openingKills":1,"openingDeaths":2,"rating3Profile":{"rating3":null,"rating3Available":false,"subratings":{"kills":3,"damage":null,"survival":0.3571,"kast":null,"multiKills":null,"roundSwing":null},"openingDuels":{"openingKills":1,"openingDeaths":2,"successRate":0.3333},"unavailableSubratings":["multi_kills","round_swing"],"rating2":0.41},"source":"live","lastSyncedAt":"2026-09-23T02:57:58.661Z"}],"roundsAvailable":false,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"weaponStatsAvailable":false,"weaponUsage":[],"dataCompleteness":{"score":true,"winner":true,"halfScores":true,"playerStats":true,"objectiveStats":false,"weaponUsage":false},"dataAvailability":{"playerStats":{"dataAvailable":true,"unavailableReason":null}}},"meta":{"dataAvailable":true,"source":"match_maps"}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/maps":{"get":{"summary":"Map catalog","description":"Every competitive map with its name and image.","operationId":"getCs2Maps","tags":["CS2"],"responses":{"200":{"description":"Map catalog","content":{"application/json":{"example":{"success":true,"data":[{"id":"de_ancient","slug":"ancient","name":"Ancient","mapNameCanonical":"Ancient","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png"},{"id":"de_anubis","slug":"anubis","name":"Anubis","mapNameCanonical":"Anubis","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png"}],"meta":{"count":10,"source":"static_catalog","limit":10,"total":10,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/map-pool":{"get":{"summary":"Active map pool","description":"The maps in the current competitive pool.","operationId":"getCs2MapPool","tags":["CS2"],"responses":{"200":{"description":"Active map pool","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_active_duty_map_pool","asOf":"2026-09-23","poolName":"Active Duty","inPoolCount":7,"maps":[{"id":"de_ancient","slug":"ancient","name":"Ancient","status":"in_pool","inPoolSince":"2023-09-27","removedAt":null,"mapNameCanonical":"Ancient","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png","inPool":true,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]}},{"id":"de_anubis","slug":"anubis","name":"Anubis","status":"in_pool","inPoolSince":"2023-09-27","removedAt":null,"mapNameCanonical":"Anubis","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","inPool":true,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]}}],"inPool":[{"id":"de_ancient","slug":"ancient","name":"Ancient","status":"in_pool","inPoolSince":"2023-09-27","removedAt":null,"mapNameCanonical":"Ancient","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/ancient.png","inPool":true},{"id":"de_anubis","slug":"anubis","name":"Anubis","status":"in_pool","inPoolSince":"2023-09-27","removedAt":null,"mapNameCanonical":"Anubis","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","inPool":true}],"removed":[{"id":"de_overpass","slug":"overpass","name":"Overpass","status":"removed","inPoolSince":"2025-07-01","removedAt":"2026-07-06","mapNameCanonical":"Overpass","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/overpass.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/overpass.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/overpass.png","inPool":false},{"id":"de_train","slug":"train","name":"Train","status":"removed","inPoolSince":"2025-01-01","removedAt":"2026-01-01","mapNameCanonical":"Train","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/train.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/train.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/train.png","inPool":false}],"source":"valve_premier_rotation","notes":"Season 5 (2026-07-06): Cache replaced Overpass."},"meta":{"count":10,"inPool":7,"source":"valve_premier_rotation","dataAvailable":true,"limit":10,"total":10,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/maps/pool":{"get":{"summary":"Active map pool","description":"The maps in the current competitive pool.\n\nSame response as `GET /api/v1/cs2/map-pool`.","operationId":"getCs2MapsPool","tags":["CS2"],"responses":{"200":{"description":"Active map pool"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/map-pool"}},"/cs2/weapons":{"get":{"summary":"Weapon catalog","description":"CS2 weapons with their category (rifle, pistol, SMG and so on).","operationId":"getCs2Weapons","tags":["CS2"],"responses":{"200":{"description":"Weapon catalog","content":{"application/json":{"example":{"success":true,"data":[{"id":"ak47","slug":"ak47","name":"AK-47","category":"rifle"},{"id":"m4a1","slug":"m4a1","name":"M4A1-S","category":"rifle"}],"meta":{"count":18,"source":"static_catalog","limit":18,"total":18,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/regions":{"get":{"summary":"Regions","description":"Regions used for teams and regional rankings.","operationId":"getCs2Regions","tags":["CS2"],"responses":{"200":{"description":"Regions","content":{"application/json":{"example":{"success":true,"data":[{"id":"europe","slug":"europe","name":"Europe"},{"id":"americas","slug":"americas","name":"Americas"}],"meta":{"count":7,"source":"static_catalog","limit":7,"total":7,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/leagues":{"get":{"summary":"Leagues","description":"Leagues and circuits that group events.","operationId":"getCs2Leagues","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Leagues","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_event","id":"cs2-event-ranked-episode-4-open-qualifier","name":"Ranked Episode 4 Open Qualifier","slug":"ranked-episode-4-open-qualifier","tier":null,"region":null,"status":null,"location":null,"bannerImageUrl":null,"eventStructure":null,"prizeDistribution":null,"stats":null,"availableSubresources":["teams","results"],"unavailableSubresources":["matches","standings"],"unavailableFields":{"imageUrl":{"reason":"event_field_unavailable"},"prizePool":{"reason":"event_field_unavailable"},"currency":{"reason":"event_field_unavailable"},"location":null,"format":{"reason":"event_field_unavailable"},"teamCount":{"reason":"event_field_unavailable"},"standings":{"reason":"event_field_unavailable"},"startsAt":{"reason":"event_field_unavailable"},"endsAt":{"reason":"event_field_unavailable"}},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":null},{"entityType":"cs2_event","id":"cs2-event-8699","name":"Radio Popular Roman Imperium Cup II","slug":"radio-popular-roman-imperium-cup-ii","tier":null,"region":null,"status":"completed","location":null,"bannerImageUrl":null,"eventStructure":null,"prizeDistribution":null,"stats":null,"availableSubresources":["teams","results"],"unavailableSubresources":["matches","standings"],"unavailableFields":{"imageUrl":{"reason":"event_field_unavailable"},"prizePool":{"reason":"event_field_unavailable"},"currency":{"reason":"event_field_unavailable"},"location":null,"format":{"reason":"event_field_unavailable"},"teamCount":{"reason":"event_field_unavailable"},"standings":{"reason":"event_field_unavailable"},"startsAt":{"reason":"event_field_unavailable"},"endsAt":{"reason":"event_field_unavailable"}},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":null}],"meta":{"count":2,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/skins/trending":{"get":{"summary":"Trending skins","description":"Skins with the largest recent price moves.","operationId":"getCs2SkinsTrending","tags":["CS2"],"parameters":[{"name":"direction","in":"query","required":false,"description":"Filter by `direction`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 50; larger values are reduced to 50.","schema":{"type":"integer","minimum":1,"maximum":50,"default":8}},{"name":"minPrice","in":"query","required":false,"description":"Minimum price (USD).","schema":{"type":"string"}},{"name":"min_price","in":"query","required":false,"description":"Minimum price (USD).","schema":{"type":"string"}},{"name":"period","in":"query","required":false,"description":"Filter by `period`.","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"Filter by `range`.","schema":{"type":"string"}},{"name":"timeframe","in":"query","required":false,"description":"Filter by `timeframe`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Trending skins","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_skin_trending","timeframe":"7d","gainers":[{"entityType":"cs2_skin_trending","skinItemId":"cs2-skin-547e24b7ec731a833e493938","marketHashName":"MP9 | Starlight Protector (Field-Tested)","slug":"mp9-starlight-protector-field-tested-547e24b7","imageUrl":null,"weapon":"MP9","skinName":"Starlight Protector","exterior":"Field-Tested","category":"skin","stattrak":false,"souvenir":false,"currency":"USD","currentPrice":61.78,"currentCents":6178,"observedAt":"2026-08-02T13:03:51.110Z","changePct":1.3,"change1d":0,"change7d":1.3,"change30d":0.36,"change90d":-1.22,"change180d":-10.7,"change365d":3390.4,"sparkline":[6200,6200],"points30d":30,"points365d":465,"volume30d":780261,"avgVolume30d":6002.007692307692},{"entityType":"cs2_skin_trending","skinItemId":"cs2-skin-c7e6b7658c7efa7d995d3bec","marketHashName":"SSG 08 | Dragonfire (Field-Tested)","slug":"ssg-08-dragonfire-field-tested-c7e6b765","imageUrl":null,"weapon":"SSG 08","skinName":"Dragonfire","exterior":"Field-Tested","category":"skin","stattrak":false,"souvenir":false,"currency":"USD","currentPrice":253.31,"currentCents":25331,"observedAt":"2026-08-02T13:03:49.405Z","changePct":1.09,"change1d":0,"change7d":1.09,"change30d":0.66,"change90d":-14.13,"change180d":-18.19,"change365d":1874.36,"sparkline":[25325,25325],"points30d":30,"points365d":465,"volume30d":288207,"avgVolume30d":2216.976923076923}],"losers":[{"entityType":"cs2_skin_trending","skinItemId":"cs2-skin-4effe99dc6bb1a1a474ab49d","marketHashName":"★ Sport Gloves | Hedge Maze (Field-Tested)","slug":"sport-gloves-hedge-maze-field-tested-4effe99d","imageUrl":null,"weapon":"Sport Gloves","skinName":"Hedge Maze","exterior":"Field-Tested","category":"skin","stattrak":false,"souvenir":false,"currency":"USD","currentPrice":4147.69,"currentCents":414769,"observedAt":"2026-08-02T13:03:50.202Z","changePct":-5.67,"change1d":0,"change7d":-5.67,"change30d":-15.26,"change90d":-13.28,"change180d":-27.65,"change365d":-51.26,"sparkline":[412961,412961],"points30d":30,"points365d":465,"volume30d":356784,"avgVolume30d":2744.492307692308},{"entityType":"cs2_skin_trending","skinItemId":"cs2-skin-20fa5cb15f4a27894be1d0b8","marketHashName":"M4A1-S | Fade (Factory New)","slug":"m4a1-s-fade-factory-new-20fa5cb1","imageUrl":null,"weapon":"M4A1-S","skinName":"Fade","exterior":"Factory New","category":"skin","stattrak":false,"souvenir":false,"currency":"USD","currentPrice":214.74,"currentCents":21474,"observedAt":"2026-07-31T08:02:25.650Z","changePct":-5.36,"change1d":0,"change7d":-5.36,"change30d":-23.37,"change90d":-38.76,"change180d":-48.28,"change365d":-50.97,"sparkline":[28205,29000],"points30d":30,"points365d":345,"volume30d":214260,"avgVolume30d":21426}],"dataAvailable":true},"meta":{"timeframe":"7d","minPrice":50,"limit":2,"computedAt":"2026-08-03T19:38:22.010Z","gainersCount":2,"losersCount":2,"count":0,"total":0,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/skins/search":{"get":{"summary":"List skins","description":"Skins with filters for name, weapon, rarity and price.\n\nSame response as `GET /api/v1/cs2/skins`.","operationId":"getCs2SkinsSearch","tags":["CS2"],"parameters":[{"name":"category","in":"query","required":false,"description":"Filter by `category`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":50}},{"name":"maxPrice","in":"query","required":false,"description":"Filter by `maxPrice`.","schema":{"type":"string"}},{"name":"max_price","in":"query","required":false,"description":"Maximum price (USD).","schema":{"type":"string"}},{"name":"minPrice","in":"query","required":false,"description":"Minimum price (USD).","schema":{"type":"string"}},{"name":"min_price","in":"query","required":false,"description":"Minimum price (USD).","schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"provider","in":"query","required":false,"description":"Filter by `provider`.","schema":{"type":"string"}},{"name":"q","in":"query","required":true,"description":"Search text.","schema":{"type":"string"}},{"name":"rarity","in":"query","required":false,"description":"Skin rarity.","schema":{"type":"string"}},{"name":"skin_name","in":"query","required":false,"description":"Filter by `skin_name`.","schema":{"type":"string"}},{"name":"weapon","in":"query","required":false,"description":"Weapon name.","schema":{"type":"string"}}],"responses":{"200":{"description":"List skins"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/skins"}},"/cs2/skins/{skinIdOrSlug}/prices":{"get":{"summary":"Skin prices","description":"Current prices for a skin on each marketplace that lists it.","operationId":"getCs2SkinsSkinIdOrSlugPrices","tags":["CS2"],"parameters":[{"name":"skinIdOrSlug","in":"path","required":true,"description":"Skin id or slug.","schema":{"type":"string"}},{"name":"provider","in":"query","required":false,"description":"Filter by `provider`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Skin prices","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_skin_prices","skin":{"id":"cs2-skin-e2e778aa2131cbdbee537b9f","marketHashName":"★ Sport Gloves | Nocts (Field-Tested)","slug":"sport-gloves-nocts-field-tested-e2e778aa","itemName":"★ Sport Gloves | Nocts (Field-Tested)","weapon":"Sport Gloves","skinName":"Nocts","category":"glove","rarity":"Extraordinary","exterior":"Field-Tested","stattrak":false,"souvenir":false,"imageUrl":null,"firstSeenAt":"2026-07-05T03:28:07.857Z","lastSyncedAt":"2026-09-23T03:09:15.542Z"},"prices":[{"provider":"avanmarket","currency":"USD","price":591.14,"priceCents":59114,"observedAt":"2026-09-23T03:08:56.297Z","offersCount":91,"count":91,"providerName":"Avan.Market","providerIcon":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9f2f1a901a86db9b59f73c0500004646.webp","buyUrl":"https://avan.market/market/cs/%E2%98%85-sport-gloves-nocts-field-tested?currency=1"},{"provider":"buff163","currency":"USD","price":564.01,"priceCents":56401,"observedAt":"2026-09-23T03:08:56.297Z","offersCount":825,"count":825,"providerName":"Buff.163","providerIcon":"https://api.citoapi.com/api/v1/public/images/cs2/logos/5e05ca45e8faaff96fcf909e2b2f7505.webp","buyUrl":"https://buff.163.com/market/csgo#tab=selling&search=%E2%98%85%20Sport%20Gloves%20%7C%20Nocts%20(Field-Tested)"}],"dataAvailable":true,"unavailableReason":null},"meta":{"count":200,"provider":"all","limit":200,"total":200,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/skins/{skinIdOrSlug}/order-book":{"get":{"summary":"Skin order book","description":"Buy and sell orders for a skin, where a marketplace exposes them.","operationId":"getCs2SkinsSkinIdOrSlugOrderBook","tags":["CS2"],"parameters":[{"name":"skinIdOrSlug","in":"path","required":true,"description":"Skin id or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Skin order book","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_skin_order_book","skin":{"id":"cs2-skin-e2e778aa2131cbdbee537b9f","marketHashName":"★ Sport Gloves | Nocts (Field-Tested)","slug":"sport-gloves-nocts-field-tested-e2e778aa","itemName":"★ Sport Gloves | Nocts (Field-Tested)","weapon":"Sport Gloves","skinName":"Nocts","category":"glove","rarity":"Extraordinary","exterior":"Field-Tested","stattrak":false,"souvenir":false,"imageUrl":null,"firstSeenAt":"2026-07-05T03:28:07.857Z","lastSyncedAt":"2026-09-23T03:09:15.542Z"},"orderBook":{"currency":"USD","buyTotal":null,"buyOrders":[],"sellTotal":6436,"cashSpread":null,"dataPoints":6436,"sellOrders":[{"side":"sell","count":19,"price":559.35,"currency":"USD","provider":"skins","priceCents":55935},{"side":"sell","count":983,"price":560.13,"currency":"USD","provider":"youpin","priceCents":56013}],"steamSpread":null,"steamBuyOrder":null,"cashSpreadCents":null,"highestBuyOrder":null,"lowestSellOrder":{"side":"sell","count":19,"price":559.35,"currency":"USD","provider":"skins","priceCents":55935},"steamSpreadCents":null},"dataAvailable":true,"unavailableReason":null},"meta":{"buyCount":0,"sellCount":25}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/skins/{skinIdOrSlug}/history":{"get":{"summary":"Skin price history","description":"Price history for a skin.","operationId":"getCs2SkinsSkinIdOrSlugHistory","tags":["CS2"],"parameters":[{"name":"skinIdOrSlug","in":"path","required":true,"description":"Skin id or slug.","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}},{"name":"provider","in":"query","required":false,"description":"Filter by `provider`.","schema":{"type":"string"}},{"name":"range","in":"query","required":false,"description":"Filter by `range`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Skin price history","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_skin_price_history","skin":{"id":"cs2-skin-e2e778aa2131cbdbee537b9f","marketHashName":"★ Sport Gloves | Nocts (Field-Tested)","slug":"sport-gloves-nocts-field-tested-e2e778aa","itemName":"★ Sport Gloves | Nocts (Field-Tested)","weapon":"Sport Gloves","skinName":"Nocts","category":"glove","rarity":"Extraordinary","exterior":"Field-Tested","stattrak":false,"souvenir":false,"imageUrl":null,"firstSeenAt":"2026-07-05T03:28:07.857Z","lastSyncedAt":"2026-09-23T03:09:15.542Z"},"history":[{"provider":"cheapest","currency":"USD","bucket":"2020-12-11T00:00:00.000Z","avgPrice":364.42,"minPrice":364.42,"maxPrice":364.42,"price":364.42,"priceCents":36442,"volume":0,"samples":1},{"provider":"cheapest","currency":"USD","bucket":"2020-12-12T00:00:00.000Z","avgPrice":360.09,"minPrice":360.09,"maxPrice":360.09,"price":360.09,"priceCents":36009,"volume":0,"samples":1}],"dataAvailable":true,"unavailableReason":null},"meta":{"count":2010,"provider":"all","days":99999,"limit":2010,"total":2010,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/skins/{skinIdOrSlug}":{"get":{"summary":"Skin details","description":"One skin: weapon, rarity, collection, image and price summary.","operationId":"getCs2SkinsSkinIdOrSlug","tags":["CS2"],"parameters":[{"name":"skinIdOrSlug","in":"path","required":true,"description":"Skin id or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Skin details","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_skin","id":"cs2-skin-e2e778aa2131cbdbee537b9f","marketHashName":"★ Sport Gloves | Nocts (Field-Tested)","slug":"sport-gloves-nocts-field-tested-e2e778aa","itemName":"★ Sport Gloves | Nocts (Field-Tested)","weapon":"Sport Gloves","skinName":"Nocts","category":"glove","rarity":"Extraordinary","exterior":"Field-Tested","stattrak":false,"souvenir":false,"imageUrl":null,"firstSeenAt":"2026-07-05T03:28:07.857Z","lastSyncedAt":"2026-09-23T03:09:15.542Z","dataAvailable":true,"latestPrices":[{"provider":"avanmarket","currency":"USD","price":591.14,"priceCents":59114,"observedAt":"2026-09-23T03:08:56.297Z","offersCount":91,"count":91,"providerName":"Avan.Market","providerIcon":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9f2f1a901a86db9b59f73c0500004646.webp","buyUrl":"https://avan.market/market/cs/%E2%98%85-sport-gloves-nocts-field-tested?currency=1"},{"provider":"buff163","currency":"USD","price":564.01,"priceCents":56401,"observedAt":"2026-09-23T03:08:56.297Z","offersCount":825,"count":825,"providerName":"Buff.163","providerIcon":"https://api.citoapi.com/api/v1/public/images/cs2/logos/5e05ca45e8faaff96fcf909e2b2f7505.webp","buyUrl":"https://buff.163.com/market/csgo#tab=selling&search=%E2%98%85%20Sport%20Gloves%20%7C%20Nocts%20(Field-Tested)"}],"availableSubresources":["prices","history"]},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/skins":{"get":{"summary":"List skins","description":"Skins with filters for name, weapon, rarity and price.","operationId":"getCs2Skins","tags":["CS2"],"parameters":[{"name":"category","in":"query","required":false,"description":"Filter by `category`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":50}},{"name":"maxPrice","in":"query","required":false,"description":"Filter by `maxPrice`.","schema":{"type":"string"}},{"name":"max_price","in":"query","required":false,"description":"Maximum price (USD).","schema":{"type":"string"}},{"name":"minPrice","in":"query","required":false,"description":"Minimum price (USD).","schema":{"type":"string"}},{"name":"min_price","in":"query","required":false,"description":"Minimum price (USD).","schema":{"type":"string"}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"provider","in":"query","required":false,"description":"Filter by `provider`.","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Search text.","schema":{"type":"string"}},{"name":"rarity","in":"query","required":false,"description":"Skin rarity.","schema":{"type":"string"}},{"name":"skin_name","in":"query","required":false,"description":"Filter by `skin_name`.","schema":{"type":"string"}},{"name":"weapon","in":"query","required":false,"description":"Weapon name.","schema":{"type":"string"}}],"responses":{"200":{"description":"List skins","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_skin","id":"cs2-skin-e2e778aa2131cbdbee537b9f","marketHashName":"★ Sport Gloves | Nocts (Field-Tested)","slug":"sport-gloves-nocts-field-tested-e2e778aa","itemName":"★ Sport Gloves | Nocts (Field-Tested)","weapon":"Sport Gloves","skinName":"Nocts","category":"glove","rarity":"Extraordinary","exterior":"Field-Tested","stattrak":false,"souvenir":false,"imageUrl":null,"firstSeenAt":"2026-07-05T03:28:07.857Z","lastSyncedAt":"2026-09-23T03:09:15.542Z","latestProvider":"avanmarket","latestPrice":591.14,"latestPriceCents":59114,"latestCurrency":"USD","latestObservedAt":"2026-09-23T03:08:56.297Z","dataAvailable":true,"availableSubresources":["prices","history"]},{"entityType":"cs2_skin","id":"cs2-skin-c5e0d01b9d430d8e46c554c0","marketHashName":"M4A1-S | Blue Phosphor (Factory New)","slug":"m4a1-s-blue-phosphor-factory-new-c5e0d01b","itemName":"M4A1-S | Blue Phosphor (Factory New)","weapon":"M4A1-S","skinName":"Blue Phosphor","category":"skin","rarity":"Classified","exterior":"Factory New","stattrak":false,"souvenir":false,"imageUrl":null,"firstSeenAt":"2026-07-05T03:22:53.202Z","lastSyncedAt":"2026-09-23T03:09:05.648Z","latestProvider":"balticskins","latestPrice":586.95,"latestPriceCents":58695,"latestCurrency":"USD","latestObservedAt":"2026-09-23T03:08:56.272Z","dataAvailable":true,"availableSubresources":["prices","history"]}],"meta":{"page":1,"limit":2,"total":8783,"count":2,"totalPages":4392,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/maps/{mapId}/stats":{"get":{"summary":"Map player stats","description":"Per-player stats for one map (game).\n\nSame response as `GET /api/v1/cs2/games/{gameId}/stats`.","operationId":"getCs2MapsMapIdStats","tags":["CS2"],"parameters":[{"name":"mapId","in":"path","required":true,"description":"Game (map) id from `/cs2/matches/{matchId}/games`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Map player stats"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/games/{gameId}/stats"}},"/cs2/maps/{mapId}/player-stats":{"get":{"summary":"Map player stats","description":"Per-player stats for one map (game).\n\nSame response as `GET /api/v1/cs2/games/{gameId}/stats`.","operationId":"getCs2MapsMapIdPlayerStats","tags":["CS2"],"parameters":[{"name":"mapId","in":"path","required":true,"description":"Game (map) id from `/cs2/matches/{matchId}/games`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Map player stats"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/games/{gameId}/stats"}},"/cs2/maps/{mapId}/rounds":{"get":{"summary":"Map rounds","description":"Round-by-round results for one map: winner, side and how each round ended.\n\nSame response as `GET /api/v1/cs2/games/{gameId}/rounds`.","operationId":"getCs2MapsMapIdRounds","tags":["CS2"],"parameters":[{"name":"mapId","in":"path","required":true,"description":"Game (map) id from `/cs2/matches/{matchId}/games`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Map rounds"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/games/{gameId}/rounds"}},"/cs2/teams/rankings":{"get":{"summary":"Team rankings","description":"The latest world team ranking, one row per team, with points and change since the previous ranking.\n\nSame response as `GET /api/v1/cs2/rankings`.","operationId":"getCs2TeamsRankings","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"source","in":"query","required":false,"description":"Ranking to use: omit for Valve Regional Standings, or `world` for the world ranking filtered to this region.","schema":{"type":"string"}}],"responses":{"200":{"description":"Team rankings"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/rankings"}},"/cs2/teams/{teamIdOrSlug}/transfers":{"get":{"summary":"Team transfers","description":"Players who joined or left a team.","operationId":"getCs2TeamsTeamIdOrSlugTransfers","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Only rows after this time (ISO 8601).","schema":{"type":"string"}},{"name":"before","in":"query","required":false,"description":"Only rows before this time (ISO 8601).","schema":{"type":"string"}},{"name":"from_team","in":"query","required":false,"description":"Filter by `from_team`.","schema":{"type":"string"}},{"name":"include_computed","in":"query","required":false,"description":"Filter by `include_computed`.","schema":{"type":"string"}},{"name":"include_undated","in":"query","required":false,"description":"Filter by `include_undated`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"player","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"player_id","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Filter by status.","schema":{"type":"string"}},{"name":"team","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"team_id","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}},{"name":"to_team","in":"query","required":false,"description":"Filter by `to_team`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Team transfers","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_transfers","dataAvailable":true,"transfers":[{"transferKey":"profile-history:2025-01-01:source-player-18221:source-team-9565:source-team-4494:joined","playerId":"cs2-player-18221","playerName":"Spinx","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/252b36c5681479de69062d9a8b90736e.webp","fromTeamId":"cs2-team-9565","fromTeamName":"Vitality","fromTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","fromTeamAlternateLogoUrl":null,"fromTeamDarkUiLogoUrl":null,"fromTeamIsNoTeam":false,"toTeamId":"cs2-team-4494","toTeamName":"MOUZ","toTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0ad08abfc7542d74ca19505208967289.svg","toTeamAlternateLogoUrl":null,"toTeamDarkUiLogoUrl":null,"toTeamIsNoTeam":false,"status":"joined","role":null,"transferDate":"2025-01-01T12:00:00.000Z","joinDate":"2025-01-01T12:00:00.000Z","leaveDate":null,"detectedAt":"2026-07-10T00:54:23.160Z"},{"transferKey":"profile-history:2025-01-01:source-player-11816:source-team-6667:source-team-9565:joined","playerId":"cs2-player-11816","playerName":"ropz","playerImageUrl":null,"fromTeamId":"cs2-team-6667","fromTeamName":"FaZe","fromTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/2c2c7af6d0a6aad17cd9e46ce44fd133.webp","fromTeamAlternateLogoUrl":null,"fromTeamDarkUiLogoUrl":null,"fromTeamIsNoTeam":false,"toTeamId":"cs2-team-9565","toTeamName":"Vitality","toTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","toTeamAlternateLogoUrl":null,"toTeamDarkUiLogoUrl":null,"toTeamIsNoTeam":false,"status":"joined","role":null,"transferDate":"2025-01-01T12:00:00.000Z","joinDate":"2025-01-01T12:00:00.000Z","leaveDate":null,"detectedAt":"2026-07-09T20:16:18.067Z"}]},"meta":{"count":2,"total":33,"page":1,"limit":2,"dataAvailable":true,"totalPages":17,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/roster":{"get":{"summary":"Team roster","description":"A team's current players and coach, with role, country and join date where known.","operationId":"getCs2TeamsTeamIdOrSlugRoster","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}}],"responses":{"200":{"description":"Team roster","content":{"application/json":{"example":{"success":true,"data":[{"teamId":"cs2-team-9565","teamName":"Vitality","playerId":"cs2-player-11893","playerNickname":"ZywOo","playerName":"Mathieu Herbaut","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp","playerSlug":"zywoo","countryName":"France","countryCode":"FR","age":25,"rating":1.31,"mapsPlayed":167,"role":"AWPer","fromAt":"2018-10-01T12:00:00.000Z","toAt":null,"isActive":true,"tenureKnown":true,"tenureUnavailableReason":null,"lastSyncedAt":"2026-09-23T00:11:42.818Z"},{"teamId":"cs2-team-9565","teamName":"Vitality","playerId":"cs2-player-9086","playerNickname":"XTQZZZ","playerName":"Rémy Quoniam","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b689e77e923fa8285d5fd19cd911b6b0.webp","playerSlug":"xtqzzz","countryName":"France","countryCode":"FR","age":37,"rating":0,"mapsPlayed":null,"role":"coach","fromAt":null,"toAt":null,"isActive":true,"tenureKnown":false,"tenureUnavailableReason":"source_join_date_unavailable","lastSyncedAt":"2026-09-23T00:11:42.387Z"}],"meta":{"count":6,"rosterCheckedAt":"2026-09-23T00:11:43.764Z","rosterStatus":"complete","noActivePlayers":false,"unknownRosterSlots":0,"partialRoster":false,"activePlayerCount":5,"coachCount":1,"rosterTenureKnown":false,"rosterTenureUnavailableReason":"source_join_date_unavailable","activePlayers":5,"coaches":1,"lastKnownRoster":false,"limit":6,"total":6,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/roster-history":{"get":{"summary":"Team roster history","description":"Every player who has played for a team, with start and end dates.","operationId":"getCs2TeamsTeamIdOrSlugRosterHistory","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"changesLimit","in":"query","required":false,"description":"Filter by `changesLimit`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}}],"responses":{"200":{"description":"Team roster history","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_team_roster_history","teamId":"cs2-team-9565","teamName":"Vitality","dataAvailable":true,"rosterStatus":"partial","noActivePlayers":false,"unknownRosterSlots":4,"partialRoster":true,"activePlayerCount":1,"coachCount":0,"rosterTenureKnown":true,"rosterTenureUnavailableReason":null,"currentRoster":[{"teamId":"cs2-team-9565","teamName":"Vitality","playerId":"cs2-player-11816","playerNickname":"ropz","playerName":"Robin Kool","playerImageUrl":null,"playerSlug":"ropz","countryName":"Estonia","countryCode":"EE","age":26,"rating":1.05,"mapsPlayed":170,"role":"rifler","fromAt":"2018-10-01T12:00:00.000Z","toAt":null,"isActive":true,"tenureKnown":true,"tenureUnavailableReason":null,"lastSyncedAt":"2026-09-23T00:11:43.764Z"}],"activePlayers":[{"teamId":"cs2-team-9565","teamName":"Vitality","playerId":"cs2-player-11816","playerNickname":"ropz","playerName":"Robin Kool","playerImageUrl":null,"playerSlug":"ropz","countryName":"Estonia","countryCode":"EE","age":26,"rating":1.05,"mapsPlayed":170,"role":"rifler","fromAt":"2018-10-01T12:00:00.000Z","toAt":null,"isActive":true,"tenureKnown":true,"tenureUnavailableReason":null,"lastSyncedAt":"2026-09-23T00:11:43.764Z"}],"coach":null,"coaches":[],"historicalMemberships":[{"teamId":"cs2-team-9565","teamName":"Vitality","playerId":"cs2-player-11816","playerNickname":"ropz","playerName":"Robin Kool","playerImageUrl":null,"playerSlug":"ropz","countryName":"Estonia","countryCode":"EE","age":26,"rating":1.05,"mapsPlayed":170,"role":"rifler","fromAt":"2018-10-01T12:00:00.000Z","toAt":null,"isActive":true,"tenureKnown":true,"tenureUnavailableReason":null,"lastSyncedAt":"2026-09-23T00:11:43.764Z"}],"rosterChanges":[{"changeId":"abded9f6-37f9-499a-a1b4-47cb0ae1b789","changeType":"join","teamId":"cs2-team-9565","fromTeamId":null,"toTeamId":"cs2-team-9565","teamName":"Vitality","playerId":"cs2-player-9086","playerName":"XTQZZZ","roleBefore":null,"roleAfter":"coach","effectiveAt":"2026-07-24T14:11:58.925Z","detectedAt":"2026-07-24T14:11:58.926Z","confidence":"medium"},{"changeId":"915264bd-9a63-4803-a347-bc2858460ab0","changeType":"leave","teamId":"cs2-team-6073","fromTeamId":"cs2-team-6073","toTeamId":"cs2-team-9565","teamName":"melty","playerId":"cs2-player-9086","playerName":"XTQZZZ","roleBefore":"rifler","roleAfter":null,"effectiveAt":"2026-07-24T14:11:58.775Z","detectedAt":"2026-07-24T14:11:58.777Z","confidence":"medium"}]},"meta":{"memberships":1,"changes":50,"dataAvailable":true}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/players/history":{"get":{"summary":"Team roster history","description":"Every player who has played for a team, with start and end dates.\n\nSame response as `GET /api/v1/cs2/teams/{teamIdOrSlug}/roster-history`.","operationId":"getCs2TeamsTeamIdOrSlugPlayersHistory","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"changesLimit","in":"query","required":false,"description":"Filter by `changesLimit`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}}],"responses":{"200":{"description":"Team roster history"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/teams/{teamIdOrSlug}/roster-history"}},"/cs2/teams/{teamIdOrSlug}/matches":{"get":{"summary":"Team matches","description":"A team's matches, upcoming and finished.","operationId":"getCs2TeamsTeamIdOrSlugMatches","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":25}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"status","in":"query","required":false,"description":"Filter by status.","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"Filter by type.","schema":{"type":"string"}}],"responses":{"200":{"description":"Team matches","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_match","id":"cs2-match-2398108","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T18:49:47.000Z","endsAt":null,"bestOf":5,"status":"completed","team1Id":"cs2-team-11861","team2Id":"cs2-team-9565","team1Name":"Aurora","team2Name":"Vitality","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565","lastSyncedAt":"2026-09-23T03:07:06.893Z","lastVerified":"2026-09-23T03:07:06.893Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":null,"prizePool":5000008,"currency":"USD","tier":"A","prestigeScore":75,"status":"completed","region":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","eventId":"cs2-event-8057","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-11861","name":"Aurora","slug":"aurora","teamTag":"AURORA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cf72686d65237eb4fe4365d8070d068.webp","countryName":"Türkiye","countryCode":"TR","worldRanking":9},"team2":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","worldRanking":2,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"maps":[{"id":"cs2-match-2398108-map-1","matchId":"cs2-match-2398108","mapNumber":1,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[3,1],"team2Halves":[9,4],"winnerTeamId":"cs2-team-9565","durationRounds":17,"lastSyncedAt":"2026-09-22T19:46:26.632Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398108-map-2","matchId":"cs2-match-2398108","mapNumber":2,"mapName":"Inferno","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[7,6],"team2Halves":[5,6],"winnerTeamId":"cs2-team-11861","durationRounds":24,"lastSyncedAt":"2026-09-22T19:46:37.002Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}},{"entityType":"cs2_match","id":"cs2-match-2398107","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T12:00:00.000Z","endsAt":null,"bestOf":3,"status":"completed","team1Id":"cs2-team-9565","team2Id":"cs2-team-8297","team1Name":"Vitality","team2Name":"FURIA","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-9565","lastSyncedAt":"2026-09-23T03:03:45.610Z","lastVerified":"2026-09-23T03:03:45.610Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":null,"prizePool":5000008,"currency":"USD","tier":"A","prestigeScore":75,"status":"completed","region":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","eventId":"cs2-event-8057","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","worldRanking":2,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"team2":{"id":"cs2-team-8297","name":"FURIA","slug":"furia","teamTag":"FURIA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/ae2903ad6662885facbfedf1183a1b22.svg","countryName":"Brazil","countryCode":"BR","worldRanking":4},"maps":[{"id":"cs2-match-2398107-map-1","matchId":"cs2-match-2398107","mapNumber":1,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,1],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:43.662Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},{"id":"cs2-match-2398107-map-2","matchId":"cs2-match-2398107","mapNumber":2,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,4],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:52.776Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}}}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}],"meta":{"count":2,"total":271,"limit":2,"page":1,"hasMore":true,"type":"all","totalPages":136,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/upcoming":{"get":{"summary":"Team upcoming matches","description":"A team's scheduled matches.","operationId":"getCs2TeamsTeamIdOrSlugUpcoming","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 50; larger values are reduced to 50.","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Team upcoming matches","content":{"application/json":{"example":{"success":true,"data":[],"meta":{"count":0,"type":"upcoming","limit":0,"total":0,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/upcoming-matches":{"get":{"summary":"Team upcoming matches","description":"A team's scheduled matches.\n\nSame response as `GET /api/v1/cs2/teams/{teamIdOrSlug}/upcoming`.","operationId":"getCs2TeamsTeamIdOrSlugUpcomingMatches","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 50; larger values are reduced to 50.","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Team upcoming matches"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/teams/{teamIdOrSlug}/upcoming"}},"/cs2/teams/{teamIdOrSlug}/results":{"get":{"summary":"Team results","description":"A team's finished matches, newest first.","operationId":"getCs2TeamsTeamIdOrSlugResults","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":20}}],"responses":{"200":{"description":"Team results","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_match","id":"cs2-match-2398108","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T18:49:47.000Z","endsAt":null,"bestOf":5,"status":"completed","team1Id":"cs2-team-11861","team2Id":"cs2-team-9565","team1Name":"Aurora","team2Name":"Vitality","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565","lastSyncedAt":"2026-09-23T03:07:06.893Z","lastVerified":"2026-09-23T03:07:06.893Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":null,"prizePool":5000008,"currency":"USD","tier":"A","prestigeScore":75,"status":"completed","region":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","eventId":"cs2-event-8057","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-11861","name":"Aurora","slug":"aurora","teamTag":"AURORA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cf72686d65237eb4fe4365d8070d068.webp","countryName":"Türkiye","countryCode":"TR","worldRanking":9},"team2":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","worldRanking":2,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"maps":[{"id":"cs2-match-2398108-map-1","matchId":"cs2-match-2398108","mapNumber":1,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[3,1],"team2Halves":[9,4],"winnerTeamId":"cs2-team-9565","durationRounds":17,"lastSyncedAt":"2026-09-22T19:46:26.632Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398108-map-2","matchId":"cs2-match-2398108","mapNumber":2,"mapName":"Inferno","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[7,6],"team2Halves":[5,6],"winnerTeamId":"cs2-team-11861","durationRounds":24,"lastSyncedAt":"2026-09-22T19:46:37.002Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}},{"entityType":"cs2_match","id":"cs2-match-2398107","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T12:00:00.000Z","endsAt":null,"bestOf":3,"status":"completed","team1Id":"cs2-team-9565","team2Id":"cs2-team-8297","team1Name":"Vitality","team2Name":"FURIA","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-9565","lastSyncedAt":"2026-09-23T03:03:45.610Z","lastVerified":"2026-09-23T03:03:45.610Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":null,"prizePool":5000008,"currency":"USD","tier":"A","prestigeScore":75,"status":"completed","region":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","eventId":"cs2-event-8057","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","worldRanking":2,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"team2":{"id":"cs2-team-8297","name":"FURIA","slug":"furia","teamTag":"FURIA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/ae2903ad6662885facbfedf1183a1b22.svg","countryName":"Brazil","countryCode":"BR","worldRanking":4},"maps":[{"id":"cs2-match-2398107-map-1","matchId":"cs2-match-2398107","mapNumber":1,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,1],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:43.662Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},{"id":"cs2-match-2398107-map-2","matchId":"cs2-match-2398107","mapNumber":2,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,4],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:52.776Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{},"teamStats":[],"roundEvents":[]},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}}}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}],"meta":{"count":2,"type":"recent","limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/recent":{"get":{"summary":"Team results","description":"A team's finished matches, newest first.\n\nSame response as `GET /api/v1/cs2/teams/{teamIdOrSlug}/results`.","operationId":"getCs2TeamsTeamIdOrSlugRecent","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":20}}],"responses":{"200":{"description":"Team results"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/teams/{teamIdOrSlug}/results"}},"/cs2/teams/{teamIdOrSlug}/trends":{"get":{"summary":"Team trends","description":"A team's form over time: win rate and rating by period.","operationId":"getCs2TeamsTeamIdOrSlugTrends","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Team trends","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_team_performance_trends","teamId":"cs2-team-9565","teamName":"Vitality","dataAvailable":true,"trends":[{"trendKey":"career:source-team-9565","teamId":"cs2-team-9565","teamName":"Vitality","windowType":"career","periodStart":null,"periodEnd":"2026-07-10T01:57:53.312Z","matches":30,"matchWins":25,"matchLosses":5,"maps":109,"mapWins":59,"mapLosses":15,"mapsDecided":74,"mapsUnresolved":35,"winRate":0.8333,"mapWinPercent":0.7973,"mapWinPercentBasis":"decided_maps","roundsFor":940,"roundsAgainst":677,"opponentDifficulty":null,"recentForm":{"sourceEndpoint":"/api/v1/cs2/teams/{teamId}/form"},"mapStats":{"sourceEndpoint":"/api/v1/cs2/teams/{teamId}/map-stats"},"source":"computed_from_matches","computedAt":"2026-07-10T01:57:53.312Z"},{"trendKey":"last_30_days:source-team-9565","teamId":"cs2-team-9565","teamName":"Vitality","windowType":"last_30_days","periodStart":"2026-06-10T01:57:53.312Z","periodEnd":"2026-07-10T01:57:53.312Z","matches":5,"matchWins":3,"matchLosses":2,"maps":19,"mapWins":8,"mapLosses":6,"mapsDecided":14,"mapsUnresolved":5,"winRate":0.6,"mapWinPercent":0.5714,"mapWinPercentBasis":"decided_maps","roundsFor":158,"roundsAgainst":135,"opponentDifficulty":null,"recentForm":{"sourceEndpoint":"/api/v1/cs2/teams/{teamId}/form"},"mapStats":{"sourceEndpoint":"/api/v1/cs2/teams/{teamId}/map-stats"},"source":"computed_from_matches","computedAt":"2026-07-10T01:57:53.312Z"}]},"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/stats":{"get":{"summary":"Team stats","description":"Aggregate team stats over a recent window.","operationId":"getCs2TeamsTeamIdOrSlugStats","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}}],"responses":{"200":{"description":"Team stats","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_team_stats","teamId":"cs2-team-9565","matches":249,"wins":196,"losses":53,"winRate":0.7871485943775101,"maps":825,"mapWinRates":[{"mapName":"Mirage","played":140,"wins":76,"winRate":0.5428571428571428,"isUnknownMap":false,"unavailableReason":null,"mapNameCanonical":"Mirage","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png"},{"mapName":"Inferno","played":134,"wins":81,"winRate":0.6044776119402985,"isUnknownMap":false,"unavailableReason":null,"mapNameCanonical":"Inferno","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/inferno.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/inferno.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/inferno.png"}],"unknownMapCount":93,"averageRating":1.1472251655629138,"recentForm":[{"matchId":"cs2-match-2398108","opponentId":"cs2-team-11861","opponentName":"Aurora","result":"W","startsAt":"2026-09-20T18:49:47.000Z","score":{"team1":1,"team2":3}},{"matchId":"cs2-match-2398107","opponentId":"cs2-team-8297","opponentName":"FURIA","result":"W","startsAt":"2026-09-20T12:00:00.000Z","score":{"team1":2,"team2":0}}],"ctT":{"ctRounds":null,"ctWins":null,"ctWinPercent":null,"tRounds":null,"tWins":null,"tWinPercent":null,"source":null},"economy":{"pistolRounds":null,"pistolWins":null,"pistolWinPercent":null,"ecoRounds":null,"ecoWins":null,"ecoWinPercent":null,"forceRounds":null,"forceWins":null,"forceWinPercent":null,"fullBuyRounds":null,"fullBuyWins":null,"fullBuyWinPercent":null,"source":null},"dataAvailable":true,"unavailableReason":null},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/maps":{"get":{"summary":"Team maps","description":"Maps from a team's matches, one row per map (played or scheduled) with score, halves and winner.","operationId":"getCs2TeamsTeamIdOrSlugMaps","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Team maps","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_map","id":"cs2-match-2387547-map-4","matchId":"cs2-match-2387547","mapNumber":4,"mapName":null,"status":"completed","team1Score":null,"team2Score":null,"team1Halves":null,"team2Halves":null,"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-23T03:07:48.344Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"availableSubresources":[],"unavailableSubresources":["player_stats","objective_stats"],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-23T03:07:48.344Z","mapNameCanonical":null,"imageUrl":null,"coverImageUrl":null,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}},{"entityType":"cs2_map","id":"cs2-match-2387547-map-3","matchId":"cs2-match-2387547","mapNumber":3,"mapName":"Mirage","status":"completed","team1Score":13,"team2Score":16,"team1Halves":[5,7],"team2Halves":[7,5],"winnerTeamId":"cs2-team-9565","durationRounds":29,"lastSyncedAt":"2026-09-23T03:07:48.072Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png","pickTeamId":null,"objectiveStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[]},"availableSubresources":[],"unavailableSubresources":["player_stats","objective_stats"],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-23T03:07:48.072Z","mapNameCanonical":"Mirage","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/mirage.png","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}],"meta":{"count":2,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/map-pool":{"get":{"summary":"Team maps","description":"Maps from a team's matches, one row per map (played or scheduled) with score, halves and winner.\n\nSame response as `GET /api/v1/cs2/teams/{teamIdOrSlug}/maps`.","operationId":"getCs2TeamsTeamIdOrSlugMapPool","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Team maps"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/teams/{teamIdOrSlug}/maps"}},"/cs2/teams/{teamIdOrSlug}/form":{"get":{"summary":"Team form","description":"A team's last results as a W/L sequence with scores.","operationId":"getCs2TeamsTeamIdOrSlugForm","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 50; larger values are reduced to 50.","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"Team form","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_team_form","teamId":"cs2-team-9565","teamName":"Vitality","window":2,"record":{"wins":2,"losses":0,"unknown":0,"winPercent":100},"matches":[{"matchId":"cs2-match-2398108","status":"completed","startsAt":"2026-09-20T18:49:47.000Z","eventName":"StarLadder StarSeries Fall 2026","bestOf":null,"opponentId":"cs2-team-11861","opponentName":"Aurora","teamScore":3,"opponentScore":1,"score":"3-1","result":"W","maps":[{"mapId":"cs2-match-2398108-map-1","mapNumber":1,"mapName":"Anubis","status":"completed","teamScore":13,"opponentScore":4,"score":"13-4","result":"W","winnerTeamId":"cs2-team-9565","roundsFor":13,"roundsAgainst":4},{"mapId":"cs2-match-2398108-map-2","mapNumber":2,"mapName":"Inferno","status":"completed","teamScore":11,"opponentScore":13,"score":"11-13","result":"L","winnerTeamId":"cs2-team-11861","roundsFor":11,"roundsAgainst":13}]},{"matchId":"cs2-match-2398107","status":"completed","startsAt":"2026-09-20T12:00:00.000Z","eventName":"StarLadder StarSeries Fall 2026","bestOf":null,"opponentId":"cs2-team-8297","opponentName":"FURIA","teamScore":2,"opponentScore":0,"score":"2-0","result":"W","maps":[{"mapId":"cs2-match-2398107-map-1","mapNumber":1,"mapName":"Cache","status":"completed","teamScore":null,"opponentScore":null,"score":null,"result":"unknown","winnerTeamId":null,"roundsFor":null,"roundsAgainst":null},{"mapId":"cs2-match-2398107-map-2","mapNumber":2,"mapName":"Anubis","status":"completed","teamScore":null,"opponentScore":null,"score":null,"result":"unknown","winnerTeamId":null,"roundsFor":null,"roundsAgainst":null}]}],"dataAvailable":true},"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/map-stats":{"get":{"summary":"Team map stats","description":"Per-map win rate, rounds and pick/ban tendencies.","operationId":"getCs2TeamsTeamIdOrSlugMapStats","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":250}},{"name":"windowDays","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Team map stats","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_team_map_stats","teamId":"cs2-team-9565","teamName":"Vitality","matchWindow":2,"windowDays":null,"totalMaps":8,"totalMapWins":3,"mapWinPercent":37.5,"sideEconomy":{"dataAvailable":false,"unavailableReason":"being_recomputed","message":"Side and buy-type round win rates are being recomputed and are not available yet.","ctRounds":null,"ctWins":null,"ctWinPercent":null,"tRounds":null,"tWins":null,"tWinPercent":null,"pistolRounds":null,"pistolWins":null,"pistolWinPercent":null,"ecoRounds":null,"ecoWins":null,"ecoWinPercent":null,"forceRounds":null,"forceWins":null,"forceWinPercent":null,"fullBuyRounds":null,"fullBuyWins":null,"fullBuyWinPercent":null,"source":null},"maps":[{"mapName":"Anubis","played":2,"wins":1,"losses":0,"ties":1,"roundsFor":13,"roundsAgainst":4,"latestPlayedAt":"2026-09-20T18:49:47.000Z","isUnknownMap":false,"unavailableReason":null,"mapNameCanonical":"Anubis","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/anubis.png","pickPercent":25,"winPercent":50,"lossPercent":0,"roundDifferential":9,"avgRoundsFor":6.5,"avgRoundsAgainst":2},{"mapName":"Cache","played":2,"wins":1,"losses":0,"ties":1,"roundsFor":13,"roundsAgainst":7,"latestPlayedAt":"2026-09-20T18:49:47.000Z","isUnknownMap":false,"unavailableReason":null,"mapNameCanonical":"Cache","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/cache.png","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/cache.png","coverImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/maps/cache.png","pickPercent":25,"winPercent":50,"lossPercent":0,"roundDifferential":6,"avgRoundsFor":6.5,"avgRoundsAgainst":3.5}],"dataAvailable":true},"meta":{"count":5,"dataAvailable":true,"limit":5,"total":5,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/vs/{opponentIdOrSlug}":{"get":{"summary":"Team head-to-head","description":"Record and past matches between two teams.","operationId":"getCs2TeamsTeamIdOrSlugVsOpponentIdOrSlug","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"opponentIdOrSlug","in":"path","required":true,"description":"Opponent team id or slug.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}}],"responses":{"200":{"description":"Team head-to-head","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_team_h2h","team":{"id":"cs2-team-9565","name":"Vitality"},"opponent":{"id":"cs2-team-7020","name":"Spirit"},"totalMatches":2,"matchRecord":{"teamWins":2,"opponentWins":0,"teamWinPercent":100,"opponentWinPercent":0},"mapRecord":{"teamWins":5,"opponentWins":0,"totalDecidedMaps":5,"teamWinPercent":100,"opponentWinPercent":0},"mapBreakdown":[{"mapName":"Mirage","played":2,"teamWins":2,"opponentWins":0,"teamWinPercent":100,"opponentWinPercent":0,"roundsFor":35,"roundsAgainst":30,"roundDifferential":5},{"mapName":"Dust2","played":2,"teamWins":2,"opponentWins":0,"teamWinPercent":100,"opponentWinPercent":0,"roundsFor":26,"roundsAgainst":13,"roundDifferential":13}],"recent5Matches":[{"matchId":"cs2-match-2393245","status":"completed","startsAt":"2026-04-19T17:00:00.000Z","eventName":"IEM Rio 2026","bestOf":3,"opponentId":"cs2-team-7020","opponentName":"Spirit","teamScore":3,"opponentScore":0,"score":"3-0","result":"W","maps":[{"mapId":"cs2-match-2393245-map-1","mapNumber":1,"mapName":"Mirage","status":"completed","teamScore":16,"opponentScore":13,"score":"16-13","result":"W","winnerTeamId":"cs2-team-9565","roundsFor":16,"roundsAgainst":13},{"mapId":"cs2-match-2393245-map-2","mapNumber":2,"mapName":"Nuke","status":"completed","teamScore":13,"opponentScore":10,"score":"13-10","result":"W","winnerTeamId":"cs2-team-9565","roundsFor":13,"roundsAgainst":10}]},{"matchId":"cs2-match-2388128","status":"completed","startsAt":"2025-12-13T16:00:00.000Z","eventName":"StarLadder Budapest Major 2025","bestOf":null,"opponentId":"cs2-team-7020","opponentName":"Spirit","teamScore":2,"opponentScore":0,"score":"2-0","result":"W","maps":[{"mapId":"cs2-match-2388128-map-1","mapNumber":1,"mapName":"Mirage","status":"completed","teamScore":19,"opponentScore":17,"score":"19-17","result":"W","winnerTeamId":"cs2-team-9565","roundsFor":19,"roundsAgainst":17},{"mapId":"cs2-match-2388128-map-2","mapNumber":2,"mapName":"Dust2","status":"completed","teamScore":13,"opponentScore":8,"score":"13-8","result":"W","winnerTeamId":"cs2-team-9565","roundsFor":13,"roundsAgainst":8}]}],"matches":[{"matchId":"cs2-match-2393245","status":"completed","startsAt":"2026-04-19T17:00:00.000Z","eventName":"IEM Rio 2026","bestOf":3,"opponentId":"cs2-team-7020","opponentName":"Spirit","teamScore":3,"opponentScore":0,"score":"3-0","result":"W","maps":[{"mapId":"cs2-match-2393245-map-1","mapNumber":1,"mapName":"Mirage","status":"completed","teamScore":16,"opponentScore":13,"score":"16-13","result":"W","winnerTeamId":"cs2-team-9565","roundsFor":16,"roundsAgainst":13},{"mapId":"cs2-match-2393245-map-2","mapNumber":2,"mapName":"Nuke","status":"completed","teamScore":13,"opponentScore":10,"score":"13-10","result":"W","winnerTeamId":"cs2-team-9565","roundsFor":13,"roundsAgainst":10}]},{"matchId":"cs2-match-2388128","status":"completed","startsAt":"2025-12-13T16:00:00.000Z","eventName":"StarLadder Budapest Major 2025","bestOf":null,"opponentId":"cs2-team-7020","opponentName":"Spirit","teamScore":2,"opponentScore":0,"score":"2-0","result":"W","maps":[{"mapId":"cs2-match-2388128-map-1","mapNumber":1,"mapName":"Mirage","status":"completed","teamScore":19,"opponentScore":17,"score":"19-17","result":"W","winnerTeamId":"cs2-team-9565","roundsFor":19,"roundsAgainst":17},{"mapId":"cs2-match-2388128-map-2","mapNumber":2,"mapName":"Dust2","status":"completed","teamScore":13,"opponentScore":8,"score":"13-8","result":"W","winnerTeamId":"cs2-team-9565","roundsFor":13,"roundsAgainst":8}]}],"dataAvailable":true},"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams/{teamIdOrSlug}/h2h/{opponentIdOrSlug}":{"get":{"summary":"Team head-to-head","description":"Record and past matches between two teams.\n\nSame response as `GET /api/v1/cs2/teams/{teamIdOrSlug}/vs/{opponentIdOrSlug}`.","operationId":"getCs2TeamsTeamIdOrSlugH2hOpponentIdOrSlug","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"opponentIdOrSlug","in":"path","required":true,"description":"Opponent team id or slug.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}}],"responses":{"200":{"description":"Team head-to-head"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/teams/{teamIdOrSlug}/vs/{opponentIdOrSlug}"}},"/cs2/h2h/pairs":{"get":{"summary":"Head-to-head pairs","description":"Team pairs that have played each other, for building head-to-head pages.","operationId":"getCs2H2hPairs","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 500; larger values are reduced to 500.","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"minMeetings","in":"query","required":false,"description":"Filter by `minMeetings`.","schema":{"type":"string"}},{"name":"min_meetings","in":"query","required":false,"description":"Filter by `min_meetings`.","schema":{"type":"string"}},{"name":"windowDays","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}},{"name":"window_days","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Head-to-head pairs","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_h2h_pair","pairs":[{"teamA":{"id":"cs2-team-4494","name":"MOUZ","slug":"mouz"},"teamB":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality"},"meetings":17,"lastMeetingAt":"2026-09-05T16:45:00.000Z"},{"teamA":{"id":"cs2-team-8113","name":"Sharks","slug":"team-8113"},"teamB":{"id":"cs2-team-9996","name":"9z","slug":"9z"},"meetings":17,"lastMeetingAt":"2026-05-27T16:45:00.000Z"}],"dataAvailable":true},"meta":{"count":2,"limit":2,"minMeetings":2,"windowDays":730,"dataAvailable":true,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/teams/{teamIdOrSlug}":{"get":{"summary":"Team details","description":"One team: name, logo, country, region, world ranking and current roster.","operationId":"getCs2TeamsTeamIdOrSlug","tags":["CS2"],"parameters":[{"name":"teamIdOrSlug","in":"path","required":true,"description":"Team id (`cs2-team-7020`) or slug (`spirit`).","schema":{"type":"string"}},{"name":"recentLimit","in":"query","required":false,"description":"Filter by `recentLimit`.","schema":{"type":"string"}},{"name":"recent_limit","in":"query","required":false,"description":"Filter by `recent_limit`.","schema":{"type":"string"}},{"name":"upcomingLimit","in":"query","required":false,"description":"Filter by `upcomingLimit`.","schema":{"type":"string"}},{"name":"upcoming_limit","in":"query","required":false,"description":"Filter by `upcoming_limit`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Team details","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_team","id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","roster":[{"teamId":"cs2-team-9565","teamName":null,"playerId":"cs2-player-11893","playerNickname":"ZywOo","playerName":"Mathieu Herbaut","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp","playerSlug":"zywoo","countryName":"France","countryCode":"FR","age":25,"rating":1.31,"mapsPlayed":167,"role":"AWPer","fromAt":"2018-10-01T12:00:00.000Z","toAt":null,"isActive":true,"tenureKnown":true,"tenureUnavailableReason":null,"lastSyncedAt":"2026-09-23T00:11:42.818Z"},{"teamId":"cs2-team-9565","teamName":null,"playerId":"cs2-player-9086","playerNickname":"XTQZZZ","playerName":"Rémy Quoniam","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b689e77e923fa8285d5fd19cd911b6b0.webp","playerSlug":"xtqzzz","countryName":"France","countryCode":"FR","age":37,"rating":0,"mapsPlayed":null,"role":"coach","fromAt":null,"toAt":null,"isActive":true,"tenureKnown":false,"tenureUnavailableReason":"source_join_date_unavailable","lastSyncedAt":"2026-09-23T00:11:42.387Z"}],"recentResults":[{"entityType":"cs2_match","id":"cs2-match-2398108","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T18:49:47.000Z","endsAt":null,"bestOf":5,"status":"completed","team1Id":"cs2-team-11861","team2Id":"cs2-team-9565","team1Name":"Aurora","team2Name":"Vitality","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565","lastSyncedAt":"2026-09-23T03:07:06.893Z","lastVerified":"2026-09-23T03:07:06.893Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":null,"prizePool":5000008,"currency":"USD","tier":"A","prestigeScore":75,"status":"completed","region":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","eventId":"cs2-event-8057","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-11861","name":"Aurora","slug":"aurora","teamTag":"AURORA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cf72686d65237eb4fe4365d8070d068.webp","countryName":"Türkiye","countryCode":"TR","worldRanking":9},"team2":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","worldRanking":2,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"maps":[{"id":"cs2-match-2398108-map-1","matchId":"cs2-match-2398108","mapNumber":1,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[3,1],"team2Halves":[9,4],"winnerTeamId":"cs2-team-9565","durationRounds":17,"lastSyncedAt":"2026-09-22T19:46:26.632Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{},"scorePending":true},{"id":"cs2-match-2398108-map-2","matchId":"cs2-match-2398108","mapNumber":2,"mapName":"Inferno","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[7,6],"team2Halves":[5,6],"winnerTeamId":"cs2-team-11861","durationRounds":24,"lastSyncedAt":"2026-09-22T19:46:37.002Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}},{"entityType":"cs2_match","id":"cs2-match-2398107","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T12:00:00.000Z","endsAt":null,"bestOf":3,"status":"completed","team1Id":"cs2-team-9565","team2Id":"cs2-team-8297","team1Name":"Vitality","team2Name":"FURIA","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-9565","lastSyncedAt":"2026-09-23T03:03:45.610Z","lastVerified":"2026-09-23T03:03:45.610Z","confidence":"high","event":{"id":"cs2-event-8057","name":"StarLadder StarSeries Fall 2026","slug":"starladder-starseries-fall-2026","imageUrl":null,"prizePool":5000008,"currency":"USD","tier":"A","prestigeScore":75,"status":"completed","region":null,"startsAt":"2026-09-17T10:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","eventId":"cs2-event-8057","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","worldRanking":2,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"team2":{"id":"cs2-team-8297","name":"FURIA","slug":"furia","teamTag":"FURIA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/ae2903ad6662885facbfedf1183a1b22.svg","countryName":"Brazil","countryCode":"BR","worldRanking":4},"maps":[{"id":"cs2-match-2398107-map-1","matchId":"cs2-match-2398107","mapNumber":1,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,1],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:43.662Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{}},{"id":"cs2-match-2398107-map-2","matchId":"cs2-match-2398107","mapNumber":2,"mapName":"Anubis","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8,5],"team2Halves":[4,4],"winnerTeamId":null,"durationRounds":null,"lastSyncedAt":"2026-09-22T19:47:52.776Z","mapImageUrl":null,"pickTeamId":null,"objectiveStats":{},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{}}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps"],"unavailableSubresources":["player_stats","live_state"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}],"upcomingMatches":[],"rankingHistory":[{"date":"2026-09-07","rank":4},{"date":"2026-09-07","rank":5}],"rankingDevelopment":[{"date":"2026-09-07","rank":4},{"date":"2026-09-07","rank":5}],"achievements":[{"type":"trophy","title":"StarLadder StarSeries Fall 2026","eventId":"cs2-event-8057","eventUrl":null,"imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","trophyIndex":0},{"type":"trophy","title":"BLAST Rivals 2026 Season 1","eventId":"cs2-event-8250","eventUrl":null,"imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/feaa79d30cefd055fc644728d87a35b7.webp","trophyIndex":1}],"trophies":[{"type":"trophy","title":"StarLadder StarSeries Fall 2026","eventId":"cs2-event-8057","eventUrl":null,"imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","trophyIndex":0},{"type":"trophy","title":"BLAST Rivals 2026 Season 1","eventId":"cs2-event-8250","eventUrl":null,"imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/feaa79d30cefd055fc644728d87a35b7.webp","trophyIndex":1}],"newsLinks":[{"url":null,"date":"21/9","title":"Short: Media: jL on standby for EPL S24","sourceContext":"source_team_mentions"},{"url":null,"date":"20/9","title":"ZywOo: \"It's crazy to say it's been a while for us to win a trophy\"","sourceContext":"source_team_mentions"}],"rosterStatus":"complete","noActivePlayers":false,"unknownRosterSlots":0,"partialRoster":false,"activePlayerCount":5,"coachCount":1,"rosterTenureKnown":false,"rosterTenureUnavailableReason":"source_join_date_unavailable","activePlayers":[{"teamId":null,"teamName":null,"playerId":null,"playerNickname":null,"playerName":null,"playerImageUrl":null,"playerSlug":null,"countryName":null,"countryCode":null,"age":null,"rating":null,"mapsPlayed":null,"role":"AWPer","fromAt":"2018-10-01T12:00:00.000Z","toAt":null,"isActive":true,"tenureKnown":true,"tenureUnavailableReason":null},{"teamId":null,"teamName":null,"playerId":null,"playerNickname":null,"playerName":null,"playerImageUrl":null,"playerSlug":null,"countryName":null,"countryCode":null,"age":null,"rating":null,"mapsPlayed":null,"role":"entry","fromAt":"2023-06-01T12:00:00.000Z","toAt":null,"isActive":true,"tenureKnown":true,"tenureUnavailableReason":null}],"coaches":[{"teamId":null,"teamName":null,"playerId":null,"playerNickname":null,"playerName":null,"playerImageUrl":null,"playerSlug":null,"countryName":null,"countryCode":null,"age":null,"rating":null,"mapsPlayed":null,"role":"coach","fromAt":null,"toAt":null,"isActive":true,"tenureKnown":false,"tenureUnavailableReason":"source_join_date_unavailable"}],"coach":{"teamId":null,"teamName":null,"playerId":null,"playerNickname":null,"playerName":null,"playerImageUrl":null,"playerSlug":null,"countryName":null,"countryCode":null,"age":null,"rating":null,"mapsPlayed":null,"role":"coach","fromAt":null,"toAt":null,"isActive":true,"tenureKnown":false,"tenureUnavailableReason":"source_join_date_unavailable"},"valveRanking":3,"socialLinks":[{"url":"https://www.twitter.com/i/user/1603687711","platform":"x"},{"url":"https://www.twitch.tv/vitality","platform":"twitch"}],"availableSubresources":["roster","matches"],"unavailableSubresources":["upcoming_matches"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/teams":{"get":{"summary":"List teams","description":"Teams ordered by world ranking, with logo, country and roster. `compact=true` returns lighter rows.","operationId":"getCs2Teams","tags":["CS2"],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated list of fields to return.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"q","in":"query","required":false,"description":"Search text.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"Search text.","schema":{"type":"string"}},{"name":"summary","in":"query","required":false,"description":"`true` returns a summary instead of full rows.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"List teams","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_team","id":"cs2-team-7020","name":"Spirit","slug":"spirit","teamTag":"SPIRIT","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/608894028d96779c209b2fb4c03da37c.webp","countryName":"Russia","countryCode":"RU","region":"Europe","worldRanking":1,"lastSyncedAt":"2026-09-23T03:11:27.600Z","lastVerified":"2026-09-23T03:11:27.600Z","confidence":"high","roster":[{"teamId":"cs2-team-7020","teamName":"Spirit","playerId":"cs2-player-16920","playerNickname":"sh1ro","playerName":"Dmitry Sokolov","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7f5bf023e498d2d07c3a9a59335da3c4.webp","playerSlug":"sh1ro","countryName":"Russia","countryCode":"RU","age":24,"rating":1.17,"mapsPlayed":136,"role":"AWPer","fromAt":"2023-12-01T12:00:00.000Z","toAt":null,"isActive":true,"tenureKnown":true,"tenureUnavailableReason":null,"lastSyncedAt":"2026-09-23T00:11:32.540Z"},{"teamId":"cs2-team-7020","teamName":"Spirit","playerId":"cs2-player-2154","playerNickname":"hally","playerName":"Sergey Shavaev","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/445dd6783047f7e0191ccedacc007ac8.png","playerSlug":"hally","countryName":"Russia","countryCode":"RU","age":33,"rating":0,"mapsPlayed":null,"role":"coach","fromAt":null,"toAt":null,"isActive":true,"tenureKnown":false,"tenureUnavailableReason":"source_join_date_unavailable","lastSyncedAt":"2026-09-23T00:11:30.998Z"}],"rankingHistoryCount":180,"rankingDevelopmentCount":180,"trophiesCount":12,"achievementsCount":12,"newsLinksCount":10,"heavyFieldsOmitted":["rankingHistory","rankingDevelopment"],"heavyFieldsAvailableAt":"/api/v1/cs2/teams/spirit","rosterStatus":"complete","noActivePlayers":false,"unknownRosterSlots":0,"partialRoster":false,"activePlayerCount":5,"coachCount":1,"rosterTenureKnown":false,"rosterTenureUnavailableReason":"source_join_date_unavailable","coach":{"teamId":"cs2-team-7020","teamName":null,"playerId":"cs2-player-2154","playerNickname":"hally","playerName":"Sergey Shavaev","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/445dd6783047f7e0191ccedacc007ac8.png","playerSlug":"hally","countryName":"Russia","countryCode":"RU","age":33,"rating":0,"mapsPlayed":null,"role":"coach","fromAt":null,"toAt":null,"isActive":true,"tenureKnown":false,"tenureUnavailableReason":"source_join_date_unavailable","lastSyncedAt":"2026-09-23T00:11:30.998Z"},"valveRanking":1,"socialLinks":[{"url":"https://www.twitter.com/i/user/3814210037","platform":"x"},{"url":"https://www.instagram.com/team__spirit","platform":"instagram"}],"availableSubresources":["roster","matches"],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp"},{"entityType":"cs2_team","id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","roster":[{"teamId":"cs2-team-9565","teamName":"Vitality","playerId":"cs2-player-11893","playerNickname":"ZywOo","playerName":"Mathieu Herbaut","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp","playerSlug":"zywoo","countryName":"France","countryCode":"FR","age":25,"rating":1.31,"mapsPlayed":167,"role":"AWPer","fromAt":"2018-10-01T12:00:00.000Z","toAt":null,"isActive":true,"tenureKnown":true,"tenureUnavailableReason":null,"lastSyncedAt":"2026-09-23T00:11:42.818Z"},{"teamId":"cs2-team-9565","teamName":"Vitality","playerId":"cs2-player-9086","playerNickname":"XTQZZZ","playerName":"Rémy Quoniam","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b689e77e923fa8285d5fd19cd911b6b0.webp","playerSlug":"xtqzzz","countryName":"France","countryCode":"FR","age":37,"rating":0,"mapsPlayed":null,"role":"coach","fromAt":null,"toAt":null,"isActive":true,"tenureKnown":false,"tenureUnavailableReason":"source_join_date_unavailable","lastSyncedAt":"2026-09-23T00:11:42.387Z"}],"rankingHistoryCount":180,"rankingDevelopmentCount":180,"trophiesCount":28,"achievementsCount":28,"newsLinksCount":10,"heavyFieldsOmitted":["rankingHistory","rankingDevelopment"],"heavyFieldsAvailableAt":"/api/v1/cs2/teams/vitality","rosterStatus":"complete","noActivePlayers":false,"unknownRosterSlots":0,"partialRoster":false,"activePlayerCount":5,"coachCount":1,"rosterTenureKnown":false,"rosterTenureUnavailableReason":"source_join_date_unavailable","coach":{"teamId":"cs2-team-9565","teamName":null,"playerId":"cs2-player-9086","playerNickname":"XTQZZZ","playerName":"Rémy Quoniam","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b689e77e923fa8285d5fd19cd911b6b0.webp","playerSlug":"xtqzzz","countryName":"France","countryCode":"FR","age":37,"rating":0,"mapsPlayed":null,"role":"coach","fromAt":null,"toAt":null,"isActive":true,"tenureKnown":false,"tenureUnavailableReason":"source_join_date_unavailable","lastSyncedAt":"2026-09-23T00:11:42.387Z"},"valveRanking":3,"socialLinks":[{"url":"https://www.twitter.com/i/user/1603687711","platform":"x"},{"url":"https://www.twitch.tv/vitality","platform":"twitch"}],"availableSubresources":["roster","matches"],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"}],"meta":{"page":1,"limit":2,"total":4194,"count":2,"totalPages":2097,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/players/search":{"get":{"summary":"Search players","description":"Find players by nickname or real name. Requires `q`.","operationId":"getCs2PlayersSearch","tags":["CS2"],"parameters":[{"name":"q","in":"query","required":true,"description":"Search text.","schema":{"type":"string"}}],"responses":{"200":{"description":"Search players","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_player","id":"cs2-player-11893","nickname":"ZywOo","slug":"zywoo","realName":"Mathieu Herbaut","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp","countryName":"France","countryCode":"FR","age":25,"rating":1.31,"mapsPlayed":167,"careerStats":{"rating":1.31,"lastKnownRating":1.31},"currentTeamId":"cs2-team-9565","status":"active","primaryRole":"AWPer","roleConfidence":"high","statusUpdatedAt":"2026-09-23T00:11:42.818Z","lastSyncedAt":"2026-09-23T00:11:41.857Z","lastVerified":"2026-09-23T00:11:41.857Z","availableSubresources":["stats","matches"],"unavailableSubresources":["teams","weapons"],"unavailableFields":{},"dataQuality":"complete","confidence":"high","confidenceScore":0.95}],"meta":{"query":"zywoo","count":1,"limit":1,"total":1,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/players/{playerIdOrSlug}/career":{"get":{"summary":"Player career","description":"A player's career totals and team history.","operationId":"getCs2PlayersPlayerIdOrSlugCareer","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"include","in":"query","required":false,"description":"Filter by `include`.","schema":{"type":"string"}},{"name":"includeDemo","in":"query","required":false,"description":"Filter by `includeDemo`.","schema":{"type":"string"}},{"name":"include_demo","in":"query","required":false,"description":"Filter by `include_demo`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Player career","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_career_stats","playerId":"cs2-player-11893","playerNickname":"ZywOo","dataAvailable":true,"totals":{"matches":170,"maps":267,"kills":5031,"deaths":3423,"assists":370,"kdRatio":1.4698,"adr":88.66,"kast":0.7824,"rating":1.3088,"openingKills":243,"openingDeaths":124,"computedAt":"2026-09-23T03:15:31.874Z","clutchAttempts":null,"clutchWins":null,"clutchWinPercent":null,"flashAssists":null,"utilityDamage":null},"clutches":null,"flashAssists":null,"utilityDamage":null,"byTeam":[{"statKey":"team:source-player-11893:source-team-9565","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","periodType":"career","periodStart":"2018-11-18T23:10:00.000Z","periodEnd":"2026-09-20T15:00:00.000Z","eventId":null,"eventName":null,"matches":169,"maps":266,"kills":5014,"deaths":3404,"assists":370,"kdRatio":1.473,"adr":88.68,"kast":0.7828,"rating":1.3099,"openingKills":243,"openingDeaths":124,"consistencyScore":null,"volatilityScore":null,"opponentDifficulty":null,"computedAt":"2026-09-23T03:15:31.874Z"},{"statKey":"team:source-player-11893:source-team-4608","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-4608","teamName":"Natus Vincere","periodType":"career","periodStart":"2023-07-08T17:20:00.000Z","periodEnd":"2023-07-08T17:20:00.000Z","eventId":null,"eventName":null,"matches":1,"maps":1,"kills":17,"deaths":19,"assists":0,"kdRatio":0.8947,"adr":84.2,"kast":0.708,"rating":1.01,"openingKills":0,"openingDeaths":0,"consistencyScore":null,"volatilityScore":null,"opponentDifficulty":null,"computedAt":"2026-09-23T03:15:31.874Z"}]},"meta":{"count":1,"dataAvailable":true,"limit":1,"total":1,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/seasons":{"get":{"summary":"Player seasons","description":"A player's stats by year.","operationId":"getCs2PlayersPlayerIdOrSlugSeasons","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Player seasons","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_season_stats","playerId":"cs2-player-11893","playerNickname":"ZywOo","dataAvailable":true,"seasons":[{"statKey":"year:source-player-11893:2026","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","seasonYear":2026,"periodStart":"2026-02-02T13:00:00.000Z","periodEnd":"2026-09-20T15:00:00.000Z","matches":46,"maps":102,"kills":1818,"deaths":1176,"assists":370,"kdRatio":1.5459,"adr":96.11,"kast":0.7953,"rating":1.2584,"openingKills":243,"openingDeaths":124,"consistencyScore":null,"volatilityScore":null,"source":"match_stats","computedAt":"2026-09-23T03:15:32.102Z"},{"statKey":"year:source-player-11893:2025","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","seasonYear":2025,"periodStart":"2025-01-19T17:30:00.000Z","periodEnd":"2025-11-13T10:00:00.000Z","matches":42,"maps":51,"kills":843,"deaths":657,"assists":0,"kdRatio":1.2831,"adr":82.86,"kast":0.7671,"rating":1.2459,"openingKills":0,"openingDeaths":0,"consistencyScore":null,"volatilityScore":null,"source":"match_stats","computedAt":"2026-09-23T03:15:32.102Z"}]},"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/periods":{"get":{"summary":"Player periods","description":"A player's stats over rolling periods (e.g. last 3 months).","operationId":"getCs2PlayersPlayerIdOrSlugPeriods","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"period_type","in":"query","required":false,"description":"Filter by `period_type`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Player periods","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_period_stats","playerId":"cs2-player-11893","playerNickname":"ZywOo","periodTypeFilter":null,"periods":[{"statKey":"career:source-player-11893:source-team-9565:vitality","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","periodType":"career","periodStart":null,"periodEnd":null,"eventId":null,"eventName":null,"eventTier":null,"region":null,"matches":30,"maps":72,"kills":1409,"deaths":906,"assists":342,"kdRatio":1.5552,"adr":94.67,"kast":0.7997,"rating":1.2049,"openingKills":208,"openingDeaths":114,"consistencyScore":0.6997,"volatilityScore":0.3003,"opponentDifficulty":null,"computedAt":"2026-08-02T12:17:01.773Z"},{"statKey":"career:source-player-11893:none:all","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":null,"teamName":null,"periodType":"career","periodStart":null,"periodEnd":null,"eventId":null,"eventName":null,"eventTier":null,"region":null,"matches":2,"maps":3,"kills":72,"deaths":33,"assists":13,"kdRatio":2.1818,"adr":115.55,"kast":0.8494,"rating":1.296,"openingKills":10,"openingDeaths":4,"consistencyScore":0.8999,"volatilityScore":0.1001,"opponentDifficulty":null,"computedAt":"2026-07-10T18:36:32.013Z"}],"dataAvailable":true},"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/tournaments":{"get":{"summary":"Player tournaments","description":"Events a player has played, with placement and stats.","operationId":"getCs2PlayersPlayerIdOrSlugTournaments","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Player tournaments","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_tournaments","playerId":"cs2-player-11893","playerNickname":"ZywOo","tournaments":[{"eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","eventTier":"A","startsAt":"2026-09-20T00:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e41cca58363bb111170d38a8c053e424.webp","teamId":"cs2-team-9565","teamName":"Vitality","matches":3,"maps":5,"kills":83,"deaths":48,"assists":8,"kdRatio":1.729,"adr":90.64,"kast":0.84,"rating":1.547,"openingKills":12,"openingDeaths":2,"source":"match_stats"},{"eventId":"cs2-event-8249","eventName":"BLAST Open Porto 2026","eventSlug":"blast-open-porto-2026","eventTier":"A","startsAt":"2026-09-06T00:00:00.000Z","endsAt":"2026-09-06T23:59:59.000Z","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/64929ecef4267a000527d5fe1d3f62b1.webp","teamId":"cs2-team-9565","teamName":"Vitality","matches":6,"maps":14,"kills":234,"deaths":179,"assists":12,"kdRatio":1.307,"adr":81.32,"kast":0.74,"rating":1.292,"openingKills":16,"openingDeaths":7,"source":"match_stats"}],"dataAvailable":true},"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/events":{"get":{"summary":"Player tournaments","description":"Events a player has played, with placement and stats.\n\nSame response as `GET /api/v1/cs2/players/{playerIdOrSlug}/tournaments`.","operationId":"getCs2PlayersPlayerIdOrSlugEvents","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Player tournaments"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/players/{playerIdOrSlug}/tournaments"}},"/cs2/players/{playerIdOrSlug}/trends":{"get":{"summary":"Player trends","description":"A player's rating and form over time.","operationId":"getCs2PlayersPlayerIdOrSlugTrends","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"maps","in":"query","required":false,"description":"Filter by `maps`.","schema":{"type":"string"}},{"name":"periods","in":"query","required":false,"description":"Filter by `periods`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Player trends","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_performance_trends","playerId":"cs2-player-11893","playerNickname":"ZywOo","dataAvailable":true,"trends":[{"trendKey":"last_30_days:source-player-11893","playerId":"cs2-player-11893","playerName":"ZywOo","windowType":"last_30_days","periodStart":"2026-06-10T01:57:52.583Z","periodEnd":"2026-07-10T01:57:52.583Z","matches":5,"maps":12,"kills":220,"deaths":139,"assists":57,"kdRatio":1.5827,"adr":97.96,"kast":0.7987,"rating":1.2207,"consistencyScore":0.6844,"volatilityScore":0.3156,"computedAt":"2026-07-10T01:57:52.583Z"},{"trendKey":"last_90_days:source-player-11893","playerId":"cs2-player-11893","playerName":"ZywOo","windowType":"last_90_days","periodStart":"2026-04-11T01:57:52.583Z","periodEnd":"2026-07-10T01:57:52.583Z","matches":20,"maps":50,"kills":950,"deaths":619,"assists":216,"kdRatio":1.5347,"adr":95.4,"kast":0.7963,"rating":1.1959,"consistencyScore":0.6934,"volatilityScore":0.3066,"computedAt":"2026-07-10T01:57:52.583Z"}],"recentMaps":[{"matchId":"cs2-match-2398108","mapId":"cs2-match-2398108-map-3","mapName":"Mirage","startsAt":"2026-09-20T18:49:47.000Z","eventName":"StarLadder StarSeries Fall 2026","teamId":"cs2-team-9565","teamName":"Vitality","opponentName":"Aurora","kills":17,"deaths":7,"assists":null,"adr":98.8,"kast":0.941,"rating":1.63},{"matchId":"cs2-match-2398102","mapId":"cs2-match-2398102-map-1","mapName":"Mirage","startsAt":"2026-09-18T18:35:00.000Z","eventName":"StarLadder StarSeries Fall 2026","teamId":"cs2-team-9565","teamName":"Vitality","opponentName":"FURIA","kills":26,"deaths":13,"assists":1,"adr":null,"kast":null,"rating":1.99}]},"meta":{"periods":2,"recentMaps":20,"dataAvailable":true}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/transfers":{"get":{"summary":"Player transfers","description":"A player's moves between teams.","operationId":"getCs2PlayersPlayerIdOrSlugTransfers","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Player transfers","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_transfers","playerId":"cs2-player-11893","playerNickname":"ZywOo","dataAvailable":true,"currentTeamId":"cs2-team-9565","currentTeamName":"Vitality","status":"active","transferHistory":[{"transferKey":"profile-history:2018-10-01:source-player-11893:source-team-5639:source-team-9565:joined","playerId":"cs2-player-11893","playerName":"ZywOo","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp","fromTeamId":"cs2-team-5639","fromTeamName":"aAa","fromTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/686cbe0c559e95cae6a091ffc4a7f524.svg","fromTeamAlternateLogoUrl":null,"fromTeamDarkUiLogoUrl":null,"fromTeamIsNoTeam":false,"toTeamId":"cs2-team-9565","toTeamName":"Vitality","toTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","toTeamAlternateLogoUrl":null,"toTeamDarkUiLogoUrl":null,"toTeamIsNoTeam":false,"status":"joined","role":null,"transferDate":"2018-10-01T12:00:00.000Z","joinDate":"2018-10-01T12:00:00.000Z","leaveDate":null,"detectedAt":"2026-07-10T00:53:55.880Z"},{"transferKey":"profile-history:2017-09-01:source-player-11893:source-team-7649:source-team-5639:joined","playerId":"cs2-player-11893","playerName":"ZywOo","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp","fromTeamId":"cs2-team-7649","fromTeamName":"WySix","fromTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9a3798b5b0651fe2e6df965cb7b1279c.webp","fromTeamAlternateLogoUrl":null,"fromTeamDarkUiLogoUrl":null,"fromTeamIsNoTeam":false,"toTeamId":"cs2-team-5639","toTeamName":"aAa","toTeamLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/686cbe0c559e95cae6a091ffc4a7f524.svg","toTeamAlternateLogoUrl":null,"toTeamDarkUiLogoUrl":null,"toTeamIsNoTeam":false,"status":"joined","role":null,"transferDate":"2017-09-01T12:00:00.000Z","joinDate":"2017-09-01T12:00:00.000Z","leaveDate":null,"detectedAt":"2026-07-10T00:53:55.731Z"}],"rosterChanges":[{"changeId":"4dbd68eb-906d-4600-8782-c855a1ccf4bb","changeType":"join","teamId":"cs2-team-9565","fromTeamId":null,"toTeamId":"cs2-team-9565","teamName":"Vitality","playerId":"cs2-player-11893","playerName":"ZywOo","roleBefore":null,"roleAfter":"AWPer","effectiveAt":"2026-07-10T01:50:43.165Z","detectedAt":"2026-07-10T01:50:43.165Z","confidence":"medium"},{"changeId":"d2848d10-010b-4764-92fa-be5895c3ec66","changeType":"leave","teamId":"cs2-team-9565","fromTeamId":"cs2-team-9565","toTeamId":null,"teamName":"Vitality","playerId":"cs2-player-11893","playerName":"ZywOo","roleBefore":"AWPer","roleAfter":null,"effectiveAt":"2026-07-10T01:50:43.165Z","detectedAt":"2026-07-10T01:50:43.165Z","confidence":"medium"}],"teamHistory":[{"teamId":"cs2-team-9565","teamName":"Vitality","playerId":"cs2-player-11893","playerNickname":"ZywOo","playerName":"Mathieu Herbaut","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp","playerSlug":"zywoo","countryName":"France","countryCode":"FR","age":25,"rating":1.31,"mapsPlayed":167,"role":"AWPer","fromAt":"2018-10-01T12:00:00.000Z","toAt":null,"isActive":true,"tenureKnown":true,"tenureUnavailableReason":null,"lastSyncedAt":"2026-09-23T00:11:42.818Z"},{"teamId":"cs2-team-5639","teamName":"aAa","playerId":"cs2-player-11893","playerNickname":"ZywOo","playerName":"Mathieu Herbaut","playerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp","playerSlug":"zywoo","countryName":"France","countryCode":"FR","age":25,"rating":1.31,"mapsPlayed":167,"role":"AWPer","fromAt":"2017-09-01T12:00:00.000Z","toAt":"2018-09-30T12:00:00.000Z","isActive":false,"tenureKnown":true,"tenureUnavailableReason":null,"lastSyncedAt":"2026-07-10T01:37:18.872Z"}]},"meta":{"transfers":2,"changes":2,"memberships":7,"dataAvailable":true}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/stats":{"get":{"summary":"Player stats","description":"A player's aggregate stats: rating, ADR, KAST, K/D and more.","operationId":"getCs2PlayersPlayerIdOrSlugStats","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":100}}],"responses":{"200":{"description":"Player stats","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_stats","playerId":"cs2-player-11893","maps":267,"totals":{"kills":5031,"deaths":3423,"assists":370,"headshots":56,"headshotPercent":0.2},"clutches":{"dataAvailable":false,"unavailableReason":"being_recomputed","message":"Clutch statistics are being recomputed and are not available yet."},"flashAssists":{"flashAssists":38},"rows":[{"id":"9f2d2cce-cb5c-4bb8-b734-ac91220c4f64","mapId":"cs2-match-2398108-map-3","matchId":"cs2-match-2398108","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","kills":17,"deaths":7,"assists":null,"plusMinus":10,"adr":98.8,"kast":0.941,"rating":1.63,"ratingVersion":"source_rating_3_0","headshots":null,"headshotPercent":null,"firstKills":null,"firstDeaths":null,"lastSyncedAt":"2026-09-22T19:46:44.885Z"},{"id":"live-source-match-2398102-map-1-ZywOo","mapId":"cs2-match-2398102-map-1","matchId":"cs2-match-2398102","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","kills":26,"deaths":13,"assists":1,"plusMinus":13,"adr":null,"kast":null,"rating":1.99,"ratingVersion":"source_rating_3_0","headshots":12,"headshotPercent":null,"firstKills":6,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-18T20:28:20.871Z"}]},"meta":{"dataAvailable":true,"availability":"available"}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/clutches":{"get":{"summary":"Player clutches","description":"A player's clutch situations (1vX). Currently being recomputed: returns `data_available: false` with `unavailable_reason: being_recomputed`.","operationId":"getCs2PlayersPlayerIdOrSlugClutches","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"player_id","in":"query","required":false,"description":"Player id or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Player clutches","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_clutches","playerId":"cs2-player-11893","playerNickname":"ZywOo","dataAvailable":false,"unavailableReason":"being_recomputed","message":"Clutch statistics are being recomputed and are not available yet."},"meta":{"count":0,"dataAvailable":false,"limit":0,"total":0,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/flash-assists":{"get":{"summary":"Player flash assists","description":"Kills a player set up with flashbangs.","operationId":"getCs2PlayersPlayerIdOrSlugFlashAssists","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}}],"responses":{"200":{"description":"Player flash assists","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_flash_assists","playerId":"cs2-player-11893","playerNickname":"ZywOo","dataAvailable":true,"flashAssists":[{"playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","flashAssists":38,"maps":22,"flashAssistsPerMap":1.7273}]},"meta":{"count":1,"dataAvailable":true,"limit":1,"total":1,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/matches":{"get":{"summary":"Player matches","description":"A player's stat lines, one row per map played, newest first.","operationId":"getCs2PlayersPlayerIdOrSlugMatches","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Player matches","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_player_stat","id":"9f2d2cce-cb5c-4bb8-b734-ac91220c4f64","mapId":"cs2-match-2398108-map-3","matchId":"cs2-match-2398108","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","kills":17,"deaths":7,"assists":null,"plusMinus":10,"adr":98.8,"kast":0.941,"rating":1.63,"ratingVersion":"source_rating_3_0","headshots":null,"headshotPercent":null,"firstKills":null,"firstDeaths":null,"lastSyncedAt":"2026-09-22T19:46:44.885Z","map":{"id":"cs2-match-2398108-map-3","matchId":"cs2-match-2398108","mapNumber":3,"mapName":"Mirage","status":"completed","team1Score":0,"team2Score":1,"team1Halves":[4,0],"team2Halves":[8,5],"winnerTeamId":"cs2-team-9565","durationRounds":17,"lastSyncedAt":"2026-09-22T19:46:47.384Z","match":{"id":"cs2-match-2398108","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T18:49:47.000Z","endsAt":null,"bestOf":5,"status":"completed","team1Id":"cs2-team-11861","team2Id":"cs2-team-9565","team1Name":"Aurora","team2Name":"Vitality","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565","liveState":{"status":"completed","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565"},"vetoOrder":[{},{}],"streamLinks":[{},{}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:07:06.893Z","lastVerified":"2026-09-23T03:07:06.893Z","confidence":"high","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_stats_eligible"}}},"availableSubresources":[],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-22T19:46:44.885Z"},{"entityType":"cs2_player_stat","id":"live-source-match-2398102-map-1-ZywOo","mapId":"cs2-match-2398102-map-1","matchId":"cs2-match-2398102","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","kills":26,"deaths":13,"assists":1,"plusMinus":13,"adr":null,"kast":null,"rating":1.99,"ratingVersion":"source_rating_3_0","headshots":12,"headshotPercent":null,"firstKills":6,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-18T20:28:20.871Z","map":{"id":"cs2-match-2398102-map-1","matchId":"cs2-match-2398102","mapNumber":1,"mapName":"Mirage","status":"completed","team1Score":1,"team2Score":0,"team1Halves":[7],"team2Halves":[5],"winnerTeamId":"cs2-team-9565","durationRounds":21,"lastSyncedAt":"2026-09-22T20:29:28.763Z","match":{"id":"cs2-match-2398102","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-18T18:35:00.000Z","endsAt":"2026-09-18T20:25:21.557Z","bestOf":3,"status":"completed","team1Id":"cs2-team-9565","team2Id":"cs2-team-8297","team1Name":"Vitality","team2Name":"FURIA","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-9565","liveState":{"teams":{},"source":"live","status":"live","matchId":"cs2-match-2398102","roundEnds":[{},{}],"bombEvents":[{},{}],"capturedAt":"2026-09-18T20:18:51.835Z","currentMap":"de_dust2","team1Score":13,"team2Score":5,"bombPlanted":false,"playerStats":[{},{}],"currentRound":18,"scoreSummary":null,"winnerTeamId":null,"responseCount":755,"eventNamesSeen":["Assist","BombPlanted"],"roundTimeSeconds":null,"mapImageUrl":null,"pickTeamId":null,"objectiveStats":{}},"vetoOrder":[{},{}],"streamLinks":[{},{}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:03:00.051Z","lastVerified":"2026-09-23T03:03:00.051Z","confidence":"high","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_stats_eligible"}}},"availableSubresources":[],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-18T20:28:20.871Z"}],"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/maps":{"get":{"summary":"Player maps","description":"A player's stats per map.","operationId":"getCs2PlayersPlayerIdOrSlugMaps","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"aggregate","in":"query","required":false,"description":"Filter by `aggregate`.","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"summary","in":"query","required":false,"description":"`true` returns a summary instead of full rows.","schema":{"type":"boolean"}},{"name":"windowDays","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}},{"name":"window_days","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Player maps","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_player_stat","id":"9f2d2cce-cb5c-4bb8-b734-ac91220c4f64","mapId":"cs2-match-2398108-map-3","matchId":"cs2-match-2398108","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","kills":17,"deaths":7,"assists":null,"plusMinus":10,"adr":98.8,"kast":0.941,"rating":1.63,"ratingVersion":"source_rating_3_0","headshots":null,"headshotPercent":null,"firstKills":null,"firstDeaths":null,"lastSyncedAt":"2026-09-22T19:46:44.885Z","map":{"id":"cs2-match-2398108-map-3","matchId":"cs2-match-2398108","mapNumber":3,"mapName":"Mirage","status":"completed","team1Score":0,"team2Score":1,"team1Halves":[4,0],"team2Halves":[8,5],"winnerTeamId":"cs2-team-9565","durationRounds":17,"lastSyncedAt":"2026-09-22T19:46:47.384Z","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_stats_eligible"}}},"availableSubresources":[],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-22T19:46:44.885Z"},{"entityType":"cs2_player_stat","id":"live-source-match-2398102-map-1-ZywOo","mapId":"cs2-match-2398102-map-1","matchId":"cs2-match-2398102","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","kills":26,"deaths":13,"assists":1,"plusMinus":13,"adr":null,"kast":null,"rating":1.99,"ratingVersion":"source_rating_3_0","headshots":12,"headshotPercent":null,"firstKills":6,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-18T20:28:20.871Z","map":{"id":"cs2-match-2398102-map-1","matchId":"cs2-match-2398102","mapNumber":1,"mapName":"Mirage","status":"completed","team1Score":1,"team2Score":0,"team1Halves":[7],"team2Halves":[5],"winnerTeamId":"cs2-team-9565","durationRounds":21,"lastSyncedAt":"2026-09-22T20:29:28.763Z","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_stats_eligible"}}},"availableSubresources":[],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-18T20:28:20.871Z"}],"meta":{"count":2,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/teams":{"get":{"summary":"Player teams","description":"Teams a player has played for, with dates.","operationId":"getCs2PlayersPlayerIdOrSlugTeams","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}}],"responses":{"200":{"description":"Player teams","content":{"application/json":{"example":{"success":true,"data":[{"id":"8f40140c-772e-4d4e-8510-1c8360c754ba","teamId":"cs2-team-9565","playerId":"cs2-player-11893","role":"AWPer","fromAt":"2018-10-01T12:00:00.000Z","toAt":null,"isActive":true,"lastSyncedAt":"2026-09-23T00:11:42.818Z","team":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"}},{"id":"c89f70dc-3630-4fa3-8143-8967904b6b93","teamId":"cs2-team-5639","playerId":"cs2-player-11893","role":null,"fromAt":"2017-09-01T12:00:00.000Z","toAt":"2018-09-30T12:00:00.000Z","isActive":false,"lastSyncedAt":"2026-07-10T01:37:18.872Z","team":{"id":"cs2-team-5639","name":"aAa","slug":"aaa","teamTag":"AAA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/686cbe0c559e95cae6a091ffc4a7f524.svg","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":null,"lastSyncedAt":"2026-09-23T03:10:18.460Z","lastVerified":"2026-09-23T03:10:18.460Z","confidence":"high"}}],"meta":{"count":5,"limit":5,"total":5,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/teams/history":{"get":{"summary":"Player teams","description":"Teams a player has played for, with dates.\n\nSame response as `GET /api/v1/cs2/players/{playerIdOrSlug}/teams`.","operationId":"getCs2PlayersPlayerIdOrSlugTeamsHistory","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}}],"responses":{"200":{"description":"Player teams"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/players/{playerIdOrSlug}/teams"}},"/cs2/players/{playerIdOrSlug}/form":{"get":{"summary":"Player form","description":"A player's most recent maps with kills, deaths, ADR, KAST and rating.","operationId":"getCs2PlayersPlayerIdOrSlugForm","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}}],"responses":{"200":{"description":"Player form","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_player_stat","id":"9f2d2cce-cb5c-4bb8-b734-ac91220c4f64","mapId":"cs2-match-2398108-map-3","matchId":"cs2-match-2398108","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","kills":17,"deaths":7,"assists":null,"plusMinus":10,"adr":98.8,"kast":0.941,"rating":1.63,"ratingVersion":"source_rating_3_0","headshots":null,"headshotPercent":null,"firstKills":null,"firstDeaths":null,"lastSyncedAt":"2026-09-22T19:46:44.885Z","map":{"id":"cs2-match-2398108-map-3","matchId":"cs2-match-2398108","mapNumber":3,"mapName":"Mirage","status":"completed","team1Score":0,"team2Score":1,"team1Halves":[4,0],"team2Halves":[8,5],"winnerTeamId":"cs2-team-9565","durationRounds":17,"lastSyncedAt":"2026-09-22T19:46:47.384Z","match":{"id":"cs2-match-2398108","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-20T18:49:47.000Z","endsAt":null,"bestOf":5,"status":"completed","team1Id":"cs2-team-11861","team2Id":"cs2-team-9565","team1Name":"Aurora","team2Name":"Vitality","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565","liveState":{"status":"completed","team1Score":1,"team2Score":3,"winnerTeamId":"cs2-team-9565"},"vetoOrder":[{},{}],"streamLinks":[{},{}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:07:06.893Z","lastVerified":"2026-09-23T03:07:06.893Z","confidence":"high","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_stats_eligible"}}},"availableSubresources":[],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-22T19:46:44.885Z"},{"entityType":"cs2_player_stat","id":"live-source-match-2398102-map-1-ZywOo","mapId":"cs2-match-2398102-map-1","matchId":"cs2-match-2398102","playerId":"cs2-player-11893","playerName":"ZywOo","teamId":"cs2-team-9565","teamName":"Vitality","kills":26,"deaths":13,"assists":1,"plusMinus":13,"adr":null,"kast":null,"rating":1.99,"ratingVersion":"source_rating_3_0","headshots":12,"headshotPercent":null,"firstKills":6,"firstDeaths":1,"source":"live","lastSyncedAt":"2026-09-18T20:28:20.871Z","map":{"id":"cs2-match-2398102-map-1","matchId":"cs2-match-2398102","mapNumber":1,"mapName":"Mirage","status":"completed","team1Score":1,"team2Score":0,"team1Halves":[7],"team2Halves":[5],"winnerTeamId":"cs2-team-9565","durationRounds":21,"lastSyncedAt":"2026-09-22T20:29:28.763Z","match":{"id":"cs2-match-2398102","eventId":"cs2-event-8057","eventName":"StarLadder StarSeries Fall 2026","eventSlug":"starladder-starseries-fall-2026","stageName":null,"startsAt":"2026-09-18T18:35:00.000Z","endsAt":"2026-09-18T20:25:21.557Z","bestOf":3,"status":"completed","team1Id":"cs2-team-9565","team2Id":"cs2-team-8297","team1Name":"Vitality","team2Name":"FURIA","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-9565","liveState":{"teams":{},"source":"live","status":"live","matchId":"cs2-match-2398102","roundEnds":[{},{}],"bombEvents":[{},{}],"capturedAt":"2026-09-18T20:18:51.835Z","currentMap":"de_dust2","team1Score":13,"team2Score":5,"bombPlanted":false,"playerStats":[{},{}],"currentRound":18,"scoreSummary":null,"winnerTeamId":null,"responseCount":755,"eventNamesSeen":["Assist","BombPlanted"],"roundTimeSeconds":null,"mapImageUrl":null,"pickTeamId":null,"objectiveStats":{}},"vetoOrder":[{},{}],"streamLinks":[{},{}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:03:00.051Z","lastVerified":"2026-09-23T03:03:00.051Z","confidence":"high","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}}},"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_stats_eligible"}}},"availableSubresources":[],"unavailableSubresources":[],"unavailableFields":{},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7,"lastVerified":"2026-09-18T20:28:20.871Z"}],"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}/weapons":{"get":{"summary":"Player weapons","description":"A player's kills by weapon.","operationId":"getCs2PlayersPlayerIdOrSlugWeapons","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Player weapons","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player_weapon_stats","playerId":"cs2-player-11893","playerName":"ZywOo","dataAvailable":true,"dataScope":"player_attributed_kill_events","weapons":[{"weapon":"AWP","kills":282,"headshots":33,"headshotPercent":11.7,"maps":40,"matches":19,"lastSyncedAt":"2026-07-24T20:52:24.264Z"},{"weapon":"AK-47","kills":185,"headshots":122,"headshotPercent":65.9,"maps":35,"matches":19,"lastSyncedAt":"2026-07-24T20:52:24.264Z"}]},"meta":{"count":2,"dataAvailable":true,"dataScope":"player_attributed_kill_events","limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players/{playerIdOrSlug}":{"get":{"summary":"Player details","description":"One player: nickname, real name, photo, country, team, role and headline stats.","operationId":"getCs2PlayersPlayerIdOrSlug","tags":["CS2"],"parameters":[{"name":"playerIdOrSlug","in":"path","required":true,"description":"Player id (`cs2-player-11893`) or slug (`zywoo`).","schema":{"type":"string"}}],"responses":{"200":{"description":"Player details","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_player","id":"cs2-player-11893","nickname":"ZywOo","slug":"zywoo","realName":"Mathieu Herbaut","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9a20575a48df13463513233c6314f72c.webp","countryName":"France","countryCode":"FR","age":25,"rating":1.31,"mapsPlayed":167,"careerStats":{"rating":1.31,"lastKnownRating":1.31},"currentTeamId":"cs2-team-9565","status":"active","primaryRole":"AWPer","roleConfidence":"high","statusUpdatedAt":"2026-09-23T00:11:42.818Z","lastSyncedAt":"2026-09-23T00:11:41.857Z","lastVerified":"2026-09-23T00:11:41.857Z","roster":[{"id":"cs2-player-8f40140c-772e-4d4e-8510-1c8360c754ba","teamId":"cs2-team-9565","playerId":"cs2-player-11893","role":"AWPer","fromAt":"2018-10-01T12:00:00.000Z","toAt":null,"isActive":true,"lastSyncedAt":"2026-09-23T00:11:42.818Z","team":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"}},{"id":"cs2-player-c89f70dc-3630-4fa3-8143-8967904b6b93","teamId":"cs2-team-5639","playerId":"cs2-player-11893","role":null,"fromAt":"2017-09-01T12:00:00.000Z","toAt":"2018-09-30T12:00:00.000Z","isActive":false,"lastSyncedAt":"2026-07-10T01:37:18.872Z","team":{"id":"cs2-team-5639","name":"aAa","slug":"aaa","teamTag":"AAA","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/686cbe0c559e95cae6a091ffc4a7f524.svg","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":null,"lastSyncedAt":"2026-09-23T03:10:18.460Z","lastVerified":"2026-09-23T03:10:18.460Z","confidence":"high"}}],"currentTeam":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"availableSubresources":["stats","matches"],"unavailableSubresources":["weapons"],"unavailableFields":{},"dataQuality":"complete","confidence":"high","confidenceScore":0.95},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/players":{"get":{"summary":"List players","description":"Players with photo, country, team and rating.","operationId":"getCs2Players","tags":["CS2"],"parameters":[{"name":"active","in":"query","required":false,"description":"Filter by `active`.","schema":{"type":"boolean"}},{"name":"all","in":"query","required":false,"description":"Filter by `all`.","schema":{"type":"string"}},{"name":"archive","in":"query","required":false,"description":"Filter by `archive`.","schema":{"type":"boolean"}},{"name":"competitive","in":"query","required":false,"description":"Filter by `competitive`.","schema":{"type":"boolean"}},{"name":"fields","in":"query","required":false,"description":"Comma-separated list of fields to return.","schema":{"type":"string"}},{"name":"filter","in":"query","required":false,"description":"Filter by `filter`.","schema":{"type":"string"}},{"name":"hasImage","in":"query","required":false,"description":"Filter by `hasImage`.","schema":{"type":"string"}},{"name":"has_image","in":"query","required":false,"description":"Filter by `has_image`.","schema":{"type":"string"}},{"name":"includeUnverified","in":"query","required":false,"description":"Filter by `includeUnverified`.","schema":{"type":"string"}},{"name":"include_unverified","in":"query","required":false,"description":"Filter by `include_unverified`.","schema":{"type":"string"}},{"name":"letter","in":"query","required":false,"description":"Filter by `letter`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"orderBy","in":"query","required":false,"description":"Filter by `orderBy`.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"q","in":"query","required":false,"description":"Search text.","schema":{"type":"string"}},{"name":"search","in":"query","required":false,"description":"Search text.","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Sort order.","schema":{"type":"string"}},{"name":"summary","in":"query","required":false,"description":"`true` returns a summary instead of full rows.","schema":{"type":"boolean"}},{"name":"teamId","in":"query","required":false,"description":"Team id or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"List players","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_player","id":"cs2-player-11358","nickname":"0i","slug":"0i","realName":"ZhiWei Liu","imageUrl":null,"countryName":"China","countryCode":"CN","age":null,"rating":0,"mapsPlayed":1,"careerStats":{"rating":0,"window":"past_3_months","opening":null,"sniping":null,"trading":null,"utility":null,"entrying":null,"clutching":null,"firepower":null,"mapsPlayed":null,"prizeMoney":31761,"careerRating":0,"windowRating":null,"missingFields":["age","maps_played"],"profileStatus":"failed","lastKnownRating":0,"lastActiveTournament":"LiveFISSURE Playground 3","profileImageStatus":"missing","profileImageClaimedAt":"2026-09-09T23:31:31.014284+00:00"},"currentTeamId":null,"status":null,"primaryRole":"rifler","roleConfidence":"low","statusUpdatedAt":"2026-09-11T00:50:14.854Z","lastSyncedAt":"2026-09-21T03:53:32.948Z","lastVerified":"2026-09-11T00:50:14.854Z","prizeMoney":31761,"availableSubresources":["stats","matches"],"unavailableSubresources":["weapons"],"unavailableFields":{"imageUrl":null,"age":{"reason":"profile_field_unavailable"},"currentTeamId":{"reason":"profile_field_unavailable"}},"dataQuality":"complete","confidence":"high","confidenceScore":0.95},{"entityType":"cs2_player","id":"cs2-player-25337","nickname":"0l0h0","slug":"0l0h0","realName":"Oleh Mazur","imageUrl":null,"countryName":"Ukraine","countryCode":"UA","age":null,"rating":1.05,"mapsPlayed":1,"careerStats":{"rating":1.05,"window":"past_3_months","opening":null,"sniping":null,"trading":null,"utility":null,"entrying":null,"clutching":null,"firepower":null,"mapsPlayed":6,"prizeMoney":145,"careerRating":1.05,"windowRating":null,"missingFields":["age"],"profileStatus":"partial","lastKnownRating":1.05,"lastActiveTournament":"LiveBLAST Open Porto","profileImageStatus":"missing","profileImageClaimedAt":"2026-09-09T01:45:18.695068+00:00"},"currentTeamId":null,"status":null,"primaryRole":"rifler","roleConfidence":"low","statusUpdatedAt":"2026-09-02T06:45:58.995Z","lastSyncedAt":"2026-09-17T09:16:26.808Z","lastVerified":"2026-09-17T09:16:26.808Z","prizeMoney":145,"availableSubresources":["stats","matches"],"unavailableSubresources":["weapons"],"unavailableFields":{"imageUrl":null,"age":{"reason":"profile_field_unavailable"},"currentTeamId":{"reason":"profile_field_unavailable"}},"dataQuality":"complete","confidence":"high","confidenceScore":0.95}],"meta":{"page":1,"limit":2,"total":6043,"count":2,"sort":"nickname","totalPages":3022,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/tournaments/live":{"get":{"summary":"Live events","description":"Tournaments being played now.\n\nSame response as `GET /api/v1/cs2/events/live`.","operationId":"getCs2TournamentsLive","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Live events"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/events/live"}},"/cs2/tournaments/upcoming":{"get":{"summary":"Upcoming events","description":"Scheduled tournaments, soonest first.\n\nSame response as `GET /api/v1/cs2/events/upcoming`.","operationId":"getCs2TournamentsUpcoming","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Upcoming events"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/events/upcoming"}},"/cs2/tournaments/recent":{"get":{"summary":"Recent events","description":"Finished tournaments, newest first.\n\nSame response as `GET /api/v1/cs2/events/recent`.","operationId":"getCs2TournamentsRecent","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Recent events"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/events/recent"}},"/cs2/tournaments/calendar":{"get":{"summary":"Event calendar","description":"Tournaments in a date range. Filter with `from` and `to`.\n\nSame response as `GET /api/v1/cs2/events/calendar`.","operationId":"getCs2TournamentsCalendar","tags":["CS2"],"parameters":[{"name":"from","in":"query","required":false,"description":"Start of the date range (ISO 8601, UTC).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}},{"name":"status","in":"query","required":false,"description":"Filter by status.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"End of the date range (ISO 8601, UTC).","schema":{"type":"string"}}],"responses":{"200":{"description":"Event calendar"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/events/calendar"}},"/cs2/tournaments/active":{"get":{"summary":"Active events","description":"Tournaments in progress or starting soon.\n\nSame response as `GET /api/v1/cs2/events/active`.","operationId":"getCs2TournamentsActive","tags":["CS2"],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated list of fields to return.","schema":{"type":"string"}},{"name":"includeUpcoming","in":"query","required":false,"description":"Filter by `includeUpcoming`.","schema":{"type":"string"}},{"name":"include_upcoming","in":"query","required":false,"description":"Filter by `include_upcoming`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":50}},{"name":"summary","in":"query","required":false,"description":"`true` returns a summary instead of full rows.","schema":{"type":"boolean"}},{"name":"upcomingLimit","in":"query","required":false,"description":"Filter by `upcomingLimit`.","schema":{"type":"string"}},{"name":"upcoming_limit","in":"query","required":false,"description":"Filter by `upcoming_limit`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Active events"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/events/active"}},"/cs2/tournaments":{"get":{"summary":"List events","description":"Tournaments with filters for status and date. List rows are compact; fetch one event for its full structure and standings.\n\nSame response as `GET /api/v1/cs2/events`.","operationId":"getCs2Tournaments","tags":["CS2"],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated list of fields to return.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"summary","in":"query","required":false,"description":"`true` returns a summary instead of full rows.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"List events"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/events"}},"/cs2/tournaments/{eventIdOrSlug}/matches":{"get":{"summary":"Event matches","description":"All matches of a tournament.\n\nSame response as `GET /api/v1/cs2/events/{eventIdOrSlug}/matches`.","operationId":"getCs2TournamentsEventIdOrSlugMatches","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}}],"responses":{"200":{"description":"Event matches"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/events/{eventIdOrSlug}/matches"}},"/cs2/tournaments/{eventIdOrSlug}/teams":{"get":{"summary":"Event teams","description":"Teams in a tournament.\n\nSame response as `GET /api/v1/cs2/events/{eventIdOrSlug}/teams`.","operationId":"getCs2TournamentsEventIdOrSlugTeams","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Event teams"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/events/{eventIdOrSlug}/teams"}},"/cs2/tournaments/{eventIdOrSlug}/participants":{"get":{"summary":"Event participants","description":"Teams in a tournament with their players.\n\nSame response as `GET /api/v1/cs2/events/{eventIdOrSlug}/participants`.","operationId":"getCs2TournamentsEventIdOrSlugParticipants","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}}],"responses":{"200":{"description":"Event participants"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/events/{eventIdOrSlug}/participants"}},"/cs2/tournaments/{eventIdOrSlug}/standings":{"get":{"summary":"Event standings","description":"Teams of a tournament with seed, final placement and prize, ordered by placement.\n\nSame response as `GET /api/v1/cs2/events/{eventIdOrSlug}/standings`.","operationId":"getCs2TournamentsEventIdOrSlugStandings","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Event standings"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/events/{eventIdOrSlug}/standings"}},"/cs2/tournaments/{eventIdOrSlug}/results":{"get":{"summary":"Event results","description":"Final placements and prize money for a tournament.\n\nSame response as `GET /api/v1/cs2/events/{eventIdOrSlug}/results`.","operationId":"getCs2TournamentsEventIdOrSlugResults","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}}],"responses":{"200":{"description":"Event results"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/events/{eventIdOrSlug}/results"}},"/cs2/tournaments/{eventIdOrSlug}/stats":{"get":{"summary":"Event stats","description":"Top players and teams by stats within a tournament.\n\nSame response as `GET /api/v1/cs2/events/{eventIdOrSlug}/stats`.","operationId":"getCs2TournamentsEventIdOrSlugStats","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Event stats"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/events/{eventIdOrSlug}/stats"}},"/cs2/tournaments/{eventIdOrSlug}/bracket":{"get":{"summary":"Event bracket","description":"Bracket, group stage, play-in and Swiss structure of a tournament, each slot with its teams, scores and winner.\n\nSame response as `GET /api/v1/cs2/events/{eventIdOrSlug}/bracket`.","operationId":"getCs2TournamentsEventIdOrSlugBracket","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Event bracket"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/events/{eventIdOrSlug}/bracket"}},"/cs2/tournaments/{eventIdOrSlug}":{"get":{"summary":"Event details","description":"One tournament: dates, location, prize pool, tier, teams and format.\n\nSame response as `GET /api/v1/cs2/events/{eventIdOrSlug}`.","operationId":"getCs2TournamentsEventIdOrSlug","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Event details"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}},"x-alias-of":"/cs2/events/{eventIdOrSlug}"}},"/cs2/events/live":{"get":{"summary":"Live events","description":"Tournaments being played now.","operationId":"getCs2EventsLive","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Live events","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_event","eventId":"cs2-event-9266","id":"cs2-event-9266","name":"Logitech G Play Connect 2026","slug":"logitech-g-play-connect-2026","status":"live","confirmedStatus":"source_listed","startsAt":"2026-09-17T08:30:00.000Z","endsAt":"2026-09-23T23:59:59.000Z","tier":"B","prestigeScore":55,"region":"Europe","isLan":true,"location":null,"prizePool":100000,"currency":"USD","prizeDistribution":[{"label":"Total prize pool","amount":100000,"percent":100,"currency":"USD"},{"label":"1st","amount":40000,"teamId":null,"currency":"USD","teamName":null,"clubPrize":null,"placement":"1st","spotPrize":null,"playerPrize":40000}],"format":"Group stage: Round-robin Bo1 / Playoffs: Single elimination Bo3 - Grand final Bo5","teamCount":12,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/3c695e1ca7dd6d43d2c4d3daf93e4618.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/3c695e1ca7dd6d43d2c4d3daf93e4618.webp","bannerImageUrl":null,"eventStructure":{"other":[],"teams":[],"playIn":[],"mapPool":[{"key":"cache","name":"Cache","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp"},{"key":"dust2","name":"Dust2","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/16948a6107149d6bce6ea2a0ace54d43.webp"}],"brackets":[],"groupStage":[],"allBrackets":[],"relatedEvents":[{"id":"cs2-event-9267","name":"Logitech G Play Connect 2026 Closed Qualifier","slug":"logitech-g-play-connect-2026-closed-qualifier","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/91534393b3d18b80a2dfca7e1d12f596.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c2c31171918f0f4e8da616513d12d178.webp"}]},"hasBracketStructure":true,"standingsAvailable":true,"standings":[{"seed":16,"teamId":"cs2-team-11241","teamName":"B8","placement":null},{"seed":20,"teamId":"cs2-team-9928","teamName":"GamerLegion","placement":null}],"lastSyncedAt":"2026-09-23T03:15:01.331Z","lastVerified":"2026-09-23T03:15:01.331Z","indexedMatchCount":35,"indexedParticipantCount":12},{"entityType":"cs2_event","eventId":"cs2-event-9222","id":"cs2-event-9222","name":"Stake Pulse Beat II","slug":"stake-pulse-beat-ii","status":"live","confirmedStatus":"source_listed","startsAt":"2026-09-21T10:00:00.000Z","endsAt":"2026-09-26T23:59:59.000Z","tier":"B","prestigeScore":55,"region":"Europe","isLan":true,"location":null,"prizePool":60000,"currency":"USD","prizeDistribution":[{"label":"Total prize pool","amount":60000,"percent":100,"currency":"USD"},{"label":"1st","amount":20000,"teamId":null,"currency":"USD","teamName":null,"clubPrize":null,"placement":"1st","spotPrize":null,"playerPrize":20000}],"format":"Group stage: GSL Bo3 / Playoffs: Single elimination Bo3","teamCount":16,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/05bc5f451087fcb52f165d629a869659.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/05bc5f451087fcb52f165d629a869659.webp","bannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/5f78be6696399cd09249b02aaba00e2b.webp","eventStructure":{"other":[],"teams":[],"playIn":[],"mapPool":[{"key":"cache","name":"Cache","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp"},{"key":"dust2","name":"Dust2","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/16948a6107149d6bce6ea2a0ace54d43.webp"}],"brackets":[],"groupStage":[],"allBrackets":[],"relatedEvents":[{"id":"cs2-event-9221","name":"Stake Pulse Beat I","slug":"stake-pulse-beat-i","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/cc06bce6e2266d321e98b51ed97d659d.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/38458c1227c996327422b61e1d053e26.webp"},{"id":"cs2-event-9223","name":"Stake Pulse Beat III","slug":"stake-pulse-beat-iii","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/cc06bce6e2266d321e98b51ed97d659d.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/38458c1227c996327422b61e1d053e26.webp"}]},"hasBracketStructure":true,"standingsAvailable":true,"standings":[{"seed":11,"teamId":"cs2-team-6665","teamName":"Astralis","placement":null},{"seed":30,"teamId":"cs2-team-10245","teamName":"JiJieHao","placement":null}],"lastSyncedAt":"2026-09-23T03:15:01.608Z","lastVerified":"2026-09-23T03:15:01.608Z","indexedMatchCount":14,"indexedParticipantCount":5}],"meta":{"count":2,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/events/active":{"get":{"summary":"Active events","description":"Tournaments in progress or starting soon.","operationId":"getCs2EventsActive","tags":["CS2"],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated list of fields to return.","schema":{"type":"string"}},{"name":"includeUpcoming","in":"query","required":false,"description":"Filter by `includeUpcoming`.","schema":{"type":"string"}},{"name":"include_upcoming","in":"query","required":false,"description":"Filter by `include_upcoming`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":50}},{"name":"summary","in":"query","required":false,"description":"`true` returns a summary instead of full rows.","schema":{"type":"boolean"}},{"name":"upcomingLimit","in":"query","required":false,"description":"Filter by `upcomingLimit`.","schema":{"type":"string"}},{"name":"upcoming_limit","in":"query","required":false,"description":"Filter by `upcoming_limit`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Active events","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_event","eventId":"cs2-event-8266","id":"cs2-event-8266","name":"FISSURE Playground 3","slug":"fissure-playground-3","status":"completed","confirmedStatus":"detail_unavailable","startsAt":"2026-09-08T03:00:00.000Z","endsAt":"2026-09-13T23:59:59.000Z","tier":"A","prestigeScore":75,"region":"Asia","isLan":true,"location":"Shenzhen, China","prizePool":1000000,"currency":"USD","prizeDistribution":null,"format":null,"teamCount":16,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/d9d4c3f2cd813bd882aba0867173d3d8.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/d9d4c3f2cd813bd882aba0867173d3d8.webp","bannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/4136fd9dafdb58d6d881db924e6fa42a.webp","eventStructure":null,"hasBracketStructure":false,"standingsAvailable":true,"standings":[{"teamId":"cs2-team-11283","teamName":"Falcons","placement":1},{"teamId":"cs2-team-7020","teamName":"Spirit","placement":3}],"lastSyncedAt":"2026-09-13T19:40:36.753Z","lastVerified":"2026-09-13T12:25:01.955Z","activeEvent":true,"activeReason":"status_active","indexedMatchCount":29,"indexedParticipantCount":15},{"entityType":"cs2_event","eventId":"cs2-event-9240","id":"cs2-event-9240","name":"Esports Nations Cup 2026","slug":"esports-nations-cup-2026","status":"upcoming","confirmedStatus":"detail_unavailable","startsAt":"2026-11-10T00:00:00.000Z","endsAt":"2026-11-15T23:59:59.000Z","tier":"A","prestigeScore":75,"region":null,"isLan":true,"location":null,"prizePool":1320000,"currency":"USD","prizeDistribution":[{"label":"Total prize pool","amount":1320000,"percent":100,"currency":"USD"},{"label":"1st","amount":300000,"teamId":null,"currency":"USD","teamName":null,"clubPrize":null,"placement":"1st","spotPrize":null,"playerPrize":300000}],"format":"Group stage: Round-robin Bo1 / Playoffs: Single elimination Bo3 - Grand final Bo5 3rd place decider match Bo3 Event dates: Nov 10th - Nov 15th 2026","teamCount":24,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0c2fb0ed12bab08f0f0cf7bea895b2d4.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0c2fb0ed12bab08f0f0cf7bea895b2d4.webp","bannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/43105bff49c2aed223bf834eaac0682b.png","eventStructure":{"other":[{"name":"3rd Place Decider Match","type":null,"rounds":[{}],"display":"Collapsed","section":"other"}],"teams":[],"playIn":[],"mapPool":[{"key":"cache","name":"Cache","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp"},{"key":"dust2","name":"Dust2","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/16948a6107149d6bce6ea2a0ace54d43.webp"}],"brackets":[{"name":"Playoffs","type":null,"rounds":[{},{}],"display":"Collapsed","section":"bracket"}],"groupStage":[],"allBrackets":[{"name":"Playoffs","type":null,"rounds":[{},{}],"display":"Collapsed","section":"bracket"},{"name":"3rd Place Decider Match","type":null,"rounds":[{}],"display":"Collapsed","section":"other"}],"relatedEvents":[{"id":"cs2-event-9299","name":"Esports Nations Cup 2026 West Europe Closed Qualifier","slug":"esports-nations-cup-2026-west-europe-closed-qualifier","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0c2fb0ed12bab08f0f0cf7bea895b2d4.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c601f2190c6bd6a61c010068eb824d19.webp"},{"id":"cs2-event-9300","name":"Esports Nations Cup 2026 East Europe Closed Qualifier","slug":"esports-nations-cup-2026-east-europe-closed-qualifier","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0c2fb0ed12bab08f0f0cf7bea895b2d4.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c601f2190c6bd6a61c010068eb824d19.webp"}]},"hasBracketStructure":true,"standingsAvailable":true,"standings":[{"seed":null,"teamId":"cs2-team-5134","teamName":"United Kingdom","placement":null},{"seed":null,"teamId":"cs2-team-5142","teamName":"France","placement":null}],"lastSyncedAt":"2026-09-17T17:00:21.269Z","lastVerified":"2026-09-12T22:59:25.821Z","activeEvent":true,"activeReason":"status_active","indexedMatchCount":0,"indexedParticipantCount":24}],"meta":{"count":2,"activeCount":2,"upcomingFillCount":0,"dataAvailable":true,"sort":"prize_pool_desc,prestige_score_desc,starts_at_asc","statusScope":"active_only","limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/events/upcoming":{"get":{"summary":"Upcoming events","description":"Scheduled tournaments, soonest first.","operationId":"getCs2EventsUpcoming","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Upcoming events","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_event","eventId":"cs2-event-8302","id":"cs2-event-8302","name":"PGL Major Singapore 2026","slug":"pgl-major-singapore-2026","status":"upcoming","confirmedStatus":"source_listed","startsAt":"2026-12-13T00:00:00.000Z","endsAt":"2026-12-13T23:59:59.000Z","tier":"S","prestigeScore":100,"region":"Asia","isLan":true,"location":"Singapore","prizePool":1250000,"currency":"USD","prizeDistribution":[{"label":"Total prize pool","amount":1250000,"percent":100,"currency":"USD"}],"format":null,"teamCount":16,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9395bf632eb521bc32ed71ae89cf0d22.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9395bf632eb521bc32ed71ae89cf0d22.webp","bannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/85c65209bf71aa69cdb5b255e3a062a1.webp","eventStructure":{"other":[],"teams":[],"playIn":[],"mapPool":[{"key":"cache","name":"Cache","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp"},{"key":"dust2","name":"Dust2","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/16948a6107149d6bce6ea2a0ace54d43.webp"}],"brackets":[],"groupStage":[],"allBrackets":[],"relatedEvents":[{"id":"cs2-event-8301","name":"IEM Cologne Major 2026","slug":"iem-cologne-major-2026","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9395bf632eb521bc32ed71ae89cf0d22.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9981b4f7011470de58e32a195cd80cb0.webp"},{"id":"cs2-event-9028","name":"IEM Cologne Major 2026 Stage 1","slug":"iem-cologne-major-2026-stage-1","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9395bf632eb521bc32ed71ae89cf0d22.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9981b4f7011470de58e32a195cd80cb0.webp"}]},"hasBracketStructure":true,"standingsAvailable":false,"standings":null,"lastSyncedAt":"2026-09-23T03:15:15.126Z","lastVerified":"2026-09-23T03:15:15.126Z","indexedMatchCount":0,"indexedParticipantCount":0},{"entityType":"cs2_event","eventId":"cs2-event-8050","id":"cs2-event-8050","name":"PGL Masters Bucharest 2026","slug":"pgl-masters-bucharest-2026","status":"upcoming","confirmedStatus":"source_listed","startsAt":"2026-10-31T00:00:00.000Z","endsAt":"2026-10-31T23:59:59.000Z","tier":"A","prestigeScore":80,"region":"Europe","isLan":true,"location":"Bucharest, Romania","prizePool":1250000,"currency":"USD","prizeDistribution":[{"label":"Total prize pool","amount":1250000,"percent":100,"currency":"USD"},{"label":"Player Share","amount":625000,"percent":50,"currency":"USD"}],"format":null,"teamCount":16,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/856742d130d33845a6bc550723b76ede.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/856742d130d33845a6bc550723b76ede.webp","bannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/302d7de6941832dc49b87fa8f5d80a06.webp","eventStructure":{"other":[{"name":"3rd Place Decider Match","type":null,"rounds":[{}],"display":"Collapsed","section":"other"}],"teams":[],"playIn":[],"mapPool":[{"key":"cache","name":"Cache","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp"},{"key":"dust2","name":"Dust2","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/16948a6107149d6bce6ea2a0ace54d43.webp"}],"brackets":[{"name":"Playoffs","type":null,"rounds":[{},{}],"display":"Collapsed","section":"bracket"}],"groupStage":[],"allBrackets":[{"name":"Playoffs","type":null,"rounds":[{},{}],"display":"Collapsed","section":"bracket"},{"name":"3rd Place Decider Match","type":null,"rounds":[{}],"display":"Collapsed","section":"other"}],"relatedEvents":[{"id":"cs2-event-8046","name":"PGL Masters Bucharest 2025","slug":"pgl-masters-bucharest-2025","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/3d243df9e55b3252320526320ebfa51e.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/3d243df9e55b3252320526320ebfa51e.webp"},{"id":"cs2-event-8049","name":"PGL Astana 2026","slug":"pgl-astana-2026","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/644d92900311187d770719e536859432.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/4e065c74172980f5751433cb4b106ba7.webp"}]},"hasBracketStructure":true,"standingsAvailable":true,"standings":[{"teamId":"cs2-team-7020","teamName":"Spirit","placement":3},{"teamId":"cs2-team-11283","teamName":"Falcons","placement":1}],"lastSyncedAt":"2026-09-23T03:15:06.921Z","lastVerified":"2026-09-23T03:15:06.921Z","indexedMatchCount":0,"indexedParticipantCount":12}],"meta":{"count":2,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/events/recent":{"get":{"summary":"Recent events","description":"Finished tournaments, newest first.","operationId":"getCs2EventsRecent","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Recent events","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_event","eventId":"cs2-event-9405","id":"cs2-event-9405","name":"CCT 2026 Challengers South America Series 3","slug":"cct-2026-challengers-south-america-series-3","status":"completed","confirmedStatus":"detail_unavailable","startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-21T01:16:22.000Z","tier":"B","prestigeScore":55,"region":"South America","isLan":true,"location":null,"prizePool":2500,"currency":"USD","format":"Playoffs: Double elimination Bo3","teamCount":null,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","bannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/94643b0a8eb390b6b41cd3d1850aef12.webp","hasBracketStructure":true,"standingsAvailable":false,"lastSyncedAt":"2026-09-18T21:00:47.512Z","lastVerified":"2026-09-18T21:00:04.293Z","indexedMatchCount":8,"indexedParticipantCount":4},{"entityType":"cs2_event","eventId":"cs2-event-9034","id":"cs2-event-9034","name":"Liga Gamers Club 2026 Serie A February Cup","slug":"liga-gamers-club-2026-serie-a-february-cup","status":"completed","confirmedStatus":"detail_unavailable","startsAt":"2026-02-27T19:00:00.000Z","endsAt":"2026-09-20T23:59:59.000Z","tier":"A","prestigeScore":75,"region":"Europe","isLan":true,"location":null,"prizePool":2000,"currency":"USD","format":"Playoffs: Grand final Bo3","teamCount":2,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/3c16adb151dc0aeaf3d4fd611241f448.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/3c16adb151dc0aeaf3d4fd611241f448.webp","bannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/e423ed2e72d478274c8ca9da4f420b1d.webp","hasBracketStructure":true,"standingsAvailable":true,"lastSyncedAt":"2026-09-20T00:50:07.733Z","lastVerified":"2026-09-12T04:17:37.961Z","indexedMatchCount":1,"indexedParticipantCount":13}],"meta":{"count":2,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/events/calendar":{"get":{"summary":"Event calendar","description":"Tournaments in a date range. Filter with `from` and `to`.","operationId":"getCs2EventsCalendar","tags":["CS2"],"parameters":[{"name":"from","in":"query","required":false,"description":"Start of the date range (ISO 8601, UTC).","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}},{"name":"status","in":"query","required":false,"description":"Filter by status.","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"End of the date range (ISO 8601, UTC).","schema":{"type":"string"}}],"responses":{"200":{"description":"Event calendar","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_tournament_calendar","dataAvailable":true,"events":[{"entityType":"cs2_event","eventId":"cs2-event-9390","id":"cs2-event-9390","name":"ESEA Intermediate Season 58 Oceania","slug":"esea-intermediate-season-58-oceania","status":"completed","confirmedStatus":"detail_unavailable","startsAt":"2026-09-03T07:30:00.000Z","endsAt":"2026-09-17T09:00:00.000Z","tier":null,"prestigeScore":null,"region":null,"isLan":true,"location":null,"prizePool":null,"currency":"USD","prizeDistribution":[{"label":"1st","amount":null,"teamId":"cs2-team-13686","currency":"USD","teamName":"Abyssal","clubPrize":null,"placement":"1st","spotPrize":null,"playerPrize":null},{"label":"2nd","amount":null,"teamId":null,"currency":"USD","teamName":null,"clubPrize":null,"placement":"2nd","spotPrize":null,"playerPrize":null}],"format":"Playoffs: Double elimination Bo3","teamCount":8,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b3b6c675c0b486f6d1aad32e024f6640.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b3b6c675c0b486f6d1aad32e024f6640.webp","bannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/10cea6fcaa71cda7f16863dab16cac31.jpg","eventStructure":{"other":[],"teams":[],"playIn":[],"mapPool":[{},{}],"brackets":[],"groupStage":[],"allBrackets":[],"relatedEvents":[{}]},"hasBracketStructure":true,"standingsAvailable":true,"standings":[{"seed":123,"teamId":"cs2-team-11668","teamName":"Mindfreak","placement":null},{"seed":155,"teamId":"cs2-team-12363","teamName":"Arcade","placement":null}],"lastSyncedAt":"2026-09-16T10:10:26.327Z","lastVerified":"2026-09-16T10:00:35.624Z","indexedParticipantCount":8},{"entityType":"cs2_event","eventId":"cs2-event-9345","id":"cs2-event-9345","name":"WINLINE MPKBK CIS LAN Season 7","slug":"winline-mpkbk-cis-lan-season-7","status":"completed","confirmedStatus":"detail_unavailable","startsAt":"2026-09-13T06:00:00.000Z","endsAt":"2026-09-16T23:59:59.000Z","tier":"B","prestigeScore":55,"region":"CIS","isLan":true,"location":null,"prizePool":40000,"currency":"USD","prizeDistribution":[{"label":"Total prize pool","amount":40000,"percent":100,"currency":"USD"},{"label":"1st","amount":20000,"teamId":"cs2-team-7969","currency":"USD","teamName":"Nemiga","clubPrize":null,"placement":"1st","spotPrize":null,"playerPrize":20000}],"format":"Group stage: GSL Bo3 / Playoffs: Single elimination Bo3 - Grand final Bo5","teamCount":16,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/cc5faeafdc5987365ea67be93acd1615.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/cc5faeafdc5987365ea67be93acd1615.webp","bannerImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/407000fc879b62b5ed1d535f5e8ead5b.webp","eventStructure":{"other":[],"teams":[],"playIn":[],"mapPool":[{},{}],"brackets":[],"groupStage":[],"allBrackets":[],"relatedEvents":[{},{}]},"hasBracketStructure":true,"standingsAvailable":true,"standings":[{"seed":43,"teamId":"cs2-team-13355","teamName":"Nemesis","placement":null},{"seed":45,"teamId":"cs2-team-13027","teamName":"Nuclear TigeRES","placement":null}],"lastSyncedAt":"2026-09-16T22:00:38.209Z","lastVerified":"2026-09-16T21:50:41.062Z","indexedParticipantCount":16}]},"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/events/{eventIdOrSlug}/matches":{"get":{"summary":"Event matches","description":"All matches of a tournament.","operationId":"getCs2EventsEventIdOrSlugMatches","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}}],"responses":{"200":{"description":"Event matches","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_match","id":"cs2-match-2398335","eventId":"cs2-event-9405","eventName":"CCT 2026 Challengers South America Series 3","eventSlug":"cct-2026-challengers-south-america-series-3","stageName":null,"startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-18T01:35:27.865Z","bestOf":3,"status":"completed","team1Id":"cs2-team-13907","team2Id":"cs2-team-13978","team1Name":"RUSH","team2Name":"Sementes do Mal","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-13907","liveState":{"teams":{"team1Name":"RUSH","team2Name":"Sementes do Mal","ctTeamName":"RUSH","terroristTeamName":"Sementes do Mal"},"source":"live","status":"live","matchId":"cs2-match-2398335","roundEnds":[{"winner":"CT","eventId":"8c7dd19ad868b4e7839eeef70f496ac8","payload":{},"winType":"CTs_Win","eventType":"RoundEnd","observedAt":"2026-09-18T01:21:07.634Z","terroristScore":8,"webhookEligible":true,"counterTerroristScore":13},{"winner":"TERRORIST","eventId":"916676e20e999307d8105ff1f5d3ebeb","payload":{},"winType":"Terrorists_Win","eventType":"RoundEnd","observedAt":"2026-09-18T01:21:07.634Z","terroristScore":8,"webhookEligible":true,"counterTerroristScore":12}],"bombEvents":[{"source":"live","eventId":"1f29548ca0ceb17014c035e6ffed2740","payload":{},"bombSite":"B","tPlayers":2,"ctPlayers":0,"eventType":"BombPlanted","observedAt":"2026-09-18T01:21:07.634Z","playerName":"coxinha","playerNick":"coxa","webhookEligible":true},{"source":"live","eventId":"f3960568b0c249e7e68165d061323faa","payload":{},"bombSite":"A","tPlayers":1,"ctPlayers":1,"eventType":"BombPlanted","observedAt":"2026-09-18T01:21:07.635Z","playerName":"Kaiserzy","playerNick":"Kaiserzy","webhookEligible":true}],"capturedAt":"2026-09-18T01:21:07.639Z","currentMap":"de_mirage","team1Score":13,"team2Score":8,"bombPlanted":false,"playerStats":[{"hp":0,"adr":87.95238095238095,"name":"terran","nick":"terran","side":"T","alive":false,"kills":17,"money":450,"deaths":16,"helmet":false,"kevlar":false,"assists":3,"steamId":"1:0:227765279","hasDefuseKit":false,"primaryWeapon":null},{"hp":0,"adr":79.38095238095238,"name":"MrD","nick":"Mrd","side":"T","alive":false,"kills":14,"money":950,"deaths":18,"helmet":false,"kevlar":false,"assists":3,"steamId":"1:1:454616928","hasDefuseKit":false,"primaryWeapon":null}],"currentRound":21,"scoreSummary":null,"winnerTeamId":null,"responseCount":1,"eventNamesSeen":["Assist","BombPlanted"],"roundTimeSeconds":null,"mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":true,"unavailableReason":null,"confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[{},{}]}},"vetoOrder":[{"map":"nuke","order":1,"action":"ban","teamId":"cs2-team-13978","teamName":"Sementes do Mal"},{"map":"anubis","order":2,"action":"ban","teamId":"cs2-team-13907","teamName":"RUSH"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:02:11.922Z","lastVerified":"2026-09-23T03:02:11.922Z","confidence":"high","event":{"id":"cs2-event-9405","name":"CCT 2026 Challengers South America Series 3","slug":"cct-2026-challengers-south-america-series-3","status":"completed","tier":"B","region":"South America","startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-21T01:16:22.000Z","imageUrl":null,"eventId":"cs2-event-9405","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-13907","name":"RUSH","slug":"rush-13907","teamTag":"RUSH","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7c531914f36436c8c3ff879db057eff6.webp","countryName":"Brazil","countryCode":"BR","region":"South America","worldRanking":224,"lastSyncedAt":"2026-09-23T03:08:38.333Z","lastVerified":"2026-09-23T03:08:38.333Z","confidence":"high"},"team2":{"id":"cs2-team-13978","name":"Sementes do Mal","slug":"sementes-do-mal","teamTag":"SDM","logoUrl":null,"countryName":null,"countryCode":null,"region":null,"worldRanking":246,"lastSyncedAt":"2026-09-23T03:09:54.964Z","lastVerified":"2026-09-23T03:09:54.964Z","confidence":"high"},"maps":[{"id":"cs2-match-2398335-map-1","matchId":"cs2-match-2398335","mapNumber":1,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8],"team2Halves":[4],"winnerTeamId":"cs2-team-13907","durationRounds":20,"lastSyncedAt":"2026-09-23T01:40:48.366Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp","pickTeamId":"cs2-team-13978","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398335-map-2","matchId":"cs2-match-2398335","mapNumber":2,"mapName":"Mirage","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[6],"team2Halves":[6],"winnerTeamId":"cs2-team-13907","durationRounds":21,"lastSyncedAt":"2026-09-23T01:41:15.210Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/5c7a6366afcc1accfbe8258a89177b93.webp","pickTeamId":"cs2-team-13907","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps","live_state"],"unavailableSubresources":["player_stats","objective_stats"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}},{"entityType":"cs2_match","id":"cs2-match-2398334","eventId":"cs2-event-9405","eventName":"CCT 2026 Challengers South America Series 3","eventSlug":"cct-2026-challengers-south-america-series-3","stageName":null,"startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-18T02:56:05.709Z","bestOf":3,"status":"completed","team1Id":"cs2-team-14045","team2Id":"cs2-team-14008","team1Name":"Underworld","team2Name":"your end","team1Score":1,"team2Score":2,"winnerTeamId":"cs2-team-14008","liveState":{"teams":{"team1Name":"Underworld","team2Name":"your end","ctTeamName":"your end","terroristTeamName":"Underworld"},"source":"live","status":"live","matchId":"cs2-match-2398334","roundEnds":[{"winner":"CT","eventId":"0921c5acbe23eca9b2adcb110f2d8dba","payload":{},"winType":"Bomb_Defused","eventType":"RoundEnd","observedAt":"2026-09-18T02:09:08.287Z","terroristScore":10,"webhookEligible":true,"counterTerroristScore":6},{"winner":"CT","eventId":"b0bb663abcf4b910bd2dd0853f89d138","payload":{},"winType":"CTs_Win","eventType":"RoundEnd","observedAt":"2026-09-18T02:09:08.287Z","terroristScore":10,"webhookEligible":true,"counterTerroristScore":5}],"bombEvents":[{"source":"live","eventId":"0f594bf0cad4a6e40dee28b737a11f8e","payload":{},"bombSite":"B","tPlayers":4,"ctPlayers":1,"eventType":"BombPlanted","observedAt":"2026-09-18T02:09:08.286Z","playerName":"Lukita","playerNick":"Lukita","webhookEligible":true},{"source":"live","eventId":"01276d1da569beaf5ebfd69277fc4f93","payload":{},"bombSite":"A","tPlayers":3,"ctPlayers":4,"eventType":"BombPlanted","observedAt":"2026-09-18T02:09:08.286Z","playerName":"Cr1a","playerNick":"Cr1a","webhookEligible":true}],"capturedAt":"2026-09-18T02:45:25.848Z","currentMap":"de_ancient","team1Score":11,"team2Score":13,"bombPlanted":false,"playerStats":[{"hp":0,"adr":90.29166666666667,"name":"tgS","nick":"tgS","side":"T","alive":false,"kills":17,"money":1100,"deaths":17,"helmet":false,"kevlar":false,"assists":8,"steamId":"1:1:519943302","hasDefuseKit":false,"primaryWeapon":null},{"hp":0,"adr":89.29166666666667,"name":"neskk","nick":"neskk","side":"T","alive":false,"kills":16,"money":1650,"deaths":17,"helmet":false,"kevlar":false,"assists":6,"steamId":"1:1:156198380","hasDefuseKit":false,"primaryWeapon":null}],"currentRound":24,"scoreSummary":null,"winnerTeamId":null,"responseCount":1045,"eventNamesSeen":["Assist","BombPlanted"],"roundTimeSeconds":null,"mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":true,"unavailableReason":null,"confidence":{"plants":"high","defuses":"high","explosions":"high","clutchDefuse":"medium"},"teamStats":[],"roundEvents":[{},{}]}},"vetoOrder":[{"map":"mirage","order":1,"action":"ban","teamId":"cs2-team-14008","teamName":"your end"},{"map":"anubis","order":2,"action":"ban","teamId":"cs2-team-14045","teamName":"Underworld"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:02:11.189Z","lastVerified":"2026-09-23T03:02:11.189Z","confidence":"high","event":{"id":"cs2-event-9405","name":"CCT 2026 Challengers South America Series 3","slug":"cct-2026-challengers-south-america-series-3","status":"completed","tier":"B","region":"South America","startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-21T01:16:22.000Z","imageUrl":null,"eventId":"cs2-event-9405","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-14045","name":"Underworld","slug":"underworld","teamTag":"UNDERWOR","logoUrl":null,"countryName":null,"countryCode":null,"region":null,"worldRanking":null,"lastSyncedAt":"2026-09-23T03:07:11.468Z","lastVerified":"2026-09-23T03:07:11.468Z","confidence":"high"},"team2":{"id":"cs2-team-14008","name":"your end","slug":"your-end","teamTag":"YOUREND","logoUrl":null,"countryName":null,"countryCode":null,"region":null,"worldRanking":192,"lastSyncedAt":"2026-09-23T03:09:33.979Z","lastVerified":"2026-09-23T03:09:33.979Z","confidence":"high"},"maps":[{"id":"cs2-match-2398334-map-1","matchId":"cs2-match-2398334","mapNumber":1,"mapName":"Inferno","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[6],"team2Halves":[6],"winnerTeamId":"cs2-team-14008","durationRounds":20,"lastSyncedAt":"2026-09-18T20:32:33.533Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/4004b70cfe62cef3b711c587bd0d342c.webp","pickTeamId":"cs2-team-14008","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398334-map-2","matchId":"cs2-match-2398334","mapNumber":2,"mapName":"Dust2","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[5],"team2Halves":[7],"winnerTeamId":"cs2-team-14045","durationRounds":24,"lastSyncedAt":"2026-09-23T03:07:00.643Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/16948a6107149d6bce6ea2a0ace54d43.webp","pickTeamId":"cs2-team-14045","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps","live_state"],"unavailableSubresources":["player_stats","objective_stats"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}],"meta":{"count":2,"event":{"id":"cs2-event-9405","name":"CCT 2026 Challengers South America Series 3","slug":"cct-2026-challengers-south-america-series-3","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","prizePool":2500,"currency":"USD","location":null,"format":"Playoffs: Double elimination Bo3","teamCount":null,"standings":null,"startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-21T01:16:22.000Z","status":"completed","tier":"B","prestigeScore":55,"region":"South America","isLan":true,"confirmedStatus":"detail_unavailable","streamLinks":null,"vodLinks":null,"lastSyncedAt":"2026-09-18T21:00:47.512Z","lastVerified":"2026-09-18T21:00:04.293Z","confidence":"high"},"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/events/{eventIdOrSlug}/teams":{"get":{"summary":"Event teams","description":"Teams in a tournament.","operationId":"getCs2EventsEventIdOrSlugTeams","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Event teams","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_event_teams","eventId":"cs2-event-9405","eventName":"CCT 2026 Challengers South America Series 3","dataAvailable":true,"teams":[{"id":"cs2-team-13978","name":"Sementes do Mal","eventSeed":null,"eventPlacement":null,"eventStatus":"attending","lastSyncedAt":"2026-09-17T20:55:03.035Z"},{"id":"cs2-team-13811","name":"QUINTESSÊNCIA","slug":"quintessncia","teamTag":"QUINTESS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b83bfcf22f50f55d9a7b96441358a4e0.webp","countryName":"Brazil","countryCode":"BR","region":"Americas","worldRanking":132,"lastSyncedAt":"2026-09-23T03:09:20.146Z","lastVerified":"2026-09-23T03:09:20.146Z","confidence":"high"}]},"meta":{"count":7,"participantCount":4,"matchTeamCount":8,"dataAvailable":true,"limit":7,"total":7,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/events/{eventIdOrSlug}/participants":{"get":{"summary":"Event participants","description":"Teams in a tournament with their players.","operationId":"getCs2EventsEventIdOrSlugParticipants","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 250; larger values are reduced to 250.","schema":{"type":"integer","minimum":1,"maximum":250,"default":100}}],"responses":{"200":{"description":"Event participants","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_event_participants","eventId":"cs2-event-9405","eventName":"CCT 2026 Challengers South America Series 3","dataAvailable":true,"teams":[{"eventId":"cs2-event-9405","teamId":"cs2-team-13907","teamName":"RUSH","seed":null,"placement":null,"status":"attending","lastSyncedAt":"2026-09-17T20:55:03.000Z"},{"eventId":"cs2-event-9405","teamId":"cs2-team-13978","teamName":"Sementes do Mal","seed":null,"placement":null,"status":"attending","lastSyncedAt":"2026-09-17T20:55:03.035Z"}]},"meta":{"count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/events/{eventIdOrSlug}/standings":{"get":{"summary":"Event standings","description":"Teams of a tournament with seed, final placement and prize, ordered by placement.","operationId":"getCs2EventsEventIdOrSlugStandings","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Event standings","content":{"application/json":{"example":{"success":true,"data":{"dataAvailable":false,"unavailableReason":"not_yet_indexed","dataQuality":"unavailable","message":"Event standings have not been indexed for this CS2 event yet."},"meta":{"count":0,"dataAvailable":false,"source":null,"limit":0,"total":0,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/events/{eventIdOrSlug}/results":{"get":{"summary":"Event results","description":"Final placements and prize money for a tournament.","operationId":"getCs2EventsEventIdOrSlugResults","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":100}}],"responses":{"200":{"description":"Event results","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_match","id":"cs2-match-2398341","eventId":"cs2-event-9405","eventName":"CCT 2026 Challengers South America Series 3","eventSlug":"cct-2026-challengers-south-america-series-3","stageName":null,"startsAt":"2026-09-21T01:16:22.000Z","endsAt":null,"bestOf":3,"status":"completed","team1Id":"cs2-team-14008","team2Id":"cs2-team-13811","team1Name":"your end","team2Name":"QUINTESSÊNCIA","team1Score":0,"team2Score":2,"winnerTeamId":"cs2-team-13811","liveState":{"status":"completed","team1Score":0,"team2Score":2,"winnerTeamId":"cs2-team-13811"},"vetoOrder":[{"map":"anubis","order":1,"action":"ban","teamId":"cs2-team-13811","teamName":"QUINTESSÊNCIA"},{"map":null,"order":2,"action":"ban","teamId":"cs2-team-14008","teamName":"your end"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:06:59.572Z","lastVerified":"2026-09-23T03:06:59.572Z","confidence":"high","event":{"id":"cs2-event-9405","name":"CCT 2026 Challengers South America Series 3","slug":"cct-2026-challengers-south-america-series-3","status":"completed","tier":"B","region":"South America","startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-21T01:16:22.000Z","imageUrl":null,"eventId":"cs2-event-9405","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-14008","name":"your end","slug":"your-end","teamTag":"YOUREND","logoUrl":null,"countryName":null,"countryCode":null,"region":null,"worldRanking":192,"lastSyncedAt":"2026-09-23T03:09:33.979Z","lastVerified":"2026-09-23T03:09:33.979Z","confidence":"high"},"team2":{"id":"cs2-team-13811","name":"QUINTESSÊNCIA","slug":"quintessncia","teamTag":"QUINTESS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b83bfcf22f50f55d9a7b96441358a4e0.webp","countryName":"Brazil","countryCode":"BR","region":"Americas","worldRanking":132,"lastSyncedAt":"2026-09-23T03:09:20.146Z","lastVerified":"2026-09-23T03:09:20.146Z","confidence":"high"},"maps":[{"id":"cs2-match-2398341-map-1","matchId":"cs2-match-2398341","mapNumber":1,"mapName":"Mirage","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[4,2],"team2Halves":[8,5],"winnerTeamId":"cs2-team-13811","durationRounds":19,"lastSyncedAt":"2026-09-23T02:08:13.380Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/5c7a6366afcc1accfbe8258a89177b93.webp","pickTeamId":"cs2-team-13811","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398341-map-2","matchId":"cs2-match-2398341","mapNumber":2,"mapName":"Nuke","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[5,2],"team2Halves":[7,6],"winnerTeamId":"cs2-team-13811","durationRounds":20,"lastSyncedAt":"2026-09-23T02:08:13.410Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/9397539119b91cb92e079508bbd387a0.webp","pickTeamId":"cs2-team-14008","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps","live_state"],"unavailableSubresources":["player_stats","objective_stats"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}},{"entityType":"cs2_match","id":"cs2-match-2398340","eventId":"cs2-event-9405","eventName":"CCT 2026 Challengers South America Series 3","eventSlug":"cct-2026-challengers-south-america-series-3","stageName":null,"startsAt":"2026-09-20T22:19:43.000Z","endsAt":null,"bestOf":3,"status":"completed","team1Id":"cs2-team-11008","team2Id":"cs2-team-13811","team1Name":"RUSH","team2Name":"QUINTESSÊNCIA","team1Score":0,"team2Score":2,"winnerTeamId":"cs2-team-13811","liveState":{"status":"completed","team1Score":0,"team2Score":2,"winnerTeamId":"cs2-team-13811"},"vetoOrder":[{"map":"nuke","order":1,"action":"ban","teamId":"cs2-team-13811","teamName":"QUINTESSÊNCIA"},{"map":"anubis","order":2,"action":"ban","teamId":"cs2-team-13907","teamName":"RUSH"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:07:01.475Z","lastVerified":"2026-09-23T03:07:01.475Z","confidence":"high","event":{"id":"cs2-event-9405","name":"CCT 2026 Challengers South America Series 3","slug":"cct-2026-challengers-south-america-series-3","status":"completed","tier":"B","region":"South America","startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-21T01:16:22.000Z","imageUrl":null,"eventId":"cs2-event-9405","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","bannerImageUrl":null},"team1":{"id":"cs2-team-11008","name":"RUSH","slug":"rush","teamTag":"RUSH","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/baa98090425384c3c4c98128b1d15abc.webp","countryName":"Brazil","countryCode":"BR","region":"South America","worldRanking":null,"lastSyncedAt":"2026-09-16T12:42:05.971Z","lastVerified":"2026-09-16T12:42:05.971Z","confidence":"high"},"team2":{"id":"cs2-team-13811","name":"QUINTESSÊNCIA","slug":"quintessncia","teamTag":"QUINTESS","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b83bfcf22f50f55d9a7b96441358a4e0.webp","countryName":"Brazil","countryCode":"BR","region":"Americas","worldRanking":132,"lastSyncedAt":"2026-09-23T03:09:20.146Z","lastVerified":"2026-09-23T03:09:20.146Z","confidence":"high"},"maps":[{"id":"cs2-match-2398340-map-1","matchId":"cs2-match-2398340","mapNumber":1,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[4,2],"team2Halves":[8,5],"winnerTeamId":"cs2-team-13811","durationRounds":19,"lastSyncedAt":"2026-09-23T01:12:19.011Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp","pickTeamId":"cs2-team-13811","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true},{"id":"cs2-match-2398340-map-2","matchId":"cs2-match-2398340","mapNumber":2,"mapName":"Mirage","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[2,0],"team2Halves":[10,3],"winnerTeamId":"cs2-team-13811","durationRounds":15,"lastSyncedAt":"2026-09-23T01:12:19.047Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/5c7a6366afcc1accfbe8258a89177b93.webp","pickTeamId":"cs2-team-13907","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{"playerStats":{}},"scorePending":true}],"eventLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","eventImageUrl":null,"eventBannerImageUrl":null,"availableSubresources":["maps","live_state"],"unavailableSubresources":["player_stats","objective_stats"],"unavailableFields":{},"dataQuality":"complete","confidenceScore":0.95,"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}],"meta":{"count":2,"indexedCount":2,"eventStructureCount":0,"dataAvailable":true,"event":{"id":"cs2-event-9405","name":"CCT 2026 Challengers South America Series 3","slug":"cct-2026-challengers-south-america-series-3","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","prizePool":2500,"currency":"USD","location":null,"format":"Playoffs: Double elimination Bo3","teamCount":null,"standings":null,"startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-21T01:16:22.000Z","status":"completed","tier":"B","prestigeScore":55,"region":"South America","isLan":true,"confirmedStatus":"detail_unavailable","streamLinks":null,"vodLinks":null,"lastSyncedAt":"2026-09-18T21:00:47.512Z","lastVerified":"2026-09-18T21:00:04.293Z","confidence":"high"},"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/events/{eventIdOrSlug}/stats":{"get":{"summary":"Event stats","description":"Top players and teams by stats within a tournament.","operationId":"getCs2EventsEventIdOrSlugStats","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Event stats","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_event_stats","eventId":"cs2-event-9405","eventName":"CCT 2026 Challengers South America Series 3","dataAvailable":true,"lastSyncedAt":"2026-09-23T01:40:58.954Z","demoCoverage":{"matchesIndexed":8,"demos":{"total":0,"byStatus":{}}},"topPlayers":[{"playerId":"cs2-player-24716","playerName":"cLd","teamId":"cs2-team-13907","teamName":"RUSH","maps":2,"kills":34,"deaths":24,"assists":11,"kdDiff":10,"kdRatio":1.4167,"adr":null,"kast":null,"rating":1.525,"rating3Profile":{"rating3":null,"rating3Available":false,"subratings":{"kills":17,"damage":null,"survival":1.875,"kast":null,"multiKills":null,"roundSwing":null},"openingDuels":{"openingKills":0,"openingDeaths":0,"successRate":null},"unavailableSubratings":["multi_kills","round_swing"],"rating2":1.525},"source":"live","lastSyncedAt":"2026-09-23T01:40:58.954Z"},{"playerId":"cs2-player-22423","playerName":"clon7","teamId":"cs2-team-13907","teamName":"RUSH","maps":2,"kills":37,"deaths":25,"assists":8,"kdDiff":12,"kdRatio":1.48,"adr":null,"kast":null,"rating":1.505,"rating3Profile":{"rating3":null,"rating3Available":false,"subratings":{"kills":18.5,"damage":null,"survival":1.8,"kast":null,"multiKills":null,"roundSwing":null},"openingDuels":{"openingKills":0,"openingDeaths":0,"successRate":null},"unavailableSubratings":["multi_kills","round_swing"],"rating2":1.505},"source":"live","lastSyncedAt":"2026-09-23T01:40:58.954Z"}],"topWeapons":[]},"meta":{"playerCount":2,"weaponCount":0,"dataAvailable":true,"demoCoverage":{"matchesIndexed":8,"demos":{"total":0,"byStatus":{}}}}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/events/{eventIdOrSlug}/bracket":{"get":{"summary":"Event bracket","description":"Bracket, group stage, play-in and Swiss structure of a tournament, each slot with its teams, scores and winner.","operationId":"getCs2EventsEventIdOrSlugBracket","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Event bracket","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_event_bracket","eventId":"cs2-event-9405","eventName":"CCT 2026 Challengers South America Series 3","dataAvailable":true,"bracket":[],"groupStage":[],"playIn":[],"swiss":null,"teams":[],"mapPool":[{"key":"cache","name":"Cache","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp"},{"key":"dust2","name":"Dust2","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/16948a6107149d6bce6ea2a0ace54d43.webp"}],"relatedEvents":[{"id":"cs2-event-9313","name":"CCT 2026 Challengers South America Series 2","slug":"cct-2026-challengers-south-america-series-2","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f0cb5ad3c32d928caa3bb237032de831.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f0cb5ad3c32d928caa3bb237032de831.webp"}],"completedMatchesFromStructure":[],"lastVerified":"2026-09-18T21:00:04.293Z"},"meta":{"dataAvailable":true,"swissAvailable":false,"completedStructureMatchCount":0}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/events/{eventIdOrSlug}":{"get":{"summary":"Event details","description":"One tournament: dates, location, prize pool, tier, teams and format.","operationId":"getCs2EventsEventIdOrSlug","tags":["CS2"],"parameters":[{"name":"eventIdOrSlug","in":"path","required":true,"description":"Event id (`cs2-event-8038`) or slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Event details","content":{"application/json":{"example":{"success":true,"data":{"entityType":"cs2_event","eventId":"cs2-event-9405","id":"cs2-event-9405","name":"CCT 2026 Challengers South America Series 3","slug":"cct-2026-challengers-south-america-series-3","status":"completed","confirmedStatus":"detail_unavailable","startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-21T01:16:22.000Z","tier":"B","prestigeScore":55,"region":"South America","isLan":true,"location":null,"prizePool":2500,"currency":"USD","prizeDistribution":[{"label":"Total prize pool","amount":2500,"percent":100,"currency":"USD"}],"format":"Playoffs: Double elimination Bo3","teamCount":null,"logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp","bannerImageUrl":null,"eventStructure":{"other":[],"teams":[],"playIn":[],"mapPool":[{"key":"cache","name":"Cache","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp"},{"key":"dust2","name":"Dust2","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/16948a6107149d6bce6ea2a0ace54d43.webp"}],"brackets":[],"groupStage":[],"allBrackets":[],"relatedEvents":[{"id":"cs2-event-9313","name":"CCT 2026 Challengers South America Series 2","slug":"cct-2026-challengers-south-america-series-2","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f0cb5ad3c32d928caa3bb237032de831.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/f0cb5ad3c32d928caa3bb237032de831.webp"}]},"hasBracketStructure":true,"standingsAvailable":false,"standings":null,"lastSyncedAt":"2026-09-18T21:00:47.512Z","lastVerified":null,"indexedMatchCount":8,"indexedParticipantCount":4,"participants":[{"eventId":"cs2-event-9405","teamId":"cs2-team-13907","teamName":"RUSH","seed":null,"placement":null,"status":"attending","lastSyncedAt":"2026-09-17T20:55:03.000Z"},{"eventId":"cs2-event-9405","teamId":"cs2-team-13978","teamName":"Sementes do Mal","seed":null,"placement":null,"status":"attending","lastSyncedAt":"2026-09-17T20:55:03.035Z"}],"matches":[{"id":"cs2-match-2398334","eventId":"cs2-event-9405","eventName":"CCT 2026 Challengers South America Series 3","eventSlug":"cct-2026-challengers-south-america-series-3","stageName":null,"startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-18T02:56:05.709Z","bestOf":3,"status":"completed","team1Id":"cs2-team-14045","team2Id":"cs2-team-14008","team1Name":"Underworld","team2Name":"your end","team1Score":1,"team2Score":2,"winnerTeamId":"cs2-team-14008","liveState":{"teams":{"team1Name":"Underworld","team2Name":"your end","ctTeamName":"your end","terroristTeamName":"Underworld"},"source":"live","status":"live","matchId":"cs2-match-2398334","roundEnds":[{},{}],"bombEvents":[{},{}],"capturedAt":"2026-09-18T02:45:25.848Z","currentMap":"de_ancient","team1Score":11,"team2Score":13,"bombPlanted":false,"playerStats":[{},{}],"currentRound":24,"scoreSummary":null,"winnerTeamId":null,"responseCount":1045,"eventNamesSeen":["Assist","BombPlanted"],"roundTimeSeconds":null,"mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":true,"unavailableReason":null,"confidence":{},"teamStats":[],"roundEvents":[{},{}]}},"vetoOrder":[{"map":"mirage","order":1,"action":"ban","teamId":"cs2-team-14008","teamName":"your end"},{"map":"anubis","order":2,"action":"ban","teamId":"cs2-team-14045","teamName":"Underworld"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:02:11.189Z","lastVerified":"2026-09-23T03:02:11.189Z","confidence":"high","event":{"id":"cs2-event-9405","name":"CCT 2026 Challengers South America Series 3","slug":"cct-2026-challengers-south-america-series-3","status":"completed","tier":"B","region":"South America","startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-21T01:16:22.000Z","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp"},"team1":{"id":"cs2-team-14045","name":"Underworld","slug":"underworld","teamTag":"UNDERWOR","logoUrl":null,"countryName":null,"countryCode":null,"region":null,"worldRanking":null,"lastSyncedAt":"2026-09-23T03:07:11.468Z","lastVerified":"2026-09-23T03:07:11.468Z","confidence":"high"},"team2":{"id":"cs2-team-14008","name":"your end","slug":"your-end","teamTag":"YOUREND","logoUrl":null,"countryName":null,"countryCode":null,"region":null,"worldRanking":192,"lastSyncedAt":"2026-09-23T03:09:33.979Z","lastVerified":"2026-09-23T03:09:33.979Z","confidence":"high"},"maps":[{"id":"cs2-match-2398334-map-1","matchId":"cs2-match-2398334","mapNumber":1,"mapName":"Inferno","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[6],"team2Halves":[6],"winnerTeamId":"cs2-team-14008","durationRounds":20,"lastSyncedAt":"2026-09-18T20:32:33.533Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/4004b70cfe62cef3b711c587bd0d342c.webp","pickTeamId":"cs2-team-14008","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{},"scorePending":true},{"id":"cs2-match-2398334-map-2","matchId":"cs2-match-2398334","mapNumber":2,"mapName":"Dust2","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[5],"team2Halves":[7],"winnerTeamId":"cs2-team-14045","durationRounds":24,"lastSyncedAt":"2026-09-23T03:07:00.643Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/16948a6107149d6bce6ea2a0ace54d43.webp","pickTeamId":"cs2-team-14045","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{},"scorePending":true}],"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}},{"id":"cs2-match-2398335","eventId":"cs2-event-9405","eventName":"CCT 2026 Challengers South America Series 3","eventSlug":"cct-2026-challengers-south-america-series-3","stageName":null,"startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-18T01:35:27.865Z","bestOf":3,"status":"completed","team1Id":"cs2-team-13907","team2Id":"cs2-team-13978","team1Name":"RUSH","team2Name":"Sementes do Mal","team1Score":2,"team2Score":0,"winnerTeamId":"cs2-team-13907","liveState":{"teams":{"team1Name":"RUSH","team2Name":"Sementes do Mal","ctTeamName":"RUSH","terroristTeamName":"Sementes do Mal"},"source":"live","status":"live","matchId":"cs2-match-2398335","roundEnds":[{},{}],"bombEvents":[{},{}],"capturedAt":"2026-09-18T01:21:07.639Z","currentMap":"de_mirage","team1Score":13,"team2Score":8,"bombPlanted":false,"playerStats":[{},{}],"currentRound":21,"scoreSummary":null,"winnerTeamId":null,"responseCount":1,"eventNamesSeen":["Assist","BombPlanted"],"roundTimeSeconds":null,"mapImageUrl":null,"pickTeamId":null,"objectiveStats":{"dataAvailable":true,"unavailableReason":null,"confidence":{},"teamStats":[],"roundEvents":[{},{}]}},"vetoOrder":[{"map":"nuke","order":1,"action":"ban","teamId":"cs2-team-13978","teamName":"Sementes do Mal"},{"map":"anubis","order":2,"action":"ban","teamId":"cs2-team-13907","teamName":"RUSH"}],"streamLinks":[{"url":null,"label":null,"language":null,"platform":"twitch"},{"url":null,"label":null,"language":null,"platform":"youtube"}],"vodLinks":[],"lastSyncedAt":"2026-09-23T03:02:11.922Z","lastVerified":"2026-09-23T03:02:11.922Z","confidence":"high","event":{"id":"cs2-event-9405","name":"CCT 2026 Challengers South America Series 3","slug":"cct-2026-challengers-south-america-series-3","status":"completed","tier":"B","region":"South America","startsAt":"2026-09-17T23:45:00.000Z","endsAt":"2026-09-21T01:16:22.000Z","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7211f321d8786082be2e104946e5c0a9.webp"},"team1":{"id":"cs2-team-13907","name":"RUSH","slug":"rush-13907","teamTag":"RUSH","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/7c531914f36436c8c3ff879db057eff6.webp","countryName":"Brazil","countryCode":"BR","region":"South America","worldRanking":224,"lastSyncedAt":"2026-09-23T03:08:38.333Z","lastVerified":"2026-09-23T03:08:38.333Z","confidence":"high"},"team2":{"id":"cs2-team-13978","name":"Sementes do Mal","slug":"sementes-do-mal","teamTag":"SDM","logoUrl":null,"countryName":null,"countryCode":null,"region":null,"worldRanking":246,"lastSyncedAt":"2026-09-23T03:09:54.964Z","lastVerified":"2026-09-23T03:09:54.964Z","confidence":"high"},"maps":[{"id":"cs2-match-2398335-map-1","matchId":"cs2-match-2398335","mapNumber":1,"mapName":"Cache","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[8],"team2Halves":[4],"winnerTeamId":"cs2-team-13907","durationRounds":20,"lastSyncedAt":"2026-09-23T01:40:48.366Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c442564b5d271f85b71cc038389bd4ea.webp","pickTeamId":"cs2-team-13978","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{},"scorePending":true},{"id":"cs2-match-2398335-map-2","matchId":"cs2-match-2398335","mapNumber":2,"mapName":"Mirage","status":"completed","team1Score":null,"team2Score":null,"team1Halves":[6],"team2Halves":[6],"winnerTeamId":"cs2-team-13907","durationRounds":21,"lastSyncedAt":"2026-09-23T01:41:15.210Z","mapImageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/5c7a6366afcc1accfbe8258a89177b93.webp","pickTeamId":"cs2-team-13907","resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":false,"unavailableReason":null,"dataAvailability":{},"scorePending":true}],"resultType":"played","resultStatus":"completed","isForfeit":false,"statsEligible":true,"unavailableReason":null,"dataAvailability":{"playerStats":{"dataAvailable":false,"unavailableReason":"not_yet_indexed"}}}],"stats":null,"availableSubresources":["matches","teams"],"unavailableSubresources":["standings"],"unavailableFields":{"imageUrl":{"reason":"event_field_unavailable"},"prizePool":{"reason":"event_field_unavailable"},"location":null,"teamCount":{"reason":"event_field_unavailable"},"standings":{"reason":"event_field_unavailable"},"startsAt":{"reason":"event_field_unavailable"},"endsAt":{"reason":"event_field_unavailable"}},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7},"meta":{}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/events":{"get":{"summary":"List events","description":"Tournaments with filters for status and date. List rows are compact; fetch one event for its full structure and standings.","operationId":"getCs2Events","tags":["CS2"],"parameters":[{"name":"fields","in":"query","required":false,"description":"Comma-separated list of fields to return.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"summary","in":"query","required":false,"description":"`true` returns a summary instead of full rows.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"List events","content":{"application/json":{"example":{"success":true,"data":[{"entityType":"cs2_event","eventId":"cs2-event-8300","id":"cs2-event-8300","name":"Major #2 2028","slug":"major-2-2028","status":"upcoming","confirmedStatus":"source_listed","startsAt":"2028-12-10T00:00:00.000Z","endsAt":"2028-12-10T23:59:59.000Z","tier":"S","prestigeScore":100,"region":"Europe","isLan":true,"location":null,"prizePool":null,"currency":"USD","format":null,"teamCount":4,"logoUrl":null,"imageUrl":null,"bannerImageUrl":null,"hasBracketStructure":true,"standingsAvailable":true,"lastSyncedAt":"2026-09-23T03:15:26.387Z","lastVerified":null,"indexedMatchCount":0,"indexedParticipantCount":0,"eventStructure":null,"prizeDistribution":null,"stats":null,"availableSubresources":["matches","standings"],"unavailableSubresources":["teams"],"unavailableFields":{"imageUrl":{"reason":"event_field_unavailable"},"prizePool":{"reason":"event_field_unavailable"},"location":null,"format":{"reason":"event_field_unavailable"},"teamCount":{"reason":"event_field_unavailable"},"standings":{"reason":"event_field_unavailable"},"startsAt":{"reason":"event_field_unavailable"},"endsAt":{"reason":"event_field_unavailable"}},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7},{"entityType":"cs2_event","eventId":"cs2-event-8822","id":"cs2-event-8822","name":"PGL Event #8 2028","slug":"pgl-event-8-2028","status":"upcoming","confirmedStatus":"source_listed","startsAt":"2028-11-13T00:00:00.000Z","endsAt":"2028-11-13T23:59:59.000Z","tier":null,"prestigeScore":null,"region":"Europe","isLan":true,"location":null,"prizePool":null,"currency":"USD","format":null,"teamCount":4,"logoUrl":null,"imageUrl":null,"bannerImageUrl":null,"hasBracketStructure":true,"standingsAvailable":true,"lastSyncedAt":"2026-09-23T03:15:26.259Z","lastVerified":null,"indexedMatchCount":0,"indexedParticipantCount":0,"eventStructure":null,"prizeDistribution":null,"stats":null,"availableSubresources":["matches","standings"],"unavailableSubresources":["teams"],"unavailableFields":{"imageUrl":{"reason":"event_field_unavailable"},"prizePool":{"reason":"event_field_unavailable"},"location":null,"format":{"reason":"event_field_unavailable"},"teamCount":{"reason":"event_field_unavailable"},"standings":{"reason":"event_field_unavailable"},"startsAt":{"reason":"event_field_unavailable"},"endsAt":{"reason":"event_field_unavailable"}},"dataQuality":"partial","confidence":"medium","confidenceScore":0.7}],"meta":{"page":1,"limit":2,"total":1308,"count":2,"totalPages":654,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/rankings/world":{"get":{"summary":"World ranking","description":"The latest world team ranking.","operationId":"getCs2RankingsWorld","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"World ranking","content":{"application/json":{"example":{"success":true,"data":[{"id":"ee06a068-2a5a-415c-aa25-9a6bd864aa0c","teamId":"cs2-team-7020","teamName":"Spirit","rank":1,"points":1000,"change":0,"region":"Europe","rankingDate":"2026-09-23T00:00:00.000Z","syncedAt":"2026-09-23T03:07:49.835Z","team":{"id":"cs2-team-7020","name":"Spirit","slug":"spirit","teamTag":"SPIRIT","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/608894028d96779c209b2fb4c03da37c.webp","countryName":"Russia","countryCode":"RU","region":"Europe","lastSyncedAt":"2026-09-23T03:11:27.600Z","lastVerified":"2026-09-23T03:11:27.600Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp"}},{"id":"23408c88-6ee3-4376-9120-13bb3b0085ba","teamId":"cs2-team-9565","teamName":"Vitality","rank":2,"points":682,"change":3,"region":"Europe","rankingDate":"2026-09-23T00:00:00.000Z","syncedAt":"2026-09-23T03:07:49.835Z","team":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"}}],"meta":{"count":2,"total":249,"page":1,"limit":2,"ranking":"world","rankingDate":"2026-09-23","changeSince":"2026-09-16","syncedAt":"2026-09-23T03:07:49.835Z","availability":"available","totalPages":125,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/rankings/vrs":{"get":{"summary":"Valve Regional Standings","description":"The latest Valve Regional Standings (VRS).","operationId":"getCs2RankingsVrs","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Valve Regional Standings","content":{"application/json":{"example":{"success":true,"data":[{"id":"b7fc5b81-d58e-4ca2-8842-30155e77f459","teamId":"cs2-team-7020","teamName":"Spirit","rank":1,"points":2037,"change":0,"region":"Europe","rankingDate":"2026-09-23T00:00:00.000Z","syncedAt":"2026-09-23T03:07:49.835Z","team":{"id":"cs2-team-7020","name":"Spirit","slug":"spirit","teamTag":"SPIRIT","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/608894028d96779c209b2fb4c03da37c.webp","countryName":"Russia","countryCode":"RU","region":"Europe","lastSyncedAt":"2026-09-23T03:11:27.600Z","lastVerified":"2026-09-23T03:11:27.600Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp"}},{"id":"b1048400-a473-4fa7-9379-5948627fb987","teamId":"cs2-team-12468","teamName":"Legacy","rank":2,"points":1893,"change":1,"region":"South America","rankingDate":"2026-09-23T00:00:00.000Z","syncedAt":"2026-09-23T03:07:49.835Z","team":{"id":"cs2-team-12468","name":"Legacy","slug":"legacy","teamTag":"LEGACY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/b2dd3b4f042fdde6c47649ace7587673.webp","countryName":"Brazil","countryCode":"BR","region":"South America","lastSyncedAt":"2026-09-23T03:08:44.227Z","lastVerified":"2026-09-23T03:08:44.227Z","confidence":"high"}}],"meta":{"count":2,"total":358,"page":1,"limit":2,"ranking":"vrs","rankingDate":"2026-09-23","changeSince":"2026-09-16","syncedAt":"2026-09-23T03:07:49.835Z","availability":"available","totalPages":179,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/rankings/region/{region}":{"get":{"summary":"Regional ranking","description":"The latest ranking for one region, with each team's world and regional rank. `region`: `europe`, `americas`, `north-america`, `south-america`, `asia` or `oceania` (short forms `eu`, `am`, `na`, `sa`, `as` also work).","operationId":"getCs2RankingsRegionRegion","tags":["CS2"],"parameters":[{"name":"region","in":"path","required":true,"description":"Region: `europe`, `americas`, `north-america`, `south-america`, `asia`, `oceania`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"source","in":"query","required":false,"description":"Ranking to use: omit for Valve Regional Standings, or `world` for the world ranking filtered to this region.","schema":{"type":"string"}}],"responses":{"200":{"description":"Regional ranking","content":{"application/json":{"example":{"success":true,"data":[{"id":"b7fc5b81-d58e-4ca2-8842-30155e77f459","teamId":"cs2-team-7020","teamName":"Spirit","rank":1,"points":2037,"change":null,"region":"Europe","rankingDate":"2026-09-23T00:00:00.000Z","syncedAt":"2026-09-23T03:07:49.835Z","team":{"id":"cs2-team-7020","name":"Spirit","slug":"spirit","teamTag":"SPIRIT","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/608894028d96779c209b2fb4c03da37c.webp","countryName":"Russia","countryCode":"RU","region":"Europe","worldRanking":1,"lastSyncedAt":"2026-09-23T03:11:27.600Z","lastVerified":"2026-09-23T03:11:27.600Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp"},"regionalRank":1},{"id":"6a89657d-215b-43ea-9734-b93d79f710fd","teamId":"cs2-team-9565","teamName":"Vitality","rank":3,"points":1877,"change":null,"region":"Europe","rankingDate":"2026-09-23T00:00:00.000Z","syncedAt":"2026-09-23T03:07:49.835Z","team":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","worldRanking":2,"lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"},"regionalRank":2}],"meta":{"region":"europe","rankingDate":"2026-09-23","count":2,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/rankings/teams":{"get":{"summary":"Team rankings","description":"The latest world team ranking, one row per team, with points and change since the previous ranking.\n\nSame response as `GET /api/v1/cs2/rankings`.","operationId":"getCs2RankingsTeams","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"source","in":"query","required":false,"description":"Ranking to use: omit for Valve Regional Standings, or `world` for the world ranking filtered to this region.","schema":{"type":"string"}}],"responses":{"200":{"description":"Team rankings"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/rankings"}},"/cs2/rankings":{"get":{"summary":"Team rankings","description":"The latest world team ranking, one row per team, with points and change since the previous ranking.","operationId":"getCs2Rankings","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"offset","in":"query","required":false,"description":"Rows to skip, for paging.","schema":{"type":"integer","minimum":0}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1}},{"name":"source","in":"query","required":false,"description":"Ranking to use: omit for Valve Regional Standings, or `world` for the world ranking filtered to this region.","schema":{"type":"string"}}],"responses":{"200":{"description":"Team rankings","content":{"application/json":{"example":{"success":true,"data":[{"id":"ee06a068-2a5a-415c-aa25-9a6bd864aa0c","teamId":"cs2-team-7020","teamName":"Spirit","rank":1,"points":1000,"change":0,"region":"Europe","rankingDate":"2026-09-23T00:00:00.000Z","syncedAt":"2026-09-23T03:07:49.835Z","team":{"id":"cs2-team-7020","name":"Spirit","slug":"spirit","teamTag":"SPIRIT","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/608894028d96779c209b2fb4c03da37c.webp","countryName":"Russia","countryCode":"RU","region":"Europe","lastSyncedAt":"2026-09-23T03:11:27.600Z","lastVerified":"2026-09-23T03:11:27.600Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/25ac49209b09795f64e76b9800aa5b5c.webp"}},{"id":"23408c88-6ee3-4376-9120-13bb3b0085ba","teamId":"cs2-team-9565","teamName":"Vitality","rank":2,"points":682,"change":3,"region":"Europe","rankingDate":"2026-09-23T00:00:00.000Z","syncedAt":"2026-09-23T03:07:49.835Z","team":{"id":"cs2-team-9565","name":"Vitality","slug":"vitality","teamTag":"VITALITY","logoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/0cd34febd1ad61ff888f21b55756003b.webp","countryName":"France","countryCode":"FR","region":"Europe","lastSyncedAt":"2026-09-23T03:08:44.625Z","lastVerified":"2026-09-23T03:08:44.625Z","confidence":"high","alternateLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp","darkUiLogoUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/c5e463f9b2347d3aa58794fb8f7ec967.webp"}}],"meta":{"count":2,"total":249,"page":1,"limit":2,"ranking":"world","rankingDate":"2026-09-23","changeSince":"2026-09-16","syncedAt":"2026-09-23T03:07:49.835Z","availability":"available","totalPages":125,"hasNext":true,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/leaderboards/{metric}":{"get":{"summary":"Player leaderboard","description":"Top players by one metric over a recent window, with a minimum number of maps. `metric`: `rating`, `adr`, `kast`, `kd`, `kills` or `opening-kills`.","operationId":"getCs2LeaderboardsMetric","tags":["CS2"],"parameters":[{"name":"metric","in":"path","required":true,"description":"One of `rating`, `adr`, `kast`, `kd`, `kills`, `opening-kills`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"min_maps","in":"query","required":false,"description":"Minimum maps played to be included.","schema":{"type":"integer","minimum":0}},{"name":"window_days","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Player leaderboard","content":{"application/json":{"example":{"success":true,"data":[{"playerId":"cs2-player-17384","playerName":"Vexite","teamId":"cs2-team-12774","teamName":"FlyQuest","maps":29,"rating":1.52,"adr":85.9,"kast":0.859,"kills":438,"deaths":310,"openingKills":46,"kd":1.41,"player":{"id":"cs2-player-17384","nickname":"Vexite","slug":"vexite","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/042a64a7af4293ee4960693f2c787d70.webp","countryName":"Australia","countryCode":"AU"}},{"playerId":"cs2-player-4679","playerName":"jks","teamId":"cs2-team-12774","teamName":"FlyQuest","maps":28,"rating":1.43,"adr":82.2,"kast":0.771,"kills":412,"deaths":278,"openingKills":38,"kd":1.48,"player":{"id":"cs2-player-4679","nickname":"jks","slug":"jks","imageUrl":"https://api.citoapi.com/api/v1/public/images/cs2/logos/6c6cf0b51b83088a93334afcd6eb1640.webp","countryName":"Australia","countryCode":"AU"}}],"meta":{"metric":"rating","count":2,"aggregated":true,"windowDays":90,"minMaps":20,"availability":"available","limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"400":{"description":"Unsupported metric."},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."},"404":{"description":"No record with that id or slug."}}}},"/cs2/stats/players":{"get":{"summary":"Player stat leaders","description":"Players ranked by total kills, one row per player, with maps, K/D, ADR, KAST, rating and opening duels.","operationId":"getCs2StatsPlayers","tags":["CS2"],"parameters":[{"name":"days","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"window_days","in":"query","required":false,"description":"Look-back window in days.","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Player stat leaders","content":{"application/json":{"example":{"success":true,"data":[{"playerId":"cs2-player-21708","playerName":"npl","teamId":"cs2-team-11241","teamName":"B8","maps":338,"kills":5379,"deaths":5132,"assists":677,"kdRatio":1.0481,"adr":79.07878472222222,"kast":0.7236527777777778,"rating":1.0897278106508876,"openingKills":342,"openingDeaths":317,"openingDuelSuccessRate":0.519,"rating3Profile":{"rating3":null,"rating3Available":false,"subratings":{"kills":15.914,"damage":79.07878472222222,"survival":1.18,"kast":0.7236527777777778,"multiKills":null,"roundSwing":null},"openingDuels":{"openingKills":342,"openingDeaths":317,"successRate":0.519},"unavailableSubratings":["multi_kills","round_swing"],"rating2":1.0897278106508876},"source":"match_stats"},{"playerId":"cs2-player-16948","playerName":"TRAVIS","teamId":"cs2-team-13214","teamName":"SPARTA","maps":357,"kills":5356,"deaths":5035,"assists":1056,"kdRatio":1.0638,"adr":76.59497975708501,"kast":0.741314979757085,"rating":1.0780169014084506,"openingKills":432,"openingDeaths":456,"openingDuelSuccessRate":0.4865,"rating3Profile":{"rating3":null,"rating3Available":false,"subratings":{"kills":15.003,"damage":76.59497975708501,"survival":1.2735,"kast":0.741314979757085,"multiKills":null,"roundSwing":null},"openingDuels":{"openingKills":432,"openingDeaths":456,"successRate":0.4865},"unavailableSubratings":["multi_kills","round_swing"],"rating2":1.0780169014084506},"source":"match_stats"}],"meta":{"category":"players","count":2,"source":"match_stats","dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/stats/teams":{"get":{"summary":"Team stat leaders","description":"Teams by maps played over a recent window (`days`, default 365; `min_maps`, default 10), with match, map and round win rates from completed maps.","operationId":"getCs2StatsTeams","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"min_maps","in":"query","required":false,"description":"Minimum maps played to be included.","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Team stat leaders","content":{"application/json":{"example":{"success":true,"data":[{"teamId":"cs2-team-13027","teamName":"Nuclear TigeRES","matches":166,"matchWins":107,"matchWinPercent":0.6446,"maps":381,"mapWins":198,"mapLosses":183,"mapWinPercent":0.5197,"roundsFor":4238,"roundsAgainst":4053,"roundWinPercent":0.5112},{"teamId":"cs2-team-12895","teamName":"K27","matches":145,"matchWins":94,"matchWinPercent":0.6483,"maps":336,"mapWins":192,"mapLosses":144,"mapWinPercent":0.5714,"roundsFor":3796,"roundsAgainst":3473,"roundWinPercent":0.5222}],"meta":{"category":"teams","count":2,"windowDays":365,"minMaps":10,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/stats/maps":{"get":{"summary":"Map stats","description":"How many times each map was played in completed matches over a recent window (`days`, default 365), most played first, with its share of all maps.","operationId":"getCs2StatsMaps","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Map stats","content":{"application/json":{"example":{"success":true,"data":[{"mapName":"Dust II","mapsPlayed":3623,"share":0.1955},{"mapName":"Mirage","mapsPlayed":3219,"share":0.1737}],"meta":{"category":"maps","count":2,"windowDays":365,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/stats/weapons":{"get":{"summary":"Weapon stats","description":"Kills and headshot rate by weapon across parsed demos, with each weapon's share of all kills.","operationId":"getCs2StatsWeapons","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Weapon stats","content":{"application/json":{"example":{"success":true,"data":[{"weapon":"AK-47","kills":43201,"headshots":25978,"headshotPercent":0.6013,"killShare":0.3448,"maps":856},{"weapon":"M4A1-S","kills":17551,"headshots":7324,"headshotPercent":0.4173,"killShare":0.1401,"maps":851}],"meta":{"category":"weapons","count":2,"dataAvailable":true,"dataScope":"parsed_demos","limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/stats/pistol-rounds":{"get":{"summary":"Pistol round stats","description":"Team pistol round win rates. Currently being recomputed: returns `data_available: false` with `unavailable_reason: being_recomputed`.","operationId":"getCs2StatsPistolRounds","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"min_maps","in":"query","required":false,"description":"Minimum maps played to be included.","schema":{"type":"integer","minimum":0}}],"responses":{"200":{"description":"Pistol round stats","content":{"application/json":{"example":{"success":true,"data":[],"meta":{"category":"pistol-rounds","count":0,"dataAvailable":false,"unavailableReason":"being_recomputed","message":"Side and buy-type round win rates are being recomputed and are not available yet.","limit":0,"total":0,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/stats/opening-duels":{"get":{"summary":"Opening duel stats","description":"Players ranked by first kills and opening duel win rate.","operationId":"getCs2StatsOpeningDuels","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Opening duel stats","content":{"application/json":{"example":{"success":true,"data":[{"playerId":"cs2-player-22676","playerName":"karnez","teamId":"cs2-team-13924","teamName":"Black Phoenix","maps":239,"openingKills":693,"openingDeaths":664,"openingDuelAttempts":1357,"openingDuelSuccessRate":0.5106853352984525,"kills":3975,"deaths":3806},{"playerId":"cs2-player-21369","playerName":"1NVISIBLEE","teamId":"cs2-team-12609","teamName":"Lavked","maps":197,"openingKills":688,"openingDeaths":771,"openingDuelAttempts":1459,"openingDuelSuccessRate":0.4715558601782042,"kills":3118,"deaths":3421}],"meta":{"category":"opening-duels","count":2,"dataAvailable":true,"limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/stats/clutches":{"get":{"summary":"Clutch stats","description":"Players ranked by clutch wins. Currently being recomputed: returns `data_available: false` with `unavailable_reason: being_recomputed`.","operationId":"getCs2StatsClutches","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Clutch stats","content":{"application/json":{"example":{"success":true,"data":[],"meta":{"category":"clutches","count":0,"dataAvailable":false,"unavailableReason":"being_recomputed","message":"Clutch statistics are being recomputed and are not available yet.","limit":0,"total":0,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/stats/flash-assists":{"get":{"summary":"Flash assist stats","description":"Players ranked by flash assists.","operationId":"getCs2StatsFlashAssists","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Flash assist stats","content":{"application/json":{"example":{"success":true,"data":[{"playerId":"cs2-player-22481","playerName":"Chucky","teamId":"cs2-team-11609","teamName":"GenOne","flashAssists":221,"maps":89,"flashAssistsPerMap":2.4831},{"playerId":"cs2-player-23598","playerName":"noni","teamId":"cs2-team-12194","teamName":"Rune Eaters","flashAssists":142,"maps":63,"flashAssistsPerMap":2.254}],"meta":{"category":"flash-assists","count":2,"dataAvailable":true,"dataScope":"flash_assists_from_player_death_assistedflash","limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/stats/utility":{"get":{"summary":"Utility stats","description":"Players ranked by grenades thrown, by type. Updated hourly.","operationId":"getCs2StatsUtility","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Utility stats","content":{"application/json":{"example":{"success":true,"data":[{"playerId":"cs2-player-21263","playerName":"olimp","teamId":"cs2-team-13808","teamName":"Walczaki","maps":112,"utilityEvents":7567,"flashes":2132,"smokes":2509,"fireGrenades":1710,"heGrenades":1209,"decoys":7,"utilityPerMap":67.5625,"lastSyncedAt":"2026-08-01T12:47:53.691Z"},{"playerId":"cs2-player-19738","playerName":"djokooo","teamId":"cs2-team-11609","teamName":"GenOne","maps":159,"utilityEvents":7297,"flashes":2413,"smokes":1757,"fireGrenades":1764,"heGrenades":1357,"decoys":6,"utilityPerMap":45.8931,"lastSyncedAt":"2026-08-01T14:37:51.857Z"}],"meta":{"category":"utility","count":2,"dataAvailable":true,"dataScope":"player_utility_throws_by_type","limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/stats/economy":{"get":{"summary":"Economy stats","description":"Players ranked by spend, with full-buy, half-buy, force-buy and eco round counts. Updated hourly.","operationId":"getCs2StatsEconomy","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 200; larger values are reduced to 200.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"Economy stats","content":{"application/json":{"example":{"success":true,"data":[{"playerId":"cs2-player-21971","playerName":"brooxsy","teamId":"cs2-team-11609","teamName":"GenOne","maps":179,"purchases":26551,"totalSpend":16058200,"avgEquipmentValue":3887.96,"equipmentSnapshots":3833,"fullBuyRounds":2481,"halfBuyRounds":423,"forceBuyRounds":241,"ecoOrPistolRounds":688,"spendPerMap":89710.6145,"lastSyncedAt":"2026-08-01T14:37:51.857Z"},{"playerId":"cs2-player-24818","playerName":"k4nfuz-","teamId":"cs2-team-13214","teamName":"SPARTA","maps":177,"purchases":25567,"totalSpend":15764050,"avgEquipmentValue":3857.99,"equipmentSnapshots":3825,"fullBuyRounds":2413,"halfBuyRounds":405,"forceBuyRounds":300,"ecoOrPistolRounds":707,"spendPerMap":89062.4294,"lastSyncedAt":"2026-08-01T23:08:53.397Z"}],"meta":{"category":"economy","count":2,"dataAvailable":true,"dataScope":"player_purchase_and_freeze_end_equipment_summary","limit":2,"total":2,"page":1,"totalPages":1,"hasNext":false,"hasPrev":false}}}}},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}}}},"/cs2/upcoming":{"get":{"summary":"Upcoming matches","description":"Scheduled matches, soonest first.\n\nSame response as `GET /api/v1/cs2/matches/upcoming`.","operationId":"getCs2Upcoming","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Upcoming matches"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/matches/upcoming"}},"/cs2/results":{"get":{"summary":"Recent results","description":"Finished matches with final series score and winner, newest first.\n\nSame response as `GET /api/v1/cs2/matches/recent`.","operationId":"getCs2Results","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Recent results"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/matches/recent"}},"/cs2/recent":{"get":{"summary":"Recent results","description":"Finished matches with final series score and winner, newest first.\n\nSame response as `GET /api/v1/cs2/matches/recent`.","operationId":"getCs2Recent","tags":["CS2"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows to return. Maximum 100; larger values are reduced to 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Recent results"},"401":{"description":"Missing or invalid API key."},"403":{"description":"Your plan does not include CS2."}},"x-alias-of":"/cs2/matches/recent"}},"/raf":{"get":{"tags":["RAF Wrestling"],"summary":"RAF overview","description":"League summary, counts, next and last event, current champions.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/search":{"get":{"tags":["RAF Wrestling"],"summary":"Search athletes and events","description":"Name or slug to ids. Use before deep calls.","parameters":[{"name":"q","in":"query","description":"Free-text filter.","schema":{"type":"string"},"required":true},{"name":"type","in":"query","schema":{"type":"string","enum":["athlete","event"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/RafSearchResult"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/sync/status":{"get":{"tags":["RAF Wrestling"],"summary":"Data freshness","description":"Last successful sync, failed fetches in 24 h, counts.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/coverage":{"get":{"tags":["RAF Wrestling"],"summary":"Field coverage per event","description":"How many bouts carry period scores, takedowns, confirmed method and end time.","parameters":[{"name":"event","in":"query","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/rules":{"get":{"tags":["RAF Wrestling"],"summary":"Ruleset","description":"Periods, scoring values, win methods, tiebreak and rule versions by event.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/events":{"get":{"tags":["RAF Wrestling"],"summary":"List events","description":"All RAF events, newest first.","parameters":[{"name":"status","in":"query","description":"scheduled, live, completed (comma-separated).","schema":{"type":"string"}},{"name":"type","in":"query","schema":{"type":"string","enum":["flagship","international"]}},{"name":"from","in":"query","description":"Earliest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Latest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"q","in":"query","description":"Free-text filter.","schema":{"type":"string"}},{"name":"includeBouts","in":"query","schema":{"type":"boolean"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/RafEvent"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/events/upcoming":{"get":{"tags":["RAF Wrestling"],"summary":"Upcoming events","description":"Scheduled and live events, soonest first, with their cards.","parameters":[{"name":"includeBouts","in":"query","schema":{"type":"boolean"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/RafEvent"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/events/recent":{"get":{"tags":["RAF Wrestling"],"summary":"Recent results","description":"Completed events, newest first.","parameters":[{"name":"includeBouts","in":"query","schema":{"type":"boolean"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/RafEvent"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/events/{slug}":{"get":{"tags":["RAF Wrestling"],"summary":"Event detail","description":"Event with its full card (main event first).","parameters":[{"name":"slug","in":"path","required":true,"description":"Event slug (raf07, raf-georgia; \"RAF 7\" and raf-07 also resolve).","schema":{"type":"string"}},{"name":"includeBouts","in":"query","schema":{"type":"boolean"}},{"name":"includeCancelled","in":"query","description":"Include bouts that left the card.","schema":{"type":"boolean"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/RafEvent"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/events/{slug}/bouts":{"get":{"tags":["RAF Wrestling"],"summary":"Event card","description":"Every bout on the card in official order. Aliases: /fights, /fight-card, /card.","parameters":[{"name":"slug","in":"path","required":true,"description":"Event slug (raf07, raf-georgia; \"RAF 7\" and raf-07 also resolve).","schema":{"type":"string"}},{"name":"includeCancelled","in":"query","description":"Include bouts that left the card.","schema":{"type":"boolean"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/RafBout"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/events/{slug}/results":{"get":{"tags":["RAF Wrestling"],"summary":"Event results","description":"Completed bouts only. Alias: /stats.","parameters":[{"name":"slug","in":"path","required":true,"description":"Event slug (raf07, raf-georgia; \"RAF 7\" and raf-07 also resolve).","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/RafBout"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/bouts":{"get":{"tags":["RAF Wrestling"],"summary":"Query bouts","description":"Bouts across all events. Aliases: /fights, /matches.","parameters":[{"name":"event","in":"query","schema":{"type":"string"}},{"name":"athlete","in":"query","description":"Athlete slug or name; adds a perspective block.","schema":{"type":"string"}},{"name":"opponent","in":"query","schema":{"type":"string"}},{"name":"weightClass","in":"query","schema":{"type":"string"}},{"name":"gender","in":"query","schema":{"type":"string","enum":["male","female"]}},{"name":"method","in":"query","schema":{"type":"string","description":"decision, criteria, tech_fall, fall, injury_default (comma-separated)"}},{"name":"title","in":"query","schema":{"type":"boolean"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"from","in":"query","description":"Earliest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Latest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"includeCancelled","in":"query","description":"Include bouts that left the card.","schema":{"type":"boolean"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/RafBout"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/bouts/{boutId}":{"get":{"tags":["RAF Wrestling"],"summary":"Bout detail","description":"Result, method, final score, takedowns, per-period scores.","parameters":[{"name":"boutId","in":"path","required":true,"description":"Bout id from an event card: {event}--{athleteA}--{athleteB}.","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/RafBout"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/bouts/{boutId}/periods":{"get":{"tags":["RAF Wrestling"],"summary":"Per-period scores","description":"Points per period and running totals. Alias: /rounds.","parameters":[{"name":"boutId","in":"path","required":true,"description":"Bout id from an event card: {event}--{athleteA}--{athleteB}.","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/bouts/{boutId}/stats":{"get":{"tags":["RAF Wrestling"],"summary":"Bout stats","description":"Points, takedowns, takedown vs other points, points by period. Starter plan and above.","parameters":[{"name":"boutId","in":"path","required":true,"description":"Bout id from an event card: {event}--{athleteA}--{athleteB}.","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/athletes":{"get":{"tags":["RAF Wrestling"],"summary":"List athletes","description":"Roster with records. Aliases: /wrestlers, /fighters.","parameters":[{"name":"q","in":"query","description":"Free-text filter.","schema":{"type":"string"}},{"name":"gender","in":"query","schema":{"type":"string","enum":["male","female"]}},{"name":"country","in":"query","schema":{"type":"string"}},{"name":"division","in":"query","schema":{"type":"string"}},{"name":"champion","in":"query","schema":{"type":"boolean"}},{"name":"active","in":"query","schema":{"type":"boolean"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/RafAthlete"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/athletes/{slug}":{"get":{"tags":["RAF Wrestling"],"summary":"Athlete profile","description":"Profile, record, titles, recent and upcoming bouts; includeStats=true adds career stats.","parameters":[{"name":"slug","in":"path","required":true,"description":"Athlete slug, e.g. kyle-snyder.","schema":{"type":"string"}},{"name":"includeStats","in":"query","schema":{"type":"boolean"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/RafAthlete"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/athletes/{slug}/bouts":{"get":{"tags":["RAF Wrestling"],"summary":"Athlete bout history","description":"Every bout from the athlete's perspective. Aliases: /history, /fights, /matches.","parameters":[{"name":"slug","in":"path","required":true,"description":"Athlete slug, e.g. kyle-snyder.","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/RafBout"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/athletes/{slug}/stats":{"get":{"tags":["RAF Wrestling"],"summary":"Athlete career stats","description":"Wins by method, criteria record, points and takedowns per bout, scoring by period, streak. Starter plan and above.","parameters":[{"name":"slug","in":"path","required":true,"description":"Athlete slug, e.g. kyle-snyder.","schema":{"type":"string"}},{"name":"from","in":"query","description":"Earliest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Latest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/athletes/{slug}/h2h/{opponent}":{"get":{"tags":["RAF Wrestling"],"summary":"Head-to-head (path form)","description":"Same as /raf/h2h.","parameters":[{"name":"slug","in":"path","required":true,"description":"Athlete slug, e.g. kyle-snyder.","schema":{"type":"string"}},{"name":"opponent","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/h2h":{"get":{"tags":["RAF Wrestling"],"summary":"Head-to-head","description":"Meetings, record and common opponents. Alias: /head-to-head.","parameters":[{"name":"athlete1","in":"query","required":true,"schema":{"type":"string"}},{"name":"athlete2","in":"query","required":true,"schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/divisions":{"get":{"tags":["RAF Wrestling"],"summary":"Divisions","description":"8 men's and 4 women's weight classes with limits and current champion. Alias: /weight-classes.","parameters":[{"name":"gender","in":"query","schema":{"type":"string","enum":["male","female"]}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/divisions/{division}":{"get":{"tags":["RAF Wrestling"],"summary":"Division detail","description":"Title holder, recent bouts and athletes in a division.","parameters":[{"name":"division","in":"path","required":true,"description":"Division key (men-heavyweight, women-strawweight, catchweight, crossover-cruiserweight).","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/champions":{"get":{"tags":["RAF Wrestling"],"summary":"Current champions","description":"Undisputed, interim, crossover and legends titles, including vacancies. Alias: /titles.","parameters":[{"name":"type","in":"query","schema":{"type":"string","enum":["undisputed","interim","crossover","legends"]}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/RafTitle"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/titles/{titleKey}":{"get":{"tags":["RAF Wrestling"],"summary":"Title detail","description":"Champion, observed changes and title bouts in that division.","parameters":[{"name":"titleKey","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/live":{"get":{"tags":["RAF Wrestling"],"summary":"Live cards","description":"Cards in progress or finished in the last 12 h: results so far, probable next bout. No in-bout score or clock.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/live/health":{"get":{"tags":["RAF Wrestling"],"summary":"Live pipeline health","description":"Poll interval and freshness.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/live/stream":{"get":{"tags":["RAF Wrestling"],"summary":"Live stream (SSE)","description":"Server-sent events: bout_result, card_change, correction, ping. Billed one request per interval while open.","parameters":[{"name":"eventSlug","in":"query","schema":{"type":"string"}},{"name":"boutId","in":"query","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"text/event-stream","content":{"text/event-stream":{"schema":{"type":"string"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/live/events/{slug}":{"get":{"tags":["RAF Wrestling"],"summary":"Live card for one event","description":"Alias: /raf/events/{slug}/live.","parameters":[{"name":"slug","in":"path","required":true,"description":"Event slug (raf07, raf-georgia; \"RAF 7\" and raf-07 also resolve).","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/raf/live/{boutId}":{"get":{"tags":["RAF Wrestling"],"summary":"Live bout state","description":"Scheduled, or the result once the bout finishes. Alias: /state.","parameters":[{"name":"boutId","in":"path","required":true,"description":"Bout id from an event card: {event}--{athleteA}--{athleteB}.","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}},"404":{"description":"Not found (RAF_EVENT_NOT_FOUND, RAF_BOUT_NOT_FOUND, RAF_ATHLETE_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RafError"}}}}}}},"/bkfc":{"get":{"tags":["BKFC"],"summary":"BKFC overview","description":"Counts, next event, current champions.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/search":{"get":{"tags":["BKFC"],"summary":"Search fighters and events","description":"Name, nickname or slug to ids.","parameters":[{"name":"q","in":"query","required":true,"description":"Search text.","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"fighter or event","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Page size (max 100).","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/sync/status":{"get":{"tags":["BKFC"],"summary":"Data freshness","description":"Last successful sync and counts.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/events":{"get":{"tags":["BKFC"],"summary":"List events","description":"Every BKFC event since 2018, newest first. Alias: /fight-cards.","parameters":[{"name":"status","in":"query","required":false,"description":"scheduled, live, completed, cancelled (comma-separated)","schema":{"type":"string"}},{"name":"type","in":"query","required":false,"description":"numbered, fight_night, prospect, other","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Earliest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Latest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"q","in":"query","required":false,"description":"Name / venue filter","schema":{"type":"string"}},{"name":"includeBouts","in":"query","required":false,"description":"Add each card","schema":{"type":"boolean"}},{"name":"page","in":"query","required":false,"description":"Page number.","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","required":false,"description":"Page size (max 100).","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/BkfcEvent"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/events/upcoming":{"get":{"tags":["BKFC"],"summary":"Upcoming events","description":"Scheduled and live cards, soonest first, with full cards.","parameters":[{"name":"limit","in":"query","required":false,"description":"Page size (max 100).","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/BkfcEvent"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/events/recent":{"get":{"tags":["BKFC"],"summary":"Recent results","description":"Completed events, newest first.","parameters":[{"name":"includeBouts","in":"query","required":false,"description":"Add each card","schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"description":"Page size (max 100).","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/BkfcEvent"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/events/{slug}":{"get":{"tags":["BKFC"],"summary":"Event detail","description":"Event with its full card in official order.","parameters":[{"name":"slug","in":"path","required":true,"description":"Event slug (bkfc-50-denver; \"bkfc-50\" also resolves).","schema":{"type":"string"}},{"name":"includeRounds","in":"query","required":false,"description":"Add round-by-round punch stats to each bout.","schema":{"type":"boolean"}},{"name":"includeCancelled","in":"query","required":false,"description":"Include bouts that left the card (with the reason).","schema":{"type":"boolean"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/BkfcEvent"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/events/{slug}/bouts":{"get":{"tags":["BKFC"],"summary":"Event card","description":"Every bout on the card. Aliases: /fights, /fight-card, /card; /results returns completed bouts only.","parameters":[{"name":"slug","in":"path","required":true,"description":"Event slug (bkfc-50-denver; \"bkfc-50\" also resolves).","schema":{"type":"string"}},{"name":"includeRounds","in":"query","required":false,"description":"Add round-by-round punch stats to each bout.","schema":{"type":"boolean"}},{"name":"includeCancelled","in":"query","required":false,"description":"Include bouts that left the card (with the reason).","schema":{"type":"boolean"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/BkfcBout"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/bouts":{"get":{"tags":["BKFC"],"summary":"Query bouts","description":"Bouts across all events. Alias: /fights.","parameters":[{"name":"event","in":"query","required":false,"description":"Event slug","schema":{"type":"string"}},{"name":"fighter","in":"query","required":false,"description":"Fighter slug or name (adds a perspective block)","schema":{"type":"string"}},{"name":"opponent","in":"query","required":false,"description":"Opponent slug or name","schema":{"type":"string"}},{"name":"weightClass","in":"query","required":false,"description":"e.g. middleweight","schema":{"type":"string"}},{"name":"method","in":"query","required":false,"description":"ko, tko, decision_unanimous, decision_split, decision_majority, dq, draw, no_contest (comma-separated)","schema":{"type":"string"}},{"name":"title","in":"query","required":false,"description":"Title fights only","schema":{"type":"boolean"}},{"name":"status","in":"query","required":false,"description":"scheduled, live, completed, cancelled","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Earliest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Latest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"includeCancelled","in":"query","required":false,"description":"Include bouts that left the card (with the reason).","schema":{"type":"boolean"}},{"name":"page","in":"query","required":false,"description":"Page number.","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","required":false,"description":"Page size (max 100).","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/BkfcBout"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/bouts/{boutId}":{"get":{"tags":["BKFC"],"summary":"Bout detail","description":"Result, method, round and time, referee, weigh-in weights, totals and round-by-round punch stats.","parameters":[{"name":"boutId","in":"path","required":true,"description":"Bout id from an event card: {event}--{fighterA}--{fighterB}.","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/BkfcBout"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/bouts/{boutId}/rounds":{"get":{"tags":["BKFC"],"summary":"Round-by-round punch stats","description":"Per corner per round: landed/thrown/missed, head/body, distance/clinch, knockdowns. Alias: /stats. Starter plan and above.","parameters":[{"name":"boutId","in":"path","required":true,"description":"Bout id from an event card: {event}--{fighterA}--{fighterB}.","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/fighters":{"get":{"tags":["BKFC"],"summary":"List fighters","description":"Roster with records. Alias: /athletes.","parameters":[{"name":"q","in":"query","required":false,"description":"Name / nickname","schema":{"type":"string"}},{"name":"division","in":"query","required":false,"description":"e.g. middleweight","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Active / Inactive","schema":{"type":"string"}},{"name":"nationality","in":"query","required":false,"description":"Country","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number.","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","required":false,"description":"Page size (max 100).","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/BkfcFighter"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/fighters/{slug}":{"get":{"tags":["BKFC"],"summary":"Fighter profile","description":"Bio, record, rankings, recent and upcoming fights.","parameters":[{"name":"slug","in":"path","required":true,"description":"Fighter slug (e.g. mike-perry), alias or feed id.","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/BkfcFighter"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/fighters/{slug}/fights":{"get":{"tags":["BKFC"],"summary":"Fight history","description":"Every bout from the fighter's perspective. Aliases: /history, /bouts, /matches.","parameters":[{"name":"slug","in":"path","required":true,"description":"Fighter slug (e.g. mike-perry), alias or feed id.","schema":{"type":"string"}},{"name":"includeRounds","in":"query","required":false,"description":"Add round-by-round punch stats to each bout.","schema":{"type":"boolean"}},{"name":"includeCancelled","in":"query","required":false,"description":"Include bouts that left the card (with the reason).","schema":{"type":"boolean"}},{"name":"page","in":"query","required":false,"description":"Page number.","schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","required":false,"description":"Page size (max 100).","schema":{"type":"integer","minimum":1,"maximum":100}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/BkfcBout"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/fighters/{slug}/stats":{"get":{"tags":["BKFC"],"summary":"Career punch stats","description":"Landed/thrown/accuracy, absorbed, per bout and per minute, head/body and distance/clinch, knockdowns, wins by method. Starter plan and above.","parameters":[{"name":"slug","in":"path","required":true,"description":"Fighter slug (e.g. mike-perry), alias or feed id.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Earliest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Latest event date (YYYY-MM-DD).","schema":{"type":"string","format":"date"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/h2h":{"get":{"tags":["BKFC"],"summary":"Head-to-head","description":"Meetings and record between two fighters. Alias: /head-to-head, /fighters/{slug}/h2h/{opponent}.","parameters":[{"name":"fighter1","in":"query","required":true,"description":"Slug or name","schema":{"type":"string"}},{"name":"fighter2","in":"query","required":true,"description":"Slug or name","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/rankings":{"get":{"tags":["BKFC"],"summary":"Official rankings","description":"Champion, interim champion and ranked fighters per division (latest snapshot).","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/rankings/{division}":{"get":{"tags":["BKFC"],"summary":"Division rankings","description":"One division.","parameters":[{"name":"division","in":"path","required":true,"description":"e.g. middleweight, womens-flyweight","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/champions":{"get":{"tags":["BKFC"],"summary":"Current champions","description":"Champion and interim champion per division.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/divisions":{"get":{"tags":["BKFC"],"summary":"Divisions","description":"BKFC divisions with weight limits.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/live":{"get":{"tags":["BKFC"],"summary":"Live cards","description":"Cards in their event window: results so far, the bout in progress with live round stats, the full card.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/live/health":{"get":{"tags":["BKFC"],"summary":"Live pipeline health","description":"Poll interval and freshness.","parameters":[],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"type":"object"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/live/stream":{"get":{"tags":["BKFC"],"summary":"Live stream (SSE)","description":"Server-sent events: bout_result, bout_update (round stats), card_change, ping. Billed one request per interval while open.","parameters":[{"name":"eventSlug","in":"query","required":false,"description":"Only this event","schema":{"type":"string"}},{"name":"boutId","in":"query","required":false,"description":"Only this bout","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"text/event-stream","content":{"text/event-stream":{"schema":{"type":"string"}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}},"/bkfc/live/{boutId}":{"get":{"tags":["BKFC"],"summary":"Live bout","description":"Bout with live round stats.","parameters":[{"name":"boutId","in":"path","required":true,"description":"Bout id from an event card: {event}--{fighterA}--{fighterB}.","schema":{"type":"string"}}],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/BkfcBout"},"meta":{"type":"object","additionalProperties":true}}}}}},"401":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}},"404":{"description":"Error (BKFC_EVENT_NOT_FOUND, BKFC_BOUT_NOT_FOUND, BKFC_FIGHTER_NOT_FOUND, ...)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BkfcError"}}}}}}}},"tags":[{"name":"Call of Duty","description":"Call of Duty (CDL) matches, live scores, players, organizations, tournaments, standings, transfers, and leaderboards."},{"name":"Fortnite","description":"Fortnite competitive matches, tournaments/events, live leaderboards, players, orgs, pro rankings, transfers, and earnings leaderboards."},{"name":"Dota 2","description":"Dota 2 esports matches, teams, players, tournaments, player stats, and radar snapshots."},{"name":"CS2","description":"Counter-Strike 2: live matches, results, maps, rounds, teams, players, events, rankings, stats and skins.\n\n**Beta.** CS2 is in beta. If anything looks wrong, email support@citoapi.com with the endpoint and the id you called. Docs: https://citoapi.com/docs/api/cs2\n\n**Response shape.** Every response is `{ success, data, meta }`. Lists put rows in `data` and counts or paging in `meta`.\n\n**Ids.** Matches, teams, players and events have ids like `cs2-match-2398421`, `cs2-team-7020`, `cs2-player-11893`, `cs2-event-8038`. Teams, players and events also accept their slug (`vitality`, `zywoo`).\n\n**Paging.** `limit` sets how many rows come back. Each endpoint lists its own maximum (100 on most). Asking for more returns the maximum, not an error. Page with `offset` or `page` where the endpoint lists them.\n\n**Lists are compact.** List endpoints return summary rows. Fetch the single record (`/cs2/events/{eventIdOrSlug}`, `/cs2/teams/{teamIdOrSlug}`) for the full structure.\n\n**Images.** Logos, player photos, map images and event banners are served from `api.citoapi.com` and do not change address. An image field is `null` when we have no image for that record yet. Treat `null` as \"no image\" and show a placeholder.\n\n**Missing data.** When a record exists but a section has no data yet, the response says so with `data_available: false` and an `unavailable_reason`, rather than an error.\n\n**Times** are ISO 8601 in UTC."},{"name":"UFC","description":"UFC rankings, fighters, fighter profile stats, events, fight cards, bouts, and results."},{"name":"QR Code","description":"Generate QR codes with optional logo overlay."},{"name":"Utility","description":"Health and status endpoints."},{"name":"RAF Wrestling","description":"Real American Freestyle professional wrestling: events, cards, results with per-period scores and takedowns, athletes, champions and live results."},{"name":"BKFC","description":"Bare Knuckle Fighting Championship: every event since 2018, full cards, results, round-by-round punch statistics, fighters, official rankings and live cards."}]}