{"openapi":"3.1.0","info":{"title":"Sports Calculators","version":"1.0.0","description":"Ratings, sabermetrics, handicaps, odds, brackets and scoring for sports bots and fantasy tools. One call, one computed answer, no accounts or API keys. Machine-payable over x402.","x-guidance":"Sports Calculators: Ratings, sabermetrics, handicaps, odds, brackets and scoring for sports bots and fantasy tools. Sports Calculators: /elo-rating, /baseball-stats, /basketball-stats, /pythagorean-expectation, /golf-handicap, /betting-odds, /tournament-math, /cycling-power, /passer-rating, /cricket-stats, /bowling-score, /darts-checkout Each paid GET returns a computed verdict with the reasons, the source and what was NOT checked. A verdict of UNVERIFIED means a lookup failed: treat it as unknown. No account or key: pay per call in USDC over x402."},"servers":[{"url":"https://sports-calc.x402tookit.com"}],"paths":{"/baseball-stats":{"get":{"operationId":"baseball_stats","summary":"Baseball rate stats from counting stats: AVG, OBP, SLG, OPS, ISO, BABIP for batters; ERA, WHIP, K/9, BB/9, FIP for pitchers.","description":"Baseball rate stats from counting stats: AVG, OBP, SLG, OPS, ISO, BABIP for batters; ERA, WHIP, K/9, BB/9, FIP for pitchers.","tags":["baseball","sabermetrics","batting","pitching"],"parameters":[{"name":"ab","in":"query","required":false,"description":"At bats (batting)","schema":{"type":"integer"}},{"name":"h","in":"query","required":false,"description":"Hits","schema":{"type":"integer"}},{"name":"doubles","in":"query","required":false,"description":"Doubles","schema":{"type":"integer"}},{"name":"triples","in":"query","required":false,"description":"Triples","schema":{"type":"integer"}},{"name":"hr","in":"query","required":false,"description":"Home runs","schema":{"type":"integer"}},{"name":"bb","in":"query","required":false,"description":"Walks","schema":{"type":"integer"}},{"name":"hbp","in":"query","required":false,"description":"Hit by pitch","schema":{"type":"integer"}},{"name":"sf","in":"query","required":false,"description":"Sacrifice flies","schema":{"type":"integer"}},{"name":"so","in":"query","required":false,"description":"Strikeouts","schema":{"type":"integer"}},{"name":"ip","in":"query","required":false,"description":"Innings pitched in baseball notation, 180.1 = 180 1/3 (pitching)","schema":{"type":"string"}},{"name":"er","in":"query","required":false,"description":"Earned runs (pitching)","schema":{"type":"integer"}},{"name":"hAllowed","in":"query","required":false,"description":"Hits allowed (pitching)","schema":{"type":"integer"}},{"name":"bbIssued","in":"query","required":false,"description":"Walks issued (pitching)","schema":{"type":"integer"}},{"name":"soPitched","in":"query","required":false,"description":"Strikeouts recorded (pitching)","schema":{"type":"integer"}},{"name":"hrAllowed","in":"query","required":false,"description":"Home runs allowed (pitching)","schema":{"type":"integer"}},{"name":"hbpPitched","in":"query","required":false,"description":"Batters hit by pitch (pitching)","schema":{"type":"integer"}},{"name":"fipConstant","in":"query","required":false,"description":"League FIP constant, default 3.10","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"battingAverage":{"type":["null","number"]},"onBasePct":{"type":["null","number"]},"slugging":{"type":["null","number"]},"ops":{"type":["null","number"]},"isolatedPower":{"type":["null","number"]},"babip":{"type":["null","number"]},"totalBases":{"type":["null","number"]},"plateAppearancesApprox":{"type":["null","number"]},"strikeoutRate":{"type":["null","number"]},"walkRate":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"batting 0.300/0.366/0.500 (OPS 0.866).","reasons":["AVG = H/AB; OBP = (H+BB+HBP)/(AB+BB+HBP+SF); SLG = total bases/AB; BABIP = (H-HR)/(AB-K-HR+SF).","ERA = 9 x ER / IP; WHIP = (BB+H)/IP; FIP = (13 HR + 3 (BB+HBP) - 2 K)/IP + constant."],"battingAverage":0.3,"onBasePct":0.366,"slugging":0.5,"ops":0.866,"isolatedPower":0.2,"babip":0.338,"totalBases":250,"plateAppearancesApprox":560,"strikeoutRate":0.179,"walkRate":0.089,"degraded":false,"notChecked":["park, league and era adjustments (OPS+, ERA+, wRC+ need league data)","the FIP constant, which changes each season: pass the league value for a true FIP","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:34:04.759Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/baseball-stats"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/baseball-stats"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/baseball-stats"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/baseball-stats"}}]}}},"/basketball-stats":{"get":{"operationId":"basketball_stats","summary":"Basketball efficiency from box-score numbers: eFG%, true shooting %, points, per-36 rates and assist-to-turnover ratio.","description":"Basketball efficiency from box-score numbers: eFG%, true shooting %, points, per-36 rates and assist-to-turnover ratio.","tags":["basketball","efficiency","true-shooting","box-score"],"parameters":[{"name":"fg","in":"query","required":true,"description":"Field goals made","schema":{"type":"integer"}},{"name":"fga","in":"query","required":true,"description":"Field goals attempted","schema":{"type":"integer"}},{"name":"threes","in":"query","required":false,"description":"Three-pointers made (included in fg), default 0","schema":{"type":"integer"}},{"name":"ft","in":"query","required":false,"description":"Free throws made, default 0","schema":{"type":"integer"}},{"name":"fta","in":"query","required":false,"description":"Free throws attempted, default 0","schema":{"type":"integer"}},{"name":"minutes","in":"query","required":false,"description":"Minutes played, for per-36 rates","schema":{"type":"number"}},{"name":"ast","in":"query","required":false,"description":"Assists","schema":{"type":"integer"}},{"name":"tov","in":"query","required":false,"description":"Turnovers","schema":{"type":"integer"}},{"name":"reb","in":"query","required":false,"description":"Rebounds","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"points":{"type":["null","number"]},"fgPct":{"type":["null","number"]},"effectiveFgPct":{"type":["null","number"]},"trueShootingPct":{"type":["null","number"]},"ftPct":{"type":["null","number"]},"freeThrowRate":{"type":["null","number"]},"pointsPerShootingPossession":{"type":["null","number"]},"per36":{"type":["null","object"],"properties":{"points":{"type":["null","number"]},"assists":{"type":["null","number"]},"rebounds":{"type":["null","number"]},"turnovers":{"type":["null","number"]}}},"assistToTurnover":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"29 points; eFG% 60.0, true shooting 64.0%.","reasons":["eFG% = (FG + 0.5 x 3P) / FGA; TS% = PTS / (2 x (FGA + 0.44 x FTA)).","Points are computed as 2 x FG + 3P + FT (threes count one extra point)."],"points":29,"fgPct":0.5,"effectiveFgPct":0.6,"trueShootingPct":0.64,"ftPct":0.833,"freeThrowRate":0.3,"pointsPerShootingPossession":1.281,"per36":{"points":32.63,"assists":6.75,"rebounds":9,"turnovers":3.375},"assistToTurnover":2,"degraded":false,"notChecked":["league and era context: a 55% true-shooting figure means different things in different seasons","defence, usage and shot difficulty","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:34:05.011Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/basketball-stats"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/basketball-stats"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/basketball-stats"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/basketball-stats"}}]}}},"/betting-odds":{"get":{"operationId":"betting_odds","summary":"Convert American, decimal, fractional odds and probability; add the other side for margin, or your own chance for Kelly.","description":"Convert American, decimal, fractional odds and probability; add the other side for margin, or your own chance for Kelly.","tags":["odds","probability","kelly","overround"],"parameters":[{"name":"odds","in":"query","required":true,"description":"The odds, e.g. -110, 2.5, 5/2 or 0.4","schema":{"type":"string"}},{"name":"format","in":"query","required":true,"description":"american, decimal, fractional or probability","schema":{"type":"string"}},{"name":"otherSideOdds","in":"query","required":false,"description":"Odds of the opposing outcome in the same format, to measure the bookmaker margin","schema":{"type":"string"}},{"name":"yourProbability","in":"query","required":false,"description":"Your own win probability 0 to 1, for the Kelly fraction","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"decimal":{"type":["null","number"]},"american":{"type":["null","string"]},"fractional":{"type":["null","string"]},"impliedProbability":{"type":["null","number"]},"profitPer100Stake":{"type":["null","number"]},"otherSideDecimal":{"type":["null","number"]},"otherSideImplied":{"type":["null","number"]},"overround":{"type":["null","number"]},"bookmakerMarginPct":{"type":["null","number"]},"noVigProbability":{"type":["null","number"]},"noVigProbabilityOtherSide":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"Decimal 1.9091 = American -110; implied probability 52.38%. Two-way book totals 104.76% (margin 4.76%); no-vig probability 50%.","reasons":["Implied probability = 1 / decimal odds and includes the bookmaker's margin unless removed with the other side.","Kelly fraction f = (b p - q) / b, where b is the net decimal payout, p your probability, q = 1 - p."],"decimal":1.909091,"american":"-110","fractional":"0.90909/1","impliedProbability":0.5238095,"profitPer100Stake":90.9091,"otherSideDecimal":1.909091,"otherSideImplied":0.5238095,"overround":1.047619,"bookmakerMarginPct":4.7619,"noVigProbability":0.5,"noVigProbabilityOtherSide":0.5,"degraded":false,"notChecked":["whether any bet is wise, legal where you are, or available: this is arithmetic only","the true probability of any outcome: implied probability includes the bookmaker margin","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:34:05.276Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/betting-odds"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/betting-odds"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/betting-odds"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/betting-odds"}}]}}},"/bowling-score":{"get":{"operationId":"bowling_score","summary":"Score a ten-pin bowling game from its rolls: frame-by-frame totals with strike and spare bonuses, validation of illegal rolls.","description":"Score a ten-pin bowling game from its rolls: frame-by-frame totals with strike and spare bonuses, validation of illegal rolls.","tags":["bowling","score","strike","spare"],"parameters":[{"name":"rolls","in":"query","required":true,"description":"Pins knocked down on each roll in order, comma separated, e.g. 10,7,3,9,0","schema":{"type":"string"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"complete":{"type":["boolean","null"]},"total":{"type":["null","number"]},"scoredSoFar":{"type":["null","number"]},"perfectGame":{"type":["boolean","null"]},"frames":{"type":["array","null"],"items":{"type":"object","properties":{"frame":{"type":["null","number"]},"rolls":{"type":["array","null"],"items":{"type":"number"}},"mark":{"type":["null","string"]},"frameScore":{"type":["null","number"]},"runningTotal":{"type":["null","number"]}}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPLETE","summary":"Final score 167 over 10 frames.","reasons":["Strike: 10 plus the next two rolls. Spare: 10 plus the next roll. Open frame: pins knocked down. The tenth frame awards fill balls after a strike or spare.","A frame's score is final only once its bonus rolls are known."],"complete":true,"total":167,"scoredSoFar":167,"perfectGame":false,"frames":[{"frame":1,"rolls":[10],"mark":"strike","frameScore":20,"runningTotal":20},{"frame":2,"rolls":[7,3],"mark":"spare","frameScore":19,"runningTotal":39}],"degraded":false,"notChecked":["tournament-specific rules (handicaps, foul lines) and five-pin or candlepin scoring","whether the rolls are real: only the rules of the game are validated"],"source":"computed locally","asOf":"2026-10-11T14:34:05.542Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/bowling-score"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/bowling-score"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/bowling-score"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/bowling-score"}}]}}},"/cricket-stats":{"get":{"operationId":"cricket_stats","summary":"Cricket batting average and strike rate, or bowling economy, average and strike rate, from raw career or match numbers.","description":"Cricket batting average and strike rate, or bowling economy, average and strike rate, from raw career or match numbers.","tags":["cricket","batting-average","economy","strike-rate"],"parameters":[{"name":"runs","in":"query","required":false,"description":"Runs scored (batting)","schema":{"type":"integer"}},{"name":"innings","in":"query","required":false,"description":"Innings batted","schema":{"type":"integer"}},{"name":"notOuts","in":"query","required":false,"description":"Not outs, default 0","schema":{"type":"integer"}},{"name":"ballsFaced","in":"query","required":false,"description":"Balls faced, for strike rate","schema":{"type":"integer"}},{"name":"runsConceded","in":"query","required":false,"description":"Runs conceded (bowling)","schema":{"type":"integer"}},{"name":"overs","in":"query","required":false,"description":"Overs bowled, cricket notation 4.2 = 4 overs 2 balls","schema":{"type":"string"}},{"name":"wickets","in":"query","required":false,"description":"Wickets taken","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"dismissals":{"type":["null","number"]},"battingAverage":{"type":["null","number"]},"strikeRate":{"type":["null","number"]},"runsPerInnings":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"batting average 55.56, strike rate 71.43.","reasons":["Batting average = runs / (innings - not outs); strike rate = runs per 100 balls.","Economy = runs conceded per over (true overs: 4.2 is 4 and one third); bowling average = runs per wicket; strike rate = balls per wicket."],"dismissals":90,"battingAverage":55.556,"strikeRate":71.429,"runsPerInnings":50,"degraded":false,"notChecked":["format, era and pitch conditions, which change what a good average is","the batting average when every innings was not out (it is undefined, reported as null)","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:34:05.806Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/cricket-stats"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/cricket-stats"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/cricket-stats"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/cricket-stats"}}]}}},"/cycling-power":{"get":{"operationId":"cycling_power","summary":"Cycling FTP from a 20 or 8 minute test, watts per kilogram, and the seven Coggan training zones in watts.","description":"Cycling FTP from a 20 or 8 minute test, watts per kilogram, and the seven Coggan training zones in watts.","tags":["cycling","ftp","power","training-zones"],"parameters":[{"name":"ftpWatts","in":"query","required":false,"description":"Known FTP in watts","schema":{"type":"number"}},{"name":"twentyMinuteWatts","in":"query","required":false,"description":"Best 20-minute average power (FTP = 95%)","schema":{"type":"number"}},{"name":"eightMinuteWatts","in":"query","required":false,"description":"Best 8-minute average power (FTP = 90%)","schema":{"type":"number"}},{"name":"weightKg","in":"query","required":false,"description":"Body weight in kg, for watts per kilogram","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"ftpWatts":{"type":["null","number"]},"wattsPerKg":{"type":["null","number"]},"basis":{"type":["null","string"]},"zones":{"type":["array","null"],"items":{"type":"object","properties":{"zone":{"type":["null","string"]},"percentOfFtp":{"type":["null","string"]},"watts":{"type":["null","string"]},"lowWatts":{"type":["null","number"]},"highWatts":{"type":["null","number"]}}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"FTP 285 W (95% of the 20-minute 300 W), 4.07 W/kg; threshold zone 259-299 W.","reasons":["Zones follow Coggan's seven-zone model as percentages of FTP.","FTP is estimated as 95% of best 20-minute power or 90% of best 8-minute power, common field-test conventions."],"ftpWatts":285,"wattsPerKg":4.071,"basis":"twentyMinuteWatts","zones":[{"zone":"Z1 Active recovery","percentOfFtp":"0-55","watts":"0-157","lowWatts":0,"highWatts":157},{"zone":"Z2 Endurance","percentOfFtp":"56-75","watts":"160-214","lowWatts":160,"highWatts":214}],"degraded":false,"notChecked":["whether the test was a true maximal effort in good conditions","individual physiology: zones are a population convention","…2 more"],"source":"computed locally","asOf":"2026-10-11T14:34:06.069Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/cycling-power"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/cycling-power"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/cycling-power"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/cycling-power"}}]}}},"/darts-checkout":{"get":{"operationId":"darts_checkout","summary":"Darts checkout routes for a remaining score of 2 to 170: the fewest darts that finish on a double, with alternatives.","description":"Darts checkout routes for a remaining score of 2 to 170: the fewest darts that finish on a double, with alternatives.","tags":["darts","checkout","501","finish"],"parameters":[{"name":"score","in":"query","required":true,"description":"Remaining score, 2 to 170","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"score":{"type":["null","number"]},"dartsNeeded":{"type":["null","number"]},"routeCount":{"type":["null","number"]},"routes":{"type":["array","null"],"items":{"type":"object","properties":{"darts":{"type":["array","null"],"items":{"type":"string"}},"text":{"type":["null","string"]}}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"CHECKOUT","summary":"170: T20 T20 Bull (3 darts).","reasons":["Every route ends on a double (the bullseye counts as the double 25); T = treble, D = double, S = single, Bull = 50.","Listed highest-scoring first dart first; players often prefer routes leaving their favourite double."],"score":170,"dartsNeeded":3,"routeCount":1,"routes":[{"darts":["T20","T20","…1 more"],"text":"T20 T20 Bull"}],"degraded":false,"notChecked":["your accuracy: the best route in practice depends on which doubles you hit","setup darts that leave a good double instead of finishing now","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:34:06.322Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/darts-checkout"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/darts-checkout"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/darts-checkout"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/darts-checkout"}}]}}},"/elo-rating":{"get":{"operationId":"elo_rating","summary":"Elo rating update after a game: win probability for each side, new ratings and the points exchanged.","description":"Elo rating update after a game: win probability for each side, new ratings and the points exchanged.","tags":["elo","rating","chess","ranking"],"parameters":[{"name":"ratingA","in":"query","required":true,"description":"Player A rating","schema":{"type":"number"}},{"name":"ratingB","in":"query","required":true,"description":"Player B rating","schema":{"type":"number"}},{"name":"result","in":"query","required":true,"description":"Result for A: win, draw, loss (or 1, 0.5, 0)","schema":{"type":"string"}},{"name":"k","in":"query","required":false,"description":"K-factor, default 32","schema":{"type":"number"}},{"name":"kB","in":"query","required":false,"description":"K-factor for B if different","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"expectedA":{"type":["null","number"]},"expectedB":{"type":["null","number"]},"ratingDifference":{"type":["null","number"]},"newRatingA":{"type":["null","number"]},"newRatingB":{"type":["null","number"]},"changeA":{"type":["null","number"]},"changeB":{"type":["null","number"]},"scoreA":{"type":["null","number"]},"kA":{"type":["null","number"]},"kB":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"A expected 76% to win, B 24%. After the result A 1607.7 (+7.69), B 1392.3 (-7.69).","reasons":["Expected score E = 1 / (1 + 10^((opponent - own) / 400)); new rating = old + K x (actual - expected).","With equal K-factors the points A gains are exactly the points B loses."],"expectedA":0.7597469,"expectedB":0.2402531,"ratingDifference":200,"newRatingA":1607.6881,"newRatingB":1392.3119,"changeA":7.6881,"changeB":-7.6881,"scoreA":1,"kA":32,"kB":32,"degraded":false,"notChecked":["which federation's rules apply (FIDE, USCF and others add rating floors, provisional periods and K-factor rules)","that the K-factor suits the player's rating and games played","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:34:06.586Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/elo-rating"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/elo-rating"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/elo-rating"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/elo-rating"}}]}}},"/golf-handicap":{"get":{"operationId":"golf_handicap","summary":"World Handicap System index from your last 3 to 20 rounds (best differentials), plus course handicap for a course.","description":"World Handicap System index from your last 3 to 20 rounds (best differentials), plus course handicap for a course.","tags":["golf","handicap","whs","course-rating"],"parameters":[{"name":"scores","in":"query","required":false,"description":"Adjusted gross scores, comma separated (use with courseRating and slopeRating)","schema":{"type":"string"}},{"name":"differentials","in":"query","required":false,"description":"Score differentials, comma separated (instead of scores)","schema":{"type":"string"}},{"name":"courseRating","in":"query","required":false,"description":"Course rating of the rounds (with scores)","schema":{"type":"number"}},{"name":"slopeRating","in":"query","required":false,"description":"Slope rating of the rounds, 55 to 155 (with scores)","schema":{"type":"number"}},{"name":"targetCourseRating","in":"query","required":false,"description":"Course rating to play, for course handicap","schema":{"type":"number"}},{"name":"targetSlope","in":"query","required":false,"description":"Slope to play","schema":{"type":"number"}},{"name":"targetPar","in":"query","required":false,"description":"Par to play","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"handicapIndex":{"type":["null","number"]},"scoresUsed":{"type":["null","number"]},"differentials":{"type":["array","null"],"items":{"type":"number"}},"lowestUsed":{"type":["array","null"],"items":{"type":"number"}},"adjustment":{"type":["null","number"]},"courseHandicap":{"type":["null","number"]},"courseHandicapUnrounded":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"Handicap index 7.2 from the 2 best of 8 differentials; course handicap 9 on the target course.","reasons":["Differential = (113 / slope) x (adjusted gross - course rating). The index averages the best differentials from the last 20 per the World Handicap System table.","Course handicap = index x slope / 113 + (course rating - par), rounded.","…1 more"],"handicapIndex":7.2,"scoresUsed":8,"differentials":[9.4,12],"lowestUsed":[6.8,7.6],"adjustment":0,"courseHandicap":9,"courseHandicapUnrounded":8.70177,"degraded":false,"notChecked":["adjusted gross score rules (net double bogey cap), playing-conditions adjustment and exceptional-score reductions","the soft and hard caps that limit rapid index rises","…2 more"],"source":"computed locally","asOf":"2026-10-11T14:34:06.850Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/golf-handicap"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/golf-handicap"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/golf-handicap"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/golf-handicap"}}]}}},"/passer-rating":{"get":{"operationId":"passer_rating","summary":"NFL passer rating (0 to 158.3) from attempts, completions, yards, touchdowns and interceptions, with each component.","description":"NFL passer rating (0 to 158.3) from attempts, completions, yards, touchdowns and interceptions, with each component.","tags":["nfl","football","passer-rating","quarterback"],"parameters":[{"name":"attempts","in":"query","required":true,"description":"Pass attempts","schema":{"type":"integer"}},{"name":"completions","in":"query","required":true,"description":"Completions","schema":{"type":"integer"}},{"name":"yards","in":"query","required":true,"description":"Passing yards","schema":{"type":"integer"}},{"name":"touchdowns","in":"query","required":true,"description":"Touchdown passes","schema":{"type":"integer"}},{"name":"interceptions","in":"query","required":true,"description":"Interceptions","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"rating":{"type":["null","number"]},"components":{"type":["null","object"],"properties":{"completion":{"type":["null","number"]},"yardsPerAttempt":{"type":["null","number"]},"touchdown":{"type":["null","number"]},"interception":{"type":["null","number"]}}},"completionPct":{"type":["null","number"]},"yardsPerAttempt":{"type":["null","number"]},"perfect":{"type":["boolean","null"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"Passer rating 100.7 (20/30, 250 yds, 2 TD, 1 INT).","reasons":["Four components, each capped between 0 and 2.375: completion %, yards per attempt, touchdown %, interception %.","Rating = (sum of components / 6) x 100; a perfect game scores 158.3."],"rating":100.694,"components":{"completion":1.83333,"yardsPerAttempt":1.33333,"touchdown":1.33333,"interception":1.54167},"completionPct":66.667,"yardsPerAttempt":8.3333,"perfect":false,"degraded":false,"notChecked":["the college (NCAA) rating, which uses a different formula","sacks, rushing, game situation or strength of opponent","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:34:07.111Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/passer-rating"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/passer-rating"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/passer-rating"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/passer-rating"}}]}}},"/pythagorean-expectation":{"get":{"operationId":"pythagorean_expectation","summary":"Pythagorean expected win percentage and wins from points or runs for and against, with sport-specific exponents.","description":"Pythagorean expected win percentage and wins from points or runs for and against, with sport-specific exponents.","tags":["pythagorean","win-percentage","baseball","basketball","nfl"],"parameters":[{"name":"scored","in":"query","required":true,"description":"Points or runs scored","schema":{"type":"number"}},{"name":"allowed","in":"query","required":true,"description":"Points or runs allowed","schema":{"type":"number"}},{"name":"sport","in":"query","required":false,"description":"baseball (default), basketball, nfl or nhl","schema":{"type":"string"}},{"name":"games","in":"query","required":false,"description":"Games played or season length, default by sport","schema":{"type":"integer"}},{"name":"exponent","in":"query","required":false,"description":"Override the exponent","schema":{"type":"number"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"sport":{"type":["null","string"]},"exponent":{"type":["null","number"]},"expectedWinPct":{"type":["null","number"]},"expectedWins":{"type":["null","number"]},"expectedLosses":{"type":["null","number"]},"games":{"type":["null","number"]},"runDifferential":{"type":["null","number"]},"runsPerGameScored":{"type":["null","number"]},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"800 for, 700 against (baseball, exponent 1.83): expected win % 56.1, about 90.8 wins and 71.2 losses in 162 games.","reasons":["Expected win % = RS^x / (RS^x + RA^x), the Pythagorean expectation of Bill James with a fitted exponent.","Teams far from their Pythagorean record tend to drift back toward it, which is why it is used as a luck check."],"sport":"baseball","exponent":1.83,"expectedWinPct":0.560788,"expectedWins":90.848,"expectedLosses":71.152,"games":162,"runDifferential":100,"runsPerGameScored":4.9383,"degraded":false,"notChecked":["injuries, schedule strength, luck in close games and late-season changes","that the exponent suits the league and era: it is a fitted constant, not a law","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:34:07.373Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/pythagorean-expectation"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/pythagorean-expectation"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/pythagorean-expectation"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/pythagorean-expectation"}}]}}},"/tournament-math":{"get":{"operationId":"tournament_math","summary":"Rounds, byes and total games for single and double elimination, round-robin and Swiss events, with standard bracket seeding.","description":"Rounds, byes and total games for single and double elimination, round-robin and Swiss events, with standard bracket seeding.","tags":["tournament","bracket","round-robin","seeding"],"parameters":[{"name":"teams","in":"query","required":true,"description":"Number of teams or players, 2 to 4096","schema":{"type":"integer"}}],"responses":{"200":{"description":"The answer.","content":{"application/json":{"schema":{"type":"object","properties":{"verdict":{"type":["null","string"]},"summary":{"type":["null","string"]},"reasons":{"type":["array","null"],"items":{"type":"string"}},"teams":{"type":["null","number"]},"singleElimination":{"type":["null","object"],"properties":{"rounds":{"type":["null","number"]},"bracketSize":{"type":["null","number"]},"byes":{"type":["null","number"]},"firstRoundGames":{"type":["null","number"]},"totalGames":{"type":["null","number"]}}},"doubleElimination":{"type":["null","object"],"properties":{"totalGamesWithoutReset":{"type":["null","number"]},"totalGamesWithReset":{"type":["null","number"]}}},"roundRobin":{"type":["null","object"],"properties":{"totalGames":{"type":["null","number"]},"rounds":{"type":["null","number"]},"byesPerRound":{"type":["null","number"]},"gamesPerTeam":{"type":["null","number"]}}},"doubleRoundRobin":{"type":["null","object"],"properties":{"totalGames":{"type":["null","number"]}}},"swiss":{"type":["null","object"],"properties":{"suggestedRounds":{"type":["null","number"]}}},"seedingOrder":{"type":["array","null"],"items":{"type":["number","string"]}},"firstRoundPairings":{"type":["array","null"],"items":{"type":"array","items":{"type":["number","string"]}}},"degraded":{"type":["boolean","null"]},"notChecked":{"type":["array","null"],"items":{"type":"string"}},"source":{"type":["null","string"]},"asOf":{"type":["null","string"]},"disclaimer":{"type":["null","string"]}}},"example":{"verdict":"COMPUTED","summary":"12 teams: single elimination 4 rounds, 11 games, 4 byes (bracket of 16); double elimination 22 to 23 games; round-robin 66 games over 11 rounds; Swiss 4 rounds.","reasons":["Single elimination: every game eliminates one team, so n - 1 games; byes fill the bracket to the next power of two and go to the top seeds.","Double elimination: every team except the champion loses twice (2n - 2 games), plus one if the bracket-reset final is played.","…1 more"],"teams":12,"singleElimination":{"rounds":4,"bracketSize":16,"byes":4,"firstRoundGames":4,"totalGames":11},"doubleElimination":{"totalGamesWithoutReset":22,"totalGamesWithReset":23},"roundRobin":{"totalGames":66,"rounds":11,"byesPerRound":0,"gamesPerTeam":11},"doubleRoundRobin":{"totalGames":132},"swiss":{"suggestedRounds":4},"seedingOrder":[1,"BYE"],"firstRoundPairings":[[1,"BYE"],[8,9]],"degraded":false,"notChecked":["tie-breaks, seeding by rating and venue constraints","third-place games and consolation brackets","…1 more"],"source":"computed locally","asOf":"2026-10-11T14:34:07.638Z","disclaimer":"Screening signal computed from the named public source. Not financial, legal or investment advice; provided as is. Verify at the source before acting."}}}},"400":{"description":"A parameter was missing or out of range."},"402":{"description":"Payment Required"},"502":{"description":"The upstream source failed or timed out."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.0200"},"protocols":[{"x402":{"network":"eip155:8453","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/tournament-math"}},{"x402":{"network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/tournament-math"}},{"x402":{"network":"eip155:137","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/tournament-math"}},{"x402":{"network":"eip155:42161","scheme":"exact","currency":"USDC","endpoint":"https://sports-calc.x402tookit.com/tournament-math"}}]}}}}}