Developer Reference
API Documentation
Complete reference for accessing NBA, MLB, NFL, NHL, FIFA World Cup 2026, and NCAAB analytics data programmatically. Build custom integrations, mobile apps, and automated workflows with SportsFBI's powerful multi-sport REST API.
Getting Started
Prerequisites
To use the SportsFBI API, you need:
- ELITE subscription (or Admin) - direct API access is limited to ELITE and Admin accounts; PRO accounts can use Pro-tier features inside the SportsFBI app but cannot generate an API key
- API Key - Generate from your API Keys page
- HTTPS support - All API requests must use HTTPS
Base URL
https://app.sportsfbi.com/api
Quick Start
Make your first API request in under 60 seconds:
# Get today's NBA games
curl -X GET "https://app.sportsfbi.com/api/nba/games/today" \
-H "Authorization: Bearer YOUR_API_KEY"
Authentication
Public endpoints can be called without a key. Authenticated endpoints require a Bearer API key; administrator routes also require administrator privileges. Include your key in the Authorization header:
Authorization: Bearer sfbi_abc123...
Getting Your API Key
- Sign in to your SportsFBI account
- Navigate to API Keys
- Click "Generate New API Key"
- Copy and securely store your key (shown only once)
β οΈ Security Best Practices
- Never commit API keys to version control
- Use environment variables to store keys
- Rotate keys regularly (at least every 90 days)
- Revoke compromised keys immediately
- Use different keys for development and production
Rate Limits
API access requires an ELITE subscription. Elite API keys are limited to 600 requests per minute and enforce fair usage across all users.
Rate Limit Headers
Every API response includes rate limit information in headers:
RateLimit-Limit: 600
RateLimit-Remaining: 587
RateLimit-Reset: 1672531200
Handling Rate Limits
When you exceed your rate limit, the API returns a 429 Too Many Requests status. Implement exponential backoff:
// Example: Exponential backoff in JavaScript
async function fetchWithRetry(url, retries = 3) {
for (let i = 0; i < retries; i++) {
const response = await fetch(url);
if (response.status !== 429) return response;
const delay = Math.pow(2, i) * 1000; // 1s, 2s, 4s
await new Promise(resolve => setTimeout(resolve, delay));
}
throw new Error('Max retries exceeded');
}
API Endpoints
All endpoints are served from: https://app.sportsfbi.com
Every endpoint below is callable with no authentication unless marked ELITE or ADMIN ONLY β those require a valid API key. Since keys are only issued to ELITE and Admin accounts, this covers every endpoint that needs any form of sign-in or subscription tier, not just ones restricted to ELITE inside the app. ADMIN ONLY requires administrator privileges in addition to authentication.
Games
Today's (or a given date's) NBA games with quality ratings, betting odds, team standings, and injuries.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD (defaults to today) |
| tzOffsetMin | integer | Optional | Timezone offset in minutes, β720 to 720 (e.g. β300 for EST) |
| vendor | string | Optional | draftkings or fanduel (default: fanduel) |
Games for the next date that has non-final games after today, reusing the today endpoint's shape.
Confirmed or predicted starting lineups, bench, injuries, and team standings for a specific game.
Play-by-play data grouped by quarter, plus live score, period, and clock.
Spreads, moneylines, and totals for up to 20 games at once.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| gameIds | string | Required | Comma-separated NBA game IDs, max 20 |
| vendor | string | Required | One of fanduel, draftkings, betmgm, betrivers, caesars, fanatics, prizepicks |
Key Suspects analysis β players likely to exceed prop projections based on matchup, role, and usage trends.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| mode | string | Optional | dfs or props (default: dfs) |
| vendor | string | Optional | Sportsbook vendor (default: fanduel) |
Notable consecutive-game stat streaks (30+ pts, double-double, triple-double, etc.) for starters, plus each team's win/loss streak.
Team points-for/points-against trend over the last 10 games vs. season averages, for both teams.
Historical Over/Under hit-rate splits (home/road) for both teams against a given odds vendor.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| vendor | string | Optional | Odds vendor (default: draftkings) |
Team Four Factors comparison (eFG%, TOV%, OREB%, FTA rate β offensive and defensive) plus league averages.
A single player's box score for a specific game.
Every player's box score for a game in one request, keyed by player ID.
Slate & DFS
Precomputed DFS score ranking for today's slate, refreshed every 5 minutes.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| vendor | string | Optional | draftkings (default) or fanduel |
Players on today's slate on an active consecutive-over prop streak (minimum streak of 2), sorted by streak length.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| propType | string | Optional | points_rebounds_assists (default) or another combo stat |
Full slate analysis β game environment, spreads/totals, rest days, injuries, and blowout-risk classification. Elite accounts additionally receive playerTags and slateEdge fields in the same response.
Slate players whose recent average for a stat meets or exceeds today's prop line (ratio β₯ 1.0).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| propType | string | Optional | Combo stat, default points_rebounds_assists |
| vendor | string | Optional | Sportsbook vendor (default: draftkings) |
Slate players who scored within the first 3 minutes of Q1 in at least one recent game.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| window | integer | Optional | Games to look back: 0 (season), 5, 10, 15, or 20 (default: 5) |
Slate players who scored 3+ points in every quarter in at least one recent game.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| window | integer | Optional | Games to look back: 0 (season), 5, 10, 15, or 20 (default: 5) |
Historical Key Suspects hit/miss results for a given (or most recent completed) slate date.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| mode | string | Optional | dfs or props |
| date | string | Optional | YYYY-MM-DD, defaults to most recent completed date |
Signals
Projected stat leaders for the next slate date, with a 5-game sparkline, opponent matchup rating, trend %, and a signal badge (elite_spot, rising, risky, consistent, value, blowout_risk).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| stat | string | Optional | One of pts, ast, reb, blk, stl, fg3m, min (default: pts) |
Players β Free Tier
Player profile (name, position, height, weight, team).
List of seasons the player has box-score data for.
The player's last 20 games (min β₯5 minutes) against a specific team, with a per-game log and averages.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| teamAbbr | string | Required | Team abbreviation (e.g. LAL) |
Game-by-game statistics for a season.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year (e.g. 2025) |
Game-by-game advanced metrics: PIE, pace, usage%, ORtg, DRtg, TS%, and more.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year |
Season averages (pts, reb, ast, etc.) and games-played count.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year |
Current injury status and history for a player.
Player contract details by season (cap hit, total cash, base salary, rank).
Detailed 18-role archetype breakdown with scores and probabilities for the player's current classification.
Condensed role analysis: primary role and top-3 role distribution, with generated insight text.
Comprehensive matchup analysis: player archetype, opponent defensive profile, usage trends, zone data, and a projected score delta.
Shot chart data β FGA/FGM/FG% across 7 distance zones plus rim/midrange/three frequencies and pull-up vs. catch-and-shoot splits.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year |
Shot-selection shift detector comparing last-10-games shot selection to season norms, flagging shifts of 12+ percentage points.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year |
How opponents have performed when guarded by this player, plus a computed 0β100 defense score.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year |
| opponentTeamId | integer | Optional | Filter to a single opponent team |
Clutch performance (final margin β€5) vs. overall season averages, plus a computed 0β100 clutch score.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year |
Hustle Index β a 0β100 composite of deflections, contested shots, charges, screen assists, loose balls, and box-outs vs. league average.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year |
Quarter-by-quarter (Q1βQ4) performance breakdown with a "closer" or "fast starter" trend tag.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year |
Season averages for scoring source breakdown (paint, fast break, second chance, off turnovers) and shot-location scoring %.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year |
Touches, passes, secondary/FT assists, speed, and distance, plus a computed touch-based opportunity score.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | Season start year |
Upcoming schedule with a per-game opponent difficulty score based on defensive rating and opponent shooting.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| days | integer | Optional | 1β14 days ahead (default: 7) |
All current player injuries across the league.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| teamId | integer | Optional | Filter by team ID |
| status | string | Optional | out, doubtful, questionable, dtd, probable, out for season |
Players β Elite
Last-5-games averaged advanced stats with archetype/role detection and generated insights.
Player prop betting lines (line, over/under odds, per vendor and prop type) for a specific game.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| game_id | string | Required | NBA game ID |
Historical over/under hit rates by prop type.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | Optional | Recent games to analyze, 1β50 (default: 25) |
| prop_type | string | Optional | Filter to one prop category |
| vendor | string | Optional | Filter to one vendor |
Intraday prop line-movement history for a game. Elite/Admin accounts additionally see cross-vendor consensus-shift detection.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| game_id | string | Required | NBA game ID |
Lightweight verdict-only endpoint (favorable/neutral/unfavorable) for icon color-coding in lineup cards, skipping the full projection engine.
Batch version of matchup-verdict for up to 30 player/opponent pairs in one request.
Body Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| requests | array | Required | 1β30 items, each { playerId, opponentTeamAbbr } |
Leaderboards
Statistical leaderboards for live, daily, or full-season stats.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| mode | string | Optional | today (live), daily (completed games), or season β default: today |
| limit | integer | Optional | Max results (default: 10) |
| seasonYear | integer | Optional | Season year for season mode |
| date | string | Optional | YYYY-MM-DD for daily mode |
| tzOffsetMin | integer | Optional | Timezone offset in minutes |
| onlyTodayPlayers | boolean | Optional | Season mode β restrict to players in today's games |
DFS scoring rules reference (DraftKings and FanDuel point values).
Current cached league averages (pace, defensive rating, etc.) used by the matchup engine. Force-recalculation via refresh=true is admin-only.
Teams
Detailed defensive statistics: season averages, rim protection, paint defense, pace, and positional matchup breakdowns.
Predicted starting lineup based on the last 15 games of player usage.
Team schedule with results and upcoming games.
Full team roster with positions, jersey numbers, and contract status.
Team season averages β PPG, PAPG, pace, offensive and defensive ratings.
DFS Lineup Projections
DFS lineup projection engine β per-player projections, lineup synergy scoring, opponent defensive profile, and role compatibility for a 2β5 player lineup.
Body Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| playerIds | array | Required | Array of 2β5 internal player IDs |
| opponentTeamAbbr | string | Required | Opponent team abbreviation (e.g. GSW) |
Games
Today's MLB schedule with betting odds and heavy matchup context β rest days, injuries, probable-pitcher ERA/WHIP/FIP, team OPS/wOBA, bullpen quality, and recent run differential.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD (defaults to today) |
| vendor | string | Optional | Odds vendor (default: draftkings) |
Single game detail β full box score, odds from every vendor, pre-game lineup, and the last 50 plays.
Spreads, moneylines, and totals for one or more games.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| gameIds | string | Optional | Comma-separated MLB game IDs (one of gameIds or date required) |
| date | string | Optional | YYYY-MM-DD β fetches odds for every game that day |
| vendor | string | Optional | Filter to one vendor |
Game-level matchup analysis β run-environment/stack recommendation and pitcher-vs-lineup breakdown for both sides.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | en or es (default: en) |
A single player's batting or pitching box score line for a specific game.
Batting lineup and probable pitchers for both teams, with standings, injuries, and predicted lineups for games without a confirmed one yet.
Full play-by-play, grouped by inning (top/bottom), including pitch type, velocity, and trajectory where available.
AI-generated prose recap of a completed game, cached permanently once generated. Returns 400 if the game isn't final yet, 202 if a recap is already being generated.
AI-generated pregame preview with narrative, outlook, and quick facts. Generated as soon as both teams' official starting lineups post, or an hour before first pitch at the latest; falls back to an algorithmic narrative until then.
Weather and wind intelligence for the ballpark at first pitch β wind speed/direction, temperature, home-run boost rating, and run-environment impact.
Current line from every vendor plus a historical line-movement timeline for one vendor.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| vendor | string | Optional | Sportsbook vendor (default: fanduel) |
Win-count record between the two teams over their last 10 meetings.
Team/game-level betting markets β run line, first-5-innings, correct score, team totals, and more (excludes player props; see the player-level odds-markets endpoint under Players).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| vendor | string | Optional | Sportsbook vendor (default: fanduel) |
Slate & DFS
Today's slate overview β spread/total/win probability per game, run-environment classification, key injuries, probable pitchers, and per-game player tags (core/value/fade batters).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD (defaults to today) |
Historical hit/miss results for the Key Suspects engine on a completed slate date (backtesting view).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| mode | string | Optional | dfs or props (default: dfs) |
| vendor | string | Optional | Sportsbook vendor (default: fanduel) |
| date | string | Optional | YYYY-MM-DD, defaults to most recent completed date |
Batters and pitchers whose recent average for a stat meets or exceeds today's live prop line.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| propType | string | Optional | hits, total_bases, home_runs, rbis, strikeouts, runs_scored, pitcher_strikeouts (default: hits) |
| vendor | string | Optional | Sportsbook vendor (default: draftkings) |
| lookback | string | Optional | 5, 10, 20, or season (default: 5) |
Today's projected batting-stat leaders with a sparkline, trend %, opposing-pitcher matchup rating, pitcher fatigue, and a signal badge (elite_spot, rising, risky, and more).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| stat | string | Optional | hits, hr, rbi, runs, sb, tb, walks, strikeouts (default: hits) |
Today's projected strikeout leaders among probable starters, with recent form, opponent-lineup matchup context, and signal badges.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD (defaults to today) |
Today's games ranked by DFS/props stack attractiveness β run environment, favored stack side, pitcher-vs-lineup matchup, and top recommended batters to stack.
Auto-built parlay "cases" assembled from the Key Suspects engine across the slate, scored by suspicion score, hit rate, and odds value.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| legs | integer | Optional | 2β10 legs per case (default: 4) |
| minOdds | integer | Optional | American-odds floor (default: -150) |
| games | string | Optional | Comma-separated game IDs or all |
| vendor | string | Optional | Sportsbook vendor (default: fanduel) |
EV Finder β every vendor's game odds, plus player props with at least a +3% edge against the offered odds based on recent hit rate.
DFS slate data β slates, games in the slate, roster-slot definitions, and draftable players with salary, position, and eligibility.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | YYYY-MM-DD |
| slateId | string | Optional | Filter to one slate |
| gameId | string | Optional | Filter to one game |
Key Suspects
Ranked list of a game's most notable player-prop/DFS suspects. Free/Pro/Elite see 1/3/7 of the same curated list.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| mode | string | Optional | dfs or props (default: dfs) |
| vendor | string | Optional | Sportsbook vendor (default: fanduel) |
Batch-computes a cached matchup verdict (favorable/unfavorable) for up to 30 players at once.
Body Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| gameId | string | Required | MLB game ID |
| requests | array | Required | Up to 30 items, each { playerId } |
Aggregate upvote/downvote counts per suspect for a game, plus the caller's own current vote.
Casts or toggles a vote on a suspect. Voting the same direction twice cancels it back to neutral. Returns the suspect's updated aggregate counts.
Body Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| propType | string | Required | Which prop the suspect refers to |
| vote | integer | Required | 1 (up) or -1 (down) |
Players
Player search by name β returns id, full name, position, and team for matches.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | Required | Name search, minimum 2 characters |
Player profile β name, position, jersey, bats/throws, physicals, birthplace, debut year, draft info, and current team.
Season totals and rate stats (batting and/or pitching) for one player-season.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
| season_type | string | Optional | regular or postseason (default: regular) |
Split-stat breakdown by arena, pitcher hand, day/night, month, opponent, situation, batting order, count, and position.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
| category | string | Optional | batting or pitching (default: both) |
AVG/OBP/SLG/OPS split vs. left- and right-handed opponents (pitchers for a batter, batters for a pitcher), with a league percentile rank.
Per-game batting and pitching stat lines for the current season, most recent first.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
| limit | integer | Optional | Max games (default: 30, max: 162) |
Player prop lines across all prop types and vendors for a specific game.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| game_id | string | Required | MLB game ID (mlb_game_id or internal ID) |
| vendor | string | Optional | Filter to one vendor |
This player's betting markets and outcomes for one game, across all vendors.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| game_id | string | Required | MLB game ID (mlb_game_id or internal ID) |
| vendor | string | Optional | Filter to one vendor |
Historical hit-rate tracker β how often the player's actual result beat the line, all-time and over the last 10 games.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | Optional | Games considered per prop type (default: 25, max: 50) |
Intraday line movement per prop type and vendor. Elite/Admin accounts also see cross-book consensus-shift detection.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| game_id | string | Required | MLB game ID |
A pitcher's per-pitch-type arsenal β usage%, zone%, chase%, whiff%, contact%, and results allowed by pitch type.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
Statcast-derived pitch movement β average velocity, spin rate, induced vertical break, horizontal break, and release extension per pitch type.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
A hitter's performance against each pitch type β whiff/chase/contact/zone %, BA/SLG/wOBA, and outcome counts.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
Current injury status, return date, and description for a player.
Pre-game matchup packet β the batter's season stats and splits against the opposing probable pitcher's profile, plus career stats vs. that opponent.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| game_id | string | Required | MLB game ID |
Leaderboards
Ranked season leaderboard for one batting or pitching stat category, with a 5-game sparkline.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
| season_type | string | Optional | regular or postseason (default: regular) |
| limit | integer | Optional | Max results (default: 25, max: 100) |
| onlyTodayPlayers | boolean | Optional | Restrict to players in today's lineups |
| date | string | Optional | YYYY-MM-DD, used only with onlyTodayPlayers |
Teams
All MLB teams β ID, abbreviation, names, league, and division.
Full season schedule for a team with scores, status, and opponent info.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
Current active roster with each player's current-season batting/pitching stat line attached.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
A team's standings row (wins, losses, streak) for a season.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
Team's current injury report β player, status, return date, and description.
Team batting, pitching, and fielding season totals (regular season only).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
Team-level batting AVG/OPS vs. left- and right-handed pitching for the current season, with league rank.
Prediction Accuracy
All-time SportsFBI prediction-accuracy stats β predictions made/graded/hit, hit rate, key suspects surfaced, and props currently tracked.
Same grading methodology scoped to the single most recent fully-graded slate date.
Full result ledger for one date's slate β every game's prediction vs. actual outcome graded hit/miss/pending, plus navigable previous/next dates.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | YYYY-MM-DD |
List of the last 90 days' fully-completed slate-recap dates.
NFL reference: 39 endpoints. Public routes require no API key; protected routes require authentication. Direct API-key access requires an Elite API key; app access follows the endpoint's plan entitlement. Admin routes require administrator privileges.
Team and player IDs are internal IDs. Game-detail, play-by-play, Key Suspects, and voting routes use provider NFL game IDs; odds-history also accepts an internal game ID. For date-window queries, tzOffsetMin is minutes east of UTC, opposite to JavaScript getTimezoneOffset(), and defaults to 0.
Games
Games on a given local calendar day, with odds, a derived win/loss record, and the SportsFBI edge projection per game. NFL's slate clusters on Thu/Sun/Mon, so fallback=last walks forward to the next date with real games instead of backward.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD (defaults to today) |
| vendor | string | Optional | Odds vendor (default: draftkings) |
| tzOffsetMin | integer | Optional | Client timezone offset in minutes |
| fallback | string | Optional | last β walk forward to the next date with games if none on date |
Single game detail β quarter-by-quarter score, all-vendor odds comparison, frozen opening moneyline, full box score, derived team records, and the SportsFBI edge engine output.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| vendor | string | Optional | Odds vendor (default: draftkings) |
Spreads, moneylines, and totals for one or more games.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| gameIds | string | Optional | Comma-separated NFL game IDs (one of gameIds or date required) |
| date | string | Optional | YYYY-MM-DD β fetches odds for every game that day |
| vendor | string | Optional | Filter to one vendor |
| tzOffsetMin | integer | Optional | Client timezone offset in minutes |
AI-generated pregame preview, gated to within an hour of kickoff.
AI-generated prose recap of a completed game, cached permanently once generated. Returns 400 if the game isn't final yet, 202 if a recap is already being generated.
Consensus: authenticated callers can use marketScope=consensus for cross-book history and current consensus; otherwise the selected vendor is used.
Authoritative opening line, intraday movement snapshots, and the latest quote per vendor.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| vendor | string | Optional | One of betmgm, betrivers, caesars, draftkings, fanatics, fanduel, kalshi, polymarket (default: draftkings) |
Full play-by-play grouped by quarter/OT, with team stats, top player-stat leaders, and a computed live-game-center overlay (win-probability deltas, event markers).
Key Suspects & Slate
Consensus: marketScope=consensus requests the canonical cross-book pool. availableAt optionally limits it to picks offered by a supported sportsbook. If consensus is unavailable, the vendor pool is returned with consensusFallback=true and fallbackVendor. Consensus access and the number/bands of visible suspects depend on authentication and plan.
Ranked list of a game's most notable player-prop suspects with suspicion scores and evidence factors.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| mode | string | Optional | props (default; dfs is accepted but not yet supported for NFL) |
| vendor | string | Optional | One of draftkings, fanduel, betmgm, betrivers, caesars, fanatics, prizepicks |
Access: authenticated with the premiumData entitlement. marketScope=consensus grades frozen consensus snapshots, falling back per game to the selected vendor. Responses identify fallback games. Live fallback candidates remain ungraded; they are not historical recommendations.
Historical hit/miss results for the Key Suspects engine on a completed slate date (backtesting view).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| vendor | string | Optional | Sportsbook vendor (default: draftkings) |
| date | string | Optional | YYYY-MM-DD, defaults to most recent completed date |
EV Finder β every vendor's game odds, plus player props (Pro/Elite/Admin in the app; Elite API key required for direct access) with an edge against the offered odds based on a no-vig consensus across other books.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD (defaults to the next scheduled game date within 21 days) |
Access: authenticated; case count and leg limits depend on plan. Uses consensus by default, with vendor fallback per game when no consensus suspects exist. Each consensus leg uses the best available sportsbook quote at its canonical line, rather than fair consensus odds. Responses include consensus and fallback metadata. refresh=true bypasses the cache. Free accounts allow 2-4 legs and use a -200 odds floor; paid accounts allow 2-10 legs and default to -150.
Auto-built parlay "case" cards assembled from that day's scheduled games' Key Suspects picks, with combined American odds.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| legs | integer | Optional | 2β10 legs per case (default: 4) |
| minOdds | integer | Optional | American-odds floor (default: -150) |
| games | string | Optional | Comma-separated game IDs or all |
| vendor | string | Optional | One of draftkings, fanduel, betmgm, betrivers, caesars, fanatics, prizepicks |
| date | string | Optional | YYYY-MM-DD (default: today) |
Players
Player search by name β returns id, full name, position, and team for matches.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | Required | Name search, minimum 2 characters |
Player profile β identity, position, physicals, team, plus most recent injury status.
Distinct list of seasons for which this player has any game or season stats.
Season totals for one player-season.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
| postseason | boolean | Optional | true for postseason stats (default: regular season) |
Per-game box-score log, newest first, joined to opponent/date/result context.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
| limit | integer | Optional | Max games (default: 10, max: 50) |
Player prop lines (line, over/under/milestone odds, market type) for a specific game.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| game_id | string | Required | NFL game ID (nfl_game_id or internal ID) |
| vendor | string | Optional | Filter to one vendor |
Historical hit-rate tracker β how often the player's actual result beat the line.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | Optional | Games considered (default: 25, max: 50) |
Per-prop-type/vendor line-movement timeline for a player in one game, opening line through subsequent moves.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| game_id | string | Required | NFL game ID (nfl_game_id or internal ID) |
Teams
All NFL teams β ID, abbreviation, name, conference, and division.
Full roster with depth-chart position, injury status, and nested per-player season stats where available.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
Team's current injury report β player, status, comment, and injury date.
Derived win/loss/tie record, points for/against, point differential, and win streak, computed from completed games.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
| seasonType | integer | Optional | 1=preseason, 2=regular, 3=postseason (default: 2) |
Every game the team plays that season across all season types (preseason included), with score/status/home-away.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
Team offense/defense/special-teams season totals, including opponent-mirror fields.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current year |
| seasonType | integer | Optional | 1=preseason, 2=regular, 3=postseason (default: 2) |
Prediction Accuracy
Weekly result ledger β every game in that week graded hit/miss/pending against its frozen pregame prediction, plus previous/next graded-week navigation.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Required | e.g. 2026 |
| week | integer | Required | 1β22 |
| seasonType | integer | Optional | 1=preseason, 2=regular, 3=postseason (default: 2) |
Completed, prediction-bearing NFL weeks eligible for public recap discovery and sitemap inclusion. Includes the prediction-history start date and each week's last game date.
Discovery, Signals & Leads
Daily NFL Summary with matchups, spread, total, win confidence, rest, injuries, and projection factors. Dates follow the Eastern kickoff calendar.
Access: Authenticated
Parameters
date: optional valid YYYY-MM-DD; defaults to today in Eastern time. Current projections before kickoff; stored pregame confidence and factors after kickoff. Missing historical predictions stay unavailable. Historical lines are closing pregame DraftKings quotes. NFL uses Breakdown and Injuries, without Stack or an overtime estimate.
Response overview
{ date, games, slateOverview, slateEdge }
Player form, projections, and matchup signals for the current or next available slate.
Access: Authenticated; playerSignals entitlement
Parameters
stat: passing_yards (default), passing_tds, passing_completions, rushing_yards, rushing_attempts, receiving_yards, or receptions. The slate date is selected automatically.
Response overview
{ date, stat, games, players }
Leads: players whose recent average meets or exceeds the consensus prop line. Always uses consensus, with no sportsbook fallback.
Access: Authenticated; results limited by plan
Parameters
propType: passing_yards (default), passing_tds, passing_completions, rushing_yards, rushing_attempts, receiving_yards, receptions, rushing_receiving_yards, or anytime_td. lookback: 5 (default), 10, 20, or season. date: YYYY-MM-DD, default today. tzOffsetMin: minutes east of UTC, -720 to 840, default 0. fallback: next to find the next available prop date. vendor does not select a book; marketScope is always consensus.
Response overview
{ players, updatedAt, marketScope: "consensus", ...date and plan metadata }
Player directory with season summaries and a recent-form list.
Access: Public
Parameters
season: optional 2000-2100; defaults to the current NFL season.
Response overview
{ sport: "nfl", season, totalPlayers, players, hot }
Combined player identity, injury, regular-season stats, recent game log, and roster. Optional sections may be unavailable while the profile still succeeds.
Access: Public
Parameters
playerId: internal player ID. season: optional; defaults to the current calendar year.
Response overview
{ player, injury, stats, gameLog, roster }
Team directory with records and season summaries.
Access: Public
Parameters
season: optional 2000-2100; defaults to the current NFL season. seasonType: 1 preseason, 2 regular season (default), or 3 postseason.
Response overview
Team hub with season, seasonType, and team summaries.
League-wide team rankings by statistical category.
Access: Public
Parameters
season: optional; defaults to the current NFL season. seasonType: 1 preseason, 2 regular season (default), or 3 postseason.
Response overview
{ totalTeams, categories, teams, ...ranking metadata }
Combined team record, home/away splits, streak, scoring, spread and total results, division standings, rankings, and schedule.
Access: Public
Parameters
teamId: internal team ID. season: optional; defaults to the current NFL season. seasonType: 1 preseason, 2 regular season (default), or 3 postseason. The schedule includes all season types; result summaries use the requested type.
Response overview
{ team, season, seasonType, gamesPlayed, record, home, away, streak, ats, overUnder, division, rankings, schedule, ...scoring fields }
Aggregate suspect votes and the current user's vote, keyed by playerId_propType. An unknown game returns an empty votes object.
Access: Authenticated
Parameters
nflGameId: provider NFL game ID, not the internal game ID.
Response overview
{ gameId, votes: { "123_passing_yards": { upvotes: 1, downvotes: 0, userVote: 1 } } }
Voting & Administration
Cast a suspect vote. Repeating the same vote cancels it; voting in the opposite direction switches it. Unknown game returns 404.
Access: Authenticated
Parameters
nflGameId: provider NFL game ID. playerId: internal player ID. JSON body: propType (required string), vote (required numeric 1 or -1).
Request body
{
"propType": "passing_yards",
"vote": 1
}
Response overview
{ playerId, propType, upvotes, downvotes, userVote }
Override whether a rostered player belongs to the team's core lineup. Refreshes the roster cache. A player outside this roster returns 404.
Access: Admin only
Parameters
teamId and playerId: internal IDs. JSON body: isCore, optional boolean, default true; other types return 400.
Request body
{
"isCore": true
}
Response overview
{ teamId, playerId, isCore, source: "override" }
Remove a core-player override and restore automatic selection. Refreshes the roster cache.
Access: Admin only
Parameters
teamId and playerId: internal IDs. No request body.
Response overview
{ teamId, playerId, source: "usage" }
NHL API Reference
Reviewed October 12, 2026. All 51 dedicated NHL routes are listed below: 47 public or authenticated routes and four administrator-only routes.
Access: Public routes need no key. ELITE means direct API calls require Authorization: Bearer YOUR_API_KEY; keys are issued to ELITE and Admin accounts. App sessions follow the feature allowances described on each route. ADMIN ONLY requires administrator privileges; an ordinary ELITE key does not grant administrative access.
IDs: :gameId, game_id, and gameIds use provider nhl_game_id. :teamId and :playerId use SportsFBI internal IDs from the team/player lists. Do not substitute nhl_team_id or nhl_player_id in these paths. All path IDs must be positive integers.
Dates: Daily game/odds readers use Eastern scheduled dates unless tzOffsetMin is supplied. The offset is minutes east of UTC (for example -240), opposite to JavaScript's getTimezoneOffset(). Required seasons have no universal current-season default. postseason accepts the literal strings true and false; omission behavior varies by route, as listed below.
Markets: Tool books are draftkings, fanduel, betmgm, betrivers, caesars, and fanatics. Readers can expose other stored vendors/markets. Settlement-supported skater props are goals, assists, points, shots_on_goal, and anytime_goal. Power-play points are not supported for grading. Over/under and milestones remain distinct: milestones reach their threshold, while integer over/under lines can push. Overtime counts for supported player props; shootout goals do not. A player with no recorded ice time is voided once a final box score is available; missing box data remains unresolved.
Consensus: Provisional version 1 requires at least two books at the unique canonical line, at least half of eligible books supporting it, and quotes no older than 180 minutes. Over/under probability is the median two-sided no-vig over probability; UNDER uses its complement. Milestones use raw one-sided probabilities including bookmaker margin. Synthetic consensus odds are reference prices, not executable offers. Capture gaps are never filled retrospectively from live prices.
Examples: IDs, dates, and results are illustrative. Response snippets show selected fields, not exhaustive schemas or live results. Empty arrays and nulls illustrate possible missing-data states. Replace IDs with values from list endpoints. Timestamps may be null when unavailable.
Games & Live Center
Daily games with records, scores, status, venue, and matchup projections.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| date | optional YYYY-MM-DD; default today in Eastern time unless stated otherwise. |
| tzOffsetMin | optional minutes east of UTC, -720 to 840; absent uses Eastern scheduled dates. |
| season | optional provider season start year. |
| postseason | optional true/false; omitted includes both regular-season and postseason games. |
| fallback | optional next; legacy last also finds the next scheduled slate when the requested day is empty. |
Behavior: No pagination. engine is live before puck drop, frozen after start, or null when unavailable.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/today?date=2026-10-12&fallback=next"Response example (selected fields):
{
"date": "2026-10-12",
"requestedDate": "2026-10-12",
"fallbackDate": null,
"timezone": "America/New_York",
"tzOffsetMin": null,
"games": []
}Completed games, newest first, with the matching total count.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| season | required provider season start year (four digits, at least 1900; for example 2026). |
| postseason | optional true/false; omitted includes both regular-season and postseason games. |
| limit | optional 1-100, default 50. offset: optional 0-100000, default 0. |
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/results?season=2026&postseason=false"Response example (selected fields):
{
"season": 2026,
"postseason": false,
"games": [],
"total": 0,
"limit": 50,
"offset": 0
}One game, returned directly rather than inside a games array.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
Behavior: Includes scores, records, venue, and the current/frozen engine. Missing game returns 404.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11"Response example (selected fields):
{
"id": 1,
"nhl_game_id": 11,
"season": 2026,
"status_state": "scheduled",
"engine": null
}Skater and goalie box-score rows for one game.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
Behavior: participation is recorded, no_recorded_ice_time, or unknown. Empty rows do not imply zero statistics.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/stats"Response example (selected fields):
{
"game": {
"nhl_game_id": 11
},
"players": [],
"source": "provider_box_scores",
"feed_observation": null,
"retained_after_empty": false
}Play-by-play and a full-feed live-center summary.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
| period | optional positive integer; filters plays only, not summary. |
Behavior: Summary includes period scoring, overtime/shootout context, penalties, team totals, and leaders. Participant IDs in play details are provider player IDs.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/plays/11?period=1"Response example (selected fields):
{
"game": {
"nhl_game_id": 11
},
"plays": [],
"periods": [],
"feed_coverage": {},
"source": "provider_play_by_play",
"summary": {
"scoring": {},
"scoring_plays": [],
"penalties": [],
"team_stats": {},
"leaders": {},
"unavailable": [
"win_probability",
"expected_goals",
"shift_time",
"power_play_labels"
]
}
}Teams, Rosters & Starting Goalies
All stored team identities, including historical teams.
No query parameters or body.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/teams"Response example (selected fields):
{
"teams": []
}Season teams, regular-season standings, recent form, and per-stat rankings.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| season | required provider season start year (four digits, at least 1900; for example 2026). |
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/teams/hub?season=2026"Response example (selected fields):
{
"sport": "nhl",
"season": 2026,
"postseason": false,
"totalTeams": 0,
"teams": []
}Team rankings from standings and official season aggregates.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| season | required provider season start year (four digits, at least 1900; for example 2026). |
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/team-rankings?season=2026"Response example (selected fields):
{
"season": 2026,
"postseason": false,
"totalTeams": 0,
"method": "per_metric_competition_rank",
"categories": [],
"teams": []
}Identity, standings, division, rankings, and full season schedule.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| teamId | required positive integer in the path; SportsFBI internal ID. |
| season | required provider season start year (four digits, at least 1900; for example 2026). |
Behavior: Standings and ranks use regular-season data. Schedule also includes postseason games. ATS and total records remain unavailable.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/team/1/profile?season=2026"Response example (selected fields):
{
"team": {
"id": 1
},
"season": 2026,
"standing": null,
"recordText": null,
"division": {
"rows": []
},
"rankings": {},
"ats": null,
"overUnder": null,
"betting_results_unavailable_reason": "settlement_scope_unresolved",
"schedule": []
}Season games in date order, with opponent and home/away identity.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| teamId | required positive integer in the path; SportsFBI internal ID. |
| season | required provider season start year (four digits, at least 1900; for example 2026). |
| postseason | optional true/false; omitted includes both regular-season and postseason games. |
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/team/1/schedule?season=2026&postseason=false"Response example (selected fields):
{
"team": {
"id": 1
},
"season": 2026,
"games": []
}Season-associated roster, current injuries, core overrides, and official regular-season player stats.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| teamId | required positive integer in the path; SportsFBI internal ID. |
| season | required provider season start year (four digits, at least 1900; for example 2026). |
Behavior: Season membership does not confirm game participation or line combinations.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/team/1/roster?season=2026"Response example (selected fields):
{
"team": {
"id": 1
},
"season": 2026,
"players": [],
"stats_source": "provider_season_stats",
"injury_source": "current_report",
"membership_type": "season_association",
"lineup_confirmed": false
}Stored provider standings for a team and season.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| teamId | required positive integer in the path; SportsFBI internal ID. |
| season | required provider season start year (four digits, at least 1900; for example 2026). |
Behavior: standing is null when no row is stored.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/team/1/standings?season=2026"Response example (selected fields):
{
"team": {
"id": 1
},
"season": 2026,
"standing": null
}Current injuries attributed through the injury feed's season associations.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| teamId | required positive integer in the path; SportsFBI internal ID. |
| season | required provider season start year (four digits, at least 1900; for example 2026). |
Behavior: Current report, not a historical report reconstructed for a past game.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/team/1/injuries?season=2026"Response example (selected fields):
{
"team": {
"id": 1
},
"season": 2026,
"injuries": [],
"report_type": "current",
"team_attribution": "injury_feed_season_association"
}Observed starters from finals, grouped by goalie with individual starts.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| teamId | required positive integer in the path; SportsFBI internal ID. |
| season | required provider season start year (four digits, at least 1900; for example 2026). |
Behavior: Includes regular-season and postseason finals. This is postgame evidence, not pregame confirmation.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/team/1/goalie-starts?season=2026"Response example (selected fields):
{
"team": {
"id": 1
},
"season": 2026,
"observation": "postgame_box_score_starter",
"pregame_confirmation": false,
"coverage": {
"final_games": 0,
"games_with_observed_starter": 0
},
"goalies": [],
"starts": []
}Expected or observed confirmed goalie for each side, with official season stats.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
Behavior: status is expected, confirmed, or unavailable. Expected uses prior starts/rest; confirmed uses a box-score starter flag, not an external pregame confirmation feed.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/goalies"Response example (selected fields):
{
"nhl_game_id": 11,
"home": {
"status": "unavailable",
"goalie": null,
"basis": "no_prior_starts",
"detail": null
},
"away": {
"status": "unavailable",
"goalie": null,
"basis": "no_prior_starts",
"detail": null
},
"pregame_confirmation": false
}Players & Official Statistics
Search stored players by name and optional season association.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| q | optional substring, maximum 128 characters; default empty (all players). |
| season | optional provider season start year. |
| limit | optional 1-100, default 50. offset: optional 0-100000, default 0. |
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/players?q=Skater&season=2026"Response example (selected fields):
{
"players": [],
"limit": 50,
"offset": 0
}Associated players, teams, regular-season stats, and current injuries.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| season | required provider season start year (four digits, at least 1900; for example 2026). |
Behavior: Traded players can have multiple team associations.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/players/hub?season=2026"Response example (selected fields):
{
"sport": "nhl",
"season": 2026,
"postseason": false,
"players": []
}Player identity and all stored season team memberships.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| playerId | required positive integer in the path; SportsFBI internal ID. |
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/players/7"Response example (selected fields):
{
"player": {
"id": 7,
"nhl_player_id": 70
},
"memberships": [],
"membership_type": "season_association"
}Player identity, memberships, injury, season stats, and the latest ten game logs.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| playerId | required positive integer in the path; SportsFBI internal ID. |
| season | required provider season start year (four digits, at least 1900; for example 2026). |
Behavior: Stats are regular-season aggregates. Logs can include postseason games in that season. role is skater, goalie, or null.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/players/7/public-profile?season=2026"Response example (selected fields):
{
"player": {
"id": 7
},
"season": 2026,
"role": "skater",
"memberships": [],
"injury": null,
"stats": {
"postseason": false,
"values": {},
"source": "provider_season_stats"
},
"gameLog": {
"rows": [],
"source": "provider_box_scores"
}
}Paginated player box scores, newest first, with opponent at each game.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| playerId | required positive integer in the path; SportsFBI internal ID. |
| season | required provider season start year (four digits, at least 1900; for example 2026). |
| postseason | optional true/false; omitted includes both regular-season and postseason games. |
| limit | optional 1-100, default 50. offset: optional 0-100000, default 0. |
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/players/7/game-log?season=2026&postseason=false"Response example (selected fields):
{
"player": {
"id": 7
},
"season": 2026,
"rows": [],
"limit": 50,
"offset": 0,
"source": "provider_box_scores"
}Official season stats, or box-score rows for one game.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| playerId | required positive integer in the path; SportsFBI internal ID. |
| gameId | optional provider NHL game ID; cannot be combined with season/postseason. |
| season | required if gameId is absent; provider season start year. |
| postseason | optional true/false; default false. |
Behavior: With gameId, response is player_id, nhl_game_id, rows, and source: provider_box_scores. This query uses gameId; player prop readers use game_id.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/players/7/stats?season=2026&postseason=false"Response example (selected fields):
{
"entity": {
"id": 7,
"provider_id": 70
},
"season": 2026,
"postseason": false,
"stats": [],
"values": {},
"source": "provider_season_stats",
"feed_observation": null,
"retained_after_empty": false
}Single-game mode (selected fields):
GET /api/nhl/players/7/stats?gameId=11
{
"player_id": 7,
"nhl_game_id": 11,
"rows": [],
"source": "provider_box_scores"
}Scopes with stored official statistics.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| playerId | required positive integer in the path; SportsFBI internal ID. |
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/players/7/seasons"Response example (selected fields):
{
"player_id": 7,
"seasons": [
{
"season": 2026,
"postseason": false
}
],
"source": "stored_official_season_stats"
}Official team aggregates and source observations.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| teamId | required positive integer in the path; SportsFBI internal ID. |
| season | required provider season start year (four digits, at least 1900; for example 2026). |
| postseason | optional true/false; default false. |
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/team/1/season-stats?season=2026&postseason=false"Response example (selected fields):
{
"entity": {
"id": 1,
"provider_id": 10
},
"season": 2026,
"postseason": false,
"stats": [],
"values": {},
"source": "provider_season_stats",
"feed_observation": null,
"retained_after_empty": false
}Official player leaderboard, preserving provider order.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| season | required provider season start year (four digits, at least 1900; for example 2026). |
| postseason | optional true/false; default false. |
| type | required allowed player stat; see complete type lists below. |
| limit | optional 1-100, default 100. offset: optional 0-100000, default 0. |
Behavior: Rows expose internal id and provider_id. source_rows_for_entity identifies repeated provider entries; they are not combined into invented totals.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/player_stats/leaders?season=2026&type=points"Response example (selected fields):
{
"season": 2026,
"postseason": false,
"type": "points",
"rows": [],
"limit": 100,
"offset": 0,
"ordering": "provider_order",
"source": "provider_stat_leaders"
}Official team leaderboard, preserving provider order.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| season | required provider season start year (four digits, at least 1900; for example 2026). |
| postseason | optional true/false; default false. |
| type | required allowed team stat; see complete type lists below. |
| limit | optional 1-100, default 100. offset: optional 0-100000, default 0. |
Behavior: Rows expose internal id and provider_id. source_rows_for_entity identifies repeated provider entries; they are not combined into invented totals.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/team_stats/leaders?season=2026&type=points"Response example (selected fields):
{
"season": 2026,
"postseason": false,
"type": "points",
"rows": [],
"limit": 100,
"offset": 0,
"ordering": "provider_order",
"source": "provider_stat_leaders"
}Sportsbook Odds & Player Props
Active game lines for selected games or one slate.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameIds | optional comma-separated provider NHL game IDs, 1-100; overrides date/timezone filtering. |
| date | optional YYYY-MM-DD; default today in Eastern time unless stated otherwise. |
| tzOffsetMin | optional minutes east of UTC, -720 to 840; only used without gameIds. |
| vendor | optional sportsbook name; omitted reads all books. |
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/betting-odds?gameIds=11&vendor=fanduel"Response example (selected fields):
{
"odds": [],
"market_scope": "provider_game"
}Current, official opening, and observed pregame closing game lines.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
| vendor | optional sportsbook name; omitted reads all books. |
Behavior: pregame_closing is null before start and an array afterwards. closing_basis is not_started, observed_pregame_history, or unavailable. Current lines can be live in-game prices after puck drop.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/markets?vendor=fanduel"Response example (selected fields):
{
"game": {
"nhl_game_id": 11
},
"current": [],
"opening": [],
"pregame_closing": null,
"market_scope": "provider_game",
"closing_basis": "not_started"
}Locally observed material line changes, oldest first, plus current/opening/closing views.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
| vendor | optional sportsbook name; omitted reads all books. |
| limit | optional 1-2000, default 200. offset: optional 0-100000, default 0. |
Behavior: Local collection history is not a complete historical sportsbook feed. Withdrawal rows are preserved.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/odds-history?vendor=fanduel&limit=200"Response example (selected fields):
{
"game": {
"nhl_game_id": 11
},
"history": [],
"limit": 200,
"offset": 0,
"source": "local_observed_material_changes",
"current": [],
"opening": [],
"pregame_closing": null
}All active offers for a game, across books and alternate ladders.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
Behavior: No vendor filter or pagination. Current offers after start can be live in-game prices.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/player-props" -H "Authorization: Bearer YOUR_API_KEY"Response example (selected fields):
{
"game": {
"nhl_game_id": 11
},
"props": [],
"source": "provider_current_quotes"
}Last locally observed active pregame quote for each distinct offer.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
| vendor | optional sportsbook name; omitted reads all books. |
Behavior: Before start props is null/not_started; missing start returns null/unavailable. Both source update and observation must predate start; withdrawn offers are excluded.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/player-props/closing?vendor=fanduel" -H "Authorization: Bearer YOUR_API_KEY"Response example (selected fields):
{
"game": {
"nhl_game_id": 11
},
"props": [],
"closing_basis": "unavailable",
"alternative_lines_are_distinct": true,
"settlement_rules": null
}Current and immutable opening quotes for a player in a game.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| playerId | required positive integer in the path; SportsFBI internal ID. |
| game_id | required provider NHL game ID. |
| vendor | optional sportsbook name; omitted reads all books. |
Behavior: Prop rows include quote_key, vendor, prop_type, market_type, line_value, over_odds, under_odds, milestone_odds, active, source_updated_at, observed_at. Game-wide offers can have a null internal player mapping.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/players/7/props?game_id=11&vendor=fanduel"Response example (selected fields):
{
"player": {
"id": 7,
"nhl_player_id": 70
},
"game": {
"nhl_game_id": 11
},
"props": [],
"opening": []
}Observed offer history, optionally restricted to one exact quote.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| playerId | required positive integer in the path; SportsFBI internal ID. |
| game_id | required provider NHL game ID. |
| vendor, prop_type, market_type | optional exact offer filters. |
| quote_key | optional 64 lowercase hexadecimal characters. |
| limit | optional 1-2000, default 200. offset: optional 0-100000, default 0. |
Behavior: Requires premiumData (Pro/Elite app tiers). Ascending observed order. Different lines remain distinct; history includes withdrawals.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/players/7/props/line-movement?game_id=11&prop_type=shots_on_goal" -H "Authorization: Bearer YOUR_API_KEY"Response example (selected fields):
{
"player": {
"id": 7
},
"game": {
"nhl_game_id": 11
},
"history": [],
"limit": 200,
"offset": 0,
"source": "local_observed_offer_history",
"alternative_lines_are_distinct": true
}Frozen player pick performance and a separate all-offer baseline.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| playerId | required positive integer in the path; SportsFBI internal ID. |
| season | required provider season start year (four digits, at least 1900; for example 2026). |
| postseason | required explicit true/false. |
| marketScope | optional vendor (default) or consensus. |
| vendor, prop_type, market_type | optional exact offer filters. |
| limit | optional 1-2000, default 200. offset: optional 0-100000, default 0. |
Behavior: Requires premiumData. Strict scope filtering, no fallback. History retains individual frozen offer records; decided denominator is HIT + MISS. Newest games first.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/players/7/props/hit-rate?season=2026&postseason=false&marketScope=consensus" -H "Authorization: Bearer YOUR_API_KEY"Response example (selected fields):
{
"marketScope": "consensus",
"player": {
"id": 7
},
"season": 2026,
"postseason": false,
"selected_picks": {
"hits": 0,
"misses": 0,
"pushes": 0,
"voids": 0,
"unresolved": 0,
"decided": 0,
"hit_rate": null
},
"all_offers": {
"captured": 0,
"graded": 0
},
"history": [],
"limit": 200,
"offset": 0
}Game Analysis, Previews & Key Suspects
Current pregame analysis, or frozen prediction with actual outcome.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
Behavior: No recomputation after start; missing capture is explicit. The 3+ goal model is uncalibrated.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/analysis"Response example (selected fields):
{
"frozen": false,
"model_version": "nhl-game-v2",
"capture_missing": true,
"derivation": null,
"derivation_unavailable_reason": "no_pregame_capture",
"outcome": null
}Stored/generated AI preview, or factual early/fallback analysis.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
Behavior: AI responses include preview_text; early/fallback responses use fallback_narrative. Cached text can be served after start; otherwise alreadyStarted: true. Concurrent generation returns 202 with inProgress: true. Requests may generate content.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/preview"Response example (selected fields):
{
"tooEarly": true,
"fallback_narrative": [],
"fallback_quick_facts": []
}Generation already running (HTTP 202):
{
"inProgress": true
}Started game without a stored preview (HTTP 200):
{
"alreadyStarted": true
}Recap of a final game, using AI text or a factual fallback.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
Behavior: 400 before final; 202/inProgress during concurrent generation. AI recaps require a tracked pregame prediction; backfilled history uses factual fallback. Requests may generate content.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/recap"Response example (selected fields):
{
"fallback": true,
"recap_text": "Illustrative factual recap."
}Highest-scoring supported prop per player with historical and matchup evidence.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
| marketScope | optional vendor (default) or consensus. |
| availableAt | optional supported book name; filters accepted consensus after strongest-prop selection. |
Behavior: Current offers/prior finals before start, frozen snapshots afterwards. No selected consensus picks means all_books fallback with consensusFallback: true; availability filtering never triggers fallback and does not filter book fallback. Missing capture is flagged. Scores are not hit probabilities.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/key-suspects?marketScope=consensus"Response example (selected fields):
{
"marketScope": "consensus",
"consensusVersion": 1,
"consensusFallback": false,
"frozen": false,
"totalAvailable": 0,
"suspects": [],
"evidence_score_is_probability": false
}Frozen capture with consensus fallback (selected fields):
{
"marketScope": "consensus",
"consensusVersion": 1,
"consensusFallback": true,
"fallbackVendor": "all_books",
"frozen": true,
"source": "pregame_capture",
"captured_at": null,
"captured_offers": 0,
"capture_missing": true,
"totalAvailable": 0,
"suspects": []
}Slate Research Tools & Results
Form estimates and opponent-matchup context on the current/next slate.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| stat | optional points (default), goals, assists, shots_on_goal, hits, blocked_shots, or saves. |
Behavior: Requires playerSignals (all signed-in app tiers). No date query. Estimates use prior finals and are not calibrated hit probabilities.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/slate/signals?stat=shots_on_goal" -H "Authorization: Bearer YOUR_API_KEY"Response example (selected fields):
{
"date": "2026-10-12",
"stat": "points",
"players": [],
"games": []
}Consensus Leads comparing prior performance with accepted canonical pregame prop lines.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| propType | optional points (default), goals, assists, shots_on_goal, or anytime_goal. |
| lookback | optional 5 (default), 10, 20, or season. |
| date | optional YYYY-MM-DD; default today in Eastern time unless stated otherwise. |
| fallback | optional next searches later slates when no qualifying picks exist. |
| marketScope | always consensus; vendor is accepted for compatibility but does not select a book. |
Behavior: Consensus only, no book fallback. Each row includes contributing books and probability; overOdds is an available quote at the canonical line, identified by executionVendor. Canonical opening/line movement are unavailable. Free app accounts see WATCH/RISK; paid accounts see all tiers. Started games excluded.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/slate/value-plays?propType=shots_on_goal&marketScope=consensus&lookback=20" -H "Authorization: Bearer YOUR_API_KEY"Response example (selected fields):
{
"players": [],
"updatedAt": null,
"marketScope": "consensus",
"vendor": "consensus",
"date": "2026-10-12"
}Market-derived EV at an identical line, before puck drop.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| date | optional YYYY-MM-DD; omitted finds next upcoming slate within 21 days, otherwise today. |
Behavior: Game lines for signed-in accounts; player props require evPlayerProps (Pro/Elite). At least two other reference books and supported two-sided props only. EV is conditional on no push. NHL game-line Radar settlement is unavailable.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/slate/ev?date=2026-10-12" -H "Authorization: Bearer YOUR_API_KEY"Response example (selected fields):
{
"date": "2026-10-12",
"games": [],
"propsEnabled": true,
"gameLinesRadar": false,
"maxQuoteAgeMinutes": 90,
"opportunities": [],
"coverage": {}
}Consensus Cases priced at real sportsbook quotes at the canonical line, with distinct players.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| date | optional YYYY-MM-DD; default today in Eastern time unless stated otherwise. |
| vendor | optional fallback sportsbook, default fanduel; consensus legs choose their best available book. |
| legs | optional default 4; clamped to 2-4 for Free app accounts, 2-10 for paid. |
| minOdds | optional American odds; paid default -150; Free fixed -200. |
| games | optional all (default), or comma-separated provider game IDs. |
| refresh | optional true bypasses cache and reshuffles near ties. |
Behavior: Consensus by default. If a game has no selected consensus picks, uses the requested fallback sportsbook for that game and reports fallback metadata. Fair consensus reference odds are not executable prices. Case count follows account allowance. No calibrated parlay probability supplied.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/slate/case-builder?vendor=fanduel&legs=4" -H "Authorization: Bearer YOUR_API_KEY"Response example (selected fields):
{
"gamesAvailable": [],
"marketScope": "consensus",
"vendor": "fanduel",
"executionPolicy": "best_canonical_price_per_leg",
"modelBasis": "ranked_evidence_no_probability",
"cases": [],
"consensusFallback": false,
"consensusFallbackGames": 0,
"consensusGamesTotal": 0,
"fallbackVendor": null
}Daily matchup overview: puck lines, goal-margin bands, rest, injuries, expected goals.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| date | optional YYYY-MM-DD; default today in Eastern time unless stated otherwise. |
Behavior: Frozen analysis and pregame closing lines after start. Goal bands mean 3+ goals including overtime, not calibrated confidence.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/slate/summary?date=2026-10-12"Response example (selected fields):
{
"date": "2026-10-12",
"model_version": "nhl-game-v2",
"calibrated": false,
"slateOverview": {
"totalGames": 0
},
"slateEdge": null,
"games": []
}Daily Hitlist, or season history/totals when season is supplied.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| date | optional daily mode only; default latest completed Eastern slate before today. |
| season | optional; switches to season mode; explicit provider start year. |
| postseason | season mode only; optional true/false; omitted includes regular-season and postseason. |
| prop_type | optional season-mode filter, 1-64 lowercase letters/digits/underscores. |
| marketScope | optional vendor (default) or consensus. |
| limit | season mode only, 1-100, default 25. offset: season mode only, 0-100000, default 0. |
Behavior: Requires premiumData. Daily consensus fallback is per game. Started games without captures are counted, never reconstructed. Season mode returns season, history, selected, by_prop, all_offers, limit, offset; strict scope without fallback. date ignored in season mode.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/slate/hit-rate?date=2026-10-12&marketScope=consensus" -H "Authorization: Bearer YOUR_API_KEY"Response example (selected fields):
{
"date": "2026-10-12",
"marketScope": "consensus",
"suspects": [],
"total": 0,
"gamesFound": 0,
"frozenGames": 0,
"liveGames": 0,
"captureMissingGames": 0,
"consensusFallback": false,
"consensusFallbackGames": 0,
"consensusGamesTotal": 0,
"summary": {
"hits": 0,
"misses": 0,
"pushes": 0,
"voids": 0,
"ungraded": 0,
"decided": 0,
"hit_rate": null
}
}Season-history mode (selected fields):
GET /api/nhl/slate/hit-rate?season=2026&postseason=false&marketScope=consensus&limit=25&offset=0
{
"season": 2026,
"postseason": false,
"marketScope": "consensus",
"history": [],
"selected": {
"HIT": 0,
"MISS": 0,
"PUSH": 0,
"VOID": 0,
"ungraded": 0,
"hit_rate": null,
"hit_rate_denominator": "HIT + MISS (PUSH and VOID excluded)"
},
"by_prop": [],
"all_offers": [],
"limit": 25,
"offset": 0
}Completed slate dates with frozen predictions for recap discovery.
No query parameters or body.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/stats/slate-recap-dates"Response example (selected fields):
{
"dates": []
}Daily results against frozen game predictions and selected prop tallies.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| date | required YYYY-MM-DD. |
| marketScope | optional vendor (default) or consensus. |
Behavior: Strict prop scope, no fallback; unique picks count once within scope. Results include upset flags, overtime/shootout labels, and previous/next completed slate dates.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/stats/slate-recap?date=2026-10-12&marketScope=consensus"Response example (selected fields):
{
"date": "2026-10-12",
"marketScope": "vendor",
"totalGames": 0,
"predictionsGraded": 0,
"hits": 0,
"misses": 0,
"accuracyPct": null,
"suspects": null,
"results": []
}Key Suspect Voting
Aggregated votes and the requesting account's own vote, keyed by player/prop.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
Behavior: Missing game returns an empty votes object rather than 404.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/games/11/suspects/votes" -H "Authorization: Bearer YOUR_API_KEY"Response example (selected fields):
{
"gameId": 11,
"votes": {
"7_shots_on_goal": {
"upvotes": 1,
"downvotes": 0,
"userVote": 1
}
}
}Cast or toggle a vote before puck drop.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| gameId | required positive integer in the path; provider nhl_game_id. |
| playerId | required positive integer in the path; SportsFBI internal ID. |
| Body propType | required supported NHL prop name. |
| Body vote | required integer 1 (upvote) or -1 (downvote). |
Behavior: Repeating the same vote cancels it (0); opposite vote replaces it. 409 at puck drop; 400 for unsupported inputs.
Example request & response
curl -X POST "https://app.sportsfbi.com/api/nhl/games/11/suspects/7/vote" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json" -d '{"propType":"shots_on_goal","vote":1}'Response example (selected fields):
{
"playerId": 7,
"propType": "shots_on_goal",
"upvotes": 1,
"downvotes": 0,
"userVote": 1
}Administration
Set a roster core-player override.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| teamId | required positive integer in the path; SportsFBI internal ID. |
| playerId | required positive integer in the path; SportsFBI internal ID. |
| Body isCore | optional boolean, defaults true; strings/numbers rejected. |
Behavior: Administrator only. Player must have a season association with the team; missing association returns 404.
Example request & response
curl -X PUT "https://app.sportsfbi.com/api/nhl/team/1/core-players/7" -H "Authorization: Bearer YOUR_ADMIN_API_KEY" -H "Content-Type: application/json" -d '{"isCore":true}'Response example (selected fields):
{
"teamId": 1,
"playerId": 7,
"isCore": true,
"source": "override"
}Remove a core-player override.
| Parameter / location | Requirements, defaults & behavior |
|---|---|
| teamId | required positive integer in the path; SportsFBI internal ID. |
| playerId | required positive integer in the path; SportsFBI internal ID. |
Example request & response
curl -X DELETE "https://app.sportsfbi.com/api/nhl/team/1/core-players/7" -H "Authorization: Bearer YOUR_ADMIN_API_KEY"Response example (selected fields):
{
"teamId": 1,
"playerId": 7,
"isCore": null,
"source": "none"
}Refresh job status, attempts, successes, staleness, and errors.
No query parameters or body.
Behavior: Read-only; does not trigger refresh jobs.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/system/refresh-status" -H "Authorization: Bearer YOUR_ADMIN_API_KEY"Response example (selected fields):
{
"jobs": [],
"expected_jobs": [],
"conditional_jobs": []
}Worker, source freshness, capture coverage, unresolved grades, and live-game health.
No query parameters or body.
Example request & response
curl -X GET "https://app.sportsfbi.com/api/nhl/system/health" -H "Authorization: Bearer YOUR_ADMIN_API_KEY"Response example (selected fields):
{
"worker": {
"jobs": 0,
"failed": 0,
"stale": 0,
"heartbeat_age_seconds": null
},
"source_age_seconds": {},
"capture_coverage": {
"window_days": 7,
"started_games": 0,
"with_game_prediction": 0,
"with_prop_capture": 0
},
"unresolved_grades": {
"count": 0,
"oldest_game_date": null,
"after_hours": 6
},
"live_games": 0
}Allowed Leaderboard Types
Player leaderboard types
goals, power_play_points, game_winning_goals, plus_minus, even_strength_points, shots_against, goals_against_average, games_played, goals_against, shots, games_started, short_handed_goals, short_handed_points, faceoff_win_pct, assists, save_pct, power_play_goals, time_on_ice_per_game, wins, ot_losses, overtime_goals, penalty_minutes, saves, points, even_strength_goals, shutouts, shooting_pct, time_on_ice, points_per_game, losses
Team leaderboard types
faceoff_win_percentage, shots_for_per_game, penalty_kill_percentage, goals_against_per_game, games_played, goals_for_per_game, goals_against, points_pct, points, power_play_percentage, shots_against_per_game, goals_for, wins, goal_differential, ot_losses, losses
HTTP Statuses & Missing Data
- 200: JSON data, including empty arrays and unavailable fields when nothing is stored.
- 202: Preview/recap generation already in progress; retry the same request later.
- 400: Invalid parameter, incompatible scope, unsupported vote, or recap before final.
- 401 / 403: Authentication, account access, feature allowance, or administrator requirement is not satisfied.
- 404: Missing game, team, player, or required roster association. Vote aggregates intentionally return an empty object for a missing game.
- 409: Voting closed at puck drop. 500: Server/data request failure.
Shared Radar, account, and chat routes have their own contracts, rather than additional /api/nhl aliases. Administrator routes above do not expose the separate internal editorial/publishing interfaces.
Matches
List of matches for a given date, each with team info, stadium, and primary-vendor odds attached.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD (defaults to today) |
| season | integer | Optional | Defaults to 2026 |
| vendor | string | Optional | Sportsbook vendor (default: fanduel) |
Full match detail β events, lineups, team stats, best players, odds from every vendor, shot map (xG/xGOT), per-minute momentum, and head-to-head history.
Odds
Tournament and group winner futures odds, grouped by market.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| vendor | string | Optional | Sportsbook vendor |
| market_type | string | Optional | e.g. tournament_winner |
Full match odds β 3-way moneyline, spread, and total per vendor, plus exotic markets and their outcomes.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| vendor | string | Optional | Filter to one vendor |
Player prop odds (milestone/over/under) for a single match.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| vendor | string | Optional | Filter to one vendor |
Teams
All teams with their current group-stage standing for the season.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
Team detail β group standing, full roster with aggregated tournament stats, all matches, average team stats, and current manager.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
Players
Search or list players by name, team, or position.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | Optional | Name substring search, min 2 characters |
| team_id | integer | Optional | Filter by team |
| position | string | Optional | Exact match, e.g. Forward |
| season | integer | Optional | Defaults to 2026 |
Player detail (bio, team) plus every match's stat line for the player this season.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
Standings
Group-stage standings grouped by group letter.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
| group | string | Optional | Single letter, e.g. A, filters to one group |
Bracket
Knockout-stage bracket, grouped by round (Round of 32 through Final) in bracket order.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
Leaderboards
Tournament-wide statistical leaderboard for a chosen stat, top 100.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
| stat | string | Optional | goals, assists, xg, rating, shots, or saves (default: goals) |
Signals
Six pre-match betting-edge signals per upcoming match β xG Edge, Possession, Set Piece, Press Intensity, Form, and Late Momentum β each with a winner, tag, and implication.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
| date | string | Optional | YYYY-MM-DD (defaults to today) |
Key Suspects
Weighted 0β100 Suspicion Score per player prop for a match, with an evidence breakdown, trend, and sparkline.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
| vendor | string | Optional | Filter to one vendor |
Value Plays
Player prop value plays for upcoming matches β players whose season hit rate/average beats the prop line, sorted by ratio.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| propType | string | Required | anytime_goal, first_goal, shots_on_target, assists, goal_or_assist, saves, or tackles |
| season | integer | Optional | Defaults to 2026 |
| vendor | string | Optional | Filter to one vendor |
Streak Board
Players currently on active consecutive-match statistical streaks (minimum length 2).
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
| streakType | string | Optional | goal, shot, rating, or clean_sheet (omit for all four) |
Expected Lineup
Projected starting XI and bench for both teams based on this season's formation and starter frequency, with tournament-average stats per player.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
Hit Rate
For all completed matches on a target date, compares each player prop line to the actual result and returns HIT/MISS per player.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD, defaults to most recent completed date |
| vendor | string | Optional | Sportsbook vendor (default: fanduel) |
| season | integer | Optional | Defaults to 2026 |
Case Preview
Pre-match context for both teams β last-5-match form, season momentum profile, top-3 key players per side, and head-to-head history.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to 2026 |
Games
Today's NCAAB games with team info, scores, status, and game quality ratings.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD (defaults to today) |
| tzOffsetMin | integer | Optional | Timezone offset in minutes, β720 to 720 |
Spreads, moneylines, and totals for NCAAB games.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| gameIds | string | Required | Comma-separated NCAAB game IDs, max 100 |
| vendor | string | Required | Sportsbook vendor name |
Starting lineups, bench players, injuries, and team standings for a specific game.
A single player's box score for a specific game.
Play-by-play data organized by half.
Key Suspects analysis for NCAAB β college players likely to exceed projections based on matchup and usage context.
Players
Player profile (name, position, height, weight, team, jersey number).
List of seasons the player has box-score data for.
Game-by-game statistics for a NCAAB season.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current calendar year |
Season averages for a NCAAB player.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current calendar year |
A player's last-10-game averages compared against an opponent's defensive profile, with generated insight strings and an overall verdict.
Teams
NCAAB team schedule with results and upcoming games.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to current calendar year |
Full team roster with player positions, jersey numbers, and current-season per-game averages.
Team's individual per-game box scores for a season, newest first.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to the current NCAAB season-start year |
Team statistics including PPG, PAPG, pace, and offensive/defensive breakdowns.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Optional | Defaults to the current NCAAB season-start year |
Leaderboards
Statistical leaderboards for NCAAB β live, daily, or season modes.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| mode | string | Optional | today, daily, or season (default: today) |
| limit | integer | Optional | Max results, 5β50 (default: 20) |
| seasonYear | integer | Optional | Season year for season mode |
| date | string | Optional | YYYY-MM-DD for daily mode |
| onlyTodayPlayers | boolean | Optional | Season mode β restrict to players whose team plays on date |
System & Utilities
System health check. Reports database connectivity, Redis status, and feature store pipeline freshness (gameFeatures and playerFeatures staleness flags).
Your current rate-limit usage and remaining quota for the active window.
Current authentication status β tier, subscription state, and API key validity.
Error Handling
The API uses standard HTTP status codes and returns errors in JSON format:
HTTP Status Codes
| Status Code | Meaning | Description |
|---|---|---|
| 200 | OK | Request successful |
| 400 | Bad Request | Invalid request parameters |
| 401 | Unauthorized | Missing or invalid API key |
| 403 | Forbidden | Insufficient subscription tier |
| 404 | Not Found | Resource doesn't exist |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server error |
Error Response Format
{
"error": "Invalid API key",
"statusCode": 401,
"timestamp": "2026-02-09T12:34:56.789Z"
}
Code Examples
JavaScript (Node.js)
const fetch = require('node-fetch');
const API_KEY = process.env.SPORTSFBI_API_KEY;
const BASE_URL = 'https://app.sportsfbi.com/api';
async function getTodayGames() {
const response = await fetch(`${BASE_URL}/nba/games/today`, {
headers: {
'Authorization': `Bearer ${API_KEY}`
}
});
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
return await response.json();
}
getTodayGames()
.then(games => console.log(games))
.catch(err => console.error(err));
Python
import requests
import os
API_KEY = os.environ['SPORTSFBI_API_KEY']
BASE_URL = 'https://app.sportsfbi.com/api'
def get_today_games():
headers = {
'Authorization': f'Bearer {API_KEY}'
}
response = requests.get(
f'{BASE_URL}/nba/games/today',
headers=headers
)
response.raise_for_status()
return response.json()
try:
games = get_today_games()
print(games)
except requests.exceptions.RequestException as e:
print(f'Error: {e}')
cURL
# Get today's games
curl -X GET "https://app.sportsfbi.com/api/nba/games/today" \
-H "Authorization: Bearer YOUR_API_KEY"
# Get player profile
curl -X GET "https://app.sportsfbi.com/api/nba/players/123" \
-H "Authorization: Bearer YOUR_API_KEY"
# Get leaderboard
curl -X GET "https://app.sportsfbi.com/api/nba/leaderboard/pts?mode=today&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"
# Get matchup analysis
curl -X GET "https://app.sportsfbi.com/api/nba/players/123/matchup-analysis/LAL" \
-H "Authorization: Bearer YOUR_API_KEY"
Response Example
{
"success": true,
"data": [
{
"id": 1234,
"nbaGameId": "0022600789",
"status": "live",
"homeTeam": {
"id": 5,
"name": "Lakers",
"abbreviation": "LAL",
"score": 98
},
"awayTeam": {
"id": 10,
"name": "Warriors",
"abbreviation": "GSW",
"score": 95
},
"period": 3,
"gameClock": "5:23",
"startTime": "2026-02-09T19:30:00Z"
}
]
}
Support & Resources
Need help with the API? We're here to assist:
- API Keys: Manage your API keys
- Settings: View subscription and rate limits
- Upgrade: Increase your rate limits
π§ Contact Support
For API-specific questions or issues, please contact our support team with your API key ID (not the full key) and a description of your issue.