← Home ⚾ MLB API 🏈 NFL API 🏀 NBA API 🏈 NHL API
Sports APIs
⚡ PropSports API — From $29/mo ⚾ MLB Edge Suite — From $29/mo
Real Estate APIs
🏠 PropData Core — From $49/mo 🏆 PropData Pro Stack — From $149/mo 🏠 PropData API ↗
📖 Docs 💳 Pricing Get API Key →
API v6.1.0

PropSports API documentation

PropSports API is a REST API delivering real-time sports data for MLB, NFL, NBA, WNBA, NHL, tennis and soccer. 151 endpoints. All responses are JSON. All requests use GET. Cloudflare Workers edge network — sub-100ms globally.

What makes PropSports different from every other sports API: we own our Statcast data pipeline and we generate our own Poisson model odds from it. No DraftKings. No FanDuel. No sportsbook dependency. The /mlb/odds/model/* family of endpoints has no equivalent anywhere else at this price point.

151 endpoints MLB · NFL · NBA · WNBA · NHL · Tennis · Soccer JSON only GET requests CORS enabled Cloudflare edge
⚡ New in v6.1.0: MLB standings, teams, team profiles, rosters and team schedules; NBA standings, teams, team profiles, rosters, team schedules and team stats; affiliated minor leagues from Triple-A to Rookie. 206 documented routes.

Authentication

Pass your API key in the X-API-Key request header or as a ?key= query param.

cURL — authenticated
# Header auth (recommended)
curl https://propsports-api.sales-fd3.workers.dev/mlb/schedule/today \
  -H "X-API-Key: your_api_key_here"

# Query param auth (also works)
curl https://propsports-api.sales-fd3.workers.dev/mlb/schedule/today?key=your_api_key_here

# Use your API key\ncurl https://propsports-api.sales-fd3.workers.dev/mlb/schedule/today?key=your_api_key_here
JavaScript
const BASE = 'https://propsports-api.sales-fd3.workers.dev';
const KEY  = 'your_api_key_here';

const data = await fetch(`${BASE}/mlb/schedule/today`, {
  headers: { 'X-API-Key': KEY }
}).then(r => r.json());

console.log(data.games);
Python
import requests

BASE = "https://propsports-api.sales-fd3.workers.dev"
KEY  = "your_api_key_here"

r = requests.get(f"{BASE}/mlb/schedule/today", headers={"X-API-Key": KEY})
data = r.json()
print(data["games"])

Base URL & Headers

Base URL
https://propsports-api.sales-fd3.workers.dev
HeaderValueNotes
X-API-Keyyour_keyRequired for NFL, NBA, NHL and paid MLB access
Content-TypeNot requiredAll responses are JSON regardless
OriginAnyCORS enabled — all origins allowed
💡 All endpoints return Cache-Control: public, max-age=N. Live game endpoints cache for 10–30s. Statcast leaderboards cache for 900s. Factor this into polling intervals.

Rate Limits

PlanDaily RequestsSportsPrice
Demo20 req/hr (global cap)MLB only$0
Single Sport50,000One selected sport$29/mo
Developer100,000Up to 3 selected sports$79/mo
All Sports200,000All 7 core sports$149/mo
Pro500,000All 7 core sports$299/mo
Scale2,000,000All 7 core sports$599/mo
Enterprise5,000,000All 7 core sports$1,500/mo

Daily counters roll over on the US Eastern calendar date. Rate limit exceeded returns 429 with a JSON error body.

🚫 No free tier. Production access requires a paid PropSports API key. Plans start at $29/mo for one sport (50,000 req/day); all 7 core sports from $149/mo.

Errors & Status Codes

All errors return a JSON body with an error field, an optional hint, and links to docs and pricing.

Error response shape
{
  "error":   "Invalid API key.",
  "hint":    "Get a key at propsports.proptechusa.ai/pricing.html",
  "docs":    "https://propsports.proptechusa.ai/docs.html",
  "pricing": "https://propsports.proptechusa.ai/pricing.html"
}
StatusMeaning
200OK
400Bad request — missing or invalid parameter
401Invalid or missing API key
403Your plan does not include this sport or endpoint
404Endpoint not found — check the path
429Daily rate limit or demo hourly cap exceeded
500Internal server error — upstream API failure

Route catalog

The production catalog has 206 documented routes across MLB, NFL, NBA, WNBA, NHL, Tennis and Soccer. Every route is listed in the API reference, and the machine-readable route catalog is available at GET /sports. GET /health reports the same total.

SportRoutes
MLB45
NFL36
NBA19
WNBA32
NHL24
Tennis25
Soccer25
All sports206

Use the sport guides for examples, response shapes and implementation notes. Plans determine which sports are included on your API key.

⚡ Proprietary — No Competitor Offers This

GET /mlb/odds/model

GET/mlb/odds/model

All PropBetEdge Poisson model odds for today. Grouped by market. Generated from owned Statcast data — no DraftKings, no FanDuel dependency. Refreshed 6× daily: 8AM, 10AM, 12PM, 2PM, 5PM, 8PM CT.

ParamTypeRequiredDescription
marketstringoptionalFilter by market: hr, totalbases, hits, strikeouts, rbi, runs
playerstringoptionalFilter by player name substring. e.g. Soto
directionstringoptionalOVER or UNDER
Response
{
  "date": "2026-06-09",
  "source": "PropBetEdge Poisson Model",
  "model": "Statcast xSLG + barrel% + EV allowed + park factor",
  "total": 184,
  "markets": {
    "hr": [ ... ],
    "totalbases": [ ... ],
    "hits": [ ... ]
  },
  "top_value": [
    {
      "player_name": "Aaron Judge",
      "market": "hr",
      "line": 0.5,
      "direction": "OVER",
      "expected_stat": 0.38,
      "implied_prob": 0.314,
      "odds_fmt": "+310"
    }
  ]
}

GET /mlb/odds/model/top

GET/mlb/odds/model/top

Top OVER value plays for today ranked by expected stat. Returns only positive-odds plays (implied prob < 50%). The fastest way to surface model edges.

ParamTypeRequiredDescription
limitintegeroptionalMax results. Default: 20. Max: 200.
marketstringoptionalFilter to one market. Default: all markets.
JavaScript
const plays = await fetch(
  'https://propsports-api.sales-fd3.workers.dev/mlb/odds/model/top?limit=10',
  { headers: { 'X-API-Key': KEY } }
).then(r => r.json());

plays.plays.forEach(p => {
  console.log(`${p.player_name} ${p.market} OVER ${p.line} → ${p.odds_fmt}`);
});

GET /mlb/odds/model/player

GET/mlb/odds/model/player

All model markets for a single player. Returns HR, total bases, hits, strikeouts, RBI, and runs in one call.

ParamTypeRequiredDescription
namestringrequiredPlayer name substring. e.g. Soto or Aaron Judge
cURL
curl "https://propsports-api.sales-fd3.workers.dev/mlb/odds/model/player?name=Soto" \
  -H "X-API-Key: your_key"

GET /mlb/odds/hr

GET/mlb/odds/hr

Home run props from DraftKings and FanDuel, merged and ranked by best line. No sportsbook key required.

ParamTypeRequiredDescription
namestringoptionalFilter by player name substring
directionstringoptionalOVER or UNDER
Response
{
  "date": "2026-06-09",
  "market": "home_runs",
  "dk_count": 72,
  "fd_count": 68,
  "count": 86,
  "source": "DraftKings + FanDuel",
  "results": [
    {
      "player": "Aaron Judge",
      "market": "hr",
      "line": 0.5,
      "direction": "OVER",
      "best_book": "DraftKings",
      "best_odds": 310,
      "best_odds_fmt": "+310",
      "all_books": {
        "DraftKings": { "odds": 310, "odds_fmt": "+310" },
        "FanDuel":   { "odds": 290, "odds_fmt": "+290" }
      }
    }
  ]
}

GET /mlb/odds/totalbases

GET/mlb/odds/totalbases

Total bases props. DK + FanDuel merged. Same response shape as /mlb/odds/hr. Params: name, direction.

GET /mlb/odds/hits

GET/mlb/odds/hits

Hits props. DK + FanDuel merged. Params: name, direction.

GET /mlb/odds/strikeouts

GET/mlb/odds/strikeouts

Pitcher strikeout props. DK + FanDuel merged. Params: name, direction.

GET /mlb/odds/rbi

GET/mlb/odds/rbi

RBI props. DK + FanDuel merged. Params: name, direction.

GET /mlb/odds/all

GET/mlb/odds/all

All book prop markets (HR, total bases, hits, strikeouts) in a single response. Grouped by market key. Optional name filter applies to all markets.

GET /mlb/odds/player

GET/mlb/odds/player

All book markets for a single player. ?name=Soto returns HR, total bases, hits, and strikeouts from DK + FanDuel.

ParamTypeRequired
namestringrequired

GET /mlb/odds

GET/mlb/odds

Game-level MLB odds from ESPN. Spread, over/under, moneyline for each game today.

GET /mlb/schedule/today

GET/mlb/schedule/today

Full MLB slate for today. Hydrated with probable pitchers, venue, teams, and linescore. Source: MLB Stats API.

Response shape
{
  "date": "2026-06-09",
  "games": [
    {
      "gamePk": 747892,
      "gameDate": "2026-06-09T18:10:00Z",
      "status": { "abstractGameState": "In Progress" },
      "teams": {
        "away": { "team": { "name": "New York Yankees" }, "score": 4,
                  "probablePitcher": { "fullName": "Gerrit Cole" } },
        "home":  { "team": { "name": "Boston Red Sox" }, "score": 2,
                  "probablePitcher": { "fullName": "Brayan Bello" } }
      },
      "venue": { "name": "Fenway Park" }
    }
  ]
}

GET /mlb/schedule

GET/mlb/schedule

Schedule for any date.

ParamTypeRequiredDescription
datestringoptionalYYYY-MM-DD. Defaults to today ET.

GET /mlb/games/live

GET/mlb/games/live

All MLB games currently in progress with live linescore. Returns an empty array when no games are live.

GET /mlb/lineups

GET/mlb/lineups

Confirmed batting lineups when posted. Probable pitcher + lineup array for both teams.

ParamTypeRequiredDescription
datestringoptionalYYYY-MM-DD. Defaults to today ET.

GET /mlb/game/:gamePk/linescore

GET/mlb/game/:gamePk/linescore

Inning-by-inning linescore for any game. gamePk from /mlb/schedule.

GET /mlb/game/:gamePk/boxscore

GET/mlb/game/:gamePk/boxscore

Full boxscore. Hitting and pitching lines for both teams including all standard stats.

GET /mlb/game/:gamePk/plays

GET/mlb/game/:gamePk/plays

Play-by-play. Returns most recent N plays.

ParamTypeRequiredDescription
limitintegeroptionalNumber of recent plays to return. Default: 20.

GET /mlb/player/:id/stats

GET/mlb/player/:id/stats

Season stats by MLB player ID.

ParamTypeRequiredDescription
groupstringoptionalhitting (default) or pitching
seasonintegeroptional4-digit year. Defaults to current season.

GET /mlb/player/:id/gamelog

GET/mlb/player/:id/gamelog

Game-by-game log for any player. Full split history per appearance.

GET /mlb/statcast/batters

GET/mlb/statcast/batters

PropTechUSA owned Statcast leaderboard. 150 active batters aggregated nightly from Baseball Savant. The most comprehensive public Statcast endpoint available at any price point.

FieldTypeDescription
avgEVfloatAverage exit velocity (mph)
maxEVfloatMaximum exit velocity in season
hardHitPctfloatHard hit rate — 95+ mph
barrelPctfloatBarrel rate percentage
xBA / xSLG / xwOBAfloatExpected BA, SLG, wOBA from Statcast
sprintSpeedfloatSprint speed ft/s
l7HR / l7EVfloatLast-7-day HR count and average EV
evSpikefloatl7EV minus season avgEV — positive = trending up
hrStreakintegerConsecutive games with HR
gamesWithoutHRintegerConsecutive games without HR
vsRHPobjectHR, PA, avgEV vs right-handed pitchers
vsLHPobjectHR, PA, avgEV vs left-handed pitchers
batsstringL, R, or S
📈 TTL: 900s. This endpoint caches for 15 minutes. Statcast data is updated nightly from Baseball Savant.

GET /mlb/statcast/pitchers

GET/mlb/statcast/pitchers

PropTechUSA owned Statcast for the complete current-season pitcher dataset. EV allowed, barrel rate, hard hit rate, average and recent velo, velo drop detection, pitch mix, HR rate, and sample size. Returns all current-season pitchers by default; use ?limit= and ?offset= for pagination.

FieldTypeDescription
avgEVAllowedfloatAverage EV allowed this season
barrelRateAllowedfloatBarrel rate allowed %
hrsAllowedintegerHR allowed this season
paPerHRfloatPA per HR allowed — lower = more homer-prone
avgVelofloatAverage fastball velocity
recentVelofloatRecent 3-start velo average
veloDownbooleanTrue if recent velo significantly below season avg
pitchMixobjectPitch type percentages
sampleSizeintegerPA in dataset

GET /mlb/weather

GET/mlb/weather

Real-time weather for a single ballpark. Indoor parks (Tropicana, Rogers Centre, Globe Life, Chase, LoanDepot, Minute Maid, American Family) return "indoor": true.

ParamTypeRequiredDescription
parkstringrequiredExact park name e.g. Fenway Park, Yankee Stadium
Response
{
  "indoor": false,
  "park": "Fenway Park",
  "parkFactor": 104,
  "windSpeed": 12.4,
  "windDir": 220,
  "windLabel": "SW",
  "temp": 71
}

GET /mlb/weather/all

GET/mlb/weather/all

Weather for every ballpark hosting a game today (or on the specified date). One call for all parks.

ParamTypeRequired
datestringoptional — YYYY-MM-DD

GET /mlb/umpires

GET/mlb/umpires

Home plate umpire assignments for today's games. Combine with your own K-rate data for umpire angle plays.

ParamTypeRequired
datestringoptional — YYYY-MM-DD

GET /nfl/schedule

GET/nfl/schedule

NFL schedule. Defaults to current week. Returns spread, over/under, venue, and score for each game. Source: ESPN.

ParamTypeRequiredDescription
weekintegeroptionalWeek number 1–18
seasonintegeroptional4-digit year

GET /nfl/games/live

GET/nfl/games/live

All NFL games currently in progress.

GET /nfl/odds

GET/nfl/odds

Game-level NFL odds. Spread, over/under, home and away moneyline. Filters out games without odds.

GET /nfl/scoreboard

GET/nfl/scoreboard

Normalized NFL scoreboard by date or week. Returns teams, score, status, venue, broadcast context, current situation, and game-level odds when present upstream.

ParamTypeRequiredDescription
dateYYYYMMDDoptionalScoreboard date. Defaults to the current Eastern date.
weekintegeroptionalNFL week. When supplied, week mode takes precedence over date.
seasonintegeroptionalNFL season year. Defaults to the current year.
season_typeintegeroptionalESPN season type. Defaults to 2 for regular season.

GET /nfl/standings

GET/nfl/standings

Current NFL standings normalized into all eight division groups with team metadata and provider-supplied standings statistics.

GET /nfl/teams

GET/nfl/teams

NFL team directory with stable ESPN IDs, abbreviations, names, logos, colors, active status, and links.

GET /nfl/team/:id

GET/nfl/team/:id

Normalized profile for one NFL team. Use the team ID returned by /nfl/teams.

GET /nfl/team/:id/roster

GET/nfl/team/:id/roster

Current roster with player IDs, names, jersey, position, headshot, age, height, weight, experience, and roster status when supplied upstream.

GET /nfl/team/:id/schedule

GET/nfl/team/:id/schedule

Team-specific event schedule with event IDs, dates, names, season/week references, competition references, and links.

ParamTypeRequiredDescription
seasonintegeroptionalSeason year.

GET /nfl/game/:id

GET/nfl/game/:id

Full normalized game package: teams, score, status, venue, possession, down-and-distance, drives, play-by-play, player statistics, leaders, and win probability. Use an ESPN game ID returned by the schedule or scoreboard routes.

GET /nfl/game/:id/boxscore

GET/nfl/game/:id/boxscore

Player box-score groups and labels for both teams. Fields remain source-aware rather than inventing missing statistics.

GET /nfl/game/:id/plays

GET/nfl/game/:id/plays

Play-by-play with period, clock, field position, down-and-distance, participants, scoring state, and score context.

GET /nfl/game/:id/drives

GET/nfl/game/:id/drives

Drive history with offense, result, yards, play count, elapsed time, start/end field position, and contained plays.

GET /nfl/game/:id/leaders

GET/nfl/game/:id/leaders

Passing, rushing, and receiving game leaders. If the provider omits a leader block, PropSports derives leaders only from factual box-score yardage.

GET /nfl/game/:id/winprob

GET/nfl/game/:id/winprob

Provider-supplied game win-probability series keyed to play IDs. Returns an empty series when the upstream game package does not supply win probability.

GET /nba/schedule/today

GET/nba/schedule/today

Today's NBA games. Playoff-aware — tries the playoff schedule first, falls back to regular season. Returns status, score, period, clock, team logos, spread, and over/under.

GET /nba/games/live

GET/nba/games/live

All NBA games with status.type.state === "in".

GET /nba/game/:id/boxscore

GET/nba/game/:id/boxscore

Full boxscore with computed True Shooting % (TS%) and Usage Rate (USG%) per player. Most APIs return raw stats and leave the math to you. We do the math.

Response shape (player)
{
  "name": "Jayson Tatum",
  "points": 34, "rebounds": 9, "assists": 6,
  "fgMade": 12, "fgAttempts": 22, "fgPct": 54.5,
  "tsPct": 68.4,   // True Shooting % — computed
  "usgPct": 34.1,  // Usage Rate % — computed
  "minutes": 38, "plusMinus": 12
}

GET /nba/game/:id/plays

GET/nba/game/:id/plays

Play-by-play with event classification: score, miss, rebound, turnover, foul, block, steal, sub, timeout.

ParamTypeRequired
limitintegeroptional — default 50

GET /nba/game/:id/lineup

GET/nba/game/:id/lineup

Current 5-man lineup via substitution walk through the play-by-play. ~95% accurate during live games. Returns both teams' current on-court players with headshots and jerseys.

GET /nba/game/:id/shotchart

GET/nba/game/:id/shotchart

Shot chart with x/y coordinates. Made/missed indicator, player, team, period, and clock. Coordinate system: ESPN-native, x 0–50, y 0–47.

GET /nba/game/:id/winprob

GET/nba/game/:id/winprob

Live win probability curve by play. homeWinPct at each play event.

GET /nba/leaders

GET/nba/leaders

League leaders by stat category. Top 25 returned.

ParamTypeRequiredValues
statstringoptionalPTS, REB, AST, STL, BLK, FG_PCT, FT_PCT, FG3_PCT. Default: PTS
seasonstringoptionalFormat: 2025-26. Default: current.

GET /nba/odds

GET/nba/odds

Game-level NBA odds. Spread, over/under, moneyline.

GET /nhl/schedule/today

GET/nhl/schedule/today

Today's NHL games with TV broadcast info, venue, scores, and game state. Source: NHL Stats API.

GET /nhl/games/live

GET/nhl/games/live

All NHL games with gameState of LIVE or CRIT (overtime/close game).

GET /nhl/standings

GET/nhl/standings

Full conference and division standings. Source: NHL Stats API.

ParamTypeRequired
datestringoptional — YYYY-MM-DD

GET /nhl/leaders

GET/nhl/leaders

Skater leaders by category. Top 25 returned.

ParamTypeRequiredValues
categorystringoptionalgoals (default), assists, points
seasonstringoptionalFormat: 20252026. Default: current.

GET /nhl/player/:id/stats

GET/nhl/player/:id/stats

Season stats for any NHL player by NHL Stats API player ID. Returns goals, assists, points, plusMinus, pim, shots, shootingPctg, and more.

GET /nhl/odds

GET/nhl/odds

Game-level NHL odds. Puck line, over/under, moneyline from ESPN.

Ready to build?

Plans from $29/mo; all 7 core sports from $149/mo. Key in your inbox after checkout. Cancel anytime.

Get API Key — From $29/mo → Full API reference →

Questions? support@proptechusa.ai · 1-888-784-3881