NAV
shell javascript python

College Baseball API

Welcome to the BALLDONTLIE College Baseball API, the best college baseball API on the planet. An API key is required. You can obtain an API key by creating a free account on our website. Read the authentication section to learn how to use the API key.

Take a look at our other APIs.

Join us on discord.

AI-Powered Integration

Using the OpenAPI Specification with AI

Our complete OpenAPI specification allows AI assistants to automatically understand and interact with our API. Simply share the spec URL with your AI assistant and describe what you want to build—the AI will handle the technical implementation.

Getting Started with AI:

  1. Copy this URL: https://www.balldontlie.io/openapi.yml
  2. Share it with your preferred AI assistant (ChatGPT, Claude, Gemini, etc.)
  3. Tell the AI what you want to build (e.g., "Create a dashboard showing today's college baseball games")
  4. The AI will read the OpenAPI spec and write the code for you

Example prompts to try:

This makes it incredibly easy for non-technical users, analysts, and researchers to leverage our sports data without needing to learn programming from scratch.

Google Sheets Integration

Our Google Sheets integration lets you access all the same data available through our API using simple spreadsheet formulas. Perfect for college baseball tracking and analysis.

Quick Start:

  1. Get your API key from app.balldontlie.io
  2. Copy our Google Sheets script
  3. Paste it into your Google Sheet (Extensions > Apps Script)
  4. Start using functions in your cells

For full setup instructions and the complete list of 150+ functions, see our Google Sheets Integration Guide.

Data Availability

Account Tiers

There are three different account tiers which provide you access to different types of data. Visit our website to create an account for free.

Paid tiers do not apply across sports. The tier you purchase for College Baseball will not automatically be applied to other sports. You can purchase the ALL-ACCESS ($299.99/mo) tier to get access to every endpoint for every sport.

Read the table below to see the breakdown.

Endpoint Free ALL-STAR GOAT
Conferences Yes Yes Yes
Teams Yes Yes Yes
Players Yes Yes Yes
Standings Yes Yes Yes
Games No Yes Yes
Rankings No Yes Yes
Active Players No Yes Yes
Plays No Yes Yes
Player Batting Stats No No Yes
Player Pitching Stats No No Yes
Team Batting Stats No No Yes
Team Pitching Stats No No Yes
Team Fielding Stats No No Yes
Player Season Batting Stats No No Yes
Player Season Pitching Stats No No Yes
Team Season Stats No No Yes
Betting Odds No No Yes

The feature breakdown per tier is shown in the table below.

Tier Requests / Min $USD / mo.
GOAT 600 39.99
ALL-STAR 60 9.99
Free 5 0

Authentication

To authorize, use this code:

curl "api_endpoint_here" -H "Authorization: YOUR_API_KEY"
import { BalldontlieAPI } from "@balldontlie/sdk";

const api = new BalldontlieAPI({ apiKey: "YOUR_API_KEY" });
from balldontlie import BalldontlieAPI

api = BalldontlieAPI(api_key="YOUR_API_KEY")

Make sure to replace YOUR_API_KEY with your API key.

BALLDONTLIE uses API keys to allow access to the API. You can obtain an API key by creating a free account at our website

We expect the API key to be included in all API requests to the server in a header that looks like the following:

Authorization: YOUR_API_KEY

Pagination

This API uses cursor based pagination rather than limit/offset. Endpoints that support pagination will send back responses with a meta key that looks like what is displayed on the right.

{
  "meta": {
    "next_cursor": 90,
    "per_page": 25
  }
}

You can use per_page to specify the maximum number of results. It defaults to 25 and doesn't allow values larger than 100.

You can use next_cursor to get the next page of results. Specify it in the request parameters like this: ?cursor=NEXT_CURSOR.

Errors

The API uses the following error codes:

Error Code Meaning
401 Unauthorized - You either need an API key or your account tier does not have access to the endpoint.
400 Bad Request -- The request is invalid. The request parameters are probably incorrect.
404 Not Found -- The specified resource could not be found.
406 Not Acceptable -- You requested a format that isn't json.
429 Too Many Requests -- You're rate limited.
500 Internal Server Error -- We had a problem with our server. Try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.

Conferences

Get All Conferences

curl "https://api.balldontlie.io/cbb/v1/conferences" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/conferences", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/conferences",
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "id": 1,
      "name": "American Conference",
      "short_name": "American"
    },
    {
      "id": 2,
      "name": "Atlantic Coast Conference",
      "short_name": "ACC"
    },
    {
      "id": 12,
      "name": "Southeastern Conference",
      "short_name": "SEC"
    }
  ]
}

