baseball data hub

The Baseball API for developers ballers.

MLB data behind one API: live scores with inning-by-inning linescores, run-line and totals odds, confirmed starting pitchers, and per-player box scores. Pitch-level data (exit velocity, barrel classification, expected wOBA) is loaded and not yet served.

Aggregate sport hub · choose a league before league-specific detail calls

250 req/day free (500 with GitHub). No credit card.

MLB · 2026 season · regular season + postseason

The MLB API page goes deeper on lineups, at-bat events, and the pitch-level dataset. For pitch velocity, exit velocity and expected outcomes, see /mlb-api#pitch-data. See the MLB API →

Featured league example · not aggregate coverage

MLB

single-league example · response shape, not coverage

1inning · status
2home · away
3linescore[]
Open the MLB authority →

Leagues in this sport

37
seasons in the archive
85,849 finished games, back to 1990

How far back the Major League Baseball archive goes

37 seasons are on record, back to 1990 — 85,849 finished games you can query today. One route serves the full span. These figures are measured from the customer-facing routes listed below, so this page cannot silently drift from the product.

ArchiveRouteSeasonsReaches back toFinished games
Major League Baseball/v1/matches371990 – 202685,849

What each plan reaches

Edge & Pro
all 37 seasons
Solo & Trio
5 seasons
Free
the current season

Edge and Pro reach everything listed above. Solo and Trio reach five seasons. Free covers the current season.

Unified schema

One baseball envelope. League context stays explicit.

Canonical IDs, league keys, status and timestamps travel with the row. The hub describes shared fields; each league authority documents its own depth.

baseball
sport
selected key
league
canonical
id
served
status

No featured-league field is promoted to a sport-wide guarantee.

Event surface

League-native events inside the baseball hub.

Event granularity differs by competition. Discover a match and league first, then use that authority’s event contract rather than assuming one featured feed applies everywhere.

  1. 1/v1/matches/:id/events?sport=baseballHome runs, strikeouts, walks, RBIsfree
  2. 2/v1/stored/matches/:id/lineupsStarting lineups + pitcher matchupsedge
  3. 3/v1/players/:id/stats?sport=baseballPer-season player statsfree

What you can build

7 baseball products from the connected sport surface.

Each concept points to a real league authority, guide or reference. The phone mockups are product patterns, not claims that every league supplies identical depth.

MLB odds: live lines and the archive: MLB Odds API: Live and Historical.

League directory

Choose the baseball competition you are actually building.

League pages own seasons, participants, examples and measured depth. This hub owns discovery across them.

League authorityRoleNext step

Coverage strength

What the aggregate baseball surface connects.

Counts below describe published route rows on this hub, not a promise that every league fills every field.

0

League authorities

7

Published routes

7

Build patterns

6

FAQ answers

Endpoints

On the gateway at api.bigballsdata.com. Authenticate with the bearer token from /dashboard/keys.

MethodPathReturnsPlan
GET/v1/matches?sport=baseball&league=mlbLive + scheduled MLB games with inning linescoresFree
GET/v1/standings?sport=baseball&league=mlbDivision + league standings (W-L, GB, win %)Free
GET/v1/matches/:id/odds?sport=baseballMoneyline, run line, totals across 16+ booksEdge
GET/v1/matches/:id/events?sport=baseballHome runs, strikeouts, walks, RBIsFree
GET/v1/stored/matches/:id/lineupsStarting lineups + pitcher matchupsEdge
GET/v1/players/:id/stats?sport=baseballPer-season player statsFree
GET/v1/teams/:id/formRecent W/L formFree
GET/v1/injuriesInjury reports (coming soon)Coming soon

What you get, by plan

One row per capability, not per field per endpoint. Season spans are counted from rows that are actually populated, and each capability names the simplest endpoint that returns it.

Offensive stats

