livetennisapi-mcp
Qué hace este MCP
Provides live and historical tennis fixtures, scores, players, rankings, match statistics, odds, analysis, and archives.
Herramientas
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Esquema de entrada
{'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}
Esquema de salida
{'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}
Cambios recientes en herramientas
Servidores MCP similares
LiveDataLink
Exposes public-data tools covering economics, labor, banking, transport, books, legal opinions, carriers, environmental data, and…
Stratalize Healthcare
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Governance
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Oracle
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Real Estate
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Crypto & DeFi
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Valuein — SEC EDGAR Fundamentals & Smart-Money Data
Provides point-in-time SEC EDGAR fundamentals, filings, ownership signals, financial analysis, valuation models, research reports…
equibles
Provides equity and market research tools covering SEC filings, company financials, portfolios, prices, options, macroeconomic da…