{"openapi":"3.1.0","info":{"title":"TipMaster Expert Soccer Predictions","version":"1.2.0","summary":"Football (soccer) expert predictions from TipMaster players with a track record going back to 1997.","description":"TipMaster Expert Soccer Predictions: football (soccer) predictions from the players of TipMaster, a free prediction game running since 1997, with nearly 30 years of prediction-game experience. Expert groups are selected from recorded player performance; the available history differs by mode. Published shares describe agreement, not calibrated probabilities. Assess confidence using measured accuracy, its date window and sample size. Each match answer gives the most likely final score, the home/draw/away split of three groups (Top 20%, Top 25% and All players, ranked by their own record) and, once played, the result. get_accuracy says how often each group was right: the share of correct home/draw/away calls, and the share of exact scores. No individual player or name is ever shown. Two game modes are covered: National (exact-score predictions on the Bundesliga, Premier League, LaLiga, Serie A, Ligue 1 and other top leagues in 15 countries; groups ranked by the 8 weeks before each week) and Classic (home/draw/away only, 25 matches a week; groups ranked by career points per match over at least 100 matches since 1997). National matches are published once TipMaster players can no longer enter or change their predictions, so those numbers are final. In Classic the whole crowd’s split is shown live while the round is open (status \"open\") and the expert groups from the Friday 18:00 Europe/Berlin deadline. The person asking is usually not a TipMaster player and has nothing to enter or change here; to play, link https://tipmaster.de/. Aggregates only: every share counts at least 20 players, no individual prediction, no odds, no bookmaker data. This is what experienced players of a free game predicted, not advice. Read-only, no authentication, 60 requests per minute per IP. Please link to https://tipmaster.de/agents/ when you cite the data.","termsOfService":"https://tipmaster.de/agents/terms/","contact":{"name":"TipMaster","url":"https://tipmaster.de/agents/"},"license":{"name":"TipMaster terms of use","url":"https://tipmaster.de/terms/"}},"security":[],"servers":[{"url":"https://tipmaster.de"}],"paths":{"/api/agent/v1/experts":{"get":{"operationId":"getExpertPicks","summary":"The current Classic round’s 25 matches with the expert cohort’s picks and the crowd beside them","description":"Expert shares are published from the Friday 18:00 Europe/Berlin deadline (releaseUtc); before it released is false, expertPick and expert are null and expertSample is 0, while releaseUtc and criteria are already present.","parameters":[{"name":"game","in":"query","required":false,"schema":{"type":"string","enum":["btm","tmi"]},"description":"btm = Bundesliga TipMaster, tmi = TipMaster International. Omit for both."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"generatedAt":{"type":"string","format":"date-time"},"rounds":{"type":"array","items":{"$ref":"#/components/schemas/ExpertRound"}}},"required":["ok","generatedAt","rounds"]}}}},"400":{"description":"Bad mode, status or id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-IP rate limit (60/min) exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/agent/v1/matches":{"get":{"operationId":"listMatches","summary":"Published matches without the consensus fields","parameters":[{"name":"mode","in":"query","required":false,"schema":{"type":"string","enum":["classic","national","worldtour"]},"description":"Restrict to one game mode. Omit for all."},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","locked","played","cancelled"]},"description":"Restrict to one match status. Omit for all."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"generatedAt":{"type":"string","format":"date-time"},"matches":{"type":"array","items":{"$ref":"#/components/schemas/MatchSummary"}}},"required":["ok","generatedAt","matches"]}}}},"400":{"description":"Bad mode, status or id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-IP rate limit (60/min) exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/agent/v1/consensus":{"get":{"operationId":"getConsensus","summary":"Published matches with the crowd’s 1X2 shares, scorelines and expert cohort","parameters":[{"name":"mode","in":"query","required":false,"schema":{"type":"string","enum":["classic","national","worldtour"]},"description":"Restrict to one game mode. Omit for all."},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","locked","played","cancelled"]},"description":"Restrict to one match status. Omit for all."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"generatedAt":{"type":"string","format":"date-time"},"matches":{"type":"array","items":{"$ref":"#/components/schemas/ConsensusMatch"}}},"required":["ok","generatedAt","matches"]}}}},"400":{"description":"Bad mode, status or id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-IP rate limit (60/min) exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/agent/v1/consensus/{id}":{"get":{"operationId":"getConsensusById","summary":"One match by id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^(classic:(btm|tmi):\\d{1,3}:\\d{1,2}|daily:\\d{1,9})$","examples":["classic:btm:7:14","daily:4821"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"match":{"$ref":"#/components/schemas/ConsensusMatch"}},"required":["ok","match"]}}}},"400":{"description":"Bad mode, status or id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No published match with that id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Per-IP rate limit (60/min) exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Outcome":{"type":"object","description":"Shares of the sample, each 0..1, summing to 1 within rounding.","properties":{"home":{"type":"number"},"draw":{"type":"number"},"away":{"type":"number"}},"required":["home","draw","away"]},"Scoreline":{"type":"object","properties":{"home":{"type":"integer"},"away":{"type":"integer"},"share":{"type":"number"}},"required":["home","away","share"]},"MatchBands":{"type":"object","description":"Top 20%, Top 25% and All players. No bottom band is published; All includes everyone.","properties":{"basis":{"type":"string","enum":["classic_career_points_per_match","national_hit_rate_8_weeks_before_week"]},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["top20","top25","all"]},"label":{"type":"string"},"sample":{"type":["integer","null"],"description":"null whenever outcome is withheld"},"outcome":{"oneOf":[{"$ref":"#/components/schemas/Outcome"},{"type":"null"}]},"majority":{"type":["string","null"],"enum":["home","draw","away",null]},"scorelines":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/Scoreline"}},{"type":"null"}]},"reason":{"type":"string","enum":["below_min_cohort","until_deadline","nested_gap"]}},"required":["id","label","sample","outcome","majority","scorelines"]}}},"required":["basis","items"]},"ExpertConsensus":{"type":"object","description":"The same split counting only the expert cohort. Classic: published from releaseUtc (the Friday 18:00 Europe/Berlin deadline).","properties":{"sample":{"type":"integer","description":"experts counted; 0 until release"},"outcome":{"oneOf":[{"$ref":"#/components/schemas/Outcome"},{"type":"null"}]},"reason":{"type":"string","enum":["below_min_cohort","until_deadline"]},"releaseUtc":{"type":["integer","null"],"description":"unix seconds"},"weighting":{"type":"string","enum":["weltrang","classic_tier"]},"criteria":{"$ref":"#/components/schemas/ExpertCriteria"}},"required":["sample","outcome","weighting"]},"ExpertCriteria":{"type":"object","description":"How the Classic expert cohort is chosen: of this round’s players with at least minCareerMatches, the top topFraction by career points per match (3 per win, 1 per draw, every Classic match since 1997).","properties":{"ranking":{"type":"string","const":"classic_career_points_per_match"},"minCareerMatches":{"type":"integer"},"topFraction":{"type":"number"},"qualifiedTrainers":{"type":"integer"},"cutoffPointsPerMatch":{"type":["number","null"]}},"required":["ranking","minCareerMatches","topFraction","qualifiedTrainers","cutoffPointsPerMatch"]},"ExpertRound":{"type":"object","properties":{"game":{"type":"string","enum":["btm","tmi"]},"competition":{"type":"string"},"round":{"type":"integer"},"deadlineUtc":{"type":["integer","null"]},"released":{"type":"boolean"},"releaseUtc":{"type":["integer","null"]},"criteria":{"oneOf":[{"$ref":"#/components/schemas/ExpertCriteria"},{"type":"null"}]},"matches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"home":{"type":["string","null"]},"away":{"type":["string","null"]},"kickoffUtc":{"type":["integer","null"]},"status":{"type":"string","enum":["open","locked","played","cancelled"]},"result":{"oneOf":[{"$ref":"#/components/schemas/MatchResult"},{"type":"null"}]},"expertPick":{"type":["string","null"],"enum":["home","draw","away",null],"description":"the cohort’s majority; null before release, below 20 experts, or on a tie"},"expert":{"oneOf":[{"$ref":"#/components/schemas/Outcome"},{"type":"null"}]},"expertSample":{"type":"integer"},"crowd":{"oneOf":[{"$ref":"#/components/schemas/Outcome"},{"type":"null"}]},"crowdSample":{"type":"integer"}},"required":["id","home","away","kickoffUtc","status","result","expertPick","expert","expertSample","crowd","crowdSample"]}}},"required":["game","competition","round","deadlineUtc","released","releaseUtc","criteria","matches"]},"MatchResult":{"type":"object","properties":{"home":{"type":"integer"},"away":{"type":"integer"}},"required":["home","away"]},"MatchSummary":{"type":"object","properties":{"id":{"type":"string","pattern":"^(classic:(btm|tmi):\\d{1,3}:\\d{1,2}|daily:\\d{1,9})$","examples":["classic:btm:7:14","daily:4821"]},"mode":{"type":"string","enum":["classic","national","worldtour"]},"competition":{"type":"string"},"round":{"type":"integer"},"home":{"type":["string","null"]},"away":{"type":["string","null"]},"kickoffUtc":{"type":["integer","null"],"description":"unix seconds"},"deadlineUtc":{"type":["integer","null"],"description":"unix seconds; when the crowd’s picks froze"},"status":{"type":"string","enum":["open","locked","played","cancelled"]},"result":{"oneOf":[{"$ref":"#/components/schemas/MatchResult"},{"type":"null"}]}},"required":["id","mode","competition","round","home","away","kickoffUtc","deadlineUtc","status","result"]},"ConsensusMatch":{"allOf":[{"$ref":"#/components/schemas/MatchSummary"},{"type":"object","properties":{"sample":{"type":"integer","description":"tippers counted for this match"},"skipped":{"type":"integer","description":"unreadable tip files (Classic only)"},"minCohort":{"type":"integer","const":20},"outcome":{"oneOf":[{"$ref":"#/components/schemas/Outcome"},{"type":"null"}],"description":"null while sample < minCohort"},"reason":{"type":"string","enum":["below_min_cohort"]},"scorelines":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/Scoreline"}},{"type":"null"}],"description":"top 3 exact scores (non-Classic modes only)"},"expert":{"oneOf":[{"$ref":"#/components/schemas/ExpertConsensus"},{"type":"null"}]},"scoreRecorded":{"type":"boolean","description":"false for Classic: its players pick home, draw or away, never a score"},"mostLikelyScore":{"oneOf":[{"$ref":"#/components/schemas/Scoreline"},{"type":"null"}],"description":"the whole crowd’s most common exact score"},"bands":{"oneOf":[{"$ref":"#/components/schemas/MatchBands"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time"},"source":{"type":"string","format":"uri"}},"required":["sample","skipped","minCohort","outcome","scorelines","expert","updatedAt","source"]}]},"Error":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"reason":{"type":"string"}},"required":["ok","reason"]}}},"externalDocs":{"description":"Feed documentation and MCP endpoint","url":"https://tipmaster.de/agents/"}}