PropSports API is a REST API delivering real-time sports data for MLB, NFL, NBA, and NHL. 47 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.
Pass your API key in the X-API-Key request header or as a ?key= query param. The demo key works without any header for MLB evaluation.
# 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 # Demo key — MLB eval only, 20 req/hr global cap curl https://propsports-api.sales-fd3.workers.dev/mlb/schedule/today?key=psa_demo_propsports2026
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);
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"])
https://propsports-api.sales-fd3.workers.dev
| Header | Value | Notes |
|---|---|---|
| X-API-Key | your_key | Required for NFL, NBA, NHL and paid MLB access |
| Content-Type | Not required | All responses are JSON regardless |
| Origin | Any | CORS enabled — all origins allowed |
Cache-Control: public, max-age=N. Live game endpoints cache for 10–30s. Statcast leaderboards cache for 900s. Factor this into polling intervals.| Plan | Daily Requests | Sports | API Keys | Price |
|---|---|---|---|---|
| Demo | 20 req/hr (global cap) | MLB only | Shared public key | $0 |
| Basic | 50,000 | All 4 | 1 | $49/mo |
| Pro | 200,000 | All 4 | 3 | $99/mo |
| Ultra | 500,000 | All 4 | 10 | $249/mo |
| Mega/Enterprise | Unmetered | All 4 + custom | Unlimited | $1,500+/mo |
Daily limits reset at midnight UTC. Rate limit exceeded returns 429 with a JSON error body.
psa_demo_propsports2026) is a shared evaluation key subject to a global 20 req/hr cap across all callers. It is not suitable for production. Subscribe at Basic $49/mo for your own key with 50K req/day.All errors return a JSON body with an error field, an optional hint, and links to docs and pricing.
{
"error": "Active paid RapidAPI subscription required.",
"hint": "Subscribe at rapidapi.com/team/propdata-propdata-default",
"docs": "https://propsports.proptechusa.ai/docs.html",
"pricing": "https://propsports.proptechusa.ai/pricing.html"
}
| Status | Meaning |
|---|---|
| 200 | OK |
| 400 | Bad request — missing or invalid parameter |
| 401 | Invalid or missing API key |
| 402 | No active paid subscription (RapidAPI callers) |
| 403 | Your plan does not include this sport or endpoint |
| 404 | Endpoint not found — check the path |
| 429 | Daily rate limit or demo hourly cap exceeded |
| 500 | Internal server error — upstream API failure |
The shared demo key lets you evaluate MLB response shapes before subscribing. It is intentionally limited.
psa_demo_propsports2026
| Constraint | Value |
|---|---|
| Sports covered | MLB only |
| Rate limit | 20 req/hr — global across all demo callers |
| SLA | None — shared key may be exhausted at peak hours |
| Production use | Not allowed |
| Attribution | PropSports API must be credited |
PropSports API is also available on RapidAPI. Subscription tier maps directly to your daily limit.
# Team / Hub page https://rapidapi.com/team/propdata-propdata-default # Direct API listing https://rapidapi.com/propdata-propdata-default/api/propsports
| RapidAPI Tier | Daily Requests | Maps To |
|---|---|---|
| BASIC | 50,000 | Basic plan |
| PRO | 200,000 | Pro plan |
| ULTRA | 500,000 | Ultra plan |
X-RapidAPI-User and X-RapidAPI-Subscription headers injected by RapidAPI's proxy. Your X-API-Key header is not required when calling through RapidAPI. Any unauthenticated or unpaid caller receives 402.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.
| Param | Type | Required | Description |
|---|---|---|---|
| market | string | optional | Filter by market: hr, totalbases, hits, strikeouts, rbi, runs |
| player | string | optional | Filter by player name substring. e.g. Soto |
| direction | string | optional | OVER or UNDER |
{
"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"
}
]
}
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.
| Param | Type | Required | Description |
|---|---|---|---|
| limit | integer | optional | Max results. Default: 20. Max: 200. |
| market | string | optional | Filter to one market. Default: all markets. |
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}`); });
All model markets for a single player. Returns HR, total bases, hits, strikeouts, RBI, and runs in one call.
| Param | Type | Required | Description |
|---|---|---|---|
| name | string | required | Player name substring. e.g. Soto or Aaron Judge |
curl "https://propsports-api.sales-fd3.workers.dev/mlb/odds/model/player?name=Soto" \ -H "X-API-Key: your_key"
Home run props from DraftKings and FanDuel, merged and ranked by best line. No sportsbook key required.
| Param | Type | Required | Description |
|---|---|---|---|
| name | string | optional | Filter by player name substring |
| direction | string | optional | OVER or UNDER |
{
"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" }
}
}
]
}
Total bases props. DK + FanDuel merged. Same response shape as /mlb/odds/hr. Params: name, direction.
Hits props. DK + FanDuel merged. Params: name, direction.
Pitcher strikeout props. DK + FanDuel merged. Params: name, direction.
RBI props. DK + FanDuel merged. Params: name, direction.
All book prop markets (HR, total bases, hits, strikeouts) in a single response. Grouped by market key. Optional name filter applies to all markets.
All book markets for a single player. ?name=Soto returns HR, total bases, hits, and strikeouts from DK + FanDuel.
| Param | Type | Required |
|---|---|---|
| name | string | required |
Game-level MLB odds from ESPN. Spread, over/under, moneyline for each game today.
Full MLB slate for today. Hydrated with probable pitchers, venue, teams, and linescore. Source: MLB Stats API.
{
"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" }
}
]
}
Schedule for any date.
| Param | Type | Required | Description |
|---|---|---|---|
| date | string | optional | YYYY-MM-DD. Defaults to today ET. |
All MLB games currently in progress with live linescore. Returns an empty array when no games are live.
Confirmed batting lineups when posted. Probable pitcher + lineup array for both teams.
| Param | Type | Required | Description |
|---|---|---|---|
| date | string | optional | YYYY-MM-DD. Defaults to today ET. |
Inning-by-inning linescore for any game. gamePk from /mlb/schedule.
Full boxscore. Hitting and pitching lines for both teams including all standard stats.
Play-by-play. Returns most recent N plays.
| Param | Type | Required | Description |
|---|---|---|---|
| limit | integer | optional | Number of recent plays to return. Default: 20. |
Season stats by MLB player ID.
| Param | Type | Required | Description |
|---|---|---|---|
| group | string | optional | hitting (default) or pitching |
| season | integer | optional | 4-digit year. Defaults to current season. |
Game-by-game log for any player. Full split history per appearance.
PropTechUSA owned Statcast leaderboard. 150 active batters aggregated nightly from Baseball Savant. The most comprehensive public Statcast endpoint available at any price point.
| Field | Type | Description |
|---|---|---|
| avgEV | float | Average exit velocity (mph) |
| maxEV | float | Maximum exit velocity in season |
| hardHitPct | float | Hard hit rate — 95+ mph |
| barrelPct | float | Barrel rate percentage |
| xBA / xSLG / xwOBA | float | Expected BA, SLG, wOBA from Statcast |
| sprintSpeed | float | Sprint speed ft/s |
| l7HR / l7EV | float | Last-7-day HR count and average EV |
| evSpike | float | l7EV minus season avgEV — positive = trending up |
| hrStreak | integer | Consecutive games with HR |
| gamesWithoutHR | integer | Consecutive games without HR |
| vsRHP | object | HR, PA, avgEV vs right-handed pitchers |
| vsLHP | object | HR, PA, avgEV vs left-handed pitchers |
| bats | string | L, R, or S |
PropTechUSA owned Statcast for 200+ qualified pitchers. EV allowed, barrel rate, hard hit rate, average and recent velo, velo drop detection, pitch mix, HR rate, and sample size.
| Field | Type | Description |
|---|---|---|
| avgEVAllowed | float | Average EV allowed this season |
| barrelRateAllowed | float | Barrel rate allowed % |
| hrsAllowed | integer | HR allowed this season |
| paPerHR | float | PA per HR allowed — lower = more homer-prone |
| avgVelo | float | Average fastball velocity |
| recentVelo | float | Recent 3-start velo average |
| veloDown | boolean | True if recent velo significantly below season avg |
| pitchMix | object | Pitch type percentages |
| sampleSize | integer | PA in dataset |
Real-time weather for a single ballpark. Indoor parks (Tropicana, Rogers Centre, Globe Life, Chase, LoanDepot, Minute Maid, American Family) return "indoor": true.
| Param | Type | Required | Description |
|---|---|---|---|
| park | string | required | Exact park name e.g. Fenway Park, Yankee Stadium |
{
"indoor": false,
"park": "Fenway Park",
"parkFactor": 104,
"windSpeed": 12.4,
"windDir": 220,
"windLabel": "SW",
"temp": 71
}
Weather for every ballpark hosting a game today (or on the specified date). One call for all parks.
| Param | Type | Required |
|---|---|---|
| date | string | optional — YYYY-MM-DD |
Home plate umpire assignments for today's games. Combine with your own K-rate data for umpire angle plays.
| Param | Type | Required |
|---|---|---|
| date | string | optional — YYYY-MM-DD |
NFL schedule. Defaults to current week. Returns spread, over/under, venue, and score for each game. Source: ESPN.
| Param | Type | Required | Description |
|---|---|---|---|
| week | integer | optional | Week number 1–18 |
| season | integer | optional | 4-digit year |
All NFL games currently in progress.
Game-level NFL odds. Spread, over/under, home and away moneyline. Filters out games without odds.
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.
All NBA games with status.type.state === "in".
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.
{
"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
}
Play-by-play with event classification: score, miss, rebound, turnover, foul, block, steal, sub, timeout.
| Param | Type | Required |
|---|---|---|
| limit | integer | optional — default 50 |
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.
Shot chart with x/y coordinates. Made/missed indicator, player, team, period, and clock. Coordinate system: ESPN-native, x 0–50, y 0–47.
Live win probability curve by play. homeWinPct at each play event.
League leaders by stat category. Top 25 returned.
| Param | Type | Required | Values |
|---|---|---|---|
| stat | string | optional | PTS, REB, AST, STL, BLK, FG_PCT, FT_PCT, FG3_PCT. Default: PTS |
| season | string | optional | Format: 2025-26. Default: current. |
Game-level NBA odds. Spread, over/under, moneyline.
Today's NHL games with TV broadcast info, venue, scores, and game state. Source: NHL Stats API.
All NHL games with gameState of LIVE or CRIT (overtime/close game).
Full conference and division standings. Source: NHL Stats API.
| Param | Type | Required |
|---|---|---|
| date | string | optional — YYYY-MM-DD |
Skater leaders by category. Top 25 returned.
| Param | Type | Required | Values |
|---|---|---|---|
| category | string | optional | goals (default), assists, points |
| season | string | optional | Format: 20252026. Default: current. |
Season stats for any NHL player by NHL Stats API player ID. Returns goals, assists, points, plusMinus, pim, shots, shootingPctg, and more.
Game-level NHL odds. Puck line, over/under, moneyline from ESPN.
Subscribe to Basic at $49/mo. Key in your inbox in 60 seconds. Cancel anytime.
Questions? support@proptechusa.ai · 1-888-784-3881