SERIE A API
Welcome to the BALLDONTLIE SERIE A API. This API contains data from 2010-current. 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:
- Copy this URL:
https://www.balldontlie.io/openapi.yml - Share it with your preferred AI assistant (ChatGPT, Claude, Gemini, etc.)
- Tell the AI what you want to build (e.g., "Create a dashboard showing this week's Serie A matches")
- The AI will read the OpenAPI spec and write the code for you
Example prompts to try:
- "Using the OpenAPI spec at https://www.balldontlie.io/openapi.yml, show me how to get Lautaro Martinez's season stats"
- "Read the BALLDONTLIE OpenAPI spec and create a Python script that fetches this week's Serie A matches"
- "Help me understand the available Serie A endpoints from this OpenAPI spec: https://www.balldontlie.io/openapi.yml"
This makes it incredibly easy for non-technical users, analysts, and researchers to leverage our sports data without needing to learn programming from scratch.
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 Serie A will not automatically be applied to other sports. You can purchase the ALL-ACCESS ($159.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 |
|---|---|---|---|
| Teams | Yes | Yes | Yes |
| Rosters | Yes | Yes | Yes |
| Players | Yes | Yes | Yes |
| Standings | Yes | Yes | Yes |
| Matches | No | Yes | Yes |
| Match Events | No | Yes | Yes |
| Match Lineups | No | Yes | Yes |
| Player Match Stats | No | No | Yes |
| Team Match Stats | No | No | Yes |
| Betting Odds | No | No | Yes |
| Player Props | 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"
const response = await fetch("api_endpoint_here", {
headers: {
"Authorization": "YOUR_API_KEY"
}
});
const data = await response.json();
import requests
response = requests.get(
"api_endpoint_here",
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
Make sure to replace
YOUR_API_KEYwith 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. |
Teams
Get All Teams
curl "https://api.balldontlie.io/seriea/v1/teams" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/teams",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/teams",
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"id": 95,
"name": "Internazionale",
"short_name": "Inter Milan",
"abbreviation": "INT",
"location": "Internazionale"
},
{
"id": 2861,
"name": "AC Milan",
"short_name": "Milan",
"abbreviation": "MIL",
"location": "AC Milan"
},
{
"id": 101,
"name": "Napoli",
"short_name": "Napoli",
"abbreviation": "NAP",
"location": "Napoli"
},
{
"id": 96,
"name": "Juventus",
"short_name": "Juventus",
"abbreviation": "JUV",
"location": "Juventus"
},
...
]
}
This endpoint retrieves all Serie A teams.
HTTP Request
GET https://api.balldontlie.io/seriea/v1/teams
Rosters
Get Team Roster
curl "https://api.balldontlie.io/seriea/v1/rosters?team_id=95" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/rosters?team_id=95",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/rosters",
params={"team_id": 95},
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"team_id": 95,
"player": {
"id": 3087,
"first_name": "Alessandro",
"last_name": "Bastoni",
"display_name": "Alessandro Bastoni",
"short_name": "A Bastoni",
"date_of_birth": "1999-04-13",
"age": 26,
"height": "6' 3\"",
"weight": "163 lbs",
"citizenship": "Italy"
},
"season": 2025,
"jersey_number": "95",
"position": "Defender",
"position_abbreviation": "D",
"is_active": true
},
{
"team_id": 95,
"player": {
"id": 3097,
"first_name": "Denzel",
"last_name": "Dumfries",
"display_name": "Denzel Dumfries",
"short_name": "D Dumfries",
"date_of_birth": "1996-04-18",
"age": 29,
"height": "6' 2\"",
"weight": "174 lbs",
"citizenship": "Netherlands"
},
"season": 2025,
"jersey_number": "2",
"position": "Defender",
"position_abbreviation": "D",
"is_active": true
},
...
]
}
This endpoint retrieves the roster for a specific team.
HTTP Request
GET https://api.balldontlie.io/seriea/v1/rosters
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| team_id | true | The ID of the team to get roster for |
| season | false | Filter by season year |
Players
Get All Players
curl "https://api.balldontlie.io/seriea/v1/players?per_page=5" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/players?per_page=5",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/players",
params={"per_page": 5},
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"id": 101,
"first_name": "Aaron",
"last_name": "Hickey",
"display_name": "Aaron Hickey",
"short_name": "A Hickey",
"date_of_birth": "2002-06-10",
"age": 23,
"height": "5' 10\"",
"weight": "159 lbs",
"citizenship": "Scotland",
"team_ids": [2869]
},
{
"id": 7139,
"first_name": "Aaron",
"last_name": "Martin",
"display_name": "Aaron Martin",
"short_name": "A Martin",
"date_of_birth": "1997-04-22",
"age": 28,
"height": "5' 11\"",
"weight": "159 lbs",
"citizenship": "Spain",
"team_ids": [37700]
},
...
],
"meta": {
"next_cursor": 40444,
"per_page": 5
}
}
This endpoint retrieves all players.
HTTP Request
GET https://api.balldontlie.io/seriea/v1/players
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| cursor | false | The cursor for pagination |
| per_page | false | Number of results per page (max 100) |
| team_ids | false | Filter by team IDs (array) |
| player_ids | false | Filter by player IDs (array) |
| search | false | Search by player name |
| first_name | false | Filter by first name |
| last_name | false | Filter by last name |
Standings
Get Standings
curl "https://api.balldontlie.io/seriea/v1/standings" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/standings",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/standings",
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"team": {
"id": 95,
"name": "Internazionale",
"short_name": "Inter Milan",
"abbreviation": "INT",
"location": "Internazionale"
},
"season": 2025,
"rank": 1,
"rank_change": 0,
"group_name": "2025-2026 Italian Serie A",
"note": "Champions League",
"games_played": 15,
"wins": 11,
"losses": 4,
"draws": 0,
"points": 33,
"goals_for": 34,
"goals_against": 14,
"goal_differential": 20,
"points_per_game": null
},
{
"team": {
"id": 2861,
"name": "AC Milan",
"short_name": "Milan",
"abbreviation": "MIL",
"location": "AC Milan"
},
"season": 2025,
"rank": 2,
"rank_change": 0,
"group_name": "2025-2026 Italian Serie A",
"note": "Champions League",
"games_played": 15,
"wins": 9,
"losses": 1,
"draws": 5,
"points": 32,
"goals_for": 24,
"goals_against": 13,
"goal_differential": 11,
"points_per_game": null
},
{
"team": {
"id": 101,
"name": "Napoli",
"short_name": "Napoli",
"abbreviation": "NAP",
"location": "Napoli"
},
"season": 2025,
"rank": 3,
"rank_change": 0,
"group_name": "2025-2026 Italian Serie A",
"note": "Champions League",
"games_played": 15,
"wins": 10,
"losses": 4,
"draws": 1,
"points": 31,
"goals_for": 22,
"goals_against": 13,
"goal_differential": 9,
"points_per_game": null
},
...
]
}
This endpoint retrieves the current standings.
HTTP Request
GET https://api.balldontlie.io/seriea/v1/standings
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| season | false | Filter by season |
Matches
Get All Matches
curl "https://api.balldontlie.io/seriea/v1/matches?per_page=5" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/matches?per_page=5",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/matches",
params={"per_page": 5},
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"id": 50846,
"season": 2025,
"home_team_id": 37700,
"away_team_id": 80,
"date": "2025-12-21T19:45:00.000Z",
"name": "Atalanta at Genoa",
"short_name": "ATA @ GEN",
"status": "STATUS_FULL_TIME",
"status_detail": "FT",
"home_score": 0,
"away_score": 1,
"venue_name": "Stadio Luigi Ferraris",
"venue_city": "Genova",
"attendance": 0
},
{
"id": 50843,
"season": 2025,
"home_team_id": 37699,
"away_team_id": 37711,
"date": "2025-12-21T17:00:00.000Z",
"name": "Udinese at Fiorentina",
"short_name": "UDI @ FIO",
"status": "STATUS_FULL_TIME",
"status_detail": "FT",
"home_score": 5,
"away_score": 1,
"venue_name": "Stadio Artemio Franchi",
"venue_city": "Firenze",
"attendance": 18405
},
...
],
"meta": {
"next_cursor": 50838,
"per_page": 5
}
}
This endpoint retrieves all matches.
HTTP Request
GET https://api.balldontlie.io/seriea/v1/matches
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| cursor | false | The cursor for pagination |
| per_page | false | Number of results per page (max 100) |
| seasons | false | Filter by seasons (array) |
| team_ids | false | Filter by team IDs (array) |
| start_date | false | Filter matches on or after this date |
| end_date | false | Filter matches on or before this date |
| dates | false | Filter by specific dates (array) |
Match Events
Get Match Events
curl "https://api.balldontlie.io/seriea/v1/match_events?match_ids[]=50846" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/match_events?match_ids[]=50846",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/match_events",
params={"match_ids[]": 50846},
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"id": 380775,
"match_id": 50846,
"team_id": 37700,
"event_type": "red_card",
"event_time": 3,
"period": 1,
"player": {
"id": 33369,
"first_name": "Nicola",
"last_name": "Leali",
"display_name": "Nicola Leali",
"short_name": "N Leali",
"date_of_birth": "1993-02-17",
"age": 32,
"height": "6' 5\"",
"weight": "174 lbs",
"citizenship": "Italy"
},
"secondary_player": null,
"goal_type": null,
"is_own_goal": false
},
{
"id": 380776,
"match_id": 50846,
"team_id": 37700,
"event_type": "substitution",
"event_time": 5,
"period": 1,
"player": {
"id": 42458,
"first_name": "Daniele",
"last_name": "Sommariva",
"display_name": "Daniele Sommariva",
"short_name": "D Sommariva",
"date_of_birth": "1997-07-18",
"age": 28,
"height": "6' 1\"",
"weight": "168 lbs",
"citizenship": "Italy"
},
"secondary_player": null,
"goal_type": null,
"is_own_goal": false
},
{
"id": 380778,
"match_id": 50846,
"team_id": 80,
"event_type": "yellow_card",
"event_time": 60,
"period": 2,
"player": {
"id": 3188,
"first_name": "Lazar",
"last_name": "Samardzic",
"display_name": "Lazar Samardzic",
"short_name": "L Samardzic",
"date_of_birth": "2002-02-24",
"age": 23,
"height": "6' 0\"",
"weight": "152 lbs",
"citizenship": "Serbia"
},
"secondary_player": null,
"goal_type": null,
"is_own_goal": false
},
...
]
}
This endpoint retrieves events (goals, cards, substitutions) for specific matches.
HTTP Request
GET https://api.balldontlie.io/seriea/v1/match_events
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| match_ids | true | Array of match IDs to get events for |
| cursor | false | The cursor for pagination |
| per_page | false | Number of results per page (max 100) |
Match Lineups
Get Match Lineups
curl "https://api.balldontlie.io/seriea/v1/match_lineups?match_ids[]=50846" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/match_lineups?match_ids[]=50846",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/match_lineups",
params={"match_ids[]": 50846},
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"match_id": 50846,
"team_id": 80,
"player": {
"id": 3177,
"first_name": "Charles",
"last_name": "De Ketelaere",
"display_name": "Charles De Ketelaere",
"short_name": "C De Ketelaere",
"date_of_birth": "2001-03-10",
"age": 24,
"height": "6' 4\"",
"weight": "161 lbs",
"citizenship": "Belgium"
},
"is_starter": true,
"position": "Center Right Forward",
"position_abbreviation": "CF-R",
"formation_position": "10",
"jersey_number": null
},
{
"match_id": 50846,
"team_id": 80,
"player": {
"id": 6148,
"first_name": "Daniel",
"last_name": "Maldini",
"display_name": "Daniel Maldini",
"short_name": "D Maldini",
"date_of_birth": "2001-10-11",
"age": 24,
"height": "6' 2\"",
"weight": "183 lbs",
"citizenship": "Italy"
},
"is_starter": true,
"position": "Center Left Forward",
"position_abbreviation": "CF-L",
"formation_position": "11",
"jersey_number": null
},
{
"match_id": 50846,
"team_id": 80,
"player": {
"id": 6231,
"first_name": "Gianluca",
"last_name": "Scamacca",
"display_name": "Gianluca Scamacca",
"short_name": "G Scamacca",
"date_of_birth": "1999-01-01",
"age": 26,
"height": "6' 5\"",
"weight": "185 lbs",
"citizenship": "Italy"
},
"is_starter": true,
"position": "Forward",
"position_abbreviation": "F",
"formation_position": "9",
"jersey_number": null
},
...
]
}
This endpoint retrieves the lineups for specific matches.
HTTP Request
GET https://api.balldontlie.io/seriea/v1/match_lineups
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| match_ids | true | Array of match IDs to get lineups for |
| cursor | false | The cursor for pagination |
| per_page | false | Number of results per page (max 100) |
Player Match Stats
Get Player Match Stats
curl "https://api.balldontlie.io/seriea/v1/player_match_stats?match_ids[]=50846" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/player_match_stats?match_ids[]=50846",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/player_match_stats",
params={"match_ids[]": 50846},
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"match_id": 50846,
"player_id": 3177,
"team_id": 80,
"appearances": 1,
"goals": 0,
"assists": 0,
"shots_total": 2,
"shots_on_target": 1,
"fouls_committed": 1,
"fouls_suffered": null,
"offsides": null,
"saves": null,
"yellow_cards": 0,
"red_cards": 0,
"own_goals": 0
},
{
"match_id": 50846,
"player_id": 3171,
"team_id": 80,
"appearances": 1,
"goals": 0,
"assists": 0,
"shots_total": 4,
"shots_on_target": 1,
"fouls_committed": 5,
"fouls_suffered": null,
"offsides": null,
"saves": null,
"yellow_cards": 0,
"red_cards": 0,
"own_goals": 0
},
...
],
"meta": {
"per_page": 25
}
}
This endpoint retrieves player statistics for specific matches.
HTTP Request
GET https://api.balldontlie.io/seriea/v1/player_match_stats
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| match_ids | true | Array of match IDs to get stats for |
| cursor | false | The cursor for pagination |
| per_page | false | Number of results per page (max 100) |
Team Match Stats
Get Team Match Stats
curl "https://api.balldontlie.io/seriea/v1/team_match_stats?match_ids[]=50846" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/team_match_stats?match_ids[]=50846",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/team_match_stats",
params={"match_ids[]": 50846},
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"match_id": 50846,
"team_id": 80,
"possession_pct": 70.7,
"shots": 16,
"shots_on_target": 4,
"fouls": 19,
"yellow_cards": 2,
"red_cards": 0,
"corners": null,
"passes": 542,
"pass_accuracy_pct": null
},
{
"match_id": 50846,
"team_id": 37700,
"possession_pct": 29.3,
"shots": 6,
"shots_on_target": 3,
"fouls": 11,
"yellow_cards": 1,
"red_cards": 1,
"corners": null,
"passes": 220,
"pass_accuracy_pct": null
}
],
"meta": {
"per_page": 25
}
}
This endpoint retrieves team statistics for specific matches.
HTTP Request
GET https://api.balldontlie.io/seriea/v1/team_match_stats
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| match_ids | true | Array of match IDs to get stats for |
| cursor | false | The cursor for pagination |
| per_page | false | Number of results per page (max 100) |
Betting Odds
Get Betting Odds
curl "https://api.balldontlie.io/seriea/v1/odds?per_page=5" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/odds?per_page=5",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/odds",
params={"per_page": 5},
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"id": 40975315,
"match_id": 50833,
"vendor": "caesars",
"moneyline_home_odds": -260,
"moneyline_away_odds": 750,
"moneyline_draw_odds": 360,
"updated_at": "2025-12-23T16:24:00.707Z"
},
{
"id": 40969234,
"match_id": 50833,
"vendor": "draftkings",
"moneyline_home_odds": -285,
"moneyline_away_odds": 650,
"moneyline_draw_odds": 350,
"updated_at": "2025-12-23T16:24:01.263Z"
},
{
"id": 40802517,
"match_id": 50833,
"vendor": "fanduel",
"moneyline_home_odds": -310,
"moneyline_away_odds": 700,
"moneyline_draw_odds": 380,
"updated_at": "2025-12-23T16:24:00.697Z"
},
...
],
"meta": {
"next_cursor": 40969229,
"per_page": 5
}
}
This endpoint retrieves betting odds for Serie A matches. Odds include moneyline odds for home, away, and draw outcomes.
HTTP Request
GET https://api.balldontlie.io/seriea/v1/odds
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| cursor | false | The cursor for pagination |
| per_page | false | Number of results per page (max 100) |
| match_ids | false | Filter by match IDs (array) |
Player Props
The Player Props API provides real-time player prop betting odds for Serie A matches. Player props allow betting on individual player performances such as goals, assists, shots on target, saves, and more.
Market Types
The API supports two market types:
- over_under: Traditional over/under markets where users can bet on whether a player will go over or under a specific line value
- milestone: Milestone markets where users bet on whether a player will reach a specific achievement (e.g., anytime goal scorer)
Get Player Props
curl "https://api.balldontlie.io/seriea/v1/odds/player_props?match_id=50833" \
-H "Authorization: YOUR_API_KEY"
const response = await fetch(
"https://api.balldontlie.io/seriea/v1/odds/player_props?match_id=50833",
{
headers: { "Authorization": "YOUR_API_KEY" }
}
);
const data = await response.json();
import requests
response = requests.get(
"https://api.balldontlie.io/seriea/v1/odds/player_props",
params={"match_id": 50833},
headers={"Authorization": "YOUR_API_KEY"}
)
data = response.json()
The above command returns JSON structured like this:
{
"data": [
{
"id": 1175899917,
"match_id": 50833,
"player_id": 152,
"vendor": "caesars",
"prop_type": "anytime_goal",
"line_value": "3",
"market": {
"type": "milestone",
"odds": 50000
},
"updated_at": "2025-12-23T16:24:14.598Z"
},
{
"id": 1175899882,
"match_id": 50833,
"player_id": 152,
"vendor": "caesars",
"prop_type": "anytime_goal",
"line_value": "2",
"market": {
"type": "milestone",
"odds": 10000
},
"updated_at": "2025-12-23T16:24:14.598Z"
},
{
"id": 1175899845,
"match_id": 50833,
"player_id": 152,
"vendor": "caesars",
"prop_type": "anytime_goal",
"line_value": "1",
"market": {
"type": "milestone",
"odds": 900
},
"updated_at": "2025-12-23T16:24:14.598Z"
},
...
]
}
This endpoint retrieves player prop betting odds for a specific Serie A match. The match_id parameter is required.
Available Vendors:
- draftkings
- fanduel
- caesars
HTTP Request
GET https://api.balldontlie.io/seriea/v1/odds/player_props
Query Parameters
| Parameter | Required | Description |
|---|---|---|
| match_id | true | The match ID to retrieve player props for |
| player_id | false | Filter props for a specific player |
| prop_type | false | Filter by prop type. See supported prop types below. |
| vendors | false | Filter by specific sportsbook vendors. This should be an array: ?vendors[]=draftkings&vendors[]=fanduel |
Supported Prop Types
The following prop_type values are supported:
| Prop Type | Description |
|---|---|
| anytime_goal | Score a goal anytime in match |
| assists | Total assists |
| first_goal | Score the first goal of match |
| first_half_goal | Score a goal in the first half |
| goals_assists | Combined goals and assists |
| header_goal | Score a goal with a header |
| last_goal | Score the last goal of match |
| outside_box_goal | Score from outside the box |
| saves | Total saves (goalkeepers) |
| second_half_goal | Score a goal in the second half |
| shots | Total shots |
| shots_on_target | Total shots on target |
| tackles | Total tackles |
Note: The actual prop types available may vary by match and sportsbook vendor.