MCP 서버

livetennisapi-mcp

io.github.livetennisapi/livetennisapi-mcp
데이터 및 분석 검색 및 리서치 공개 · 연결 가능 MCP 2025-11-25

이 MCP로 할 수 있는 일

Provides live and historical tennis fixtures, scores, players, rankings, match statistics, odds, analysis, and archives.

check_api_status
API status and plan
Check whether the Live Tennis API is reachable and which plan the configured key is on. Useful for diagnosing why other tools are refusing data.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'tier': {'type': ['string', 'null'], 'description': 'Detected plan: FREE, BASIC, PRO or ULTRA. Null when no key is configured.'}, 'has_key': {'type': 'boolean', 'description': 'Whether a key was supplied with this call.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'reachable': {'type': 'boolean', 'description': 'True when the API answered its health check.'}, 'api_version': {'type': ['string', 'null'], 'description': 'API version reported by the health check.'}}, 'additionalProperties': False}
get_archive_career
Archive career aggregates
One player's whole career over the results archive (1968–2022): W-L record overall and by surface/level/year, titles, and summed serve statistics with honest coverage — the corpus records serve stats from 1991 only, so matches_with_stats states how many matches the serve block covers. The name must resolve to one person; an ambiguous fragment returns the candidate list to choose from. Requires the BASIC plan or any History plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'minLength': 3, 'description': 'Player name fragment, min 3 chars â\x80\x94 must resolve to exactly one person.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'span': {'type': 'object', 'required': ['first', 'last'], 'properties': {'last': {'type': ['string', 'null'], 'description': 'Last archive match date.'}, 'first': {'type': ['string', 'null'], 'description': 'First archive match date.'}}, 'description': 'Career span inside the archive.', 'additionalProperties': False}, 'serve': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': ['number', 'null']}}, {'type': 'null'}], 'description': 'Summed serve stats + derived ratios. matches_with_stats states the coverage; ratios are null where the denominator is zero.'}, 'record': {'type': 'object', 'required': ['wins', 'losses', 'titles', 'by_surface', 'by_level'], 'properties': {'wins': {'type': ['number', 'null'], 'description': 'Career wins.'}, 'losses': {'type': ['number', 'null'], 'description': 'Career losses.'}, 'titles': {'type': ['number', 'null'], 'description': 'Finals won (excluding abandoned finals).'}, 'by_level': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': 'object', 'required': ['wins', 'losses'], 'properties': {'wins': {'type': ['number', 'null']}, 'losses': {'type': ['number', 'null']}}, 'additionalProperties': False}}, {'type': 'null'}], 'description': 'W-L per source tier code.'}, 'by_surface': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': 'object', 'required': ['wins', 'losses'], 'properties': {'wins': {'type': ['number', 'null']}, 'losses': {'type': ['number', 'null']}}, 'additionalProperties': False}}, {'type': 'null'}], 'description': 'W-L per surface.'}}, 'description': 'The W-L record.', 'additionalProperties': False}, 'by_year': {'type': 'array', 'items': {'type': 'object', 'required': ['year', 'wins', 'losses'], 'properties': {'wins': {'type': ['number', 'null']}, 'year': {'type': ['number', 'null']}, 'losses': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'description': 'Per-season W-L.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'player_name': {'type': ['string', 'null'], 'description': 'The resolved player.'}}, 'additionalProperties': False}
get_archive_match
Archive result detail
One result from the results archive (1968–2022), with per-match serve statistics where the era recorded them — stats are null for most rows before 1991, honestly, never synthesised. Requires the BASIC plan or any History plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['archive_match_id'], 'properties': {'archive_match_id': {'type': 'integer', 'description': 'Archive match id, as returned by search_archive_matches.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'stats': {'anyOf': [{'type': 'object', 'required': ['winner', 'loser'], 'properties': {'loser': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': ['number', 'null']}}, {'type': 'null'}], 'description': 'Serve stats for the loser, where recorded.'}, 'winner': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': ['number', 'null']}}, {'type': 'null'}], 'description': 'Serve stats for the winner, where recorded.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Per-match serve statistics (aces, double_faults, serve_points, first_in, first_won, second_won, serve_games, bp_saved, bp_faced). Null for most pre-1991 rows.'}, 'result': {'type': 'object', 'required': ['id', 'tour', 'tournament', 'event_date', 'round', 'level', 'surface', 'score', 'outcome', 'winner', 'loser'], 'properties': {'id': {'type': ['number', 'null'], 'description': 'Archive match id. Pass to get_archive_match for the detail read with stats.'}, 'tour': {'type': ['string', 'null'], 'description': 'atp or wta â\x80\x94 the results archive covers those two tours.'}, 'level': {'type': ['string', 'null'], 'description': 'Source tier code: G, M, A, F, D, C, O, or a futures category code.'}, 'loser': {'type': 'object', 'required': ['name', 'country', 'rank', 'seed', 'player_id', 'hand', 'height_cm', 'age', 'entry'], 'properties': {'age': {'$ref': '#/properties/result/properties/winner/properties/age'}, 'hand': {'$ref': '#/properties/result/properties/winner/properties/hand'}, 'name': {'$ref': '#/properties/result/properties/winner/properties/name'}, 'rank': {'$ref': '#/properties/result/properties/winner/properties/rank'}, 'seed': {'$ref': '#/properties/result/properties/winner/properties/seed'}, 'entry': {'$ref': '#/properties/result/properties/winner/properties/entry'}, 'country': {'$ref': '#/properties/result/properties/winner/properties/country'}, 'height_cm': {'$ref': '#/properties/result/properties/winner/properties/height_cm'}, 'player_id': {'$ref': '#/properties/result/properties/winner/properties/player_id'}}, 'description': 'The loser.', 'additionalProperties': False}, 'round': {'type': ['string', 'null'], 'description': 'Round code: F, SF, QF, R16 â\x80¦ Q1-Q4.'}, 'score': {'type': ['string', 'null'], 'description': 'The final score as published, e.g. "6-4 7-6(5)", "6-3 RET", "W/O".'}, 'winner': {'type': 'object', 'required': ['name', 'country', 'rank', 'seed', 'player_id', 'hand', 'height_cm', 'age', 'entry'], 'properties': {'age': {'type': ['number', 'null'], 'description': 'Age at the time of the match.'}, 'hand': {'type': ['string', 'null'], 'description': '"R" or "L".'}, 'name': {'type': ['string', 'null'], 'description': 'Player name as the corpus records it.'}, 'rank': {'type': ['number', 'null'], 'description': 'Rank AT THE TIME of the match, as published.'}, 'seed': {'type': ['number', 'null'], 'description': 'Seeding, where seeded.'}, 'entry': {'type': ['string', 'null'], 'description': 'Draw entry where recorded (WC, Q, LL, â\x80¦) â\x80\x94 null for direct acceptances.'}, 'country': {'type': ['string', 'null'], 'description': '3-letter country code.'}, 'height_cm': {'type': ['number', 'null'], 'description': 'Height in cm, where recorded.'}, 'player_id': {'type': ['number', 'null'], 'description': 'Corpus person id â\x80\x94 pass to search_archive_players results to join bios. NOT a roster player id.'}}, 'description': 'The winner â\x80\x94 a stored field in the corpus, never an inference.', 'additionalProperties': False}, 'outcome': {'type': ['string', 'null'], 'description': 'completed, retired, walkover, default or abandoned â\x80\x94 parsed, null when unparseable.'}, 'surface': {'type': ['string', 'null'], 'description': 'Court surface.'}, 'event_date': {'type': ['string', 'null'], 'description': 'The tournament START date â\x80\x94 per-match dates do not exist in this eraâ\x80\x99s records.'}, 'tournament': {'type': ['string', 'null'], 'description': 'Tournament name.'}}, 'description': 'The archive result.', 'additionalProperties': False}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}}, 'additionalProperties': False}
get_charting_match
Charting: one match, every stat family
Every Match Charting Project stat family for ONE charted match, both players, with the per-set split (set 1, set 2, …, Total) exactly as charted. Charting ids are their own id space (1960–2026), mostly matches with no counterpart in the live tables. Requires the ULTRA plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['charting_match_id'], 'properties': {'charting_match_id': {'type': 'integer', 'description': 'Charting match id â\x80\x94 its own id space, not a match_id.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'gender': {'type': ['string', 'null']}, 'mcp_id': {'type': ['string', 'null'], 'description': "The Match Charting Project's own row identifier."}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'players': {'anyOf': [{'type': 'object', 'additionalProperties': {}}, {'type': 'null'}], 'description': 'Both players as charted.'}, 'families': {'type': 'object', 'description': 'Every stat family, per player, with the per-set split.', 'additionalProperties': {}}, 'charting_match_id': {'type': ['number', 'null'], 'description': 'The charted match.'}}, 'additionalProperties': False}
get_charting_player
Charting: player career profile
Career shot-level profile from the Match Charting Project: serve placement (deuce/ad × wide/body/T), return depth and outcomes, net play, clutch break/game/set-point serving, winners and errors by wing, rally-length tendencies — summed over the player's charted matches. COVERAGE IS CURATED (11,646 charted matches back to the 1960s, concentrated on the majors), not full-slate. An ambiguous name returns the candidates to choose from. Requires the ULTRA plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'minLength': 3, 'description': 'Player name fragment, min 3 chars â\x80\x94 must resolve to one charted person.'}, 'gender': {'enum': ['men', 'women'], 'type': 'string', 'description': 'Disambiguates a name charted on both tours.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'player': {'anyOf': [{'type': 'object', 'additionalProperties': {}}, {'type': 'null'}], 'description': 'The resolved charted player.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'coverage': {'type': ['string', 'null'], 'description': 'A reminder that charting coverage is curated, not full-slate.'}, 'families': {'type': 'object', 'description': "Per-family summed numeric columns â\x80\x94 raw sums over the player's charted Total rows.", 'additionalProperties': {}}, 'matches_charted': {'type': ['number', 'null'], 'description': 'The sample every summed field covers.'}}, 'additionalProperties': False}
get_fixtures
Fixture schedule
Upcoming scheduled tennis fixtures, earliest first — the forward schedule, filterable by tour, player and date. Use this for "what is on this week". Works on the FREE plan (no card needed).
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'tour': {'enum': ['atp', 'wta', 'challenger', 'itf', 'juniors'], 'type': 'string', 'description': 'Tour filter; each name covers its doubles variants. Exhibition/team events carry no tour and are excluded whenever the filter is used.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 200, 'minimum': 1, 'description': 'Maximum fixtures to return (1-200).'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'fixtures': {'type': 'array', 'items': {'type': 'object', 'required': ['event_date', 'tournament', 'round', 'player1', 'player2'], 'properties': {'round': {'type': ['string', 'null'], 'description': 'Round within the event.'}, 'player1': {'type': ['string', 'null'], 'description': 'Name of player 1.'}, 'player2': {'type': ['string', 'null'], 'description': 'Name of player 2.'}, 'event_date': {'type': ['string', 'null'], 'description': 'Scheduled start, ISO timestamp.'}, 'tournament': {'type': ['string', 'null'], 'description': 'Event name.'}}, 'additionalProperties': False}, 'description': 'Scheduled fixtures, earliest first.'}}, 'additionalProperties': False}
get_h2h
Head-to-head
The all-time record between two players, across BOTH halves of the product: the results archive (1968–2022) plus our own completed matches (2023 onward). Names are the keys — an ambiguous fragment returns the candidate list to choose from rather than guessing. Totals count only meetings with a known winner; walkovers and retirements are part of the record and each meeting carries its outcome. Requires the BASIC plan or any History plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['player1', 'player2'], 'properties': {'player1': {'type': 'string', 'minLength': 3, 'description': 'First player name (fragment, min 3 chars), e.g. "federer".'}, 'player2': {'type': 'string', 'minLength': 3, 'description': 'Second player name (fragment, min 3 chars), e.g. "nadal".'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'totals': {'type': 'object', 'required': ['p1_wins', 'p2_wins', 'meetings', 'undecided'], 'properties': {'p1_wins': {'type': ['number', 'null'], 'description': 'Wins for player1 (of the request).'}, 'p2_wins': {'type': ['number', 'null'], 'description': 'Wins for player2 (of the request).'}, 'meetings': {'type': ['number', 'null'], 'description': 'Meetings with a known winner.'}, 'undecided': {'type': ['number', 'null'], 'description': 'Meetings with no derivable winner â\x80\x94 never counted in wins.'}}, 'description': 'The headline record.', 'additionalProperties': False}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'players': {'anyOf': [{'type': 'object', 'required': ['p1', 'p2'], 'properties': {'p1': {'type': ['string', 'null'], 'description': 'Resolved name for player1.'}, 'p2': {'type': ['string', 'null'], 'description': 'Resolved name for player2.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'The resolved names; null when no player matches the fragments.'}, 'meetings': {'type': 'array', 'items': {'type': 'object', 'required': ['era', 'date', 'tournament', 'round', 'surface', 'score', 'outcome', 'winner', 'match_id'], 'properties': {'era': {'type': ['string', 'null'], 'description': '"archive" (results archive, 1968-2022) or "current" (our own completed matches, 2023 onward).'}, 'date': {'type': ['string', 'null'], 'description': 'Match date (current era) or tournament start date (archive era).'}, 'round': {'type': ['string', 'null'], 'description': 'Round.'}, 'score': {'type': ['string', 'null'], 'description': 'Final score (archive rows only â\x80\x94 read current rows from get_match).'}, 'winner': {'type': ['number', 'null'], 'description': '1 or 2 OF THE REQUEST (player1/player2 as you passed them), not of the underlying match row.'}, 'outcome': {'type': ['string', 'null'], 'description': 'completed, retired, walkover, â\x80¦ â\x80\x94 exclude non-completed yourself if needed.'}, 'surface': {'type': ['string', 'null'], 'description': 'Court surface.'}, 'match_id': {'type': ['number', 'null'], 'description': 'Our match id (current era rows) â\x80\x94 pass to get_match.'}, 'tournament': {'type': ['string', 'null'], 'description': 'Tournament name.'}}, 'additionalProperties': False}, 'description': 'Individual meetings, newest first, capped at 200.'}, 'by_surface': {'type': 'object', 'description': 'Decided wins per surface; keys are surface names plus "unknown".', 'additionalProperties': {'type': 'object', 'required': ['p1', 'p2'], 'properties': {'p1': {'type': ['number', 'null']}, 'p2': {'type': ['number', 'null']}}, 'additionalProperties': False}}}, 'additionalProperties': False}
get_live_matches
Live matches
List tennis matches currently in progress, with live scores. Covers ATP, WTA, Challenger, ITF and juniors. Use this for "what tennis is on right now". Works on the FREE plan (no card needed).
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'tour': {'enum': ['atp', 'wta', 'challenger', 'itf', 'juniors'], 'type': 'string', 'description': 'Tour filter; each name covers its doubles variants. Exhibition/team events carry no tour and are excluded whenever the filter is used.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 200, 'minimum': 1, 'description': 'Maximum matches to return (1-200).'}, 'player': {'type': 'array', 'items': {'type': 'integer'}, 'maxItems': 50, 'description': 'Player ids (from search_players), max 50 â\x80\x94 keeps matches where ANY listed player is either participant.'}, 'country': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': "Either participant's country â\x80\x94 the lowercase 3-letter IOC-style code the Player object returns (e.g. ned, sui, gre), NOT ISO-3166. Players with no recorded country never match."}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'tour', 'tournament', 'tournament_id', 'round', 'round_code', 'player1', 'player2', 'score', 'status', 'surface', 'indoor', 'serving', 'winner', 'event_status', 'event_status_updated_at', 'withdrew', 'has_analysis', 'has_market', 'win_probability_p1'], 'properties': {'id': {'type': ['number', 'null'], 'description': 'Match id. Pass to get_match, get_match_score, get_match_events or get_match_odds.'}, 'tour': {'type': ['string', 'null'], 'description': 'atp, wta, challenger, itf or juniors. Null when the feed never stated one (exhibitions, team events).'}, 'round': {'type': ['string', 'null'], 'description': 'Round within the event, e.g. "QF".'}, 'score': {'type': ['string', 'null'], 'description': 'Formatted score line, e.g. "6-4 3-6 2-1".'}, 'indoor': {'type': ['boolean', 'null'], 'description': 'True when played indoors.'}, 'status': {'type': ['string', 'null'], 'description': 'One of live, upcoming or completed.'}, 'winner': {'type': ['number', 'null'], 'description': '1 or 2 once decided, otherwise null.'}, 'player1': {'type': ['string', 'null'], 'description': 'Name of player 1.'}, 'player2': {'type': ['string', 'null'], 'description': 'Name of player 2.'}, 'serving': {'type': ['number', 'null'], 'description': '1 or 2 while a point is in play, otherwise null.'}, 'surface': {'type': ['string', 'null'], 'description': 'Court surface, e.g. hard, clay, grass.'}, 'withdrew': {'type': ['number', 'null'], 'description': 'Completed matches only: which player retired or conceded the walkover, 1 or 2. Null means "not a withdrawal, or no evidence", never a guess.'}, 'has_market': {'type': ['boolean', 'null'], 'description': 'Whether a match-winner market is mapped to this match (added 2026-09-02, every tier). Filter on this before calling get_match_odds, which reports the same absence. Null only when the server predates the field.'}, 'round_code': {'type': ['string', 'null'], 'description': 'Round in the normalized vocabulary (F, SF, QF, R16 â\x80¦ Q); null when the label is unrecognised, never guessed.'}, 'tournament': {'type': ['string', 'null'], 'description': 'Event name, e.g. "Wimbledon".'}, 'event_status': {'type': ['string', 'null'], 'description': 'How the match ended (or paused) when it did not run its course: Retired, Cancelled, Walk Over, Postponed or Interrupted. Null means completed normally OR never resolved. Branch settlement logic here.'}, 'has_analysis': {'type': ['boolean', 'null'], 'description': 'Whether a model thesis or profile exists for this match (added 2026-09-02, every tier). Filter on this before calling get_match_analysis, which reports the same absence. Null only when the server predates the field.'}, 'tournament_id': {'type': ['string', 'null'], 'description': 'Stable tournament id â\x80\x94 pass to get_tournament. Null where uncatalogued.'}, 'win_probability_p1': {'type': ['number', 'null'], 'description': 'Model probability that player 1 wins, 0-1. Requires the ULTRA plan; null otherwise.'}, 'event_status_updated_at': {'type': ['string', 'null'], 'description': 'The instant the current event_status was recorded, UTC ISO-8601 (added 2026-08-19). Null while the status has never changed since the field was introduced â\x80\x94 never backfilled.'}}, 'additionalProperties': False}, 'description': 'The live matches, most relevant first.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}}, 'additionalProperties': False}
get_match
Match detail
Full detail for one match by id: players, score, surface, round and status. Includes market prices on PRO and model analysis on ULTRA. Works on the FREE plan (no card needed).
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['match_id'], 'properties': {'match_id': {'type': 'integer', 'description': 'Match id, as returned by get_live_matches, get_upcoming_matches or get_recent_results.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'match': {'type': 'object', 'required': ['id', 'tour', 'tournament', 'tournament_id', 'round', 'round_code', 'player1', 'player2', 'score', 'status', 'surface', 'indoor', 'serving', 'winner', 'event_status', 'event_status_updated_at', 'withdrew', 'has_analysis', 'has_market', 'win_probability_p1'], 'properties': {'id': {'type': ['number', 'null'], 'description': 'Match id. Pass to get_match, get_match_score, get_match_events or get_match_odds.'}, 'tour': {'type': ['string', 'null'], 'description': 'atp, wta, challenger, itf or juniors. Null when the feed never stated one (exhibitions, team events).'}, 'round': {'type': ['string', 'null'], 'description': 'Round within the event, e.g. "QF".'}, 'score': {'type': ['string', 'null'], 'description': 'Formatted score line, e.g. "6-4 3-6 2-1".'}, 'indoor': {'type': ['boolean', 'null'], 'description': 'True when played indoors.'}, 'status': {'type': ['string', 'null'], 'description': 'One of live, upcoming or completed.'}, 'winner': {'type': ['number', 'null'], 'description': '1 or 2 once decided, otherwise null.'}, 'player1': {'type': ['string', 'null'], 'description': 'Name of player 1.'}, 'player2': {'type': ['string', 'null'], 'description': 'Name of player 2.'}, 'serving': {'type': ['number', 'null'], 'description': '1 or 2 while a point is in play, otherwise null.'}, 'surface': {'type': ['string', 'null'], 'description': 'Court surface, e.g. hard, clay, grass.'}, 'withdrew': {'type': ['number', 'null'], 'description': 'Completed matches only: which player retired or conceded the walkover, 1 or 2. Null means "not a withdrawal, or no evidence", never a guess.'}, 'has_market': {'type': ['boolean', 'null'], 'description': 'Whether a match-winner market is mapped to this match (added 2026-09-02, every tier). Filter on this before calling get_match_odds, which reports the same absence. Null only when the server predates the field.'}, 'round_code': {'type': ['string', 'null'], 'description': 'Round in the normalized vocabulary (F, SF, QF, R16 â\x80¦ Q); null when the label is unrecognised, never guessed.'}, 'tournament': {'type': ['string', 'null'], 'description': 'Event name, e.g. "Wimbledon".'}, 'event_status': {'type': ['string', 'null'], 'description': 'How the match ended (or paused) when it did not run its course: Retired, Cancelled, Walk Over, Postponed or Interrupted. Null means completed normally OR never resolved. Branch settlement logic here.'}, 'has_analysis': {'type': ['boolean', 'null'], 'description': 'Whether a model thesis or profile exists for this match (added 2026-09-02, every tier). Filter on this before calling get_match_analysis, which reports the same absence. Null only when the server predates the field.'}, 'tournament_id': {'type': ['string', 'null'], 'description': 'Stable tournament id â\x80\x94 pass to get_tournament. Null where uncatalogued.'}, 'win_probability_p1': {'type': ['number', 'null'], 'description': 'Model probability that player 1 wins, 0-1. Requires the ULTRA plan; null otherwise.'}, 'event_status_updated_at': {'type': ['string', 'null'], 'description': 'The instant the current event_status was recorded, UTC ISO-8601 (added 2026-08-19). Null while the status has never changed since the field was introduced â\x80\x94 never backfilled.'}}, 'description': 'The match.', 'additionalProperties': False}, 'market': {'type': 'object', 'required': ['question', 'prices'], 'properties': {'prices': {'type': 'array', 'items': {'type': 'object', 'required': ['side', 'mid', 'bid', 'ask', 'timestamp'], 'properties': {'ask': {'type': ['number', 'null'], 'description': 'Best ask.'}, 'bid': {'type': ['number', 'null'], 'description': 'Best bid.'}, 'mid': {'type': ['number', 'null'], 'description': 'Mid price, 0-1, readable as implied probability.'}, 'side': {'type': ['number', 'null'], 'description': 'Which player this price is for, 1 or 2.'}, 'timestamp': {'type': ['string', 'null'], 'description': 'When the price was observed.'}}, 'additionalProperties': False}, 'description': 'Current prices per player.'}, 'question': {'type': ['string', 'null'], 'description': 'The market being priced.'}}, 'description': 'Match-winner market. Requires the PRO plan; absent otherwise.', 'additionalProperties': False}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'analysis': {'type': 'object', 'required': ['win_probability_p1', 'key_factors'], 'properties': {'key_factors': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Drivers behind the model view.'}, 'win_probability_p1': {'type': ['number', 'null'], 'description': 'Model probability player 1 wins, 0-1.'}}, 'description': 'Model analysis. Requires the ULTRA plan; absent otherwise.', 'additionalProperties': False}}, 'additionalProperties': False}
get_match_analysis
Model analysis
Model analysis for a match: predicted win probability, the model's thesis and the key factors behind it. Requires the ULTRA plan. Match rows carry has_analysis — check it first; a match with no thesis or profile has nothing to return.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['match_id'], 'properties': {'match_id': {'type': 'integer', 'description': 'Match id, as returned by get_live_matches, get_upcoming_matches or get_recent_results.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'thesis': {'type': 'object', 'required': ['pick_side', 'confidence', 'state', 'reasoning'], 'properties': {'state': {'type': ['string', 'null'], 'description': 'Current state of the thesis.'}, 'pick_side': {'type': ['number', 'null'], 'description': 'Player the model favours, 1 or 2.'}, 'reasoning': {'type': ['string', 'null'], 'description': 'Narrative reasoning.'}, 'confidence': {'type': ['number', 'null'], 'description': 'Model confidence, 0-1.'}}, 'description': 'Narrative view.', 'additionalProperties': False}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'profile': {'type': 'object', 'required': ['win_probability_p1', 'expected_closeness', 'volatility_rating', 'key_factors'], 'properties': {'key_factors': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Drivers behind the model view.'}, 'volatility_rating': {'type': ['string', 'null'], 'description': 'Expected swing in the match state.'}, 'expected_closeness': {'type': ['number', 'null'], 'description': 'How close the model expects the match to be.'}, 'win_probability_p1': {'type': ['number', 'null'], 'description': 'Model probability player 1 wins, 0-1.'}}, 'description': 'Quantitative view.', 'additionalProperties': False}}, 'additionalProperties': False}
get_match_events
Match timeline
Timeline of events for a match — breaks, games won, sets won, momentum runs. Requires the PRO plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['match_id'], 'properties': {'limit': {'type': 'integer', 'default': 30, 'maximum': 200, 'minimum': 1, 'description': 'Maximum events to return (1-200).'}, 'match_id': {'type': 'integer', 'description': 'Match id, as returned by get_live_matches, get_upcoming_matches or get_recent_results.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'events': {'type': 'array', 'items': {'type': 'object', 'required': ['timestamp', 'type', 'player'], 'properties': {'type': {'type': ['string', 'null'], 'description': 'Event type, e.g. break, game, set.'}, 'player': {'type': ['number', 'null'], 'description': 'Player the event belongs to, 1 or 2.'}, 'timestamp': {'type': ['string', 'null'], 'description': 'When the event occurred.'}}, 'additionalProperties': False}, 'description': 'Events in chronological order.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}}, 'additionalProperties': False}
get_match_odds
Match market prices
Match-winner market prices for a match — implied probability per player, with bid, ask and mid. Requires the PRO plan. Match rows carry has_market — check it first; a match with no market mapped has no prices to return.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['match_id'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 200, 'minimum': 1, 'description': 'Maximum price points to return (1-200).'}, 'match_id': {'type': 'integer', 'description': 'Match id, as returned by get_live_matches, get_upcoming_matches or get_recent_results.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'market': {'type': 'object', 'required': ['question', 'status', 'volume', 'liquidity', 'prices'], 'properties': {'prices': {'type': 'array', 'items': {'type': 'object', 'required': ['side', 'mid', 'bid', 'ask', 'timestamp'], 'properties': {'ask': {'type': ['number', 'null'], 'description': 'Best ask.'}, 'bid': {'type': ['number', 'null'], 'description': 'Best bid.'}, 'mid': {'type': ['number', 'null'], 'description': 'Mid price, 0-1, readable as implied probability.'}, 'side': {'type': ['number', 'null'], 'description': 'Which player this price is for, 1 or 2.'}, 'timestamp': {'type': ['string', 'null'], 'description': 'When the price was observed.'}}, 'additionalProperties': False}, 'description': 'Recent prices, newest first.'}, 'status': {'type': ['string', 'null'], 'description': 'Market status, e.g. open or resolved.'}, 'volume': {'type': ['number', 'null'], 'description': '24h traded volume.'}, 'question': {'type': ['string', 'null'], 'description': 'The market being priced.'}, 'liquidity': {'type': ['number', 'null'], 'description': 'Resting liquidity.'}}, 'description': 'The match-winner market.', 'additionalProperties': False}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}}, 'additionalProperties': False}
get_match_score
Match score
Current score for one match — the fastest, lowest-latency read. Use this when you only need the score and already know the match id. Works on the FREE plan (no card needed).
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['match_id'], 'properties': {'match_id': {'type': 'integer', 'description': 'Match id, as returned by get_live_matches, get_upcoming_matches or get_recent_results.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'score': {'type': 'object', 'required': ['formatted', 'sets', 'serving', 'is_tiebreak', 'win_probability_p1'], 'properties': {'sets': {'anyOf': [{'type': 'array', 'items': {'type': 'number'}}, {'type': 'null'}], 'description': 'Sets won per player.'}, 'serving': {'type': ['number', 'null'], 'description': 'Which player is serving, 1 or 2.'}, 'formatted': {'type': 'string', 'description': 'Formatted score line.'}, 'is_tiebreak': {'type': ['boolean', 'null'], 'description': 'True during a tiebreak.'}, 'win_probability_p1': {'type': ['number', 'null'], 'description': 'Model probability player 1 wins, 0-1. ULTRA only.'}}, 'description': 'The current score.', 'additionalProperties': False}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}}, 'additionalProperties': False}
get_match_statistics
Match statistics
In-play (or final) statistics for one match, in TWO families kept deliberately separate: DERIVED is rebuilt from the point-by-point record (holds/breaks, break points, service/return points); MEASURED is counted upstream and includes what no point record can yield — aces, double faults, the serve split, winners/unforced errors. Measured coverage varies by tour; absent fields are omitted, never zero-filled. Requires the ULTRA plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['match_id'], 'properties': {'match_id': {'type': 'integer', 'description': 'Match id, as returned by get_live_matches, get_upcoming_matches or get_recent_results.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'statistics': {'type': 'object', 'required': ['coverage', 'as_of', 'games_counted', 'players', 'freshness'], 'properties': {'as_of': {'type': ['string', 'null'], 'description': 'When the underlying record was last updated (UTC).'}, 'players': {'anyOf': [{'type': 'object', 'required': ['p1', 'p2'], 'properties': {'p1': {'anyOf': [{'type': 'object', 'required': ['derived', 'measured'], 'properties': {'derived': {'type': 'object', 'description': 'Rebuilt from the point-by-point record: service/return games and points, hold_pct, break_pct, break points faced/saved/converted. Null percentages mean a zero denominator, never 0.', 'additionalProperties': {'type': ['number', 'null']}}, 'measured': {'anyOf': [{'type': 'object', 'additionalProperties': {'type': ['number', 'null']}}, {'type': 'null'}], 'description': 'Counted upstream â\x80\x94 aces, double_faults, the serve split, winners/unforced errors where covered. Absent fields are omitted, never zero-filled. Quantities named in both families are computed two different ways: a cross-check, not a duplication.'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'p2': {'anyOf': [{'$ref': '#/properties/statistics/properties/players/anyOf/0/properties/p1/anyOf/0'}, {'type': 'null'}]}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Null when coverage is none â\x80\x94 the match exists and holding nothing is the honest answer.'}, 'coverage': {'type': ['string', 'null'], 'description': 'live | final | stale | none | diverged â\x80\x94 summarises the response.'}, 'freshness': {'anyOf': [{'type': 'object', 'additionalProperties': {}}, {'type': 'null'}], 'description': 'Per-family coverage/as_of/age. The two ages use DIFFERENT clocks (derived: against the newest score row; measured: wall clock) and must not be compared. On diverged the measured values are withheld and measured_divergence says why.'}, 'games_counted': {'type': ['number', 'null'], 'description': 'Games the derived family covers (tiebreaks excluded, counted separately).'}}, 'description': 'The statistics.', 'additionalProperties': False}}, 'additionalProperties': False}
get_player
Player profile
One player's profile: ranking, country, handedness, date of birth and cached stats. Works on the FREE plan (no card needed).
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['player_id'], 'properties': {'player_id': {'type': 'integer', 'description': 'Player id, as returned by search_players.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'player': {'type': 'object', 'required': ['id', 'name', 'country', 'ranking', 'ranking_points', 'ranking_movement', 'hand', 'birthday', 'tour'], 'properties': {'id': {'type': ['number', 'null'], 'description': 'Player id. Pass to get_player.'}, 'hand': {'type': ['string', 'null'], 'description': '"R" or "L".'}, 'name': {'type': ['string', 'null'], 'description': 'Player name.'}, 'tour': {'type': ['string', 'null'], 'description': 'ATP, WTA, Challenger or ITF.'}, 'country': {'type': ['string', 'null'], 'description': 'Country code.'}, 'ranking': {'type': ['number', 'null'], 'description': 'Current singles ranking.'}, 'birthday': {'type': ['string', 'null'], 'description': 'Date of birth, ISO date.'}, 'ranking_points': {'type': ['number', 'null'], 'description': 'Ranking points.'}, 'ranking_movement': {'type': ['string', 'null'], 'description': 'Recent movement in the rankings.'}}, 'description': 'The player.', 'additionalProperties': False}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}}, 'additionalProperties': False}
get_player_rankings
Player rankings as of a date
Point-in-time ranking records for SPECIFIC players: per system, the newest record in force ON OR BEFORE as_of — never one dated after it. Every other ranking field in this API is the CURRENT value joined at read time; this is the historical answer. Systems are never collapsed: ATP/WTA and the ITF circuits carry rank+points, UTR a rating. ITF and UTR history begins 2026-07-29. Requires the ULTRA plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['player_ids'], 'properties': {'as_of': {'type': 'string', 'description': 'YYYY-MM-DD â\x80\x94 the record in force on this date. Omit for the latest known.'}, 'system': {'enum': ['atp', 'wta', 'itf_jt', 'itf_mt', 'itf_wt', 'utr'], 'type': 'string', 'description': 'Restrict to one system. Omit for every system held for the player.'}, 'player_ids': {'type': 'array', 'items': {'type': 'integer'}, 'maxItems': 50, 'minItems': 1, 'description': 'Roster player ids, as returned by search_players. Max 50.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'coverage': {'anyOf': [{'type': 'object', 'additionalProperties': {}}, {'type': 'null'}], 'description': 'What resolved against what was asked (players_resolved, systems_resolved, oldest_available per system). Read before trusting an empty result.'}, 'rankings': {'type': 'array', 'items': {'type': 'object', 'required': ['player_id', 'player_name', 'system', 'rank', 'points', 'previous_rank', 'rank_movement', 'rating', 'effective_date'], 'properties': {'rank': {'type': ['number', 'null'], 'description': 'Null for UTR (a rating, not a ranking).'}, 'points': {'type': ['number', 'null'], 'description': 'Null for UTR.'}, 'rating': {'type': ['number', 'null'], 'description': 'UTR only; null elsewhere.'}, 'system': {'type': ['string', 'null'], 'description': 'atp, wta, itf_jt, itf_mt, itf_wt or utr. Systems are never comparable.'}, 'player_id': {'type': ['number', 'null'], 'description': 'Roster player id â\x80\x94 null on listing rows for players outside our roster.'}, 'player_name': {'type': ['string', 'null'], 'description': 'Name as the ranking publisher printed it (listing rows).'}, 'previous_rank': {'type': ['number', 'null'], 'description': 'Rank at the preceding snapshot week (ATP/WTA only; null elsewhere).'}, 'rank_movement': {'type': ['number', 'null'], 'description': "The circuit's own signed weekly movement (ITF systems only)."}, 'effective_date': {'type': ['string', 'null'], 'description': 'The publication week this record took effect, YYYY-MM-DD.'}}, 'additionalProperties': False}, 'description': 'One record per player Ã\x97 system held.'}}, 'additionalProperties': False}
get_rankings
Rankings listing
The FULL published ranking table in rank order for one system — the newest week at or before as_of. Rows carry player_name as published and a null player_id for players outside our roster, so the table has no silent holes. ATP/WTA history runs deep; the ITF circuits begin 2026-07-29. For point-in-time records of SPECIFIC players use get_player_rankings. Requires the PRO plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['system'], 'properties': {'as_of': {'type': 'string', 'description': 'YYYY-MM-DD â\x80\x94 serves the newest published week at or before this date. Omit for latest.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 200, 'minimum': 1, 'description': 'Maximum ranking rows to return (1-200).'}, 'system': {'enum': ['atp', 'wta', 'itf_jt', 'itf_mt', 'itf_wt'], 'type': 'string', 'description': 'Ranking system to list. utr has no listing â\x80\x94 it is a rating, not a ranking.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'rankings': {'type': 'array', 'items': {'type': 'object', 'required': ['player_id', 'player_name', 'system', 'rank', 'points', 'previous_rank', 'rank_movement', 'rating', 'effective_date'], 'properties': {'rank': {'type': ['number', 'null'], 'description': 'Null for UTR (a rating, not a ranking).'}, 'points': {'type': ['number', 'null'], 'description': 'Null for UTR.'}, 'rating': {'type': ['number', 'null'], 'description': 'UTR only; null elsewhere.'}, 'system': {'type': ['string', 'null'], 'description': 'atp, wta, itf_jt, itf_mt, itf_wt or utr. Systems are never comparable.'}, 'player_id': {'type': ['number', 'null'], 'description': 'Roster player id â\x80\x94 null on listing rows for players outside our roster.'}, 'player_name': {'type': ['string', 'null'], 'description': 'Name as the ranking publisher printed it (listing rows).'}, 'previous_rank': {'type': ['number', 'null'], 'description': 'Rank at the preceding snapshot week (ATP/WTA only; null elsewhere).'}, 'rank_movement': {'type': ['number', 'null'], 'description': "The circuit's own signed weekly movement (ITF systems only)."}, 'effective_date': {'type': ['string', 'null'], 'description': 'The publication week this record took effect, YYYY-MM-DD.'}}, 'additionalProperties': False}, 'description': 'The table in rank order.'}}, 'additionalProperties': False}
get_recent_results
Recent results
Recently completed tennis matches with final scores and winners. Filterable by tour, player, nationality and play date. Requires the BASIC plan or any History plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'to': {'type': 'string', 'description': 'Latest play date: YYYY-MM-DD or ISO-8601; must not precede from.'}, 'from': {'type': 'string', 'description': 'Earliest play date: YYYY-MM-DD (a whole UTC day) or ISO-8601 datetime.'}, 'tour': {'enum': ['atp', 'wta', 'challenger', 'itf', 'juniors'], 'type': 'string', 'description': 'Tour filter; each name covers its doubles variants. Exhibition/team events carry no tour and are excluded whenever the filter is used.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 200, 'minimum': 1, 'description': 'Maximum matches to return (1-200).'}, 'player': {'type': 'array', 'items': {'type': 'integer'}, 'maxItems': 50, 'description': 'Player ids (from search_players), max 50 â\x80\x94 keeps matches where ANY listed player is either participant.'}, 'country': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': "Either participant's country â\x80\x94 the lowercase 3-letter IOC-style code the Player object returns (e.g. ned, sui, gre), NOT ISO-3166. Players with no recorded country never match."}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'tour', 'tournament', 'tournament_id', 'round', 'round_code', 'player1', 'player2', 'score', 'status', 'surface', 'indoor', 'serving', 'winner', 'event_status', 'event_status_updated_at', 'withdrew', 'has_analysis', 'has_market', 'win_probability_p1'], 'properties': {'id': {'type': ['number', 'null'], 'description': 'Match id. Pass to get_match, get_match_score, get_match_events or get_match_odds.'}, 'tour': {'type': ['string', 'null'], 'description': 'atp, wta, challenger, itf or juniors. Null when the feed never stated one (exhibitions, team events).'}, 'round': {'type': ['string', 'null'], 'description': 'Round within the event, e.g. "QF".'}, 'score': {'type': ['string', 'null'], 'description': 'Formatted score line, e.g. "6-4 3-6 2-1".'}, 'indoor': {'type': ['boolean', 'null'], 'description': 'True when played indoors.'}, 'status': {'type': ['string', 'null'], 'description': 'One of live, upcoming or completed.'}, 'winner': {'type': ['number', 'null'], 'description': '1 or 2 once decided, otherwise null.'}, 'player1': {'type': ['string', 'null'], 'description': 'Name of player 1.'}, 'player2': {'type': ['string', 'null'], 'description': 'Name of player 2.'}, 'serving': {'type': ['number', 'null'], 'description': '1 or 2 while a point is in play, otherwise null.'}, 'surface': {'type': ['string', 'null'], 'description': 'Court surface, e.g. hard, clay, grass.'}, 'withdrew': {'type': ['number', 'null'], 'description': 'Completed matches only: which player retired or conceded the walkover, 1 or 2. Null means "not a withdrawal, or no evidence", never a guess.'}, 'has_market': {'type': ['boolean', 'null'], 'description': 'Whether a match-winner market is mapped to this match (added 2026-09-02, every tier). Filter on this before calling get_match_odds, which reports the same absence. Null only when the server predates the field.'}, 'round_code': {'type': ['string', 'null'], 'description': 'Round in the normalized vocabulary (F, SF, QF, R16 â\x80¦ Q); null when the label is unrecognised, never guessed.'}, 'tournament': {'type': ['string', 'null'], 'description': 'Event name, e.g. "Wimbledon".'}, 'event_status': {'type': ['string', 'null'], 'description': 'How the match ended (or paused) when it did not run its course: Retired, Cancelled, Walk Over, Postponed or Interrupted. Null means completed normally OR never resolved. Branch settlement logic here.'}, 'has_analysis': {'type': ['boolean', 'null'], 'description': 'Whether a model thesis or profile exists for this match (added 2026-09-02, every tier). Filter on this before calling get_match_analysis, which reports the same absence. Null only when the server predates the field.'}, 'tournament_id': {'type': ['string', 'null'], 'description': 'Stable tournament id â\x80\x94 pass to get_tournament. Null where uncatalogued.'}, 'win_probability_p1': {'type': ['number', 'null'], 'description': 'Model probability that player 1 wins, 0-1. Requires the ULTRA plan; null otherwise.'}, 'event_status_updated_at': {'type': ['string', 'null'], 'description': 'The instant the current event_status was recorded, UTC ISO-8601 (added 2026-08-19). Null while the status has never changed since the field was introduced â\x80\x94 never backfilled.'}}, 'additionalProperties': False}, 'description': 'Completed matches, most recent first.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}}, 'additionalProperties': False}
get_tournament
Tournament detail
One tournament by its stable id — the tournament_id carried on match objects. Name, tour, surface, indoor, plus host city/country and category where curated. Works on the FREE plan (no card needed).
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tournament_id'], 'properties': {'tournament_id': {'type': 'string', 'description': 'Stable tournament id, as returned by search_tournaments or carried on a match as tournament_id.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'tournament': {'type': 'object', 'required': ['id', 'name', 'tour', 'surface', 'indoor', 'city', 'country', 'category'], 'properties': {'id': {'type': ['string', 'null'], 'description': 'Stable tournament id â\x80\x94 the same id match objects carry as tournament_id.'}, 'city': {'type': ['string', 'null'], 'description': 'Host city, from a curated table â\x80\x94 null where not curated.'}, 'name': {'type': ['string', 'null'], 'description': 'Tournament name.'}, 'tour': {'type': ['string', 'null'], 'description': 'atp, wta, challenger, itf or juniors.'}, 'indoor': {'type': ['boolean', 'null'], 'description': 'True when played indoors.'}, 'country': {'type': ['string', 'null'], 'description': 'Host country, ISO-3166 alpha-2 â\x80\x94 null where not curated.'}, 'surface': {'type': ['string', 'null'], 'description': 'Court surface: hard, clay or grass.'}, 'category': {'type': ['string', 'null'], 'description': 'Tournament category (grand_slam, masters_1000, tour_finals, atp_500, atp_250, wta_1000, wta_500, wta_250, wta_125, challenger, itf, juniors). Set only where the catalogues agree unambiguously â\x80\x94 null otherwise, never derived from the name.'}}, 'description': 'The tournament.', 'additionalProperties': False}}, 'additionalProperties': False}
get_upcoming_matches
Upcoming matches
List tennis matches scheduled to start soon, with players, tournament and start time. Use this for "who plays next" or to find a match id before it starts. Works on the FREE plan (no card needed).
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'to': {'type': 'string', 'description': 'Latest play date: YYYY-MM-DD or ISO-8601; must not precede from.'}, 'from': {'type': 'string', 'description': 'Earliest play date: YYYY-MM-DD (a whole UTC day) or ISO-8601 datetime.'}, 'tour': {'enum': ['atp', 'wta', 'challenger', 'itf', 'juniors'], 'type': 'string', 'description': 'Tour filter; each name covers its doubles variants. Exhibition/team events carry no tour and are excluded whenever the filter is used.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 200, 'minimum': 1, 'description': 'Maximum matches to return (1-200).'}, 'player': {'type': 'array', 'items': {'type': 'integer'}, 'maxItems': 50, 'description': 'Player ids (from search_players), max 50 â\x80\x94 keeps matches where ANY listed player is either participant.'}, 'country': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': "Either participant's country â\x80\x94 the lowercase 3-letter IOC-style code the Player object returns (e.g. ned, sui, gre), NOT ISO-3166. Players with no recorded country never match."}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'tour', 'tournament', 'tournament_id', 'round', 'round_code', 'player1', 'player2', 'score', 'status', 'surface', 'indoor', 'serving', 'winner', 'event_status', 'event_status_updated_at', 'withdrew', 'has_analysis', 'has_market', 'win_probability_p1'], 'properties': {'id': {'type': ['number', 'null'], 'description': 'Match id. Pass to get_match, get_match_score, get_match_events or get_match_odds.'}, 'tour': {'type': ['string', 'null'], 'description': 'atp, wta, challenger, itf or juniors. Null when the feed never stated one (exhibitions, team events).'}, 'round': {'type': ['string', 'null'], 'description': 'Round within the event, e.g. "QF".'}, 'score': {'type': ['string', 'null'], 'description': 'Formatted score line, e.g. "6-4 3-6 2-1".'}, 'indoor': {'type': ['boolean', 'null'], 'description': 'True when played indoors.'}, 'status': {'type': ['string', 'null'], 'description': 'One of live, upcoming or completed.'}, 'winner': {'type': ['number', 'null'], 'description': '1 or 2 once decided, otherwise null.'}, 'player1': {'type': ['string', 'null'], 'description': 'Name of player 1.'}, 'player2': {'type': ['string', 'null'], 'description': 'Name of player 2.'}, 'serving': {'type': ['number', 'null'], 'description': '1 or 2 while a point is in play, otherwise null.'}, 'surface': {'type': ['string', 'null'], 'description': 'Court surface, e.g. hard, clay, grass.'}, 'withdrew': {'type': ['number', 'null'], 'description': 'Completed matches only: which player retired or conceded the walkover, 1 or 2. Null means "not a withdrawal, or no evidence", never a guess.'}, 'has_market': {'type': ['boolean', 'null'], 'description': 'Whether a match-winner market is mapped to this match (added 2026-09-02, every tier). Filter on this before calling get_match_odds, which reports the same absence. Null only when the server predates the field.'}, 'round_code': {'type': ['string', 'null'], 'description': 'Round in the normalized vocabulary (F, SF, QF, R16 â\x80¦ Q); null when the label is unrecognised, never guessed.'}, 'tournament': {'type': ['string', 'null'], 'description': 'Event name, e.g. "Wimbledon".'}, 'event_status': {'type': ['string', 'null'], 'description': 'How the match ended (or paused) when it did not run its course: Retired, Cancelled, Walk Over, Postponed or Interrupted. Null means completed normally OR never resolved. Branch settlement logic here.'}, 'has_analysis': {'type': ['boolean', 'null'], 'description': 'Whether a model thesis or profile exists for this match (added 2026-09-02, every tier). Filter on this before calling get_match_analysis, which reports the same absence. Null only when the server predates the field.'}, 'tournament_id': {'type': ['string', 'null'], 'description': 'Stable tournament id â\x80\x94 pass to get_tournament. Null where uncatalogued.'}, 'win_probability_p1': {'type': ['number', 'null'], 'description': 'Model probability that player 1 wins, 0-1. Requires the ULTRA plan; null otherwise.'}, 'event_status_updated_at': {'type': ['string', 'null'], 'description': 'The instant the current event_status was recorded, UTC ISO-8601 (added 2026-08-19). Null while the status has never changed since the field was introduced â\x80\x94 never backfilled.'}}, 'additionalProperties': False}, 'description': 'Matches due to start, soonest first.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}}, 'additionalProperties': False}
search_archive_matches
Results archive (1968–2022)
Search the results archive — completed-match RESULTS from 1968 through 2022: ATP and WTA, main draws, qualifying and the ITF/futures tiers. Winner/loser-shaped records with final score, seeds and ranks AT THE TIME of the match. Use this for historical questions ("Borg's Wimbledon finals"); the archive ends 2022-12-31 where our own results (get_recent_results) begin. Requires the BASIC plan or any History plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'to': {'type': 'string', 'description': 'Latest tournament START date, YYYY-MM-DD.'}, 'from': {'type': 'string', 'description': 'Earliest tournament START date, YYYY-MM-DD.'}, 'tour': {'enum': ['atp', 'wta'], 'type': 'string', 'description': 'atp or wta.'}, 'level': {'type': 'string', 'description': 'Source tier code: G=grand slam, M=masters, A=tour, F=finals, D=davis cup, C=challenger, O=olympics, or a futures category code (e.g. 15).'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 200, 'minimum': 1, 'description': 'Maximum results to return (1-200).'}, 'round': {'enum': ['F', 'SF', 'QF', 'R16', 'R32', 'R64', 'R128', 'RR', 'BR', 'Q1', 'Q2', 'Q3', 'Q4', 'ER'], 'type': 'string', 'description': 'Round code, e.g. F for finals.'}, 'player_name': {'type': 'string', 'minLength': 3, 'description': 'Case-insensitive fragment of EITHER player\'s name, min 3 chars, e.g. "borg".'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'tour', 'tournament', 'event_date', 'round', 'level', 'surface', 'score', 'outcome', 'winner', 'loser'], 'properties': {'id': {'type': ['number', 'null'], 'description': 'Archive match id. Pass to get_archive_match for the detail read with stats.'}, 'tour': {'type': ['string', 'null'], 'description': 'atp or wta â\x80\x94 the results archive covers those two tours.'}, 'level': {'type': ['string', 'null'], 'description': 'Source tier code: G, M, A, F, D, C, O, or a futures category code.'}, 'loser': {'type': 'object', 'required': ['name', 'country', 'rank', 'seed', 'player_id', 'hand', 'height_cm', 'age', 'entry'], 'properties': {'age': {'$ref': '#/properties/results/items/properties/winner/properties/age'}, 'hand': {'$ref': '#/properties/results/items/properties/winner/properties/hand'}, 'name': {'$ref': '#/properties/results/items/properties/winner/properties/name'}, 'rank': {'$ref': '#/properties/results/items/properties/winner/properties/rank'}, 'seed': {'$ref': '#/properties/results/items/properties/winner/properties/seed'}, 'entry': {'$ref': '#/properties/results/items/properties/winner/properties/entry'}, 'country': {'$ref': '#/properties/results/items/properties/winner/properties/country'}, 'height_cm': {'$ref': '#/properties/results/items/properties/winner/properties/height_cm'}, 'player_id': {'$ref': '#/properties/results/items/properties/winner/properties/player_id'}}, 'description': 'The loser.', 'additionalProperties': False}, 'round': {'type': ['string', 'null'], 'description': 'Round code: F, SF, QF, R16 â\x80¦ Q1-Q4.'}, 'score': {'type': ['string', 'null'], 'description': 'The final score as published, e.g. "6-4 7-6(5)", "6-3 RET", "W/O".'}, 'winner': {'type': 'object', 'required': ['name', 'country', 'rank', 'seed', 'player_id', 'hand', 'height_cm', 'age', 'entry'], 'properties': {'age': {'type': ['number', 'null'], 'description': 'Age at the time of the match.'}, 'hand': {'type': ['string', 'null'], 'description': '"R" or "L".'}, 'name': {'type': ['string', 'null'], 'description': 'Player name as the corpus records it.'}, 'rank': {'type': ['number', 'null'], 'description': 'Rank AT THE TIME of the match, as published.'}, 'seed': {'type': ['number', 'null'], 'description': 'Seeding, where seeded.'}, 'entry': {'type': ['string', 'null'], 'description': 'Draw entry where recorded (WC, Q, LL, â\x80¦) â\x80\x94 null for direct acceptances.'}, 'country': {'type': ['string', 'null'], 'description': '3-letter country code.'}, 'height_cm': {'type': ['number', 'null'], 'description': 'Height in cm, where recorded.'}, 'player_id': {'type': ['number', 'null'], 'description': 'Corpus person id â\x80\x94 pass to search_archive_players results to join bios. NOT a roster player id.'}}, 'description': 'The winner â\x80\x94 a stored field in the corpus, never an inference.', 'additionalProperties': False}, 'outcome': {'type': ['string', 'null'], 'description': 'completed, retired, walkover, default or abandoned â\x80\x94 parsed, null when unparseable.'}, 'surface': {'type': ['string', 'null'], 'description': 'Court surface.'}, 'event_date': {'type': ['string', 'null'], 'description': 'The tournament START date â\x80\x94 per-match dates do not exist in this eraâ\x80\x99s records.'}, 'tournament': {'type': ['string', 'null'], 'description': 'Tournament name.'}}, 'additionalProperties': False}, 'description': 'Archive results, newest tournament first.'}}, 'additionalProperties': False}
search_archive_players
Archive player bios
The people of the results archive (1968–2022): hand, date of birth, country, height, and career-high rank with the week it was first reached. Their ids are corpus person ids (the winner/loser player_id on archive results), not roster ids — for current players use search_players. Requires the BASIC plan or any History plan.
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'tour': {'enum': ['atp', 'wta'], 'type': 'string', 'description': 'atp or wta.'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 200, 'minimum': 1, 'description': 'Maximum players to return (1-200).'}, 'query': {'type': 'string', 'minLength': 3, 'description': 'Full or partial player name, min 3 chars, e.g. "navratilova".'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'players': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'tour', 'name', 'hand', 'dob', 'country', 'height_cm', 'career_high_rank', 'career_high_date'], 'properties': {'id': {'type': ['number', 'null'], 'description': 'Corpus person id â\x80\x94 the id archive match rows carry as winner/loser player_id. NOT a roster id.'}, 'dob': {'type': ['string', 'null'], 'description': 'Date of birth, ISO date.'}, 'hand': {'type': ['string', 'null'], 'description': '"R" or "L".'}, 'name': {'type': ['string', 'null'], 'description': 'Player name.'}, 'tour': {'type': ['string', 'null'], 'description': 'atp or wta.'}, 'country': {'type': ['string', 'null'], 'description': '3-letter country code.'}, 'height_cm': {'type': ['number', 'null'], 'description': 'Height in cm.'}, 'career_high_date': {'type': ['string', 'null'], 'description': 'The earliest week the career-high rank was reached.'}, 'career_high_rank': {'type': ['number', 'null'], 'description': 'Career-high rank, from the corpusâ\x80\x99s own weekly tables.'}}, 'additionalProperties': False}, 'description': 'Matching archive people, ordered by name.'}}, 'additionalProperties': False}
search_players
Search players
Search tennis players by name. Returns id, country, ranking and tour. Use the returned id with get_player. Works on the FREE plan (no card needed).
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 10, 'maximum': 200, 'minimum': 1, 'description': 'Maximum players to return (1-200).'}, 'query': {'type': 'string', 'minLength': 1, 'description': 'Full or partial player name, e.g. "alcaraz".'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'players': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'country', 'ranking', 'ranking_points', 'ranking_movement', 'hand', 'birthday', 'tour'], 'properties': {'id': {'type': ['number', 'null'], 'description': 'Player id. Pass to get_player.'}, 'hand': {'type': ['string', 'null'], 'description': '"R" or "L".'}, 'name': {'type': ['string', 'null'], 'description': 'Player name.'}, 'tour': {'type': ['string', 'null'], 'description': 'ATP, WTA, Challenger or ITF.'}, 'country': {'type': ['string', 'null'], 'description': 'Country code.'}, 'ranking': {'type': ['number', 'null'], 'description': 'Current singles ranking.'}, 'birthday': {'type': ['string', 'null'], 'description': 'Date of birth, ISO date.'}, 'ranking_points': {'type': ['number', 'null'], 'description': 'Ranking points.'}, 'ranking_movement': {'type': ['string', 'null'], 'description': 'Recent movement in the rankings.'}}, 'additionalProperties': False}, 'description': 'Matching players, best match first.'}}, 'additionalProperties': False}
search_tournaments
Tournament catalogue
Search the tournament catalogue — the stable id space that match objects carry as tournament_id. Returns surface, indoor, host city/country and category where curated. Works on the FREE plan (no card needed).
읽기 전용 외부 접근 가능 멱등성
입력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'tour': {'enum': ['atp', 'wta', 'challenger', 'itf', 'juniors'], 'type': 'string', 'description': 'Restrict to one tour.'}, 'limit': {'type': 'integer', 'default': 20, 'maximum': 200, 'minimum': 1, 'description': 'Maximum tournaments to return (1-200).'}, 'query': {'type': 'string', 'description': 'Full or partial tournament name, e.g. "wimbledon". Omit to list all.'}}, 'additionalProperties': False}
출력 스키마
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['ok', 'message'], 'properties': {'ok': {'type': 'boolean', 'description': 'True when the call returned data. False for a tier wall, a missing or rejected key, or an empty result â\x80\x94 all of which are normal states with a clear remedy, not failures.'}, 'message': {'type': 'string', 'description': 'Human-readable summary. Identical to the text content, so either half can be used alone.'}, 'tournaments': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'tour', 'surface', 'indoor', 'city', 'country', 'category'], 'properties': {'id': {'type': ['string', 'null'], 'description': 'Stable tournament id â\x80\x94 the same id match objects carry as tournament_id.'}, 'city': {'type': ['string', 'null'], 'description': 'Host city, from a curated table â\x80\x94 null where not curated.'}, 'name': {'type': ['string', 'null'], 'description': 'Tournament name.'}, 'tour': {'type': ['string', 'null'], 'description': 'atp, wta, challenger, itf or juniors.'}, 'indoor': {'type': ['boolean', 'null'], 'description': 'True when played indoors.'}, 'country': {'type': ['string', 'null'], 'description': 'Host country, ISO-3166 alpha-2 â\x80\x94 null where not curated.'}, 'surface': {'type': ['string', 'null'], 'description': 'Court surface: hard, clay or grass.'}, 'category': {'type': ['string', 'null'], 'description': 'Tournament category (grand_slam, masters_1000, tour_finals, atp_500, atp_250, wta_1000, wta_500, wta_250, wta_125, challenger, itf, juniors). Set only where the catalogues agree unambiguously â\x80\x94 null otherwise, never derived from the name.'}}, 'additionalProperties': False}, 'description': 'Matching tournaments, name order.'}}, 'additionalProperties': False}
변경됨
get_match_analysis
2026년 9월 21일 2:51 AM
변경됨
get_match_odds
2026년 9월 21일 2:51 AM
변경됨
get_recent_results
2026년 9월 21일 2:51 AM
변경됨
get_tournament
2026년 9월 21일 2:51 AM
변경됨
search_tournaments
2026년 9월 21일 2:51 AM
변경됨
get_fixtures
2026년 9월 21일 2:51 AM
변경됨
get_player
2026년 9월 21일 2:51 AM
변경됨
search_players
2026년 9월 21일 2:51 AM
변경됨
get_match_score
2026년 9월 21일 2:51 AM
변경됨
get_match
2026년 9월 21일 2:51 AM
변경됨
get_upcoming_matches
2026년 9월 21일 2:51 AM
변경됨
get_live_matches
2026년 9월 21일 2:51 AM
추가됨
check_api_status
2026년 9월 17일 12:43 PM
추가됨
get_charting_match
2026년 9월 17일 12:43 PM
추가됨
get_charting_player
2026년 9월 17일 12:43 PM
추가됨
get_match_statistics
2026년 9월 17일 12:43 PM
추가됨
get_player_rankings
2026년 9월 17일 12:43 PM
추가됨
get_match_analysis
2026년 9월 17일 12:43 PM
추가됨
get_rankings
2026년 9월 17일 12:43 PM
추가됨
get_match_odds
2026년 9월 17일 12:43 PM
추가됨
get_match_events
2026년 9월 17일 12:43 PM
추가됨
get_h2h
2026년 9월 17일 12:43 PM
추가됨
get_archive_career
2026년 9월 17일 12:43 PM
추가됨
search_archive_players
2026년 9월 17일 12:43 PM
추가됨
get_archive_match
2026년 9월 17일 12:43 PM
추가됨
search_archive_matches
2026년 9월 17일 12:43 PM
추가됨
get_recent_results
2026년 9월 17일 12:43 PM
추가됨
get_tournament
2026년 9월 17일 12:43 PM
추가됨
search_tournaments
2026년 9월 17일 12:43 PM
추가됨
get_fixtures
2026년 9월 17일 12:43 PM