CapabilityFreeSoloTrioEdgeProEndpoint
At-bats—PENDINGPENDINGPENDINGPENDING/v1/scores
Caught stealing—PENDINGPENDINGPENDINGPENDING/v1/scores
Doubles—PENDINGPENDINGPENDINGPENDING/v1/scores
Grounded into double play—PENDINGPENDINGPENDINGPENDING/v1/scores
Hit by pitch—PENDINGPENDINGPENDINGPENDING/v1/scores
Hits—PENDINGPENDINGPENDINGPENDING/v1/scores
Home runs—PENDINGPENDINGPENDINGPENDING/v1/scores
Intentional walks—PENDINGPENDINGPENDINGPENDING/v1/scores
Plate appearances—PENDINGPENDINGPENDINGPENDING/v1/scores
Runs—PENDINGPENDINGPENDINGPENDING/v1/scores
Runs batted in—PENDINGPENDINGPENDINGPENDING/v1/scores
Sacrifice flies—PENDINGPENDINGPENDINGPENDING/v1/scores
Sacrifice hits—PENDINGPENDINGPENDINGPENDING/v1/scores
Stolen bases—PENDINGPENDINGPENDINGPENDING/v1/scores
Strikeouts—PENDINGPENDINGPENDINGPENDING/v1/scores
Total bases—PENDINGPENDINGPENDINGPENDING/v1/scores
Triples—PENDINGPENDINGPENDINGPENDING/v1/scores
Walks—PENDINGPENDINGPENDINGPENDING/v1/scores

Defensive stats

CapabilityFreeSoloTrioEdgeProEndpoint
Batters faced—PENDINGPENDINGPENDINGPENDING/v1/scores
Batters hit by pitch (pitching)—PENDINGPENDINGPENDINGPENDING/v1/scores
Earned runs—PENDINGPENDINGPENDINGPENDING/v1/scores
Games started—PENDINGPENDINGPENDINGPENDING/v1/scores
Hits allowed—PENDINGPENDINGPENDINGPENDING/v1/scores
Home runs allowed—PENDINGPENDINGPENDINGPENDING/v1/scores
Losses—PENDINGPENDINGPENDINGPENDING/v1/scores
Outs recorded—PENDINGPENDINGPENDINGPENDING/v1/scores
Runs allowed—PENDINGPENDINGPENDINGPENDING/v1/scores
Saves—PENDINGPENDINGPENDINGPENDING/v1/scores
Strikeouts (pitching)—PENDINGPENDINGPENDINGPENDING/v1/scores
Walks allowed—PENDINGPENDINGPENDINGPENDING/v1/scores
Wild pitches—PENDINGPENDINGPENDINGPENDING/v1/scores
Wins—PENDINGPENDINGPENDINGPENDING/v1/scores

Ratings and derived intelligence

CapabilityFreeSoloTrioEdgeProEndpoint
Current Elo rating—PENDINGPENDINGPENDINGPENDING/v1/teams/{id}/elo
Elo rating history—PENDINGPENDINGPENDINGPENDING/v1/teams/{id}/elo

Measured against production on 2026-09-13. A capability appears here only when it has rows, an endpoint that returns it, and a source we may both serve and quote.

Stats included

Every baseball stat field the API returns today — 64 in total, grouped by how they are produced. Each group carries its own freshness, because a sport is rarely uniformly current.

Per-game player stats

Post-game

Written after the game ends — not a live in-game feed. Last ingested 2026-09-16.

Endpoint
/v1/players/:id/stats
Last updated
2026-09-16

Fields (59)

ERA, RBIs, Air Outs, At Bats, Batting Average, Balks, Batters Faced, Blown Saves, Caught Stealing, Doubles, Earned Runs, Errors, Fielding Assists, Fielding Chances, Fielding %, Fly Outs, Innings Pitched, Games Started, Ground Outs, Grounded Into Double Play, Hit Batsmen, Hit by Pitch, Hits, Hits/At Bats, Hits Allowed, Holds, Home Runs, Home Runs Allowed, Inherited Runners, Inherited Runners Scored, Intentional Walks, Left on Base, Line Outs, Losses, On-Base %, Outs Recorded, Pitch Count, Pitches, Pitches/Strikes, Plate Appearances, Pop Outs, Putouts, RBI, Runs, Runs Allowed, Sacrifice Flies, Sacrifice Hits, Saves (pitching), Slugging %, Stolen Bases, Strikeouts, Strikeouts Pitching, Strikes, Total Bases, Triples, Walks, Walks Allowed, Wild Pitches, Wins