This endpoint retrieves all conferences.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/conferences

Query Parameters

This endpoint does not accept any query parameters.

Teams

Get All Teams

curl "https://api.balldontlie.io/cbb/v1/teams" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/teams", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/teams",
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "id": 1,
      "conference_id": 1,
      "name": "Roadrunners",
      "full_name": "UTSA Roadrunners",
      "college": "UTSA",
      "abbreviation": "UTSA"
    },
    {
      "id": 110,
      "conference_id": 12,
      "name": "Longhorns",
      "full_name": "Texas Longhorns",
      "college": "Texas",
      "abbreviation": "TEX"
    }
  ]
}

This endpoint retrieves all teams.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/teams

Query Parameters

Parameter Required Description
conference_id false Filter teams by conference ID

Players

Get All Players

curl "https://api.balldontlie.io/cbb/v1/players?per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/players?per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/players",
    params={"per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "id": 1,
      "first_name": "Mark",
      "last_name": "Nowak",
      "height": null,
      "weight": null,
      "bats": null,
      "throws": null,
      "team": {
        "id": 157,
        "conference_id": null,
        "name": "Norse",
        "full_name": "Northern Kentucky Norse",
        "college": "Northern Kentucky",
        "abbreviation": "NKU"
      }
    }
  ],
  "meta": { "next_cursor": 25, "per_page": 25 }
}

This endpoint retrieves all players.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/players

Query Parameters

Parameter Required Description
search false Search players by name
team_ids[] false Filter by team IDs. Use bracket notation (e.g. team_ids[]=1&team_ids[]=2)
player_ids[] false Filter by player IDs. Use bracket notation
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Standings

Get Standings

curl "https://api.balldontlie.io/cbb/v1/standings?season=2025" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/standings?season=2025", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/standings",
    params={"season": 2025},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "team": {
        "id": 14,
        "conference_id": 2,
        "name": "Tar Heels",
        "full_name": "North Carolina Tar Heels",
        "college": "North Carolina",
        "abbreviation": "UNC"
      },
      "conference": {
        "id": 2,
        "name": "Atlantic Coast Conference",
        "short_name": "ACC"
      },
      "season": 2025,
      "wins": 45,
      "losses": 13,
      "ties": null,
      "win_percentage": 0.775862068,
      "runs_for": 450,
      "runs_against": 230
    }
  ]
}

This endpoint retrieves standings for a given season.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/standings

Query Parameters

Parameter Required Description
season true The season year (e.g. 2025)
conference_id false Filter standings by conference ID

Games

Get All Games

curl "https://api.balldontlie.io/cbb/v1/games?seasons[]=2025&per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/games?seasons[]=2025&per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/games",
    params={"seasons[]": 2025, "per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "id": 11736,
      "date": "2025-02-15T00:00:00.000Z",
      "season": 2025,
      "status": "post",
      "period_detail": "Final",
      "period": 9,
      "home_team": {
        "id": 111,
        "conference_id": 12,
        "name": "Aggies",
        "full_name": "Texas A&M Aggies",
        "college": "Texas A&M",
        "abbreviation": "TA&M"
      },
      "visitor_team": {
        "id": 86,
        "conference_id": 8,
        "name": "Phoenix",
        "full_name": "Elon Phoenix",
        "college": "Elon",
        "abbreviation": "ELON"
      },
      "home_score": 4,
      "away_score": 2,
      "home_hits": 5,
      "away_hits": 5,
      "home_errors": 2,
      "away_errors": 1,
      "home_linescores": [0, 0, 0, 0, 0, 3, 0, 1],
      "away_linescores": [0, 0, 0, 0, 0, 2, 0, 0, 0]
    }
  ],
  "meta": { "next_cursor": 11737, "per_page": 25 }
}

This endpoint retrieves all games.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/games

Query Parameters

Parameter Required Description
dates[] false Filter by dates (ISO 8601 format). Use bracket notation (e.g. dates[]=2025-02-15)
seasons[] false Filter by seasons. Use bracket notation (e.g. seasons[]=2025)
team_ids[] false Filter by team IDs. Use bracket notation
start_date false Filter games on or after this date (ISO 8601)
end_date false Filter games on or before this date (ISO 8601)
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Rankings

Get Rankings

