STAT-API

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

playersgolf.players
Every 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/players
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(16 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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)
seasonsgolf.seasons
Each 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/seasons
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(6 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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
tournamentsgolf.tournaments
Every 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/tournaments
Requires one of: season_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a single season. Defaults to the current season.
tour_idquerybigintoptional
Filter by tour.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(21 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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_roundsgolf.player_rounds
Each 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_rounds
Requires one of: player_id or tournament_id — requests satisfying none of these return 400.
Parameters
player_idquerybigintoptional
Filter to a single player.
tournament_idquerybigintoptional
Filter to a single tournament.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(25 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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_shotsgolf.player_shots
Shot-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_shots
Requires one of: player_id or tournament_id — requests satisfying none of these return 400.
Parameters
player_idquerybigintoptional
Filter to a single player.
tournament_idquerybigintoptional
Filter to a single tournament.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(30 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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_roundsgolf.tournament_rounds
Each 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_rounds
Requires one of: tournament_id — requests satisfying none of these return 400.
Parameters
tournament_idquerybigintoptional
Filter to a single tournament.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(5 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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_holesgolf.player_holes
Hole-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_holes
Requires one of: player_id or tournament_id — requests satisfying none of these return 400.
Parameters
player_idquerybigintoptional
Filter to a single player.
tournament_idquerybigintoptional
Filter to a single tournament.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(17 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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_lookupsgolf.operator_player_lookups
How 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_lookups
Requires one of: operator_id — requests satisfying none of these return 400.
Parameters
operator_idquerybigintoptional
Filter by operator.
player_idquerybigintoptional
Filter to a single player.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(8 fields)show schema ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
operator_id
bigintOperator 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
bigintnullableInternal 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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
idkey
bigint—Primary Key
operator_id
bigintOperator 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
bigintnullableInternal 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_statsgolf.player_season_stats
Season 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_stats
Requires one of: season_id or player_id — requests satisfying none of these return 400.
Parameters
season_idquerybigintoptional
Filter to a single season. Defaults to the current season.
player_idquerybigintoptional
Filter to a single player.
tour_idquerybigintoptional
Filter by tour.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(40 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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_statsgolf.course_hole_stats
Per-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_stats
Requires one of: tournament_id — requests satisfying none of these return 400.
Parameters
tournament_idquerybigintoptional
Filter to a single tournament.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(15 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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
leaderboardsgolf.leaderboards
The 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/leaderboards
Requires one of: tournament_id or player_id — requests satisfying none of these return 400.
Parameters
tournament_idquerybigintoptional
Filter to a single tournament.
player_idquerybigintoptional
Filter to a single player.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(23 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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_oddsgolf.tournament_odds
Outright 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_odds
Requires one of: tournament_id — requests satisfying none of these return 400.
Parameters
tournament_idquerybigintoptional
Filter to a single tournament.
player_idquerybigintoptional
Filter to a single player.
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(22 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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

toursgolf.tours
Professional 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/tours
Parameters
activequerybooleanoptional
Filter by active status (defaults to true to show only currently-active rows; pass active=false to include inactive).
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(6 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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
coursesgolf.courses
Golf 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/courses
Parameters
limitqueryintegeroptionaldefault 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(15 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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_newsgolf.player_news
News about professional golfers — equipment changes, swing coach updates, sponsorships, tour-status changes, suspensions, and general beat-reporter updates.
GET/api/v1/pga/player_news
Requires one of: player_id or tournament_id — requests satisfying none of these return 400.
Parameters
player_idquerybigintoptional
Filter to a single player.
tournament_idquerybigintoptional
Filter to a tournament.
news_timequerytimestamptzoptional
Filter 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 50
Page size. Defaults to 50; max 5000.
from_idquerybigintoptional
Return 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/json
Response Schema(17 fields)show schema ▸
FieldTypeReferencesDescription
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}
Parameters
idpathbigintrequired
Primary 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 ▸
FieldTypeReferencesDescription
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…