Team stats (per game)

Post-game

Written after the game ends — not a live in-game feed. Last ingested 2026-09-16.

Endpoint
/v1/matches/:id/statistics
Last updated
2026-09-16

Fields (5)

Batting, Fielding, Pitching, Records, Score

Not included

  • Not shown here — pitch_level: pitch-level tracking data with no route serving it.

Missing a stat?

We build what people actually ask for. If a field you need is not on this page, tell us — requests are how we decide what to add next.

Name the field or the endpoint shape. Specifics help more than categories.

Goes straight to the team as a product signal. No newsletter, no account, nothing else done with your address.

Player availability

baseball availability is league-scoped.

Injury, lineup and participant availability vary by league and season. Missing rows stay missing; the hub does not borrow another league’s records.

Nullable by design

Check the selected league authority and response timestamp before presenting a status as current.

Next up

Schedules across baseball competitions.

Each league publishes its own schedule and its own season boundaries. Call the league you selected and read the status and kickoff on the rows it returns, rather than inferring a season from this hub.

DiscoverGET /v1/leagues

Choose a real league key

Schedule/v1/matches?sport=baseball&league=mlb

Keep league + season

DetailGET /v1/matches/{id}

Traverse canonical IDs

From response to product

A featured league example, rendered and raw.

This is visibly scoped to MLB, single-league example · response shape, not coverage; it demonstrates the shared envelope without claiming that league represents all baseball.

Featured league example

MLB

single-league example · response shape, not coverage

inning · statushome · awaylinescore[]
{
  "data": [
    {
      "id": "canonical-id-from-response",
      "sport": "baseball",
      "league": "selected-league-key",
      "status": "finished",
      "home": {
        "name": "Home participant"
      },
      "away": {
        "name": "Away participant"
      },
      "score": {
        "home": null,
        "away": null
      }
    }
  ],
  "meta": {
    "example_scope": "MLB · single-league example · response shape, not coverage",
    "note": "Shape example; request the API for current values."
  }
}

baseball resources

Docs, comparisons and build guides.

Every card is a real destination. League authorities remain separate from supporting product and documentation routes.

Real API example

Start at aggregate baseball discovery.

The request deliberately omits a featured league when the route supports sport-wide discovery. Select a returned league key before league-specific calls.

curl -H "Authorization: Bearer $BBS_API_KEY" "https://api.bigballsdata.com/v1/matches?sport=baseball&league=mlb"
{
  "data": [
    {
      "id": "canonical-id-from-response",
      "sport": "baseball",
      "league": "selected-league-key",
      "status": "finished",
      "home": {
        "name": "Home participant"
      },
      "away": {
        "name": "Away participant"
      },
      "score": {
        "home": null,
        "away": null
      }
    }
  ],
  "meta": {
    "example_scope": "MLB · single-league example · response shape, not coverage",
    "note": "Shape example; request the API for current values."
  }
}

Integrate in a few lines

Node.js, @bigballsdata/sdktypescript
import { BigBallSportsClient } from '@bigballsdata/sdk';

const client = new BigBallSportsClient(process.env.BBS_API_KEY!);

const games = await client.matches.list({ sport: 'baseball', league: 'mlb' });
for (const g of games.data) {
  // home and away are objects, not strings.
  console.log(g.home.name, 'vs', g.away.name, '-', g.status);
}

MCP

Connect an agent. Choose scope first.

An agent should discover baseball leagues, select one explicitly, then traverse matches and players by returned canonical IDs.

1get_leaguessport: baseball
2get_matchesleague: selected key
3get_match_detailsmatch_id: returned UUID

Data freshness

Freshness belongs to the selected league and dataset.

The hub never turns a single-league example into a current sport-wide claim, and it states no season of its own.

Scoped

Schedules

Current when populated

Source: League response

Scoped

Scores

Event-driven

Source: Match response

Scoped

Stats

Category-specific

Source: Dataset response

Scoped

Example

single-league example · response shape, not coverage

Source: Static label

Plan decision

Choose by endpoint, not by the hub headline.

Each row preserves its league or sport scope and resolves against the endpoint plan registry when that route has a canonical entry.

