LPGA API
Welcome to the BALLDONTLIE LPGA API, with tournaments, players, leaderboards, round statistics, scorecards, tee times, standings and betting odds. An API key is required. You can obtain an API key by creating a free account on our website. Read the authentication section to learn how to use the API key.
Take a look at our other APIs.
AI-Powered Integration
Using the OpenAPI Specification with AI
Our complete OpenAPI specification allows AI assistants to automatically understand and interact with our API. Simply share the spec URL with your AI assistant and describe what you want to build—the AI will handle the technical implementation.
Getting Started with AI:
- Copy this URL:
https://www.balldontlie.io/openapi/lpga.yml - Share it with your preferred AI assistant (ChatGPT, the agent, Gemini, etc.)
- Tell the AI what you want to build (e.g., "Create a dashboard showing the current LPGA leaderboard")
- The AI will read the OpenAPI spec and write the code for you
Example prompts to try:
- "Using the OpenAPI spec at https://www.balldontlie.io/openapi/lpga.yml, show me how to get Nelly Korda’s tournament results"
- "Read the BALLDONTLIE OpenAPI spec and create a Python script that fetches LPGA tournaments"
- "Help me understand the available LPGA endpoints from this OpenAPI spec: https://www.balldontlie.io/openapi/lpga.yml"
This makes it incredibly easy for non-technical users, analysts, and researchers to leverage our sports data without needing to learn programming from scratch.
Account Tiers
Annual billing saves 20%. Choose monthly or annual billing when subscribing. Annual prices are charged once per year.
| Plan | Monthly (USD) | Annual (USD) |
|---|---|---|
| ALL-STAR | $9.99/month | $95.90/year |
| GOAT | $39.99/month | $383.90/year |
| ALL-ACCESS | $299.99/month | $2,879.90/year |
There are three different account tiers which provide you access to different types of data. Visit our website to create an account for free.
ALL-STAR and GOAT pricing is per league. A subscription covers only the selected league, even when multiple leagues play the same sport. ALL-ACCESS includes every endpoint for all leagues. LPGA and PGA require separate paid subscriptions unless you have ALL-ACCESS.
Read the table below to see the breakdown.
| Endpoint | Free | ALL-STAR | GOAT |
|---|---|---|---|
| Tournaments | Yes | Yes | Yes |
| Tournament | Yes | Yes | Yes |
| Players | Yes | Yes | Yes |
| Player | Yes | Yes | Yes |
| Tournament Entries | No | Yes | Yes |
| Player Rounds | No | No | Yes |
| Scorecards | No | No | Yes |
| Tee Times | No | No | Yes |
| Standings | No | Yes | Yes |
| Futures | No | No | Yes |
| Player Props | No | No | Yes |
| Opening Player Props | No | No | Yes |
The feature breakdown per tier is shown in the table below.
| Tier | Requests / Min | $USD / mo. |
|---|---|---|
| GOAT | 600 | 39.99 |
| ALL-STAR | 60 | 9.99 |
| Free | 5 | 0 |
7-day free trial
Each league subscription offers a 7-day trial of the GOAT tier (all endpoints, 5 req/min during the trial). ALL-ACCESS is also available as a 7-day trial with the same 5 req/min trial limit. A payment method is required at signup; there is no charge until the trial ends, and you can cancel anytime from your dashboard. One trial per league per account. Existing ALL-STAR subscribers may trial the GOAT upgrade for their leagues.
Choose Cancel at trial end to keep trial access until the displayed deadline, or End trial now to end it immediately. A scheduled cancellation offers Undo cancellation and End now. Undo keeps the original deadline and restores automatic paid conversion. Cancelling an ALL-STAR to GOAT trial preserves ALL-STAR billing and prevents the GOAT upgrade charge. When an ALL-ACCESS trial ends, subscriptions paused for that trial resume.
Authentication
Include your API key in the Authorization header of every request. Create a free account to obtain a key.
Authorization: YOUR_API_KEY
Pagination
Collection endpoints support cursor pagination unless their section says otherwise. Use meta.next_cursor as the next request’s cursor. The default per_page is 25 and the maximum is 100.
Errors
| Code | Meaning |
|---|---|
| 400 | Invalid request parameters. |
| 401 | Missing or invalid API key, or insufficient subscription tier. |
| 404 | Resource not found. |
| 429 | Rate limit exceeded. |
| 500 | Server error. |
Tournaments
List LPGA tournaments and their current status.
Minimum tier: Free.
GET https://api.balldontlie.io/lpga/v1/tournaments
curl -g "https://api.balldontlie.io/lpga/v1/tournaments?season=2026&per_page=1" \
-H "Authorization: YOUR_API_KEY"
{
"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
}
}
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| tournament_ids[] | array | No | Filter by tournament IDs (1–100 values). |
| season | integer | No | Four-digit season year. |
| status | string | No | Tournament status. Values: scheduled, in_progress, final. |
| start_date | string | No | Include tournaments starting on or after this date. |
| end_date | string | No | Include tournaments starting on or before this date; must be on or after start_date. |
| cursor | integer | No | Cursor from the previous response’s meta.next_cursor. |
| per_page | integer | No | Number of results (default 25, maximum 100; larger values are capped). |
Tournament
Get a single LPGA tournament.
Minimum tier: Free.
GET https://api.balldontlie.io/lpga/v1/tournaments/{id}
curl -g "https://api.balldontlie.io/lpga/v1/tournaments/31" \
-H "Authorization: YOUR_API_KEY"
{
"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
}
}
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | Yes | Tournament ID. |
Players
List LPGA players.
Minimum tier: Free.
GET https://api.balldontlie.io/lpga/v1/players
curl -g "https://api.balldontlie.io/lpga/v1/players?per_page=1" \
-H "Authorization: YOUR_API_KEY"
{
"data": [
{
"id": 1,
"name": "Miyu Yamashita",
"country": "JPN",
"amateur": false
}
],
"meta": {
"next_cursor": 1,
"per_page": 1
}
}
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| player_ids[] | array | No | Filter by player IDs (1–100 values). |
| search | string | No | Case-insensitive player name search. |
| country | string | No | Three-letter country code; case-insensitive. |
| cursor | integer | No | Cursor from the previous response’s meta.next_cursor. |
| per_page | integer | No | Number of results (default 25, maximum 100; larger values are capped). |
Player
Get a single LPGA player.
Minimum tier: Free.
GET https://api.balldontlie.io/lpga/v1/players/{id}
curl -g "https://api.balldontlie.io/lpga/v1/players/1" \
-H "Authorization: YOUR_API_KEY"
{
"data": {
"id": 1,
"name": "Miyu Yamashita",
"country": "JPN",
"amateur": false
}
}
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | Yes | Player ID. |
Tournament Entries
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.
GET https://api.balldontlie.io/lpga/v1/entries
curl -g "https://api.balldontlie.io/lpga/v1/entries?tournament_id=31&per_page=1" \
-H "Authorization: YOUR_API_KEY"
{
"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
}
}
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| tournament_id | integer | Yes | Tournament ID. |
| player_ids[] | array | No | Filter by player IDs (1–100 values). |
| entry_ids[] | array | No | Filter by entry IDs (1–100 values). |
| status | string | No | Entry status. Values: active, cut, withdrawn, disqualified, did_not_start, did_not_play, unknown. |
| field_present | boolean | No | Filter entries currently in the field. |
| cursor | integer | No | Cursor from the previous response’s meta.next_cursor. |
| per_page | integer | No | Number of results (default 25, maximum 100; larger values are capped). |
Player Rounds
Get round scores and statistics. Statistics may be null when unavailable.
Minimum tier: GOAT.
GET https://api.balldontlie.io/lpga/v1/rounds
curl -g "https://api.balldontlie.io/lpga/v1/rounds?tournament_id=31&per_page=1" \
-H "Authorization: YOUR_API_KEY"
{
"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
}
}
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| tournament_id | integer | Yes | Tournament ID. |
| player_ids[] | array | No | Filter by player IDs (1–100 values). |
| entry_ids[] | array | No | Filter by entry IDs (1–100 values). |
| round | integer | No | Round number. |
| cursor | integer | No | Cursor from the previous response’s meta.next_cursor. |
| per_page | integer | No | Number of results (default 25, maximum 100; larger values are capped). |
Scorecards
Get hole-by-hole scores. Unplayed or unavailable hole scores are null.
Minimum tier: GOAT.
GET https://api.balldontlie.io/lpga/v1/scorecards
curl -g "https://api.balldontlie.io/lpga/v1/scorecards?tournament_id=31&per_page=1" \
-H "Authorization: YOUR_API_KEY"
{
"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
}
}
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| tournament_id | integer | Yes | Tournament ID. |
| player_ids[] | array | No | Filter by player IDs (1–100 values). |
| entry_ids[] | array | No | Filter by entry IDs (1–100 values). |
| round | integer | No | Round number. |
| cursor | integer | No | Cursor from the previous response’s meta.next_cursor. |
| per_page | integer | No | Number of results (default 25, maximum 100; larger values are capped). |
Tee Times
Get tee times with local time, IANA timezone and the corresponding UTC timestamp.
Minimum tier: GOAT.
GET https://api.balldontlie.io/lpga/v1/tee_times
curl -g "https://api.balldontlie.io/lpga/v1/tee_times?tournament_id=31&per_page=1" \
-H "Authorization: YOUR_API_KEY"
{
"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
}
}
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| tournament_id | integer | Yes | Tournament ID. |
| player_ids[] | array | No | Filter by player IDs (1–100 values). |
| round | integer | No | Round number. |
| date | string | No | Local tee-time date. |
| cursor | integer | No | Cursor from the previous response’s meta.next_cursor. |
| per_page | integer | No | Number of results (default 25, maximum 100; larger values are capped). |
Standings
Get season points standings.
Minimum tier: ALL-STAR.
GET https://api.balldontlie.io/lpga/v1/standings
curl -g "https://api.balldontlie.io/lpga/v1/standings?season=2026&per_page=1" \
-H "Authorization: YOUR_API_KEY"
{
"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
}
}
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| season | integer | Yes | Four-digit season year. |
| player_ids[] | array | No | Filter by player IDs (1–100 values). |
| cursor | integer | No | Cursor from the previous response’s meta.next_cursor. |
| per_page | integer | No | Number of results (default 25, maximum 100; larger values are capped). |
Futures
Get current tournament futures prices. Market names distinguish ties, rounds, groups and excluded players. Availability varies by tournament and sportsbook.
Minimum tier: GOAT.
GET https://api.balldontlie.io/lpga/v1/futures
curl -g "https://api.balldontlie.io/lpga/v1/futures?tournament_ids[]=31&per_page=1" \
-H "Authorization: YOUR_API_KEY"
{
"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
}
}
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| player_ids[] | array | No | Filter by player IDs. |
| tournament_ids[] | array | No | Filter by tournament IDs. |
| vendors[] | array | No | Filter by sportsbook, such as draftkings or fanduel. |
| market_types[] | array | No | Filter by exact market type returned by the API. |
| cursor | integer | No | Cursor from the previous response’s meta.next_cursor. |
| per_page | integer | No | Number of results (default 25, maximum 100). |
Player Props
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.
GET https://api.balldontlie.io/lpga/v1/odds/player_props
curl -g "https://api.balldontlie.io/lpga/v1/odds/player_props?tournament_id=31&player_id=84" \
-H "Authorization: YOUR_API_KEY"
{
"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
}
}
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| tournament_id | integer | Yes | Tournament ID. |
| player_id | integer | No | Player ID. |
| prop_type | string | No | Exact prop type returned by the API. |
| vendors[] | array | No | Filter by sportsbook, such as draftkings. |
Opening Player Props
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.
GET https://api.balldontlie.io/lpga/v1/odds/player_props/opening
curl -g "https://api.balldontlie.io/lpga/v1/odds/player_props/opening?tournament_id=31&player_id=1" \
-H "Authorization: YOUR_API_KEY"
{
"data": [],
"meta": {
"per_page": 0
}
}
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| tournament_id | integer | Yes | Tournament ID. |
| player_id | integer | No | Player ID. |
| prop_type | string | No | Exact prop type returned by the API. |
| vendors[] | array | No | Filter by sportsbook, such as draftkings. |