other · Listed · eip155:8453 · Found · 54 endpoints · Gateway-eligible
sports-predictor-api.fly.dev
sports-predictor-api
X402 endpoints at sports-predictor-api.fly.dev.
Indexed from this operator's public /.well-known/x402.json. Found is not operator-owned and is not attested. Claim or opt out.
Agent Read · Cleared Index
ROUTE
Route when you need other at published x402 prices.
confidence
78%
source
signal
Index before you pay. Same payload for agents:
GET /api/cleared/agent-read?slug=cat-sports-predictor-api-fly-dev
When to call
- Need other via x402 and want Cleared-indexed payTo with a live scorecard.
- X402 endpoints at sports-predictor-api.fly.dev.
Risks
- Found — not operator-owned; claim status unknown.
- No Cleared settlement receipt on file yet.
- No Gateway traffic yet — market share unproven.
Price posture
54 endpoints — confirm price on manifest before pay.
Category · Gateway
other · no Gateway routes yet — early / unproven on Cleared market share.
Endpoint hints
GET /api/healthGET /api/health at $Metered.
GET /api/quotaHow many external API calls we've used today/this month.
GET /api/dashboardOne-stop proof + health surface: model registry, live calibration, recent backtests.
GET /api/scheduler/statusBackground scheduler state + last run summary.
POST /api/scheduler/run-nowManually trigger the daily model-refresh job (re-ingest intl + refit DC).
GET /api/v1/probabilitiesEvery upcoming fixture with calibrated probabilities and derived markets. The one endpoint priced for agents (x402, USDC on Base). It is pure model output — no
POST /api/askPlain-English question -> the model's grounded answer. Fixture resolution and the prediction itself are free (heuristics + math); only the short write-up calls
POST /api/fixturesPOST /api/fixtures at $Metered.
Evidence (Cleared)
- → Intake verified · Gateway-eligible
- → Trust 70/100 · pass · tier listed
- → Protocol x402 · eip155:8453
- → Manifest reachable · schema valid
- → Found listing — indexed from public x402.json, not operator-attested.
Endpoints
Health
$MeteredGET https://sports-predictor-api.fly.dev/api/healthQuota
$MeteredGET https://sports-predictor-api.fly.dev/api/quotaHow many external API calls we've used today/this month.
Dashboard
Not used$MeteredGET https://sports-predictor-api.fly.dev/api/dashboardOne-stop proof + health surface: model registry, live calibration, recent backtests.
Scheduler Status
$MeteredGET https://sports-predictor-api.fly.dev/api/scheduler/statusBackground scheduler state + last run summary.
Scheduler Run Now
$MeteredPOST https://sports-predictor-api.fly.dev/api/scheduler/run-nowManually trigger the daily model-refresh job (re-ingest intl + refit DC).
Probabilities Slate
$MeteredGET https://sports-predictor-api.fly.dev/api/v1/probabilitiesEvery upcoming fixture with calibrated probabilities and derived markets. The one endpoint priced for agents (x402, USDC on Base). It is pure model output — no LLM — so it carries no per-call model cost, only compute. Free when X402_PAY_TO is unset, so an unconfigured deploy degrades to free rather than to a broken paywall.
Ask
$MeteredPOST https://sports-predictor-api.fly.dev/api/askPlain-English question -> the model's grounded answer. Fixture resolution and the prediction itself are free (heuristics + math); only the short write-up calls the LLM, so this sits behind the same rate limits and daily budget as the other paid endpoints.
Get Fixtures
$MeteredPOST https://sports-predictor-api.fly.dev/api/fixturesAnalyze Match
$MeteredPOST https://sports-predictor-api.fly.dev/api/analyzeQuick Analyze
$MeteredPOST https://sports-predictor-api.fly.dev/api/quick-analyzeAnalyze Multi Bet
$MeteredPOST https://sports-predictor-api.fly.dev/api/analyze-multiGet Odds
$MeteredGET https://sports-predictor-api.fly.dev/api/odds/{sport}Get Upcoming With Odds
$MeteredGET https://sports-predictor-api.fly.dev/api/upcoming-with-oddsGet all upcoming matches with odds across all major sports for next 7 days.
Best Bets
$MeteredGET https://sports-predictor-api.fly.dev/api/best-betsFind the safest favourites across all sports for the next 7 days. Ranks by implied probability (1/odds). No AI calls — pure odds-driven shortlist so it's fast and free. Use `/api/analyze` on any pick for deep analysis.
Get Elo
$MeteredGET https://sports-predictor-api.fly.dev/api/elo/{sport}Top teams by Elo rating for the given sport.
Predict Elo
$MeteredGET https://sports-predictor-api.fly.dev/api/elo/{sport}/predictQuick Elo-only 1X2 prediction (no LLM, no API calls).
Get Ensemble Weights
$MeteredGET https://sports-predictor-api.fly.dev/api/ensemble/weights/{sport}Update Ensemble Weights
$MeteredGET https://sports-predictor-api.fly.dev/api/ensemble/weights/{sport}Update per-sport ensemble weights. Pass weights_json as a JSON string, e.g. '{"elo": 0.5, "poisson": 0.4, "llm": 0.1}'. Components don't need to sum to 1.0 — blend() renormalises.
Fit Poisson
$MeteredPOST https://sports-predictor-api.fly.dev/api/poisson/fit/{league_key}Fit Dixon-Coles on the requested league's full season and save the model. Run this once per season per league. The /analyze endpoint will then pick up the saved model. ~5-10 seconds per league.
Historical Download
$MeteredPOST https://sports-predictor-api.fly.dev/api/historical/downloadDownload football-data.co.uk CSVs (results + closing odds) into SQLite. leagues : comma-list (default: all big-5). seasons: comma-list like '2425,2324,2223'. Free, no quota impact. Run once, then use /historical/backtest.
Historical Backtest
$MeteredPOST https://sports-predictor-api.fly.dev/api/historical/backtestRigorous backtest on historical data WITH ROI (uses real closing odds). Compares naive/elo/poisson/market/ensembles, reporting Brier, log-loss, flat ROI, and value-bet ROI (only betting where we beat the closing line).
Backtest
$MeteredPOST https://sports-predictor-api.fly.dev/api/backtestReplay historical matches through chosen pipelines. Query params: leagues : comma-list (e.g. 'premier_league,la_liga') pipelines : comma-list of {naive, elo, llm}. 'llm' costs Anthropic credits. matches_per_league : total fixtures pulled per league (default 200 ≈ full season) score_fraction : last X% scored; rest seed Elo (default 0.3 → 70% warmup) score_cap : optional max scored matches per league (use to limit LLM cost)
Worldcup Bootstrap
$MeteredPOST https://sports-predictor-api.fly.dev/api/worldcup/bootstrapSeed Elo ratings for the 48 World Cup national teams. Run once before the tournament. Won't clobber ratings learned from real matches unless overwrite=true.
Worldcup Predict
$MeteredGET https://sports-predictor-api.fly.dev/api/worldcup/predictPredict an international match using national-team Elo. neutral=true (default) strips home advantage (most WC games are neutral-venue). Blends with the LLM if you also want narrative context — see /analyze.
Worldcup Ingest
$MeteredPOST https://sports-predictor-api.fly.dev/api/worldcup/ingestPull real international results (WC2022, Euro2024, Nations League, Copa, friendlies) from API-Football and update national-team Elo chronologically. This replaces hand-guessed seeds with data-driven ratings.
Worldcup Rebuild
$MeteredPOST https://sports-predictor-api.fly.dev/api/worldcup/rebuildFull correct rebuild of international Elo: seeds → 2022-24 competitive (K=1.0) → pre-WC friendlies at ⅓ weight → logged WC results at 2.5x weight.
Cl Harvest
$MeteredPOST https://sports-predictor-api.fly.dev/api/cl/harvestFetch a full CL season's results from ESPN (Tue/Wed/Thu + final dates).
Cl Backtest
$MeteredPOST https://sports-predictor-api.fly.dev/api/cl/backtestWalk-forward backtest on the harvested season: seed cross-league Elo from domestic ratings, predict every match with only prior info, score.
Cl Predict
$MeteredGET https://sports-predictor-api.fly.dev/api/cl/predictCL fixture prediction on the walk-forward-corrected European ratings.
Clubs Refresh
$MeteredPOST https://sports-predictor-api.fly.dev/api/clubs/refreshDownload latest football-data season CSVs for PL + La Liga and rebuild each league's Elo from all stored seasons (chronological replay).
Clubs Backtest
$MeteredPOST https://sports-predictor-api.fly.dev/api/clubs/backtestCL-style walk-forward backtest of a domestic league season, with a Pinnacle-closing-odds market benchmark on the same matches.
Clubs Predict
$MeteredGET https://sports-predictor-api.fly.dev/api/clubs/predictDraw-aware v2 prediction for a PL / La Liga fixture. league: premier_league | la_liga. Home advantage applied.
Clubs Daily Update
$MeteredPOST https://sports-predictor-api.fly.dev/api/clubs/daily-updateIn-season: ingest finished PL/La Liga results (ESPN, free), score the model, update league Elo. Run daily once the 2026-27 season starts.
Clubs Prelog
$MeteredPOST https://sports-predictor-api.fly.dev/api/clubs/prelogWrite predictions for upcoming fixtures, before they are played. Normally the nightly scheduler does this. Exposed for the first run of a season and for backfilling after downtime.
Submit Pick
$MeteredPOST https://sports-predictor-api.fly.dev/api/picksRecord a pick for an upcoming fixture. Free, no stake, no payout. Refused at or after kickoff, and refused if you already picked this fixture: a leaderboard where standing picks can be revised proves nothing.
Pick Message
$MeteredPOST https://sports-predictor-api.fly.dev/api/picks/messageThe exact text to sign for a pick. Served rather than built client-side so the wallet signs the same bytes the server will verify. A mismatch here is the usual way signed-payload schemes silently break.
Player Picks
$MeteredGET https://sports-predictor-api.fly.dev/api/picks/{player}One player's picks, scored and pending.
Picks Leaderboard
$MeteredGET https://sports-predictor-api.fly.dev/api/leaderboardStandings by average Brier, against the model on the same fixtures.
Score Picks
$MeteredPOST https://sports-predictor-api.fly.dev/api/picks/scoreScore picks whose fixtures now have results. The scheduler does this nightly; exposed for backfills.
Worldcup Predict2
$MeteredGET https://sports-predictor-api.fly.dev/api/worldcup/predict2v2 draw-aware prediction: Elo->Poisson goals bridge + calibration layer fitted on our own logged WC predictions. CAN pick the draw (v1 cannot).
Worldcup Calibrate
$MeteredPOST https://sports-predictor-api.fly.dev/api/worldcup/calibrate(Re)fit the probability calibration layer on wc_match_log.
Worldcup Daily Update
$MeteredPOST https://sports-predictor-api.fly.dev/api/worldcup/daily-updateThe daily ritual: ingest new WC results (ESPN, free + no quota), score the model's pre-match predictions (live calibration), update Elo at WC weight, and preview today/tomorrow fixtures with fresh probabilities.
Worldcup Ratings
$MeteredGET https://sports-predictor-api.fly.dev/api/worldcup/ratingsCurrent national-team Elo ladder.
Worldcup Simulate
$MeteredPOST https://sports-predictor-api.fly.dev/api/worldcup/simulateMonte Carlo the whole tournament → advance / reach-final / win-the-cup odds. groups_json: optional JSON of {"A": ["Team1", ...4], ...}. If omitted, the top-48 rated teams are auto snake-seeded into 12 groups. Provide the REAL draw once it's known for accurate outright probabilities.
Trackrecord
$MeteredGET https://sports-predictor-api.fly.dev/api/trackrecordThe prediction log, with each row's provenance stated rather than assumed. Two kinds of row live here and the difference matters: prelogged=1 the probabilities were written BEFORE kickoff and the result was filled in afterwards. A genuine forward prediction; nothing about it can be revised in hindsight. prelogged=0 the probabilities were generated when the result was ingested. Still walk-forward -- the model had not seen that match, and Elo updates only after the row is scored -- but it is a backtest of that match, not a forward call. Every World Cup row is prelogged=0, because pre-kickoff logging did not exist while that tournament was running. Saying so is the point: a record that overstates how it was produced is worth less than a smaller honest one. Club rows from the 2026-27 season onwards are pre-logged. Public, read-only.
Calibration Reliability
$MeteredGET https://sports-predictor-api.fly.dev/api/calibration/reliabilityReliability curve + Brier decomposition for one league-season. This is the evidence behind the calibration claim: does a stated 60% actually happen ~60% of the time, and how does that compare to the closing line on the same matches. Accuracy is deliberately not the headline — no 1X2 model picks draws, so ~27% of matches are unwinnable on that metric. Serves the report stored at fit time — a pure read. The underlying backtest replays a full season AND rebuilds elo_ratings, so it must never run on a public request path (CPU exhaustion + concurrent rebuilds racing the same ratings table).
Calibration Fit
$MeteredPOST https://sports-predictor-api.fly.dev/api/calibration/fit(Re)fit the per-sport calibration alphas. Club alphas come from the walk-forward backtest (no live club log yet); the international alpha comes from logged World Cup predictions.
Calibration
$MeteredGET https://sports-predictor-api.fly.dev/api/calibrationHow well-calibrated are the AI's confidence scores? Joins logged predictions to settled bets (by match name) and bins by confidence. After ~20+ settled bets the buckets become meaningful.
Get Standings
$MeteredGET https://sports-predictor-api.fly.dev/api/standings/{sport}Get Bets
$MeteredGET https://sports-predictor-api.fly.dev/api/betsRecord Bet
$MeteredPOST https://sports-predictor-api.fly.dev/api/betsClear Bets
$MeteredGET https://sports-predictor-api.fly.dev/api/betsSettle Bet
$MeteredGET https://sports-predictor-api.fly.dev/api/bets/{bet_id}/settleBet Summary
$MeteredGET https://sports-predictor-api.fly.dev/api/bets/summaryChecks
reachable
valid
2026-10-09T03:15:53.712Z
No settlement evidence found in chain signals.
Gateway routing
Score ≥70/100 — Cleared attestation pass. Route via Gateway before pay.
Claim this listing to upgrade to Cleared attestation.
Claim listing