{
  "openapi": "3.0.1",
  "info": {
    "title": "Flashscore Tennis Scraper - Live Scores, Odds, H2H & History",
    "description": "ATP, WTA, Challenger and ITF tennis from Flashscore, live and back to 1990: scores, odds from ~20 bookmakers (fair probability, closing odds), H2H over every meeting, Elo per surface, form, player stats, draws with rounds, rankings of any week since 1973. Works as an MCP tool for AI agents.",
    "version": "0.0",
    "x-build-id": "iORxx1fcvjUGgMAHh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/crawlplant~flashscore-tennis/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-crawlplant-flashscore-tennis",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/crawlplant~flashscore-tennis/runs": {
      "post": {
        "operationId": "runs-sync-crawlplant-flashscore-tennis",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/crawlplant~flashscore-tennis/run-sync": {
      "post": {
        "operationId": "run-sync-crawlplant-flashscore-tennis",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "matches",
              "live",
              "matchIds",
              "players",
              "rankings",
              "tournaments",
              "playerProfiles",
              "playerStats",
              "h2h",
              "elo",
              "sackmann"
            ],
            "type": "string",
            "description": "matches = every match of the days you pick (any past date; the day lists reach 7 days back, older days come from our tennis database), with results, odds, head-to-head, form, Elo and statistics; live = matches in play right now; matchIds = specific matches by id or URL (any date); players = a player's matches, newest first (the whole career from the database, else about 40 recent); rankings = ATP / WTA rankings, one row per player (the latest, or the list of a past date); tournaments = every match of a tournament edition with its round; playerProfiles = one row per player: age, country, photo, rank, Elo per surface; playerStats = a player's record and serve / return statistics per season, surface, tour or opponent's rank; h2h = two players' head-to-head with every meeting; elo = the Elo list of a tour and surface; sackmann = every played singles match of the seasons in \"years\" (or the dateFrom..dateTo range; neither = this season) in the columns of Jeff Sackmann's atp_matches / wta_matches CSV files: winner and loser, rank at the time, age, score, round, minutes, serve statistics (tours: ATP and WTA unless set).",
            "default": "matches"
          },
          "dateFrom": {
            "title": "From day (UTC)",
            "type": "string",
            "description": "Matches mode: the first day, in UTC. today, yesterday, tomorrow, a date like 2026-09-28, or an offset like -3 (three days ago) or +1. Flashscore's daily lists go 7 days back; days ahead list what is already scheduled (usually 1-2 days).",
            "default": "today"
          },
          "dateTo": {
            "title": "To day (UTC)",
            "type": "string",
            "description": "Matches mode: the last day, inclusive, same formats as From day. Empty = only the From day. Example: From -7 and To today = the last 8 days."
          },
          "matchIds": {
            "title": "Match ids or URLs",
            "type": "array",
            "description": "matchIds mode: Flashscore match ids (the 8 characters after mid= or /match/, e.g. llKI871b) or full match URLs. Any date, also older than 7 days. Adds the round (e.g. Final) and the match duration.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "playerUrls": {
            "title": "Players (names or URLs)",
            "type": "array",
            "description": "players, playerProfiles, playerStats and h2h modes: player names, e.g. \"Jannik Sinner\" or \"Swiatek\" (the best-known player of that name), or Flashscore player page URLs, e.g. https://www.flashscore.com/player/sinner-jannik/6HdC3z4H/, to pick one exactly. h2h mode takes them in pairs: 1st v 2nd, 3rd v 4th...",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "rankingLists": {
            "title": "Ranking lists",
            "type": "array",
            "description": "rankings mode: which lists. Each has about 2,000 players (top 100 in one request, the rest in a second one).",
            "items": {
              "type": "string",
              "enum": [
                "atp",
                "wta",
                "atp-race",
                "wta-race",
                "atp-doubles",
                "wta-doubles"
              ],
              "enumTitles": [
                "ATP singles",
                "WTA singles",
                "ATP race",
                "WTA race",
                "ATP doubles",
                "WTA doubles"
              ]
            },
            "default": [
              "atp",
              "wta"
            ]
          },
          "rankingDate": {
            "title": "Ranking date",
            "type": "string",
            "description": "rankings mode: the list of this date (YYYY-MM-DD; ATP back to 1973, WTA back to 2001); empty = the latest list."
          },
          "tournamentUrls": {
            "title": "Tournament URLs",
            "type": "array",
            "description": "tournaments mode: Flashscore tournament URLs, e.g. https://www.flashscore.com/tennis/atp-singles/wimbledon/ (or an edition: .../wimbledon-2019/).",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "years": {
            "title": "Years",
            "type": "array",
            "description": "tournaments mode: the editions to read, e.g. [2019, 2023]; empty = the latest edition. sackmann mode: the seasons, e.g. [2024, 2025] (from 1990).",
            "default": []
          },
          "statsSplitBy": {
            "title": "Statistics split",
            "enum": [
              "season",
              "surface",
              "tour",
              "opponentRank",
              "none"
            ],
            "type": "string",
            "description": "playerStats mode: one row per season, surface, tour, opponent's rank band (top 10, 11-50, 51-100, 101-250, 251+) or all matches together.",
            "default": "season"
          },
          "eloTour": {
            "title": "Elo tour",
            "enum": [
              "atp",
              "wta"
            ],
            "type": "string",
            "description": "elo mode: men (ATP, Challenger, ITF) or women (WTA, Challenger, ITF).",
            "default": "atp"
          },
          "eloSurface": {
            "title": "Elo surface",
            "enum": [
              "all",
              "hard",
              "clay",
              "grass",
              "carpet"
            ],
            "type": "string",
            "description": "elo mode: overall Elo or Elo on one surface.",
            "default": "all"
          },
          "tours": {
            "title": "Tours",
            "type": "array",
            "description": "Keep only these tours. Empty = all. challenger-women is the WTA 125 level; teams = Davis Cup, Billie Jean King Cup, Laver Cup ties; other = exhibitions, juniors and the rest.",
            "items": {
              "type": "string",
              "enum": [
                "atp",
                "wta",
                "challenger-men",
                "challenger-women",
                "itf-men",
                "itf-women",
                "teams",
                "other"
              ],
              "enumTitles": [
                "ATP",
                "WTA",
                "Challenger (men)",
                "WTA 125 / Challenger (women)",
                "ITF men",
                "ITF women",
                "Team events",
                "Other"
              ]
            },
            "default": []
          },
          "matchType": {
            "title": "Singles or doubles",
            "enum": [
              "singles",
              "doubles",
              "all"
            ],
            "type": "string",
            "description": "singles (default), doubles (includes mixed doubles), or all (also team ties).",
            "default": "singles"
          },
          "status": {
            "title": "Status",
            "enum": [
              "all",
              "scheduled",
              "live",
              "finished"
            ],
            "type": "string",
            "description": "all, scheduled (not started, delayed, postponed), live (in play), finished (including retired, walkover and awarded).",
            "default": "all"
          },
          "tournaments": {
            "title": "Tournament name contains",
            "type": "array",
            "description": "Keep matches whose tournament name or category contains any of these, case-insensitive, e.g. Beijing, US Open, W100, Challenger.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "players": {
            "title": "Player name contains",
            "type": "array",
            "description": "Keep matches with a player whose name contains any of these, case-insensitive (Flashscore writes names as \"Sinner J.\"): Sinner, Swiatek. A player id also works.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "surfaces": {
            "title": "Surfaces",
            "type": "array",
            "description": "Keep matches on these surfaces. Empty = all. Matches without a surface (team ties) are dropped when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "hard",
                "clay",
                "grass",
                "carpet"
              ],
              "enumTitles": [
                "Hard",
                "Clay",
                "Grass",
                "Carpet"
              ]
            },
            "default": []
          },
          "includeOdds": {
            "title": "Bookmaker odds",
            "type": "boolean",
            "description": "Match-winner odds of each bookmaker (current and opening; closing odds for finished matches), best and average price, win probability without the bookmaker margin, and a link to each bookmaker. Charged per match that has odds (see Pricing).",
            "default": true
          },
          "oddsCountry": {
            "title": "Bookmakers of country",
            "type": "string",
            "description": "Bookmakers differ by country (licences). Two-letter code: GB (about 20 bookmakers: bet365, William Hill, Betfair, Sky Bet, Paddy Power...), DE, PL, IT, ES, FR, US, AU, NG and others.",
            "default": "GB"
          },
          "oddsMarkets": {
            "title": "Odds markets",
            "enum": [
              "match-winner",
              "all"
            ],
            "type": "string",
            "description": "match-winner = the summary and one row per bookmaker; all = also every other market in oddsMarkets: set winner, total games and sets, game and set handicaps, correct score (about 100-200 prices per match).",
            "default": "match-winner"
          },
          "includeH2H": {
            "title": "Head-to-head, form and fatigue",
            "type": "boolean",
            "description": "Head-to-head record (all surfaces and this surface, last 5 meetings), each player's last 10 results, win % overall and on this surface, days since the last match, matches and sets in the last 7 and 14 days, and whether they retired in their last match. Computed as of the match start. Charged per match (see Pricing).",
            "default": true
          },
          "includeStatistics": {
            "title": "Match statistics",
            "type": "boolean",
            "description": "Serve and return statistics for matches that started: aces, double faults, 1st serve %, points won on 1st / 2nd serve, break points saved and converted, service and return games won, for the match and each set. Included in the base price.",
            "default": true
          },
          "includePointByPoint": {
            "title": "Point by point",
            "type": "boolean",
            "description": "Every game of matches that started: server, winner, breaks, the points in order and break / set / match points. Charged per match (see Pricing).",
            "default": false
          },
          "includeRankings": {
            "title": "Player rankings",
            "type": "boolean",
            "description": "Current ATP / WTA singles rank and points of each player (singles matches). Two small requests per list per run.",
            "default": true
          },
          "sortBy": {
            "title": "Order",
            "enum": [
              "tour",
              "time"
            ],
            "type": "string",
            "description": "tour = ATP first, then WTA, Challenger, ITF, each by start time; time = by start time only. Players mode is always newest first.",
            "default": "tour"
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum records to return (matches or ranking rows), counted after the filters. A busy day has 300-450 singles matches across all tours.",
            "default": 100
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}