PGA API Reference
Every professional golf tournament — the four majors, the PGA Tour stops, the FedExCup playoffs — broken down to the round, leaderboard, hole-by-hole and shot-by-shot ShotLink/TrackMan tracking, and the players, courses, season-long stats, and tournament odds behind them.
Main
players
golf.playersEvery professional golfer — active tour members, conditional-status players, alumni who have competed at the highest level, and country-of-origin information.
GET/api/v1/pga/playersList players for PGA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/players?limit=3'Responses
200players rows matching the declared filter set, wrapped in { players, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(16 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_id | stringnullable | — | Official tour player identifier e.g. 52955 |
league_player_id | integer | — | Official PGA Tour player id e.g. 52955 |
birth_city | stringnullable | — | — e.g. Seoul |
birth_country | stringnullable | — | — e.g. United States |
birth_date | datenullable | — | — e.g. 1989-07-23 |
birth_state | stringnullable | — | — e.g. California |
college | stringnullable | — | — e.g. Oklahoma State University |
country | stringnullable | — | — e.g. USA |
first_name | string | — | — e.g. David |
full_name | string | — | — e.g. Zach Johnson |
last_name | string | — | — e.g. Kim |
pga_debut_year | integernullable | — | — e.g. 2018 |
photo_url | stringnullable | — | — e.g. — (all-null in sample) |
short_name | stringnullable | — | — e.g. C. Johnson |
swings | stringnullable | — | Right, Left e.g. — (all-null in sample) |
GET/api/v1/pga/players/{id}Get a single player by id
Parameters
idpathbigintrequiredPrimary key (id) of the player row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/players/{pk_value}'Responses
200Single player row.application/jsonshow example ▸
404Row not found.
Response Schema(16 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_id | stringnullable | — | Official tour player identifier e.g. 52955 |
league_player_id | integer | — | Official PGA Tour player id e.g. 52955 |
birth_city | stringnullable | — | — e.g. Seoul |
birth_country | stringnullable | — | — e.g. United States |
birth_date | datenullable | — | — e.g. 1989-07-23 |
birth_state | stringnullable | — | — e.g. California |
college | stringnullable | — | — e.g. Oklahoma State University |
country | stringnullable | — | — e.g. USA |
first_name | string | — | — e.g. David |
full_name | string | — | — e.g. Zach Johnson |
last_name | string | — | — e.g. Kim |
pga_debut_year | integernullable | — | — e.g. 2018 |
photo_url | stringnullable | — | — e.g. — (all-null in sample) |
short_name | stringnullable | — | — e.g. C. Johnson |
swings | stringnullable | — | Right, Left e.g. — (all-null in sample) |
seasons
golf.seasonsEach season on a professional golf tour — the year-long schedule of tournaments leading up to the FedExCup playoffs (PGA), the major championships, and the season-ending Tour Championship.
GET/api/v1/pga/seasonsList seasons for PGA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/seasons?limit=3'Responses
200seasons rows matching the declared filter set, wrapped in { seasons, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_id | stringnullable | — | Official tour season identifier e.g. liv-2021 |
tour_id | bigint | — e.g. 14 | |
end_date | timestamptznullable | — | — e.g. 2021-12-31T00:00:00.000Z |
start_date | timestamptz | — | — e.g. 2021-01-01T00:00:00.000Z |
start_year | integer | — | — e.g. 2021 |
GET/api/v1/pga/seasons/{id}Get a single season by id
Parameters
idpathbigintrequiredPrimary key (id) of the season row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/seasons/{pk_value}'Responses
200Single season row.application/jsonshow example ▸
404Row not found.
Response Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_id | stringnullable | — | Official tour season identifier e.g. liv-2021 |
tour_id | bigint | — e.g. 14 | |
end_date | timestamptznullable | — | — e.g. 2021-12-31T00:00:00.000Z |
start_date | timestamptz | — | — e.g. 2021-01-01T00:00:00.000Z |
start_year | integer | — | — e.g. 2021 |
tournaments
golf.tournamentsEvery professional golf tournament — the four majors (Masters, PGA Championship, U.S. Open, Open Championship), the PGA Tour stops, LIV events, the FedExCup playoffs, and Korn Ferry Tour events.
GET/api/v1/pga/tournamentsList tournaments for PGA
Requires one of:
season_id — requests satisfying none of these return 400.Parameters
season_idquerybigintoptionalFilter to a single season. Defaults to the current season.
tour_idquerybigintoptionalFilter by tour.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/tournaments?season_id=2026'Responses
200tournaments rows matching the declared filter set, wrapped in { tournaments, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(21 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_id | stringnullable | — | Official tour tournament identifier e.g. R2025016 |
season_id | bigintnullable | — e.g. 22 | |
tour_id | bigintnullable | — e.g. 12 | |
canceled | boolean | — | — e.g. false |
city | stringnullable | — | — e.g. Ponte Vedra Beach |
country | stringnullable | — | — Values:United States of AmericaMexicoJapanBermudaPuerto RicoDominican RepublicScotlandCanadaEnglandNorthern IrelandFranceItalyBahamasSouth KoreaPeople's Republic of Ch…Australia |
end_date | timestamptznullable | — | — e.g. — (all-null in sample) |
is_in_progress | boolean | — | — e.g. false |
is_over | boolean | — | — Values:truefalse |
name | string | — | — e.g. The RSM Classic |
par | integernullable | — | — e.g. — (all-null in sample) |
purse | bigintnullable | — | Total prize money in cents e.g. 2000000000 |
rounds | integernullable | — | — e.g. — (all-null in sample) |
start_date | timestamptz | — | — e.g. 2025-03-06T00:00:00.000Z |
start_date_time | timestamptznullable | — | — e.g. — (all-null in sample) |
state | stringnullable | — | — e.g. California |
time_zone | stringnullable | — | — e.g. — (all-null in sample) |
venue | stringnullable | — | — e.g. Torrey Pines Golf Course (South Course) |
yards | integernullable | — | — e.g. — (all-null in sample) |
zip | stringnullable | — | — e.g. — (all-null in sample) |
GET/api/v1/pga/tournaments/{id}Get a single tournament by id
Parameters
idpathbigintrequiredPrimary key (id) of the tournament row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/tournaments/{pk_value}'Responses
200Single tournament row.application/jsonshow example ▸
404Row not found.
Response Schema(21 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_id | stringnullable | — | Official tour tournament identifier e.g. R2025016 |
season_id | bigintnullable | — e.g. 22 | |
tour_id | bigintnullable | — e.g. 12 | |
canceled | boolean | — | — e.g. false |
city | stringnullable | — | — e.g. Ponte Vedra Beach |
country | stringnullable | — | — Values:United States of AmericaMexicoJapanBermudaPuerto RicoDominican RepublicScotlandCanadaEnglandNorthern IrelandFranceItalyBahamasSouth KoreaPeople's Republic of Ch…Australia |
end_date | timestamptznullable | — | — e.g. — (all-null in sample) |
is_in_progress | boolean | — | — e.g. false |
is_over | boolean | — | — Values:truefalse |
name | string | — | — e.g. The RSM Classic |
par | integernullable | — | — e.g. — (all-null in sample) |
purse | bigintnullable | — | Total prize money in cents e.g. 2000000000 |
rounds | integernullable | — | — e.g. — (all-null in sample) |
start_date | timestamptz | — | — e.g. 2025-03-06T00:00:00.000Z |
start_date_time | timestamptznullable | — | — e.g. — (all-null in sample) |
state | stringnullable | — | — e.g. California |
time_zone | stringnullable | — | — e.g. — (all-null in sample) |
venue | stringnullable | — | — e.g. Torrey Pines Golf Course (South Course) |
yards | integernullable | — | — e.g. — (all-null in sample) |
zip | stringnullable | — | — e.g. — (all-null in sample) |
Plays
player_rounds
golf.player_roundsEach player's scoring line for each round of every professional golf tournament — total strokes, score relative to par, eagles, birdies, bogeys, and double-bogeys. (Ball-striking detail — fairways, greens in regulation, putts — is not carried here.)
GET/api/v1/pga/player_roundsList player_rounds for PGA
Requires one of:
player_id or tournament_id — requests satisfying none of these return 400.Parameters
player_idquerybigintoptionalFilter to a single player.
tournament_idquerybigintoptionalFilter to a single tournament.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/player_rounds?player_id=1'Responses
200player_rounds rows matching the declared filter set, wrapped in { player_rounds, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(25 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 194 | |
tournament_id | bigint | — e.g. 887 | |
back_nine_start | booleannullable | — | — e.g. — (all-null in sample) |
birdies | integernullable | — | — e.g. 4 |
bogeys | integernullable | — | — e.g. 2 |
day | datenullable | — | — e.g. — (all-null in sample) |
double_bogeys | integernullable | — | — e.g. 0 |
double_eagles | integernullable | — | — e.g. 0 |
eagles | integernullable | — | — e.g. 0 |
holes_in_one | integernullable | — | — e.g. 0 |
par | integernullable | — | — e.g. 72 |
pars | integernullable | — | — e.g. 12 |
round_number | integer | — | — e.g. 1 |
score | integernullable | — | Total strokes for round e.g. 70 |
sg_approach | decimalnullable | — | — e.g. -0.8480 |
sg_around_green | decimalnullable | — | — e.g. 0.7610 |
sg_off_tee | decimalnullable | — | — e.g. 0.8570 |
sg_putting | decimalnullable | — | — e.g. 1.6950 |
sg_tee_to_green | decimalnullable | — | — e.g. 0.2610 |
sg_total | decimalnullable | — | — e.g. -0.1640 |
tee_time | timestamptznullable | — | — e.g. — (all-null in sample) |
triple_bogeys | integernullable | — | — e.g. 0 |
worse_than_double_bogey | integernullable | — | — e.g. 0 |
worse_than_triple_bogey | integernullable | — | — e.g. 0 |
GET/api/v1/pga/player_rounds/{id}Get a single player_round by id
Parameters
idpathbigintrequiredPrimary key (id) of the player_round row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/player_rounds/{pk_value}'Responses
200Single player_round row.application/jsonshow example ▸
404Row not found.
Response Schema(25 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 194 | |
tournament_id | bigint | — e.g. 887 | |
back_nine_start | booleannullable | — | — e.g. — (all-null in sample) |
birdies | integernullable | — | — e.g. 4 |
bogeys | integernullable | — | — e.g. 2 |
day | datenullable | — | — e.g. — (all-null in sample) |
double_bogeys | integernullable | — | — e.g. 0 |
double_eagles | integernullable | — | — e.g. 0 |
eagles | integernullable | — | — e.g. 0 |
holes_in_one | integernullable | — | — e.g. 0 |
par | integernullable | — | — e.g. 72 |
pars | integernullable | — | — e.g. 12 |
round_number | integer | — | — e.g. 1 |
score | integernullable | — | Total strokes for round e.g. 70 |
sg_approach | decimalnullable | — | — e.g. -0.8480 |
sg_around_green | decimalnullable | — | — e.g. 0.7610 |
sg_off_tee | decimalnullable | — | — e.g. 0.8570 |
sg_putting | decimalnullable | — | — e.g. 1.6950 |
sg_tee_to_green | decimalnullable | — | — e.g. 0.2610 |
sg_total | decimalnullable | — | — e.g. -0.1640 |
tee_time | timestamptznullable | — | — e.g. — (all-null in sample) |
triple_bogeys | integernullable | — | — e.g. 0 |
worse_than_double_bogey | integernullable | — | — e.g. 0 |
worse_than_triple_bogey | integernullable | — | — e.g. 0 |
player_shots
golf.player_shotsShot-by-shot tracking for each player at each professional tournament — every stroke with its type, start/end location, distance, ShotLink/TOURCAST course coordinates, and TrackMan radar metrics (club & ball speed, spin, launch angle, apex, carry). Available for regular PGA Tour events with ShotLink; majors such as the Masters do not publish shot tracking.
GET/api/v1/pga/player_shotsList player_shots for PGA
Requires one of:
player_id or tournament_id — requests satisfying none of these return 400.Parameters
player_idquerybigintoptionalFilter to a single player.
tournament_idquerybigintoptionalFilter to a single tournament.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/player_shots?player_id=1'Responses
200player_shots rows matching the declared filter set, wrapped in { player_shots, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(30 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 20 | |
tournament_id | bigint | — e.g. 255 | |
apex_height | floatnullable | — | — e.g. 99.61 |
ball_speed | floatnullable | — | — e.g. 175.15 |
carry_distance | floatnullable | — | — e.g. 269.59 |
club_speed | floatnullable | — | — e.g. 0 |
distance_remaining_yards | floatnullable | — | Distance to the hole after the shot, in yards e.g. 145 |
distance_yards | floatnullable | — | Shot distance in yards (null when the source reports feet near the green) e.g. 289 |
final_stroke | booleannullable | — | — Values:falsetrue |
from_location | stringnullable | — | — Values:GreenTee BoxFairwayPrimary RoughIntermediate RoughGreenside BunkerFairway BunkerNative AreaOtherFringe |
from_location_code | stringnullable | — | — Values:OGROTBOFWOROOIROGSOSTONAOTHOCO |
from_x | floatnullable | — | — e.g. 7309.9 |
from_y | floatnullable | — | — e.g. 11300.88 |
from_z | floatnullable | — | — e.g. 246.065 |
hole_number | integer | — | — e.g. 9 |
launch_angle | floatnullable | — | Vertical launch angle (degrees) e.g. 8.74 |
launch_spin | floatnullable | — | — e.g. 0 |
par | integernullable | — | — e.g. 4 |
play_by_play | stringnullable | — | — e.g. In the hole |
round_number | integer | — | — e.g. 3 |
shot_number | integer | — | Stroke sequence within the hole (1 = first stroke) e.g. 1 |
smash_factor | floatnullable | — | — e.g. 0 |
spin_axis | floatnullable | — | — e.g. 0 |
stroke_type | stringnullable | — | STROKE, PENALTY, DROP, PROVISIONAL Values:STROKEDROPPENALTYPROVISIONAL |
to_location | stringnullable | — | — e.g. Green |
to_location_code | stringnullable | — | — e.g. OGR |
to_x | floatnullable | — | — e.g. 5799.6 |
to_y | floatnullable | — | — e.g. 12140.75 |
to_z | floatnullable | — | — e.g. 358.62 |
GET/api/v1/pga/player_shots/{id}Get a single player_shot by id
Parameters
idpathbigintrequiredPrimary key (id) of the player_shot row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/player_shots/{pk_value}'Responses
200Single player_shot row.application/jsonshow example ▸
404Row not found.
Response Schema(30 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 20 | |
tournament_id | bigint | — e.g. 255 | |
apex_height | floatnullable | — | — e.g. 99.61 |
ball_speed | floatnullable | — | — e.g. 175.15 |
carry_distance | floatnullable | — | — e.g. 269.59 |
club_speed | floatnullable | — | — e.g. 0 |
distance_remaining_yards | floatnullable | — | Distance to the hole after the shot, in yards e.g. 145 |
distance_yards | floatnullable | — | Shot distance in yards (null when the source reports feet near the green) e.g. 289 |
final_stroke | booleannullable | — | — Values:falsetrue |
from_location | stringnullable | — | — Values:GreenTee BoxFairwayPrimary RoughIntermediate RoughGreenside BunkerFairway BunkerNative AreaOtherFringe |
from_location_code | stringnullable | — | — Values:OGROTBOFWOROOIROGSOSTONAOTHOCO |
from_x | floatnullable | — | — e.g. 7309.9 |
from_y | floatnullable | — | — e.g. 11300.88 |
from_z | floatnullable | — | — e.g. 246.065 |
hole_number | integer | — | — e.g. 9 |
launch_angle | floatnullable | — | Vertical launch angle (degrees) e.g. 8.74 |
launch_spin | floatnullable | — | — e.g. 0 |
par | integernullable | — | — e.g. 4 |
play_by_play | stringnullable | — | — e.g. In the hole |
round_number | integer | — | — e.g. 3 |
shot_number | integer | — | Stroke sequence within the hole (1 = first stroke) e.g. 1 |
smash_factor | floatnullable | — | — e.g. 0 |
spin_axis | floatnullable | — | — e.g. 0 |
stroke_type | stringnullable | — | STROKE, PENALTY, DROP, PROVISIONAL Values:STROKEDROPPENALTYPROVISIONAL |
to_location | stringnullable | — | — e.g. Green |
to_location_code | stringnullable | — | — e.g. OGR |
to_x | floatnullable | — | — e.g. 5799.6 |
to_y | floatnullable | — | — e.g. 12140.75 |
to_z | floatnullable | — | — e.g. 358.62 |
tournament_rounds
golf.tournament_roundsEach round of every professional golf tournament — round 1 (Thursday), round 2 (Friday cut day), and the weekend rounds (Saturday and Sunday) plus any playoff holes.
GET/api/v1/pga/tournament_roundsList tournament_rounds for PGA
Requires one of:
tournament_id — requests satisfying none of these return 400.Parameters
tournament_idquerybigintoptionalFilter to a single tournament.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/tournament_rounds?tournament_id=1'Responses
200tournament_rounds rows matching the declared filter set, wrapped in { tournament_rounds, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(5 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
round_id | integer | — | — e.g. 20250161 |
tournament_id | bigint | — e.g. 1 | |
day | date | — | — e.g. 2025-03-05 |
round_number | integer | — | — e.g. 1 |
GET/api/v1/pga/tournament_rounds/{id}Get a single tournament_round by id
Parameters
idpathbigintrequiredPrimary key (id) of the tournament_round row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/tournament_rounds/{pk_value}'Responses
200Single tournament_round row.application/jsonshow example ▸
404Row not found.
Response Schema(5 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
round_id | integer | — | — e.g. 20250161 |
tournament_id | bigint | — e.g. 1 | |
day | date | — | — e.g. 2025-03-05 |
round_number | integer | — | — e.g. 1 |
player_holes
golf.player_holesHole-by-hole scoring for each player at each professional tournament — strokes and score relative to par per hole. (Shot-level tracking — drive distance, approach result, putts — is not carried here.)
GET/api/v1/pga/player_holesList player_holes for PGA
Requires one of:
player_id or tournament_id — requests satisfying none of these return 400.Parameters
player_idquerybigintoptionalFilter to a single player.
tournament_idquerybigintoptionalFilter to a single tournament.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/player_holes?player_id=1'Responses
200player_holes rows matching the declared filter set, wrapped in { player_holes, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(17 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 193 | |
player_round_id | bigint | — e.g. 1 | |
tournament_id | bigint | — e.g. 255 | |
birdie | booleannullable | — | — Values:falsetrue |
bogey | booleannullable | — | — Values:falsetrue |
double_bogey | booleannullable | — | — Values:falsetrue |
double_eagle | booleannullable | — | — e.g. — (all-null in sample) |
eagle | booleannullable | — | — Values:falsetrue |
hole_in_one | booleannullable | — | — e.g. false |
hole_number | integer | — | — e.g. 1 |
is_par | booleannullable | — | — Values:truefalse |
par | integernullable | — | — e.g. 4 |
round_number | integer | — | — e.g. 1 |
score | integernullable | — | — e.g. 4 |
to_par | integernullable | — | Score relative to par for this hole e.g. 0 |
worse_than_double_bogey | booleannullable | — | — Values:falsetrue |
GET/api/v1/pga/player_holes/{id}Get a single player_hole by id
Parameters
idpathbigintrequiredPrimary key (id) of the player_hole row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/player_holes/{pk_value}'Responses
200Single player_hole row.application/jsonshow example ▸
404Row not found.
Response Schema(17 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 193 | |
player_round_id | bigint | — e.g. 1 | |
tournament_id | bigint | — e.g. 255 | |
birdie | booleannullable | — | — Values:falsetrue |
bogey | booleannullable | — | — Values:falsetrue |
double_bogey | booleannullable | — | — Values:falsetrue |
double_eagle | booleannullable | — | — e.g. — (all-null in sample) |
eagle | booleannullable | — | — Values:falsetrue |
hole_in_one | booleannullable | — | — e.g. false |
hole_number | integer | — | — e.g. 1 |
is_par | booleannullable | — | — Values:truefalse |
par | integernullable | — | — e.g. 4 |
round_number | integer | — | — e.g. 1 |
score | integernullable | — | — e.g. 4 |
to_par | integernullable | — | Score relative to par for this hole e.g. 0 |
worse_than_double_bogey | booleannullable | — | — Values:falsetrue |
Stats
operator_player_lookups
golf.operator_player_lookupsHow each sportsbook and fantasy operator names every professional golfer — the mapping from each operator's player identifier to a unified player record.
GET/api/v1/pga/operator_player_lookupsList operator_player_lookups for PGA
Requires one of:
operator_id — requests satisfying none of these return 400.Parameters
operator_idquerybigintoptionalFilter by operator.
player_idquerybigintoptionalFilter to a single player.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/operator_player_lookups?operator_id=1'Responses
200operator_player_lookups rows matching the declared filter set, wrapped in { operator_player_lookups, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(8 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
operator_id | bigint | Operator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io. e.g. 1 | |
operator_player_id | string | — | External player ID from operator e.g. 52955 |
player_id | bigintnullable | Internal golf.players.id reference e.g. 1 | |
decided_at | timestamptznullable | — | When the pin or block was decided. e.g. 2026-08-20T21:44:47.304Z |
decided_reason | stringnullable | — | Evidence behind a pinned or blocked decision. Values:DraftKings' Zach Johnso…FanDuel's Zach Johnson … |
decision | stringnullable | — | How this mapping was decided: 'derived' (finder answer, overwritable), 'pinned' (decided on evidence, trigger-protected), 'blocked' (no player we hold is this id; player_id NULL, never retried). DB default 'derived'; a BEFORE UPDATE trigger preserves non-derived rows. Values:derivedpinned |
player_name | stringnullable | — | Player name for reconciliation e.g. Aaron Baddeley |
GET/api/v1/pga/operator_player_lookups/{id}Get a single operator_player_lookup by id
Parameters
idpathbigintrequiredPrimary key (id) of the operator_player_lookup row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/operator_player_lookups/{pk_value}'Responses
200Single operator_player_lookup row.application/jsonshow example ▸
404Row not found.
Response Schema(8 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
operator_id | bigint | Operator id: 1 DraftKings, 2 FanDuel, 3 Yahoo, 13 sportsdata.io. e.g. 1 | |
operator_player_id | string | — | External player ID from operator e.g. 52955 |
player_id | bigintnullable | Internal golf.players.id reference e.g. 1 | |
decided_at | timestamptznullable | — | When the pin or block was decided. e.g. 2026-08-20T21:44:47.304Z |
decided_reason | stringnullable | — | Evidence behind a pinned or blocked decision. Values:DraftKings' Zach Johnso…FanDuel's Zach Johnson … |
decision | stringnullable | — | How this mapping was decided: 'derived' (finder answer, overwritable), 'pinned' (decided on evidence, trigger-protected), 'blocked' (no player we hold is this id; player_id NULL, never retried). DB default 'derived'; a BEFORE UPDATE trigger preserves non-derived rows. Values:derivedpinned |
player_name | stringnullable | — | Player name for reconciliation e.g. Aaron Baddeley |
player_season_stats
golf.player_season_statsSeason totals for each professional golfer — events played, cuts made, top-10 finishes, wins, and prize money earned. Ball-striking and strokes-gained metrics are not carried here.
GET/api/v1/pga/player_season_statsList player_season_stats for PGA
Requires one of:
season_id or player_id — requests satisfying none of these return 400.Parameters
season_idquerybigintoptionalFilter to a single season. Defaults to the current season.
player_idquerybigintoptionalFilter to a single player.
tour_idquerybigintoptionalFilter by tour.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/player_season_stats?season_id=2026'Responses
200player_season_stats rows matching the declared filter set, wrapped in { player_season_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(40 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 38 | |
season_id | bigintnullable | — e.g. 15 | |
tour_id | bigintnullable | — e.g. 12 | |
birdies | integernullable | — | — e.g. 6 |
bogey_free_rounds | integernullable | — | — e.g. 0 |
bogeys | integernullable | — | — e.g. 9 |
bounce_back_count | integernullable | — | — e.g. 1 |
consecutive_birdie_or_better_count | integernullable | — | — e.g. — (all-null in sample) |
cuts_made | integernullable | — | — e.g. 1 |
double_bogeys | integernullable | — | — e.g. 0 |
double_eagles | integernullable | — | — e.g. 0 |
driving_accuracy_pct | decimalnullable | — | — e.g. 59.6600 |
driving_distance | decimalnullable | — | Average driving distance in yards e.g. 306.3000 |
eagles | integernullable | — | — e.g. 0 |
events | integernullable | — | — e.g. 1 |
gir_pct | decimalnullable | — | Greens in regulation percentage e.g. 69.9700 |
holes_in_one | integernullable | — | — e.g. 0 |
pars | integernullable | — | — e.g. 22 |
putts_per_round | decimalnullable | — | — e.g. 28.5100 |
rounds | integernullable | — | — e.g. 2 |
rounds_under_seventy | integernullable | — | — e.g. 0 |
scrambling_pct | decimalnullable | — | — e.g. 58.3500 |
second_place | integernullable | — | — e.g. 0 |
sg_approach | decimalnullable | — | — e.g. -2.4415 |
sg_around_green | decimalnullable | — | — e.g. 0.4845 |
sg_off_tee | decimalnullable | — | — e.g. -0.2285 |
sg_putting | decimalnullable | — | — e.g. -1.2805 |
sg_total | decimalnullable | — | — e.g. -0.8370 |
streaks_of_three_birdies_or_better | integernullable | — | — e.g. 0 |
third_place | integernullable | — | — e.g. 0 |
top_five | integernullable | — | — e.g. 0 |
top_ten | integernullable | — | — e.g. 0 |
top_twenty_five | integernullable | — | — e.g. 0 |
total_score | integernullable | — | Total score relative to par e.g. 7 |
total_strokes | integernullable | — | — e.g. 144 |
triple_bogeys | integernullable | — | — e.g. 0 |
wins | integernullable | — | — e.g. 0 |
worse_than_double_bogey | integernullable | — | — e.g. 0 |
worse_than_triple_bogey | integernullable | — | — e.g. 0 |
GET/api/v1/pga/player_season_stats/{id}Get a single player_season_stat by id
Parameters
idpathbigintrequiredPrimary key (id) of the player_season_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/player_season_stats/{pk_value}'Responses
200Single player_season_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(40 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 38 | |
season_id | bigintnullable | — e.g. 15 | |
tour_id | bigintnullable | — e.g. 12 | |
birdies | integernullable | — | — e.g. 6 |
bogey_free_rounds | integernullable | — | — e.g. 0 |
bogeys | integernullable | — | — e.g. 9 |
bounce_back_count | integernullable | — | — e.g. 1 |
consecutive_birdie_or_better_count | integernullable | — | — e.g. — (all-null in sample) |
cuts_made | integernullable | — | — e.g. 1 |
double_bogeys | integernullable | — | — e.g. 0 |
double_eagles | integernullable | — | — e.g. 0 |
driving_accuracy_pct | decimalnullable | — | — e.g. 59.6600 |
driving_distance | decimalnullable | — | Average driving distance in yards e.g. 306.3000 |
eagles | integernullable | — | — e.g. 0 |
events | integernullable | — | — e.g. 1 |
gir_pct | decimalnullable | — | Greens in regulation percentage e.g. 69.9700 |
holes_in_one | integernullable | — | — e.g. 0 |
pars | integernullable | — | — e.g. 22 |
putts_per_round | decimalnullable | — | — e.g. 28.5100 |
rounds | integernullable | — | — e.g. 2 |
rounds_under_seventy | integernullable | — | — e.g. 0 |
scrambling_pct | decimalnullable | — | — e.g. 58.3500 |
second_place | integernullable | — | — e.g. 0 |
sg_approach | decimalnullable | — | — e.g. -2.4415 |
sg_around_green | decimalnullable | — | — e.g. 0.4845 |
sg_off_tee | decimalnullable | — | — e.g. -0.2285 |
sg_putting | decimalnullable | — | — e.g. -1.2805 |
sg_total | decimalnullable | — | — e.g. -0.8370 |
streaks_of_three_birdies_or_better | integernullable | — | — e.g. 0 |
third_place | integernullable | — | — e.g. 0 |
top_five | integernullable | — | — e.g. 0 |
top_ten | integernullable | — | — e.g. 0 |
top_twenty_five | integernullable | — | — e.g. 0 |
total_score | integernullable | — | Total score relative to par e.g. 7 |
total_strokes | integernullable | — | — e.g. 144 |
triple_bogeys | integernullable | — | — e.g. 0 |
wins | integernullable | — | — e.g. 0 |
worse_than_double_bogey | integernullable | — | — e.g. 0 |
worse_than_triple_bogey | integernullable | — | — e.g. 0 |
course_hole_stats
golf.course_hole_statsPer-hole scoring statistics for each round of a tournament — par, yardage, the field's scoring average and its relation to par, and the distribution of eagles, birdies, pars, and bogeys, plus difficulty rank.
GET/api/v1/pga/course_hole_statsList course_hole_stats for PGA
Requires one of:
tournament_id — requests satisfying none of these return 400.Parameters
tournament_idquerybigintoptionalFilter to a single tournament.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/course_hole_stats?tournament_id=1'Responses
200course_hole_stats rows matching the declared filter set, wrapped in { course_hole_stats, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(15 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
tournament_id | bigint | — e.g. 887 | |
birdies | integernullable | — | — e.g. 8 |
bogeys | integernullable | — | — e.g. 4 |
course_code | string | — | PGA Tour course code (e.g., 014 = Augusta National) e.g. 006 |
double_bogeys | integernullable | — | — e.g. 0 |
eagles | integernullable | — | — e.g. 0 |
hole_number | integer | — | — e.g. 1 |
par | integernullable | — | — e.g. 4 |
pars | integernullable | — | — e.g. 50 |
rank | integernullable | — | Difficulty rank among holes (1 = hardest) e.g. 1 |
round_number | integer | — | — e.g. 2 |
scoring_average | decimalnullable | — | — e.g. 4.0000 |
scoring_average_diff | decimalnullable | — | Scoring average relative to par e.g. 0.0000 |
yards | integernullable | — | — e.g. 450 |
GET/api/v1/pga/course_hole_stats/{id}Get a single course_hole_stat by id
Parameters
idpathbigintrequiredPrimary key (id) of the course_hole_stat row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/course_hole_stats/{pk_value}'Responses
200Single course_hole_stat row.application/jsonshow example ▸
404Row not found.
Response Schema(15 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
tournament_id | bigint | — e.g. 887 | |
birdies | integernullable | — | — e.g. 8 |
bogeys | integernullable | — | — e.g. 4 |
course_code | string | — | PGA Tour course code (e.g., 014 = Augusta National) e.g. 006 |
double_bogeys | integernullable | — | — e.g. 0 |
eagles | integernullable | — | — e.g. 0 |
hole_number | integer | — | — e.g. 1 |
par | integernullable | — | — e.g. 4 |
pars | integernullable | — | — e.g. 50 |
rank | integernullable | — | Difficulty rank among holes (1 = hardest) e.g. 1 |
round_number | integer | — | — e.g. 2 |
scoring_average | decimalnullable | — | — e.g. 4.0000 |
scoring_average_diff | decimalnullable | — | Scoring average relative to par e.g. 0.0000 |
yards | integernullable | — | — e.g. 450 |
leaderboards
golf.leaderboardsThe full leaderboard of every professional golf tournament — each player's position, score relative to par, total strokes, made cut/missed cut status, and prize money.
GET/api/v1/pga/leaderboardsList leaderboards for PGA
Requires one of:
tournament_id or player_id — requests satisfying none of these return 400.Parameters
tournament_idquerybigintoptionalFilter to a single tournament.
player_idquerybigintoptionalFilter to a single player.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/leaderboards?tournament_id=1'Responses
200leaderboards rows matching the declared filter set, wrapped in { leaderboards, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(23 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 61 | |
player_tournament_id | integer | — | — e.g. 54591 |
tournament_id | bigint | — e.g. 257 | |
earnings | bigintnullable | — | Prize money earned in cents e.g. — (all-null in sample) |
fedex_pts | integernullable | — | — e.g. — (all-null in sample) |
is_alternate | booleannullable | — | — e.g. — (all-null in sample) |
is_withdrawn | booleannullable | — | — Values:falsetrue |
made_cut | integernullable | — | 1 if made cut, 0 if missed e.g. 1 |
made_cut_did_not_finish | booleannullable | — | — e.g. — (all-null in sample) |
rank | integernullable | — | — e.g. 2 |
sg_approach | decimalnullable | — | — e.g. 11.7050 |
sg_around_green | decimalnullable | — | — e.g. 4.4940 |
sg_off_tee | decimalnullable | — | — e.g. 0.6840 |
sg_putting | decimalnullable | — | — e.g. 7.1580 |
sg_tee_to_green | decimalnullable | — | — e.g. 16.4630 |
sg_total | decimalnullable | — | — e.g. -0.3120 |
tee_time | timestamptznullable | — | — e.g. — (all-null in sample) |
total_score | integernullable | — | Score relative to par e.g. -1 |
total_strokes | integernullable | — | — e.g. 143 |
total_through | integernullable | — | Current hole of player for current round e.g. — (all-null in sample) |
tournament_status | stringnullable | — | out, active, etc. Values:COMPLETEWITHDRAWNDISQUALIFIED |
win | integernullable | — | 1 if won tournament e.g. 0 |
GET/api/v1/pga/leaderboards/{id}Get a single leaderboard by id
Parameters
idpathbigintrequiredPrimary key (id) of the leaderboard row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/leaderboards/{pk_value}'Responses
200Single leaderboard row.application/jsonshow example ▸
404Row not found.
Response Schema(23 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigint | — e.g. 61 | |
player_tournament_id | integer | — | — e.g. 54591 |
tournament_id | bigint | — e.g. 257 | |
earnings | bigintnullable | — | Prize money earned in cents e.g. — (all-null in sample) |
fedex_pts | integernullable | — | — e.g. — (all-null in sample) |
is_alternate | booleannullable | — | — e.g. — (all-null in sample) |
is_withdrawn | booleannullable | — | — Values:falsetrue |
made_cut | integernullable | — | 1 if made cut, 0 if missed e.g. 1 |
made_cut_did_not_finish | booleannullable | — | — e.g. — (all-null in sample) |
rank | integernullable | — | — e.g. 2 |
sg_approach | decimalnullable | — | — e.g. 11.7050 |
sg_around_green | decimalnullable | — | — e.g. 4.4940 |
sg_off_tee | decimalnullable | — | — e.g. 0.6840 |
sg_putting | decimalnullable | — | — e.g. 7.1580 |
sg_tee_to_green | decimalnullable | — | — e.g. 16.4630 |
sg_total | decimalnullable | — | — e.g. -0.3120 |
tee_time | timestamptznullable | — | — e.g. — (all-null in sample) |
total_score | integernullable | — | Score relative to par e.g. -1 |
total_strokes | integernullable | — | — e.g. 143 |
total_through | integernullable | — | Current hole of player for current round e.g. — (all-null in sample) |
tournament_status | stringnullable | — | out, active, etc. Values:COMPLETEWITHDRAWNDISQUALIFIED |
win | integernullable | — | 1 if won tournament e.g. 0 |
Odds
tournament_odds
golf.tournament_oddsOutright betting odds for professional golf tournaments — who wins the event, top-5/top-10/top-20 finish markets, head-to-head matchups, and other tournament-level wagers from sportsbooks.
GET/api/v1/pga/tournament_oddsList tournament_odds for PGA
Requires one of:
tournament_id — requests satisfying none of these return 400.Parameters
tournament_idquerybigintoptionalFilter to a single tournament.
player_idquerybigintoptionalFilter to a single player.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/tournament_odds?tournament_id=1'Responses
200tournament_odds rows matching the declared filter set, wrapped in { tournament_odds, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(22 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
matchup_opponent_id | bigintnullable | — | — e.g. — (all-null in sample) |
player_id | bigint | — e.g. 195 | |
round_matchup_opponent_id | bigintnullable | — | — e.g. — (all-null in sample) |
three_ball_opponent1_id | bigintnullable | — | — e.g. — (all-null in sample) |
three_ball_opponent2_id | bigintnullable | — | — e.g. — (all-null in sample) |
tournament_id | bigint | — e.g. 604 | |
first_round_leader_odds | integernullable | — | — e.g. — (all-null in sample) |
is_alternate | booleannullable | — | — e.g. — (all-null in sample) |
is_available | booleannullable | — | — e.g. true |
make_cut_odds | integernullable | — | — e.g. — (all-null in sample) |
matchup_odds | integernullable | — | — e.g. — (all-null in sample) |
matchup_opponent_odds | integernullable | — | — e.g. — (all-null in sample) |
miss_cut_odds | integernullable | — | — e.g. — (all-null in sample) |
outright_odds | integernullable | — | Odds to win tournament (American format) e.g. 15000 |
round_matchup_odds | integernullable | — | — e.g. — (all-null in sample) |
round_matchup_opponent_odds | integernullable | — | — e.g. — (all-null in sample) |
sportsbook | stringnullable | — | DraftKings, FanDuel, BetMGM, etc. Values:fandueldraftkingsbetfairwilliamhill_usunibetintertopslowvigbetriversbetmgmbarstoolsugarhousebetonlineagfoxbetbovadasuperbookunibet_ustwinspiresgtbets |
three_ball_odds | integernullable | — | — e.g. — (all-null in sample) |
top_five_odds | integernullable | — | — e.g. — (all-null in sample) |
top_ten_odds | integernullable | — | — e.g. — (all-null in sample) |
top_twenty_odds | integernullable | — | — e.g. — (all-null in sample) |
GET/api/v1/pga/tournament_odds/{id}Get a single tournament_odd by id
Parameters
idpathbigintrequiredPrimary key (id) of the tournament_odd row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/tournament_odds/{pk_value}'Responses
200Single tournament_odd row.application/jsonshow example ▸
404Row not found.
Response Schema(22 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
matchup_opponent_id | bigintnullable | — | — e.g. — (all-null in sample) |
player_id | bigint | — e.g. 195 | |
round_matchup_opponent_id | bigintnullable | — | — e.g. — (all-null in sample) |
three_ball_opponent1_id | bigintnullable | — | — e.g. — (all-null in sample) |
three_ball_opponent2_id | bigintnullable | — | — e.g. — (all-null in sample) |
tournament_id | bigint | — e.g. 604 | |
first_round_leader_odds | integernullable | — | — e.g. — (all-null in sample) |
is_alternate | booleannullable | — | — e.g. — (all-null in sample) |
is_available | booleannullable | — | — e.g. true |
make_cut_odds | integernullable | — | — e.g. — (all-null in sample) |
matchup_odds | integernullable | — | — e.g. — (all-null in sample) |
matchup_opponent_odds | integernullable | — | — e.g. — (all-null in sample) |
miss_cut_odds | integernullable | — | — e.g. — (all-null in sample) |
outright_odds | integernullable | — | Odds to win tournament (American format) e.g. 15000 |
round_matchup_odds | integernullable | — | — e.g. — (all-null in sample) |
round_matchup_opponent_odds | integernullable | — | — e.g. — (all-null in sample) |
sportsbook | stringnullable | — | DraftKings, FanDuel, BetMGM, etc. Values:fandueldraftkingsbetfairwilliamhill_usunibetintertopslowvigbetriversbetmgmbarstoolsugarhousebetonlineagfoxbetbovadasuperbookunibet_ustwinspiresgtbets |
three_ball_odds | integernullable | — | — e.g. — (all-null in sample) |
top_five_odds | integernullable | — | — e.g. — (all-null in sample) |
top_ten_odds | integernullable | — | — e.g. — (all-null in sample) |
top_twenty_odds | integernullable | — | — e.g. — (all-null in sample) |
Misc
tours
golf.toursProfessional golf tours — the PGA Tour, LIV Golf, the DP World Tour (formerly European Tour), the Korn Ferry Tour, the LPGA, and other competitive circuits.
GET/api/v1/pga/toursList tours for PGA
Parameters
activequerybooleanoptionalFilter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/tours?limit=3'Responses
200tours rows matching the declared filter set, wrapped in { tours, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
active | boolean | — | — e.g. true |
code | string | — | Tour code (pga, european, liv, lpga, champions, korn_ferry) Values:pgaeuropeanlivlpgachampionskorn_ferry |
description | stringnullable | — | — Values:Professional Golf Assoc…DP World Tour (formerly…LIV Golf Invitational S…Ladies Professional Gol…PGA Tour Champions (sen…PGA Tour developmental … |
logo_url | stringnullable | — | — e.g. — (all-null in sample) |
name | string | — | — Values:PGA TourEuropean Tour (DP World…LIV GolfLPGA TourChampions TourKorn Ferry Tour |
GET/api/v1/pga/tours/{id}Get a single tour by id
Parameters
idpathbigintrequiredPrimary key (id) of the tour row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/tours/{pk_value}'Responses
200Single tour row.application/jsonshow example ▸
404Row not found.
Response Schema(6 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
active | boolean | — | — e.g. true |
code | string | — | Tour code (pga, european, liv, lpga, champions, korn_ferry) Values:pgaeuropeanlivlpgachampionskorn_ferry |
description | stringnullable | — | — Values:Professional Golf Assoc…DP World Tour (formerly…LIV Golf Invitational S…Ladies Professional Gol…PGA Tour Champions (sen…PGA Tour developmental … |
logo_url | stringnullable | — | — e.g. — (all-null in sample) |
name | string | — | — Values:PGA TourEuropean Tour (DP World…LIV GolfLPGA TourChampions TourKorn Ferry Tour |
courses
golf.coursesGolf courses that host professional events — Augusta National, Pebble Beach, St Andrews, TPC Sawgrass, and every other venue on the PGA, LIV, DP World, and Korn Ferry calendars.
GET/api/v1/pga/coursesList courses for PGA
Parameters
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/courses?limit=3'Responses
200courses rows matching the declared filter set, wrapped in { courses, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(15 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_course_id | integernullable | — | Official PGA Tour course id e.g. 656 |
address | stringnullable | — | — e.g. — (all-null in sample) |
city | stringnullable | — | — e.g. La Quinta |
country | stringnullable | — | — Values:USACANMEXSCOPURDOMFRAJPNBERBAHENG |
elevation | floatnullable | — | Elevation in feet above sea level e.g. — (all-null in sample) |
image_url | stringnullable | — | URL to aerial/overview image of course e.g. https://res.cloudinary.com/pgatour-prod/ar_0.667,c_crop/d_p… |
latitude | floatnullable | — | — e.g. — (all-null in sample) |
longitude | floatnullable | — | — e.g. — (all-null in sample) |
name | string | — | — e.g. Plantation Course at Kapalua |
par | integer | — | — e.g. 72 |
state | stringnullable | — | — e.g. California |
timezone | stringnullable | — | IANA timezone (e.g., America/New_York) e.g. — (all-null in sample) |
yards | integer | — | — e.g. 7569 |
zip | stringnullable | — | — e.g. — (all-null in sample) |
GET/api/v1/pga/courses/{id}Get a single course by id
Parameters
idpathbigintrequiredPrimary key (id) of the course row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/courses/{pk_value}'Responses
200Single course row.application/jsonshow example ▸
404Row not found.
Response Schema(15 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
league_course_id | integernullable | — | Official PGA Tour course id e.g. 656 |
address | stringnullable | — | — e.g. — (all-null in sample) |
city | stringnullable | — | — e.g. La Quinta |
country | stringnullable | — | — Values:USACANMEXSCOPURDOMFRAJPNBERBAHENG |
elevation | floatnullable | — | Elevation in feet above sea level e.g. — (all-null in sample) |
image_url | stringnullable | — | URL to aerial/overview image of course e.g. https://res.cloudinary.com/pgatour-prod/ar_0.667,c_crop/d_p… |
latitude | floatnullable | — | — e.g. — (all-null in sample) |
longitude | floatnullable | — | — e.g. — (all-null in sample) |
name | string | — | — e.g. Plantation Course at Kapalua |
par | integer | — | — e.g. 72 |
state | stringnullable | — | — e.g. California |
timezone | stringnullable | — | IANA timezone (e.g., America/New_York) e.g. — (all-null in sample) |
yards | integer | — | — e.g. 7569 |
zip | stringnullable | — | — e.g. — (all-null in sample) |
player_news
golf.player_newsNews about professional golfers — equipment changes, swing coach updates, sponsorships, tour-status changes, suspensions, and general beat-reporter updates.
GET/api/v1/pga/player_newsList player_news for PGA
Requires one of:
player_id or tournament_id — requests satisfying none of these return 400.Parameters
player_idquerybigintoptionalFilter to a single player.
tournament_idquerybigintoptionalFilter to a tournament.
news_timequerytimestamptzoptionalFilter by publication time (ISO 8601). Use news_time__gte to poll for items since your last check. Range syntax: news_time__gte=, news_time__lte=, news_time__between=.
limitqueryintegeroptionaldefault 50Page size. Defaults to 50; max 5000.
from_idquerybigintoptionalReturn rows with id strictly greater than this value; page using the previous response's `next_from_id`. Omit on the first page.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/player_news?player_id=1'Responses
200player_news rows matching the declared filter set, wrapped in { player_news, limit, next_from_id }. next_from_id is the last row's id on a full page — pass it back via ?from_id= to walk the full result; null marks the terminal page.application/jsonshow example ▸
400No declared filter set was satisfied — response body matches MissingRequiredFiltersError; pick one combo from the accepted-sets hint and resend.
application/jsonResponse Schema(17 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigintnullable | — e.g. 168 | |
tournament_id | bigintnullable | — e.g. — (all-null in sample) | |
ai_processed | boolean | — | — e.g. false |
author | stringnullable | — | — e.g. — (all-null in sample) |
categories | stringnullable | — | — e.g. Latest |
content | stringnullable | — | — e.g. Pairings, predictions and betting odds for each Sunday Sing… |
news_time | timestamptz | — | — e.g. 2025-08-04T15:19:00.000Z |
original_source | stringnullable | — | — e.g. — (all-null in sample) |
original_source_url | stringnullable | — | — e.g. — (all-null in sample) |
priority | integer | — | — e.g. 10 |
situational_impact | jsonbnullable | — | Structured situational impact assessment and fantasy implications for the player. e.g. — (all-null in sample) |
source | stringnullable | — | — e.g. pga_tour |
terms_of_use | stringnullable | — | — e.g. — (all-null in sample) |
title | string | — | — e.g. One-liners: Get to know all 70 players who made 2025 FedExC… |
updated_time | timestamptznullable | — | — e.g. 2025-08-04T15:28:47.169Z |
url | stringnullable | — | — e.g. https://www.pgatour.com/article/news/latest/2025/08/04/70-o… |
GET/api/v1/pga/player_news/{id}Get a single player_new by id
Parameters
idpathbigintrequiredPrimary key (id) of the player_new row.
Restores the documented defaults (trial keys only accept the unchanged defaults).
Request
curl -sS --compressed \
-H 'Authorization: Bearer YOUR_API_KEY' \
'https://api.stat-api.com/api/v1/pga/player_news/{pk_value}'Responses
200Single player_new row.application/jsonshow example ▸
404Row not found.
Response Schema(17 fields)show schema ▸
| Field | Type | References | Description |
|---|---|---|---|
idkey | bigint | — | Primary Key |
player_id | bigintnullable | — e.g. 168 | |
tournament_id | bigintnullable | — e.g. — (all-null in sample) | |
ai_processed | boolean | — | — e.g. false |
author | stringnullable | — | — e.g. — (all-null in sample) |
categories | stringnullable | — | — e.g. Latest |
content | stringnullable | — | — e.g. Pairings, predictions and betting odds for each Sunday Sing… |
news_time | timestamptz | — | — e.g. 2025-08-04T15:19:00.000Z |
original_source | stringnullable | — | — e.g. — (all-null in sample) |
original_source_url | stringnullable | — | — e.g. — (all-null in sample) |
priority | integer | — | — e.g. 10 |
situational_impact | jsonbnullable | — | Structured situational impact assessment and fantasy implications for the player. e.g. — (all-null in sample) |
source | stringnullable | — | — e.g. pga_tour |
terms_of_use | stringnullable | — | — e.g. — (all-null in sample) |
title | string | — | — e.g. One-liners: Get to know all 70 players who made 2025 FedExC… |
updated_time | timestamptznullable | — | — e.g. 2025-08-04T15:28:47.169Z |
url | stringnullable | — | — e.g. https://www.pgatour.com/article/news/latest/2025/08/04/70-o… |