curl "https://api.balldontlie.io/cbb/v1/rankings" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/rankings", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/rankings",
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "team": {
        "id": 38,
        "conference_id": 4,
        "name": "Bruins",
        "full_name": "UCLA Bruins",
        "college": "UCLA",
        "abbreviation": "UCLA"
      },
      "rank": 1,
      "trend": "-"
    },
    {
      "team": {
        "id": 113,
        "conference_id": 12,
        "name": "Tigers",
        "full_name": "LSU Tigers",
        "college": "LSU",
        "abbreviation": "LSU"
      },
      "rank": 2,
      "trend": "-"
    },
    {
      "team": {
        "id": 110,
        "conference_id": 12,
        "name": "Longhorns",
        "full_name": "Texas Longhorns",
        "college": "Texas",
        "abbreviation": "TEX"
      },
      "rank": 3,
      "trend": "-"
    }
  ]
}

Returns the latest D1Baseball Top 25 rankings.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/rankings

Query Parameters

This endpoint does not accept any query parameters.

Active Players

Get Active Players

curl "https://api.balldontlie.io/cbb/v1/players/active?per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/players/active?per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/players/active",
    params={"per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "id": 1,
      "first_name": "Mark",
      "last_name": "Nowak",
      "height": null,
      "weight": null,
      "bats": null,
      "throws": null,
      "team": {
        "id": 157,
        "conference_id": null,
        "name": "Norse",
        "full_name": "Northern Kentucky Norse",
        "college": "Northern Kentucky",
        "abbreviation": "NKU"
      }
    }
  ],
  "meta": { "next_cursor": 25, "per_page": 25 }
}

This endpoint retrieves all active players. Active players are those currently on a team roster.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/players/active

Query Parameters

Parameter Required Description
search false Search players by name
team_ids[] false Filter by team IDs. Use bracket notation
player_ids[] false Filter by player IDs. Use bracket notation
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Plays

Get Plays

curl "https://api.balldontlie.io/cbb/v1/plays?game_id=11736" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/plays?game_id=11736", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/plays",
    params={"game_id": 11736},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "game_id": 11736,
      "order": 1,
      "type": "Start Inning",
      "text": "Top of the 3rd inning",
      "home_score": 0,
      "away_score": 0,
      "period": 3,
      "at_bat_id": "4017500240401",
      "pitch_count": "{\"balls\":0,\"strikes\":0}",
      "outs": 0,
      "scoring_play": false,
      "score_value": null,
      "team": {
        "id": 86,
        "conference_id": 8,
        "name": "Phoenix",
        "full_name": "Elon Phoenix",
        "college": "Elon",
        "abbreviation": "ELON"
      }
    }
  ]
}

This endpoint retrieves all plays for a specific game.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/plays

Query Parameters

Parameter Required Description
game_id true The ID of the game

Player Batting Stats

Get Player Batting Stats

curl "https://api.balldontlie.io/cbb/v1/player_batting_stats?seasons[]=2025&per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/player_batting_stats?seasons[]=2025&per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/player_batting_stats",
    params={"seasons[]": 2025, "per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "player": {
        "id": 18569,
        "first_name": "Johnny",
        "last_name": "Knox",
        "height": null,
        "weight": null,
        "bats": null,
        "throws": null
      },
      "team": {
        "id": 159,
        "conference_id": null,
        "name": "Bobcats",
        "full_name": "Quinnipiac Bobcats",
        "college": "Quinnipiac",
        "abbreviation": "QUIN"
      },
      "game": {
        "id": 11745,
        "date": "2025-02-14T17:00:00.000Z",
        "season": 2025
      },
      "starter": true,
      "bat_order": 1,
      "at_bats": 3,
      "runs": 1,
      "hits": 1,
      "rbi": 0,
      "home_runs": 0,
      "walks": 1,
      "strikeouts": 0,
      "pitches_seen": 0,
      "avg": 0.333,
      "obp": 0.5,
      "slg": 1
    }
  ],
  "meta": { "next_cursor": 3559, "per_page": 25 }
}

This endpoint retrieves per-game batting stats for individual players.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/player_batting_stats

Query Parameters

Parameter Required Description
game_ids[] false Filter by game IDs. Use bracket notation
dates[] false Filter by dates (ISO 8601 format). Use bracket notation
seasons[] false Filter by seasons. Use bracket notation (e.g. seasons[]=2025)
player_ids[] false Filter by player IDs. Use bracket notation
team_ids[] false Filter by team IDs. Use bracket notation
start_date false Filter stats on or after this date (ISO 8601)
end_date false Filter stats on or before this date (ISO 8601)
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Player Pitching Stats

