PGA player_shots API
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 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 |