openapi: 3.0.3 info: title: BALLDONTLIE LPGA API version: 1.0.0 description: >- LPGA tournaments, players, leaderboards, round statistics, scorecards, tee times, standings and betting odds. servers: - url: https://api.balldontlie.io/lpga/v1 security: - ApiKeyAuth: [] paths: /tournaments: get: summary: Tournaments operationId: getLpgaTournaments description: 'List LPGA tournaments and their current status. Minimum tier: Free.' parameters: - name: tournament_ids[] in: query required: false description: Filter by tournament IDs (1–100 values). schema: type: array items: type: integer format: int64 minimum: 1 minItems: 1 maxItems: 100 style: form explode: true - name: season in: query required: false description: Four-digit season year. schema: type: integer minimum: 1000 maximum: 9999 - name: status in: query required: false description: Tournament status. schema: type: string enum: - scheduled - in_progress - final - name: start_date in: query required: false description: Include tournaments starting on or after this date. schema: type: string format: date - name: end_date in: query required: false description: Include tournaments starting on or before this date; must be on or after start_date. schema: type: string format: date - name: cursor in: query required: false description: Cursor from the previous response’s meta.next_cursor. schema: type: integer minimum: 1 - name: per_page in: query required: false description: Number of results (default 25, maximum 100; larger values are capped). schema: type: integer minimum: 1 default: 25 responses: '200': description: Success content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Tournament' meta: $ref: '#/components/schemas/Pagination' example: data: - id: 1 season: 2026 name: Hilton Grand Vacations Tournament of Champions start_date: '2026-01-29' end_date: '2026-02-01' location: Orlando, FL course: Lake Nona Golf & Country Club timezone: null status: final format: null total_rounds: 3 current_round: 3 purse: 2100000 available_points: 500 meta: next_cursor: 1 per_page: 1 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '429': description: Rate limit exceeded /tournaments/{id}: get: summary: Tournament operationId: getLpgaTournament description: 'Get a single LPGA tournament. Minimum tier: Free.' parameters: - name: id in: path required: true description: Tournament ID. schema: type: integer format: int64 minimum: 1 responses: '200': description: Success content: application/json: schema: type: object required: - data properties: data: $ref: '#/components/schemas/Tournament' example: data: id: 31 season: 2026 name: The ANNIKA driven by Gainbridge at Pelican start_date: '2026-11-12' end_date: '2026-11-15' location: Belleair, FL course: Pelican Golf Club timezone: America/New_York status: in_progress format: Stroke Play total_rounds: 4 current_round: 4 purse: 3250000 available_points: 500 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '404': description: Resource not found '429': description: Rate limit exceeded /players: get: summary: Players operationId: getLpgaPlayers description: 'List LPGA players. Minimum tier: Free.' parameters: - name: player_ids[] in: query required: false description: Filter by player IDs (1–100 values). schema: type: array items: type: integer format: int64 minimum: 1 minItems: 1 maxItems: 100 style: form explode: true - name: search in: query required: false description: Case-insensitive player name search. schema: type: string minLength: 1 maxLength: 100 - name: country in: query required: false description: Three-letter country code; case-insensitive. schema: type: string pattern: ^[a-zA-Z]{3}$ - name: cursor in: query required: false description: Cursor from the previous response’s meta.next_cursor. schema: type: integer minimum: 1 - name: per_page in: query required: false description: Number of results (default 25, maximum 100; larger values are capped). schema: type: integer minimum: 1 default: 25 responses: '200': description: Success content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Player' meta: $ref: '#/components/schemas/Pagination' example: data: - id: 1 name: Miyu Yamashita country: JPN amateur: false meta: next_cursor: 1 per_page: 1 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '429': description: Rate limit exceeded /players/{id}: get: summary: Player operationId: getLpgaPlayer description: 'Get a single LPGA player. Minimum tier: Free.' parameters: - name: id in: path required: true description: Player ID. schema: type: integer format: int64 minimum: 1 responses: '200': description: Success content: application/json: schema: type: object required: - data properties: data: $ref: '#/components/schemas/Player' example: data: id: 1 name: Miyu Yamashita country: JPN amateur: false '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '404': description: Resource not found '429': description: Rate limit exceeded /entries: get: summary: Tournament Entries operationId: getLpgaTournamentEntries description: >- Get the tournament field, leaderboard positions and results. An entry can contain multiple players for team events. Null values indicate unavailable data. Minimum tier: ALL-STAR. parameters: - name: tournament_id in: query required: true description: Tournament ID. schema: type: integer minimum: 1 - name: player_ids[] in: query required: false description: Filter by player IDs (1–100 values). schema: type: array items: type: integer format: int64 minimum: 1 minItems: 1 maxItems: 100 style: form explode: true - name: entry_ids[] in: query required: false description: Filter by entry IDs (1–100 values). schema: type: array items: type: integer format: int64 minimum: 1 minItems: 1 maxItems: 100 style: form explode: true - name: status in: query required: false description: Entry status. schema: type: string enum: - active - cut - withdrawn - disqualified - did_not_start - did_not_play - unknown - name: field_present in: query required: false description: Filter entries currently in the field. schema: type: boolean - name: cursor in: query required: false description: Cursor from the previous response’s meta.next_cursor. schema: type: integer minimum: 1 - name: per_page in: query required: false description: Number of results (default 25, maximum 100; larger values are capped). schema: type: integer minimum: 1 default: 25 responses: '200': description: Success content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Entry' meta: $ref: '#/components/schemas/Pagination' example: data: - id: 78 tournament_id: 31 players: - id: 78 name: Macy Pate (a) country: USA amateur: true field_present: true field_status: Entered position: CUT status: cut strokes: 146 to_par: 6 thru: F prize_money: null points: null playoff_status: null scorecards_available: true meta: next_cursor: 78 per_page: 1 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '429': description: Rate limit exceeded /rounds: get: summary: Player Rounds operationId: getLpgaPlayerRounds description: 'Get round scores and statistics. Statistics may be null when unavailable. Minimum tier: GOAT.' parameters: - name: tournament_id in: query required: true description: Tournament ID. schema: type: integer minimum: 1 - name: player_ids[] in: query required: false description: Filter by player IDs (1–100 values). schema: type: array items: type: integer format: int64 minimum: 1 minItems: 1 maxItems: 100 style: form explode: true - name: entry_ids[] in: query required: false description: Filter by entry IDs (1–100 values). schema: type: array items: type: integer format: int64 minimum: 1 minItems: 1 maxItems: 100 style: form explode: true - name: round in: query required: false description: Round number. schema: type: integer minimum: 1 maximum: 10 - name: cursor in: query required: false description: Cursor from the previous response’s meta.next_cursor. schema: type: integer minimum: 1 - name: per_page in: query required: false description: Number of results (default 25, maximum 100; larger values are capped). schema: type: integer minimum: 1 default: 25 responses: '200': description: Success content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Round' meta: $ref: '#/components/schemas/Pagination' example: data: - id: 1058741 tournament_id: 31 entry_id: 166 player_ids: - 166 round: 1 strokes: 69 par: 70 to_par: -1 fairways_hit: 12 fairways_total: 14 greens_hit: 14 greens_total: 18 putts: 30 driving_distance: 252 sand_saves: 1 sand_attempts: 1 meta: next_cursor: 1058741 per_page: 1 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '429': description: Rate limit exceeded /scorecards: get: summary: Scorecards operationId: getLpgaScorecards description: 'Get hole-by-hole scores. Unplayed or unavailable hole scores are null. Minimum tier: GOAT.' parameters: - name: tournament_id in: query required: true description: Tournament ID. schema: type: integer minimum: 1 - name: player_ids[] in: query required: false description: Filter by player IDs (1–100 values). schema: type: array items: type: integer format: int64 minimum: 1 minItems: 1 maxItems: 100 style: form explode: true - name: entry_ids[] in: query required: false description: Filter by entry IDs (1–100 values). schema: type: array items: type: integer format: int64 minimum: 1 minItems: 1 maxItems: 100 style: form explode: true - name: round in: query required: false description: Round number. schema: type: integer minimum: 1 maximum: 10 - name: cursor in: query required: false description: Cursor from the previous response’s meta.next_cursor. schema: type: integer minimum: 1 - name: per_page in: query required: false description: Number of results (default 25, maximum 100; larger values are capped). schema: type: integer minimum: 1 default: 25 responses: '200': description: Success content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Scorecard' meta: $ref: '#/components/schemas/Pagination' example: data: - id: 1058741 tournament_id: 31 entry_id: 166 player_ids: - 166 round: 1 strokes: 69 par: 70 to_par: -1 holes: - hole: 1 par: 4 yardage: 312 strokes: 4 - hole: 2 par: 4 yardage: 397 strokes: 3 - hole: 3 par: 3 yardage: 182 strokes: 3 - hole: 4 par: 4 yardage: 408 strokes: 4 - hole: 5 par: 4 yardage: 360 strokes: 4 - hole: 6 par: 4 yardage: 369 strokes: 4 - hole: 7 par: 5 yardage: 495 strokes: 4 - hole: 8 par: 4 yardage: 425 strokes: 4 - hole: 9 par: 3 yardage: 158 strokes: 5 - hole: 10 par: 4 yardage: 420 strokes: 4 - hole: 11 par: 4 yardage: 381 strokes: 4 - hole: 12 par: 3 yardage: 143 strokes: 3 - hole: 13 par: 4 yardage: 423 strokes: 4 - hole: 14 par: 5 yardage: 529 strokes: 4 - hole: 15 par: 3 yardage: 191 strokes: 3 - hole: 16 par: 4 yardage: 388 strokes: 4 - hole: 17 par: 4 yardage: 340 strokes: 4 - hole: 18 par: 4 yardage: 428 strokes: 4 meta: next_cursor: 1058741 per_page: 1 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '429': description: Rate limit exceeded /tee_times: get: summary: Tee Times operationId: getLpgaTeeTimes description: 'Get tee times with local time, IANA timezone and the corresponding UTC timestamp. Minimum tier: GOAT.' parameters: - name: tournament_id in: query required: true description: Tournament ID. schema: type: integer minimum: 1 - name: player_ids[] in: query required: false description: Filter by player IDs (1–100 values). schema: type: array items: type: integer format: int64 minimum: 1 minItems: 1 maxItems: 100 style: form explode: true - name: round in: query required: false description: Round number. schema: type: integer minimum: 1 maximum: 10 - name: date in: query required: false description: Local tee-time date. schema: type: string format: date - name: cursor in: query required: false description: Cursor from the previous response’s meta.next_cursor. schema: type: integer minimum: 1 - name: per_page in: query required: false description: Number of results (default 25, maximum 100; larger values are capped). schema: type: integer minimum: 1 default: 25 responses: '200': description: Success content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/TeeTime' meta: $ref: '#/components/schemas/Pagination' example: data: - id: 2619 tournament_id: 31 player_id: 163 round: 1 group_number: 1 start_tee: 1 date: '2026-11-12' local_time: '07:00:00' timezone: America/New_York starts_at: '2026-11-12T12:00:00.000Z' meta: next_cursor: 2619 per_page: 1 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '429': description: Rate limit exceeded /standings: get: summary: Standings operationId: getLpgaStandings description: 'Get season points standings. Minimum tier: ALL-STAR.' parameters: - name: season in: query required: true description: Four-digit season year. schema: type: integer minimum: 1000 maximum: 9999 - name: player_ids[] in: query required: false description: Filter by player IDs (1–100 values). schema: type: array items: type: integer format: int64 minimum: 1 minItems: 1 maxItems: 100 style: form explode: true - name: cursor in: query required: false description: Cursor from the previous response’s meta.next_cursor. schema: type: integer minimum: 1 - name: per_page in: query required: false description: Number of results (default 25, maximum 100; larger values are capped). schema: type: integer minimum: 1 default: 25 responses: '200': description: Success content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/Standing' meta: $ref: '#/components/schemas/Pagination' example: data: - id: 1 season: 2026 player: id: 81 name: Nelly Korda country: USA amateur: false rank: 1 points: 3713.875 events_played: 15 wins: 4 top_tens: 10 meta: next_cursor: 1 per_page: 1 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '429': description: Rate limit exceeded /futures: get: summary: Futures operationId: getLpgaFutures description: >- Get current tournament futures prices. Market names distinguish ties, rounds, groups and excluded players. Availability varies by tournament and sportsbook. Minimum tier: GOAT. parameters: - name: player_ids[] in: query required: false description: Filter by player IDs. schema: type: array items: type: integer format: int64 minimum: 1 style: form explode: true - name: tournament_ids[] in: query required: false description: Filter by tournament IDs. schema: type: array items: type: integer format: int64 minimum: 1 style: form explode: true - name: vendors[] in: query required: false description: Filter by sportsbook, such as draftkings or fanduel. schema: type: array items: type: string style: form explode: true - name: market_types[] in: query required: false description: Filter by exact market type returned by the API. schema: type: array items: type: string style: form explode: true - name: cursor in: query required: false description: Cursor from the previous response’s meta.next_cursor. schema: type: integer minimum: 1 - name: per_page in: query required: false description: Number of results (default 25, maximum 100). schema: type: integer minimum: 1 default: 25 maximum: 100 responses: '200': description: Success content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/FuturesOdd' meta: $ref: '#/components/schemas/Pagination' example: data: - id: 436562011 market_type: tournament_winner market_name: 2026 The ANNIKA driven by Gainbridge at Pelican — Outright player: id: 83 name: Hye-Jin Choi country: KOR amateur: false tournament: id: 31 season: 2026 name: The ANNIKA driven by Gainbridge at Pelican start_date: '2026-11-12' end_date: '2026-11-15' location: Belleair, FL course: Pelican Golf Club timezone: America/New_York status: in_progress format: Stroke Play total_rounds: 4 current_round: 4 purse: 3250000 available_points: 500 vendor: draftkings american_odds: 172 updated_at: '2026-11-14T23:45:02.846Z' meta: next_cursor: 436562011 per_page: 1 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '429': description: Rate limit exceeded /odds/player_props: get: summary: Player Props operationId: getLpgaPlayerProps description: >- Get current player props for a tournament, including offered pre-tournament and live markets. Availability varies by sportsbook; specific hole or score markets are not guaranteed. The response’s game_id is the tournament ID. All matching results are returned without cursor pagination. Minimum tier: GOAT. parameters: - name: tournament_id in: query required: true description: Tournament ID. schema: type: integer minimum: 1 maximum: 2147483647 - name: player_id in: query required: false description: Player ID. schema: type: integer minimum: 1 maximum: 2147483647 - name: prop_type in: query required: false description: Exact prop type returned by the API. schema: type: string - name: vendors[] in: query required: false description: Filter by sportsbook, such as draftkings. schema: type: array items: type: string style: form explode: true responses: '200': description: Success content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/PlayerProp' meta: type: object required: - per_page properties: per_page: type: integer format: int64 example: data: - id: 11115544538 game_id: 31 player_id: 84 vendor: draftkings prop_type: top_group_b_winner_group_84_86_89_96_winner_d338b49d80c5 line_value: '0.5' market: type: milestone odds: -166 updated_at: '2026-11-14T23:45:02.846Z' meta: per_page: 1 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '429': description: Rate limit exceeded /odds/player_props/opening: get: summary: Opening Player Props operationId: getLpgaOpeningPlayerProps description: >- Get the first captured pre-tournament quote for each player, sportsbook, prop type and line. Quotes first captured after the tournament starts are not opening prices. An empty response means no matching opening prices are available. The response’s game_id is the tournament ID; opened_at is the capture time. All matching results are returned without cursor pagination. Minimum tier: GOAT. parameters: - name: tournament_id in: query required: true description: Tournament ID. schema: type: integer minimum: 1 maximum: 2147483647 - name: player_id in: query required: false description: Player ID. schema: type: integer minimum: 1 maximum: 2147483647 - name: prop_type in: query required: false description: Exact prop type returned by the API. schema: type: string - name: vendors[] in: query required: false description: Filter by sportsbook, such as draftkings. schema: type: array items: type: string style: form explode: true responses: '200': description: Success content: application/json: schema: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/OpeningPlayerProp' meta: type: object required: - per_page properties: per_page: type: integer format: int64 example: data: [] meta: per_page: 0 '400': description: Invalid request parameters '401': description: Invalid API key or insufficient tier '429': description: Rate limit exceeded components: securitySchemes: ApiKeyAuth: type: apiKey in: header name: Authorization schemas: Player: type: object required: - id - name - country - amateur properties: id: type: integer format: int64 name: type: string country: type: string nullable: true amateur: type: boolean nullable: true Tournament: type: object required: - id - season - name - start_date - end_date - location - course - timezone - status - format - total_rounds - current_round - purse - available_points properties: id: type: integer format: int64 season: type: integer format: int64 name: type: string start_date: type: string format: date end_date: type: string format: date location: type: string nullable: true course: type: string nullable: true timezone: type: string nullable: true status: type: string enum: - scheduled - in_progress - final format: type: string nullable: true total_rounds: type: integer format: int64 nullable: true current_round: type: integer format: int64 nullable: true purse: type: number nullable: true available_points: type: number nullable: true Entry: type: object required: - id - tournament_id - players - field_present - field_status - position - status - strokes - to_par - thru - prize_money - points - playoff_status - scorecards_available properties: id: type: integer format: int64 tournament_id: type: integer format: int64 players: type: array items: $ref: '#/components/schemas/Player' field_present: type: boolean field_status: type: string nullable: true position: type: string nullable: true status: type: string nullable: true enum: - active - cut - withdrawn - disqualified - did_not_start - did_not_play - unknown - null strokes: type: integer format: int64 nullable: true to_par: type: integer format: int64 nullable: true thru: type: string nullable: true prize_money: type: number nullable: true points: type: number nullable: true playoff_status: type: string nullable: true enum: - winner - eliminated - null scorecards_available: type: boolean nullable: true Round: type: object required: - id - tournament_id - entry_id - player_ids - round - strokes - par - to_par - fairways_hit - fairways_total - greens_hit - greens_total - putts - driving_distance - sand_saves - sand_attempts properties: id: type: integer format: int64 tournament_id: type: integer format: int64 entry_id: type: integer format: int64 player_ids: type: array items: type: integer format: int64 round: type: integer format: int64 strokes: type: integer format: int64 nullable: true par: type: integer format: int64 nullable: true to_par: type: integer format: int64 nullable: true fairways_hit: type: integer format: int64 nullable: true fairways_total: type: integer format: int64 nullable: true greens_hit: type: integer format: int64 nullable: true greens_total: type: integer format: int64 nullable: true putts: type: integer format: int64 nullable: true driving_distance: type: number nullable: true sand_saves: type: integer format: int64 nullable: true sand_attempts: type: integer format: int64 nullable: true Scorecard: type: object required: - id - tournament_id - entry_id - player_ids - round - strokes - par - to_par - holes properties: id: type: integer format: int64 tournament_id: type: integer format: int64 entry_id: type: integer format: int64 player_ids: type: array items: type: integer format: int64 round: type: integer format: int64 strokes: type: integer format: int64 nullable: true par: type: integer format: int64 nullable: true to_par: type: integer format: int64 nullable: true holes: type: array items: type: object required: - hole - par - yardage - strokes properties: hole: type: integer format: int64 par: type: integer format: int64 nullable: true yardage: type: integer format: int64 nullable: true strokes: type: integer format: int64 nullable: true TeeTime: type: object required: - id - tournament_id - player_id - round - group_number - start_tee - date - local_time - timezone - starts_at properties: id: type: integer format: int64 tournament_id: type: integer format: int64 player_id: type: integer format: int64 round: type: integer format: int64 group_number: type: integer format: int64 nullable: true start_tee: type: integer format: int64 nullable: true date: type: string format: date local_time: type: string timezone: type: string starts_at: type: string format: date-time Standing: type: object required: - id - season - player - rank - points - events_played - wins - top_tens properties: id: type: integer format: int64 season: type: integer format: int64 player: $ref: '#/components/schemas/Player' rank: type: integer format: int64 nullable: true points: type: number nullable: true events_played: type: integer format: int64 nullable: true wins: type: integer format: int64 nullable: true top_tens: type: integer format: int64 nullable: true FuturesOdd: type: object required: - id - market_type - market_name - player - tournament - vendor - american_odds - updated_at properties: id: type: integer format: int64 market_type: type: string market_name: type: string player: type: object required: - id - name - country - amateur properties: id: type: integer format: int64 name: type: string country: type: string nullable: true amateur: type: boolean nullable: true nullable: true tournament: type: object required: - id - season - name - start_date - end_date - location - course - timezone - status - format - total_rounds - current_round - purse - available_points properties: id: type: integer format: int64 season: type: integer format: int64 name: type: string start_date: type: string format: date end_date: type: string format: date location: type: string nullable: true course: type: string nullable: true timezone: type: string nullable: true status: type: string enum: - scheduled - in_progress - final format: type: string nullable: true total_rounds: type: integer format: int64 nullable: true current_round: type: integer format: int64 nullable: true purse: type: number nullable: true available_points: type: number nullable: true nullable: true vendor: type: string american_odds: type: integer format: int64 nullable: true updated_at: type: string format: date-time nullable: true PlayerProp: type: object required: - id - game_id - player_id - vendor - prop_type - line_value - market - updated_at properties: id: type: integer format: int64 game_id: type: integer format: int64 description: Tournament ID. player_id: type: integer format: int64 vendor: type: string prop_type: type: string line_value: type: string market: oneOf: - type: object required: - type - odds properties: type: type: string enum: - milestone odds: type: integer format: int64 nullable: true - type: object required: - type - over_odds - under_odds properties: type: type: string enum: - over_under over_odds: type: integer format: int64 nullable: true under_odds: type: integer format: int64 nullable: true updated_at: type: string format: date-time OpeningPlayerProp: type: object required: - id - game_id - player_id - vendor - prop_type - line_value - market - opened_at properties: id: type: integer format: int64 game_id: type: integer format: int64 description: Tournament ID. player_id: type: integer format: int64 vendor: type: string prop_type: type: string line_value: type: string market: oneOf: - type: object required: - type - odds properties: type: type: string enum: - milestone odds: type: integer format: int64 nullable: true - type: object required: - type - over_odds - under_odds properties: type: type: string enum: - over_under over_odds: type: integer format: int64 nullable: true under_odds: type: integer format: int64 nullable: true opened_at: type: string format: date-time Pagination: type: object required: - per_page properties: next_cursor: type: integer format: int64 per_page: type: integer format: int64