Get Player Pitching Stats

curl "https://api.balldontlie.io/cbb/v1/player_pitching_stats?seasons[]=2025&per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/player_pitching_stats?seasons[]=2025&per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/player_pitching_stats",
    params={"seasons[]": 2025, "per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "player": {
        "id": 18578,
        "first_name": "Josh",
        "last_name": "Lajoie",
        "height": null,
        "weight": null,
        "bats": null,
        "throws": null
      },
      "team": {
        "id": 159,
        "conference_id": null,
        "name": "Bobcats",
        "full_name": "Quinnipiac Bobcats",
        "college": "Quinnipiac",
        "abbreviation": "QUIN"
      },
      "game": {
        "id": 11745,
        "date": "2025-02-14T17:00:00.000Z",
        "season": 2025
      },
      "starter": true,
      "innings_pitched": 2.1,
      "hits_allowed": 2,
      "runs_allowed": 6,
      "earned_runs": 6,
      "walks": 5,
      "strikeouts": 1,
      "home_runs_allowed": 0,
      "pitch_count": 59,
      "strikes": 27,
      "era": 23.14
    }
  ],
  "meta": { "next_cursor": 1246, "per_page": 25 }
}

This endpoint retrieves per-game pitching stats for individual players.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/player_pitching_stats

Query Parameters

Parameter Required Description
game_ids[] false Filter by game IDs. Use bracket notation
dates[] false Filter by dates (ISO 8601 format). Use bracket notation
seasons[] false Filter by seasons. Use bracket notation (e.g. seasons[]=2025)
player_ids[] false Filter by player IDs. Use bracket notation
team_ids[] false Filter by team IDs. Use bracket notation
start_date false Filter stats on or after this date (ISO 8601)
end_date false Filter stats on or before this date (ISO 8601)
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Team Batting Stats

Get Team Batting Stats

curl "https://api.balldontlie.io/cbb/v1/team_batting_stats?seasons[]=2025&per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/team_batting_stats?seasons[]=2025&per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/team_batting_stats",
    params={"seasons[]": 2025, "per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "team": {
        "id": 116,
        "conference_id": 12,
        "name": "Bulldogs",
        "full_name": "Georgia Bulldogs",
        "college": "Georgia",
        "abbreviation": "UGA"
      },
      "game": {
        "id": 11745,
        "date": "2025-02-14T17:00:00.000Z",
        "season": 2025
      },
      "home_away": "home",
      "at_bats": 27,
      "runs": 9,
      "hits": 4,
      "home_runs": 1,
      "rbi": 8,
      "walks": 8,
      "strikeouts": 4,
      "stolen_bases": 4,
      "caught_stealing": 0,
      "hit_by_pitch": 3,
      "sacrifice_flies": 0,
      "sacrifice_hits": 0,
      "left_on_base": 6,
      "doubles": 3,
      "triples": 0,
      "gidp": 0,
      "total_bases": 10,
      "extra_base_hits": 4,
      "pitches": 0,
      "avg": 0.148,
      "obp": 0.395,
      "slg": 0.37
    }
  ],
  "meta": { "next_cursor": 238, "per_page": 25 }
}

This endpoint retrieves per-game batting stats for teams.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/team_batting_stats

Query Parameters

Parameter Required Description
game_ids[] false Filter by game IDs. Use bracket notation
dates[] false Filter by dates (ISO 8601 format). Use bracket notation
seasons[] false Filter by seasons. Use bracket notation (e.g. seasons[]=2025)
team_ids[] false Filter by team IDs. Use bracket notation
start_date false Filter stats on or after this date (ISO 8601)
end_date false Filter stats on or before this date (ISO 8601)
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Team Pitching Stats

Get Team Pitching Stats