EndpointScopeMinimum plan
/v1/matches?sport=baseball&league=mlbLeague-specificfree
/v1/standings?sport=baseball&league=mlbLeague-specificfree
/v1/matches/:id/odds?sport=baseballSport/sharededge
/v1/matches/:id/events?sport=baseballSport/sharedfree
/v1/stored/matches/:id/lineupsSport/sharededge
/v1/players/:id/stats?sport=baseballSport/sharedfree
/v1/teams/:id/formSport/sharedfree
/v1/injuriesSport/sharedComing soon

Founder pricing

Start with baseball. Add depth as the product grows.

Prices and included dimensions come from the shared billing manifest; league coverage remains documented on each authority page.

Free

$0
  • ✓ 1 sport
  • ✓ 250 requests / day (500 with GitHub)
  • ✓ Current season
  • ✓ Scores, schedules, fixtures
Get a key

Solo

$19per month
  • ✓ Everything in Free, plus
  • ✓ 1 sport
  • ✓ 10,000 requests / day
  • ✓ Up to 5 seasons
Choose Solo

Trio

$49per month
  • ✓ Everything in Solo, plus
  • ✓ 3 sports
  • ✓ 25,000 requests / day
  • ✓ Up to 5 seasons
Choose Trio

Edge

$149per month
  • ✓ Everything in Trio, plus
  • ✓ All sports
  • ✓ 100,000 requests / day
  • ✓ All available history
Choose Edge

Pro

$299per month
  • ✓ Everything in Edge, plus
  • ✓ All sports
  • ✓ 200,000 requests / day
  • ✓ All available history
Choose Pro

Start on the free tier

100 requests per minute and 250 per day, free — the highest per-minute burst of any free sports API we checked. Burst is what matters when something asks several questions in a row and waits on each answer.

  • Every sport and league we cover — the paid tiers add history depth and premium fields, not more leagues.
  • Calls are counted one for one — no credit weighting, no markets-times-regions arithmetic.
  • Link GitHub and the daily cap goes to 500.
  • No credit card.
Get a key →

Or ask your AI tool directly

Connect your account to Claude, ChatGPT, Cursor, Perplexity or any other MCP-compatible tool and ask for baseball data in conversation — scores, standings, player stats and Elo ratings, with no API key to paste and no code to write. Your plan and limits carry over exactly as they do here.

Connect your AI tool →

Free covers a real app. Scale when you need to.

250 req/day free (500 with GitHub). Production starts at $49/mo. Live WebSocket push on Pro+.

Frequently asked

Answers before you choose a league.

Is there a free baseball API?

Yes. It covers scores, inning linescores, standings, lineups, and box-score stats. There is a free tier; pricing lists what each plan covers. Odds require the Edge plan ($149/mo) or higher. Injury reports are coming soon. Free keys get 250 req/day (500 with GitHub). No credit card.

What is the difference between the Baseball API and the MLB API?

Same data, same endpoints — this page is the broad entry point, and /mlb-api is the league-specific deep dive with field-level docs on lineups, at-bat events, and the pitch-level dataset. Every league we cover is baseball = MLB today, so both pages serve the identical /v1/matches?sport=baseball surface.

Are starting pitchers available in advance?

Yes. Probable pitchers surface in the lineups endpoint as soon as MLB confirms them, typically the morning of the game; final lineups confirm closer to first pitch.

Can I track at-bat outcomes?

The events endpoint surfaces at-bat-level outcomes (home runs, strikeouts, walks, RBIs) and is live on the free tier. For pitch-by-pitch analytics, 3,009,091 pitches are loaded and not yet served — see the next answer and /mlb-api#pitch-data.

Can I get pitch-level data — exit velocity, xwOBA, barrel rate?

3,009,091 pitches across the 2023, 2024, 2025 and 2026 seasons are loaded, measured 2026-10-14: pitch velocity and spin, exit velocity, launch angle, barrel classification, expected weighted on-base average, bat speed and swing length. No public endpoint reads it yet. /mlb-api#pitch-data lists every field with its measured row count.

How fast do live MLB scores update?

REST cache window is 15 seconds during live games (~200ms typical round trip). WebSocket push is on the Pro plan.

Get an API key in 30 seconds