curl "https://api.balldontlie.io/cbb/v1/team_pitching_stats?seasons[]=2025&per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/team_pitching_stats?seasons[]=2025&per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/team_pitching_stats",
    params={"seasons[]": 2025, "per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "team": {
        "id": 116,
        "conference_id": 12,
        "name": "Bulldogs",
        "full_name": "Georgia Bulldogs",
        "college": "Georgia",
        "abbreviation": "UGA"
      },
      "game": {
        "id": 11745,
        "date": "2025-02-14T17:00:00.000Z",
        "season": 2025
      },
      "home_away": "home",
      "innings_pitched": 9,
      "hits_allowed": 4,
      "runs_allowed": 1,
      "earned_runs": 1,
      "walks": 5,
      "strikeouts": 6,
      "home_runs_allowed": 0,
      "stolen_bases_allowed": 0,
      "caught_stealing": 0,
      "sacrifice_flies": 0,
      "sacrifice_hits": 0,
      "doubles_allowed": 0,
      "triples_allowed": 1,
      "rbi": 0,
      "at_bats": 28,
      "saves": 0,
      "save_opportunities": 0,
      "pitch_count": 145,
      "strikes": 91,
      "era": 1,
      "whip": 1,
      "oba": 0.143
    }
  ],
  "meta": { "next_cursor": 238, "per_page": 25 }
}

This endpoint retrieves per-game pitching stats for teams.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/team_pitching_stats

Query Parameters

Parameter Required Description
game_ids[] false Filter by game IDs. Use bracket notation
dates[] false Filter by dates (ISO 8601 format). Use bracket notation
seasons[] false Filter by seasons. Use bracket notation (e.g. seasons[]=2025)
team_ids[] false Filter by team IDs. Use bracket notation
start_date false Filter stats on or after this date (ISO 8601)
end_date false Filter stats on or before this date (ISO 8601)
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Team Fielding Stats

Get Team Fielding Stats

curl "https://api.balldontlie.io/cbb/v1/team_fielding_stats?seasons[]=2025&per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/team_fielding_stats?seasons[]=2025&per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/team_fielding_stats",
    params={"seasons[]": 2025, "per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "team": {
        "id": 116,
        "conference_id": 12,
        "name": "Bulldogs",
        "full_name": "Georgia Bulldogs",
        "college": "Georgia",
        "abbreviation": "UGA"
      },
      "game": {
        "id": 11745,
        "date": "2025-02-14T17:00:00.000Z",
        "season": 2025
      },
      "home_away": "home",
      "errors": 0,
      "putouts": 27,
      "assists": 16,
      "double_plays": 0,
      "passed_balls": 0,
      "outfield_assists": 0
    }
  ],
  "meta": { "next_cursor": 238, "per_page": 25 }
}

This endpoint retrieves per-game fielding stats for teams.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/team_fielding_stats

Query Parameters

Parameter Required Description
game_ids[] false Filter by game IDs. Use bracket notation
dates[] false Filter by dates (ISO 8601 format). Use bracket notation
seasons[] false Filter by seasons. Use bracket notation (e.g. seasons[]=2025)
team_ids[] false Filter by team IDs. Use bracket notation
start_date false Filter stats on or after this date (ISO 8601)
end_date false Filter stats on or before this date (ISO 8601)
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Player Season Batting Stats

Get Player Season Batting Stats

curl "https://api.balldontlie.io/cbb/v1/player_season_batting_stats?season=2025&per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/player_season_batting_stats?season=2025&per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/player_season_batting_stats",
    params={"season": 2025, "per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "player": {
        "id": 16746,
        "first_name": "Austin",
        "last_name": "Smith",
        "height": null,
        "weight": null,
        "bats": null,
        "throws": null,
        "team": {
          "id": 230,
          "conference_id": null,
          "name": "Flames",
          "full_name": "UIC Flames",
          "college": "UIC",
          "abbreviation": "UIC"
        }
      },
      "team": {
        "id": 230,
        "conference_id": null,
        "name": "Flames",
        "full_name": "UIC Flames",
        "college": "UIC",
        "abbreviation": "UIC"
      },
      "season": 2025,
      "games_played": 6,
      "at_bats": 15,
      "runs": 2,
      "hits": 5,
      "home_runs": 0,
      "rbi": 1,
      "walks": 2,
      "strikeouts": 2,
      "avg": 0.333,
      "obp": 0.412,
      "slg": 0.333
    }
  ],
  "meta": { "next_cursor": 4701, "per_page": 25 }
}

This endpoint retrieves season-level batting stats for individual players.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/player_season_batting_stats

Query Parameters

Parameter Required Description
season false Filter by season year (e.g. 2025)
player_ids[] false Filter by player IDs. Use bracket notation
team_ids[] false Filter by team IDs. Use bracket notation
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Player Season Pitching Stats

Get Player Season Pitching Stats

curl "https://api.balldontlie.io/cbb/v1/player_season_pitching_stats?season=2025&per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/player_season_pitching_stats?season=2025&per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/player_season_pitching_stats",
    params={"season": 2025, "per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "player": {
        "id": 12722,
        "first_name": "Edgar",
        "last_name": "Sanchez",
        "height": "67",
        "weight": "175",
        "bats": "L",
        "throws": "R",
        "team": {
          "id": 294,
          "conference_id": null,
          "name": "Panthers",
          "full_name": "Prairie View A&M Panthers",
          "college": "Prairie View A&M",
          "abbreviation": "PV"
        }
      },
      "team": {
        "id": 294,
        "conference_id": null,
        "name": "Panthers",
        "full_name": "Prairie View A&M Panthers",
        "college": "Prairie View A&M",
        "abbreviation": "PV"
      },
      "season": 2025,
      "games_played": 1,
      "innings_pitched": 1,
      "hits_allowed": 0,
      "runs_allowed": 0,
      "earned_runs": 0,
      "walks": 0,
      "strikeouts": 0,
      "home_runs_allowed": 0,
      "pitch_count": 6,
      "strikes": 4,
      "era": 0,
      "whip": 0
    }
  ],
  "meta": { "next_cursor": 3238, "per_page": 25 }
}

This endpoint retrieves season-level pitching stats for individual players.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/player_season_pitching_stats

Query Parameters

Parameter Required Description
season false Filter by season year (e.g. 2025)
player_ids[] false Filter by player IDs. Use bracket notation
team_ids[] false Filter by team IDs. Use bracket notation
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Team Season Stats

Get Team Season Stats

curl "https://api.balldontlie.io/cbb/v1/team_season_stats?season=2025&per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/team_season_stats?season=2025&per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/team_season_stats",
    params={"season": 2025, "per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "team": {
        "id": 112,
        "conference_id": 12,
        "name": "Gators",
        "full_name": "Florida Gators",
        "college": "Florida",
        "abbreviation": "FLA"
      },
      "season": 2025,
      "games_played": 51,
      "batting_avg": 0.293,
      "runs": 382,
      "hits": 488,
      "home_runs": 80,
      "rbi": 350,
      "walks": 231,
      "strikeouts": 417,
      "stolen_bases": 65,
      "obp": 0.379,
      "slg": 0.502,
      "era": 5.33,
      "innings_pitched": 424,
      "hits_allowed": 422,
      "runs_allowed": 283,
      "earned_runs": 251,
      "pitching_walks": 216,
      "pitching_strikeouts": 523,
      "pitching_home_runs": 59,
      "whip": 1.5,
      "errors": 44,
      "double_plays": 0
    }
  ],
  "meta": { "next_cursor": 960, "per_page": 25 }
}

This endpoint retrieves season-level combined batting, pitching, and fielding stats for teams.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/team_season_stats

Query Parameters

Parameter Required Description
season false Filter by season year (e.g. 2025)
team_ids[] false Filter by team IDs. Use bracket notation
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination

Betting Odds

Get Betting Odds

curl "https://api.balldontlie.io/cbb/v1/odds?dates[]=2026-02-28&per_page=25" \
  -H "Authorization: YOUR_API_KEY"
const response = await fetch("https://api.balldontlie.io/cbb/v1/odds?dates[]=2026-02-28&per_page=25", {
  headers: { "Authorization": "YOUR_API_KEY" }
});
const data = await response.json();
import requests

response = requests.get(
    "https://api.balldontlie.io/cbb/v1/odds",
    params={"dates[]": "2026-02-28", "per_page": 25},
    headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()

The above command returns JSON structured like this:

{
  "data": [
    {
      "id": 176718856,
      "game_id": 881,
      "vendor": "betmgm",
      "spread_home_value": "-1.5",
      "spread_home_odds": -120,
      "spread_away_value": "1.5",
      "spread_away_odds": -105,
      "moneyline_home_odds": -235,
      "moneyline_away_odds": 180,
      "total_value": "13.5",
      "total_over_odds": -115,
      "total_under_odds": -115,
      "updated_at": "2026-03-01T19:14:04.090Z"
    }
  ],
  "meta": { "next_cursor": 176719053, "per_page": 25 }
}

This endpoint retrieves betting odds for college baseball games. Either dates[] or game_ids[] is required.

HTTP Request

GET https://api.balldontlie.io/cbb/v1/odds

Query Parameters

Parameter Required Description
dates[] conditional Filter by dates (ISO 8601 format). Either dates or game_ids is required
game_ids[] conditional Filter by game IDs. Either dates or game_ids is required
per_page false Number of results per page (default 25, max 100)
cursor false Cursor for pagination