Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
This endpoint returns the list of teams/players who are going to play in any given tournament. The first list of players will be provided roughly two weeks before a tournament starts, and will be updated as and when players are added/drop out of the tournament.
https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/entrylist
Please note that to access an entry list, you will have to enter the tournament ID in the “{id}” field. Note that you can pass ID as 1 to return sample data.
Key
Value
Accept
application/vnd.imggaming.dde.api+json;version=1
Content-Type
application/json
Authorization
Bearer eyvhaoudfgpdfgo*
*Authorization header includes a truncated Bearer token, contact IMG for your auth token if you do not have.
This endpoint currently takes no request parameters, we aim to add them, and once we have they will be detailed here.
Entrylist Object
Field Name
Type
Description
teamId
int
The ID of that team for that tournament – stays unique for that team throughout the tournament.
players
list
List of the players within that team. Is strokeplay one team = one player
https://dde-api.data.imgarena.com/golf/tournaments/{id}/entrylist
Please note that to access an entry list, you will have to enter the tournament ID in the “{id}” field. Note that you can pass ID as 1 to return sample data. i,e https://dde-api.data.imgarena.com/golf/tournaments/1/entrylist
Players List
Field Name
Type
Description
displayName
string
The display name of the player.
country
string
3-character FIFA Country Code.
IsAmateur
boolean
True if the player is an amateur.
lastName
string
The last name of the player.
firstName
string
The first name of the player.
status
string
Describes current player status in tournament.
playerId
integer
The unique player ID of that player
playerPGATourId
integer or null
The unique PGA Tour player ID of that player (if applicable)
playerEuropeanTourId
integer or null
The unique European Tour player ID of that player (if applicable)
playerLPGATourId
integer or null
The unique LPGA Tour player ID of that player (if applicable)
playerRandAId
integer or null
Player's R&A Id (if relevant)
The above example is for normal Stroke Play. During Team/Match Play where two players will play together in Stroke/match Play (much like the Team Cup/Ryder cup) the formation of the players is as below.
During the Ryder Cup, a squad will be used to provide relationships of European and US players. The Entry List teams serve the purpose of providing ids for the combinations of players used for Foursomes, Fourballs and Singles matches.
Below is a snippet of a Ryder Cup Entry List, notice that Justin Rose is involved in 3 Teams. These three team combinations would be involved in respective Fourball, Foursome or Singles matches.
This endpoint returns information on all players, including:
Player ID
Player name
Country
Date of birth (if known)
European tour ID
PGA tour ID
https://dde-api.data.imgarena.com/golf/players
Key
Value
Accept
application/vnd.imggaming.dde.api+json;version=1
Content-Type
application/json
Authorization
Bearer eyvhaoudfgpdfgo*
This endpoint currently takes the following parameters:
Parameter
Value
results
Used to decide how many results you would like in the response. Default is 100.
offset
Used in conjunction with results, if you use &results=100&offset=1 this will give you the first page of 100 results from this endpoint
NB: By passing ‘results’ you will gather the first 100 results by default and by-passing results=100&offset=2 this will return the first 100 on page 2.
If no parameters are passed, the endpoint will return the first 100 players
Player Summary Object
Field Name
Type
Description
playerId
integer
The ID of the player that will be referenced across the DDE
playerEuropeanTourId
string
The European Tour ID of the player (if applicable, if not, null)
playerRandAId
integer
Players R&A Id (if relevant)
playerPGATourId
string
The PGA Tour ID of the player (if applicable, if not, null)
displayName
string
The display name of the player (encoded in UTF-8)
firstName
string
The first name of the player (encoded in UTF-8)
lastName
string
The last name of the player (encoded in UTF-8)
country
string
The ISO country code of the country in which the tournament is taking place
isAmateur
boolean
Is the player an amateur or not
isActive
boolean
gender
string
The gender of the player
dateOfBirth
date
Player’s date of birth, null if unknown
European Tour Ranking Object
Currently will be null – these docs will be updated when this is available.
This section contains details on the following RESTful endpoints:
IMG Arena monitor the incoming traffic from our customers and strive to ensure that traffic is controlled, in-keeping with our guidelines and not unnecessarily excessive. We would suggest a polling rate of 5 requests per second, whilst we strive towards implementing rate limiting.
We recommend the following frequency for your REST requests to ensure that you have the most up-to-date information at all times:
REST Endpoint
Frequency
https://dde-api.data.imgarena.com/golf/tournaments
Every 12hours
https://dde-api.data.imgarena.com/golf/tournaments/{id}/schedule
Every minute for the upcoming tournament
https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/entrylist
Every minute for the upcoming tournament
https://dde-api.data.imgarena.com/golf/players
Every 12hours
https://dde-api.data.imgarena.com/golf/tournaments/liveevents
Every second when tournament is live
For golf, the initial schedule is received on a Tuesday (2 days before the tournament starts) which will contain the the tee times/groups for rounds 1 and 2. The tee times/groups for rounds 3 and 4 will be released once play for day 2 and 3 are complete. We recommend that you pull the schedule endpoint every Tuesday for the upcoming tournament every minute and after player has finished post round 2 and 3.
Most of the Golf websockets are available via REST calls. Please find a breakdown below:
The domain are the same but in order to connect to the REST version of the Websocket, you will need to add the query param rest=true
Note that these REST APIs will only be available for an event once it has finished.
Key
Value
Content-Type
application/json
Authorization
Bearer eyvhaoudfgpdfgo*
Please note statistics are only available for events after the 16th June 2022.
Leaderboard
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/leaderboard?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/638/leaderboard?rest=true
Team hole by hole
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/teamholebyhole/{TeamID}?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/638/teamholebyhole/49?rest=true
Player Statistics
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/playerstats/{TeamID}?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/638/playerstats/49?rest=true
Player Statistics Rankings - Scoring
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/stats/scoring?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/638/stats/scoring?rest=true
Player Statistics Rankings - Approach
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/stats/approach?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/638/stats/approach?rest=true
Player Statistics Rankings - Shortgame
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/stats/shortgame?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/638/stats/shortgame?rest=true
Player Statistics Rankings - Putting
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/stats/putting?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/638/stats/putting?rest=true
Player Statistics Rankings - Driving
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/stats/driving?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/638/stats/driving?rest=true
Hole Statistics
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/holestats?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/638/holestats?rest=true
Team Round Details
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/round/{RoundNo}/team/{TeamID}?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/638/round/4/team/49?rest=true
Leaderboard - Match play
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/matchplayleaderboard?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/630/matchplayleaderboard?rest=true
Match score - Match play
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/matchscore/{MatchNo}?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/630/matchscore/112?rest=true
Team Match Details - Match play
https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}}/matchdetails/{MatchNo}?rest=true
https://dde-streams.data.imgarena.com/golf/tournaments/630/matchdetails/112?rest=true
This endpoint returns information on all golf tournaments, past and future. Per each tournament, this endpoint will return the following information:
Dates of the tournament
Name of the tournament
Tournament format
Round information
Detailed information of the golf course(s) for the tournament.
https://dde-api.data.imgarena.com/golf/tournaments
https://dde-api.data.imgarena.com/golf/tournaments/live
The above endpoint can be filtered by tournamentDataStatus
"Scheduled" is a real tournament with data coming from the course
"Test" is a pseudo tournament for the the purpose of testing, can be subset of an entire tournament aimed at specific use cases
"Simulation" is either an entire pseudo tournament or replay of old tournament for the purpose of testing
"Disabled" is soft deleted, actioned internally
"All" returns all tournaments
Examples:
https://dde-api.data.imgarena.com/golf/tournaments
returns all tournaments except "tournamentDataStatus":"Disabled"
https://dde-api.data.imgarena.com/golf/tournaments?tournamentDataStatus=All
returns all tournaments
https://dde-api.data.imgarena.com/golf/tournaments?tournamentDataStatus=Scheduled
returns only tournaments with "tournamentDataStatus":"Scheduled"
https://dde-api.data.imgarena.com/golf/tournaments/live?tournamentDataStatus=Scheduled
returns all live tournaments with tournamentDataStatus":"Scheduled"
Specific tournament:
If you require information for a particular tournament, please enter the tournament Id which is returned via the IMG Arena Golf tournaments endpoint. i.e:
https://dde-api.data.imgarena.com/golf/tournaments/{id}
Key
Value
Accept
application/vnd.imggaming.dde.api+json;version=1
Content-Type
application/json
Authorization
Bearer eyvhaoudfgpdfgo*
If no parameters are used, this endpoint will return all tournaments that start within one month either side of the date of the request. i.e By passing “dateFrom = 2025-07-01” and “dateTo = 2025-07-31”, endpoint will return all tournaments FROM the 1st of July 2025 To the 31st of July 2025.
This endpoint currently takes the following parameters:
Parameter
Description
dateFrom
e.g. dateFrom=2025-04-15. To be used in conjunction with dateTo to return a list of tournaments within a certain date range.
dateTo
e.g. dateTo=2025-04-15. To be used in conjunction with dateFrom to return a list of tournaments within a certain date range.
Note that if the dateFrom parameter overlaps when a particular tournament is being played, then the startDate returned will be before the dateFrom parameter. i.e if you are passing dateFrom=2025-11-01 and dateTo=2025-11-30", if round 4 is on the 1st, then the startDate returned will be "2025-10-29".
Please note that If you do not pass any parameters, this endpoint will return all tournaments that start within one month either side of the date of the request. i.e if request was made on the 1st of July, tournaments from the 1st of June to 1st August.
Tournament Object
Field Name
Type
Description
Optional
format
string
The format of the tournament. The current possible values you can expect are:
StrokePlay, RyderCup, HeroCup, BelgianKO, GolfSixes, MatchPlay5Days, MatchPlay4Days, Custom, Stroke, Match, TeamMatch, Team, Stableford, StrokePlayProAm, Other
tour
string
The Tour on which the tournament is taking place. Can be "PGA tour", "LPGA Tour" or "European Tour"
tourID
integer
Returns an ID for the Tour in which the tournament is taking place. ID 0 = Unknown ID 1 =PGA Tour ID 2 =European Tour ID 3 =LPGA Tour
name
string
The name of the tournament
id
integer
The id of the tournament
startDate
-
Returned as null. please pass the tournament Id to retrieve this information.
endDate
date
The end date of the tournament (In UTC timezone)
startTeeTime
date/time or null
The starting tee time of the 1st round.
countryCode
string
The country code of the country in which the tournament is taking place (3 uppercase letters, eg "USA" or "FRA")
utcOffset
float
The UTC offset of the local time of the tournament, e.g. if “1” the local time of the tournament is UTC+1
year
integer
The year in which the tournament is taking place
rounds
object
See object details below
golfCourses
object
See object details below
venue
string
String containing name or address of the venue
YES
mainGolfCourseId
integer
The Golf Course Id of the main course, i.e. where the shot data happens or the Host Course
YES
mainGolfCourseName
string
The Golf Course name of the main course, i.e. where the shot data happens or the Host Course
YES
mainExternalGolfCourseId
string
The Golf Course Id of the main course, from the federation database. This is composed of the ID number concatenated with the federation abbreviation, either ET or PGA
YES
externalId
string
A unique Federation generated Tournament ID
tournamentDataStatus
string
mainGolfCourseAssetId
string
The main course asset Id- internal use
historicalDetails
object
Historical details about the event, i,e Id and previous name of event.
Rounds Object
Field Name
Type
Description
roundNo
int
The number of the round. The possible values are 1, 2, 3, 4 and 401 (Playoff)
roundType
string
Specifies the type of round. Possible values:
"StrokePlay", "MatchPlay", "RoundRobin"
format
string
Specifies play format for a round. Possible values: "BEST_BALL", "FOUR_BALL", "FOURSOMES", "GREENSOMES", "GRUESOMES", "REGULAR", "OTHER"
isPlayOff
boolean
“True” if that round is a Play Off
scoring
string
Defines how each hole is scored for that round. Possible values; AggregatedStrokes, HoleWonPoint_TieZero, HoleWonPoint_TieHalved, Stableford, Other
advancementRule
string
Defines how players will be qualified for the next round. Possible values:
"ALL_QUALIFY", "CUT_64", "CUT_60", "CUT_50", "CUT_36_HOLES_ET", "CUT_54_HOLES_ET", "CUT_36_HOLES_PGA", "CUT_54_HOLES_PGA", "CUT_TEN_STROKE", "FINAL", "KNOCK_OUT", "WON_1_POINTS_DRAW_HALF_POINT", "WON_3_POINTS_DRAW_1_POINT", "OTHER"
Golf Courses Object
Field Name
Type
Description
courseName
string
The name of (one of) the golf course(s) at which the event is being played
courseId
integer
The unique ID of the course
isMain
boolean
True if the main course at the tournament, false if not
courseDetails
object
Please view the courseDetails Object table
externalCourseID
string
The Golf Course Id of the main course, from the federation database. This is composed of the ID number concatenated with the federation abbreviation, either ET or PGA
scoringLevel
Integer
This integer value is linked to scoringType value.
1 = Shot link with laser
2 = Scored with walking scorer
3 = Holes scores Only
null = not scored
scoringType
string
Type of scoring method being applied that week. See possible values below.
For each Golf Course within a Tournament a particular Scoring Method is employed per round, these are described below.
Type
Description
ShotlinkWithLaser
Full Shot by Shot coverage across the complete Course. Including distanceToPin, shotDistance, x, y, z values.
ScoredWithWalkingScorer
Only Shot Counts available during the in play Hole. This Course will not have distance values per Shot.
HoleScoresOnly
Only Scores at the end of each Hole. Only useful for keeping a Scorecard up to date.
NotScored
Scores on this Course will not be available. Note that, this value is unlikely to be used operationally.
Course Details Object
Field Name
Type
Description
roundNo
int
The round number for which the following course details information applies. The possible values are 1, 2, 3, 4 and 401 (Playoff)
holes
object
Please view the holes object
Holes Object
Field Name
Type
Description
holeNo
int
The number of the hole
officialYardage
int
The official yardage of the hole
actualYardage
int
the actual yardage of the hole
officialMetres
decimal
The official metres length of the hole
actualMetres
decimal
The actual metres length of the hole
par
int
The par score of the hole
isOfficialDrivingHole
boolean
Whether it is the official driving hole on the course (true/false)
displayName
string
Display name of the hole
isStreaming
boolean
Is video streaming available on this hole?
teeBoxes
object
See teeBoxes object
pinPlacement
object
See pinPlacement object
stimpReading
string
Returns the green speed effectively. null if not known
Pin Placement Object
Field Name
Type
Description
x
decimal
x co-ordinate of pin (previously longitude of the pin)
y
decimal
y co-ordinate of pin (previously latitude of the tee pin)
z
decimal
z co-ordinate of pin
Tee Boxes Object
Occasionally multiple tee boxes are used at a single tournament. This describes each Tee Box.
Field Name
Type
Description
x
decimal
x co-ordinate of tee box (previously longitude of the tee box)
y
decimal
y co-ordinate of tee box (previously latitude of the tee box)
z
decimal
z co-ordinate of tee box
colour
string
the colour of the tee box, an identifier
can be either "Scheduled", "Test", "Simulation" or "Disabled" see section for more info
This section contains details on the following WebSocket endpoints:
Security protocol: Please note that we currently we do not support SSL. We only support the use of TLS Version 1.2+.
MG Arena monitor the incoming traffic from our customers and strive to ensure that traffic is controlled, in-keeping with our guidelines and not unnecessarily excessive. We would suggest a polling rate of 5 requests per second, whilst we strive towards implementing rate limiting.
We recommend the following frequency for your REST requests to ensure that you have the most up-to-date information at all times:
REST Endpoint
Frequency
https://dde-api.data.imgarena.com/golf/tournaments
Every 12hours
https://dde-api.data.imgarena.com/golf/tournaments/{id}/schedule
Every minute for the upcoming tournament
https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/entrylist
Every minute for the upcoming tournament
https://dde-api.data.imgarena.com/golf/players
Every 12hours
https://dde-api.data.imgarena.com/golf/tournaments/liveevents
Every second when tournament is live
For golf, the initial schedule is received on a Tuesday (2 days before the tournament starts) which will contain the the tee times/groups for rounds 1 and 2. The tee times/groups for rounds 3 and 4 will be released once play for day 2 and 3 are complete. We recommend that you pull the schedule endpoint every Tuesday for the upcoming tournament every minute and after player has finished post round 2 and 3.
A feed which includes all of the key meta data per shot within a Team's round, compiled and stored, once a Round becomes Official.
This Endpoint returns information of the current player's stroke events per Round.
Please note: Detailed lies that have been undone are not included in this feed.
URL:
https://dde-api.data.imgarena.com/golf/official-shots/tournaments/{tournamentId}/round/{roundNumber}/team/{teamNumber}
URL Sample:
https://dde-api.data.imgarena.com/golf/official-shots/tournaments/1144/round/1/team/64
Key
Value
Accept
application/vnd.imggaming.dde.api+json;version=1
Content-Type
application/json
Authorization
Bearer eyvhaoudfgpdfgo*
This endpoint currently takes no parameters.
Player Summary Object
Field Name
Type
Description
timestamp
string
The Timestamp of the stroke event in the current Tournament
courseId
string
The ID of the Golf Course the stroke played on place on
ballLie
object
Object containing details on Ball Lie
score
object
Object containing details of the current score at the start of first stroke
provisionalIndex
integer
The nth number of stroke classed as a provisional shot
groupNo
integer
The Group Number the current player is in, for the current Round of the Tournament
dropType
string
The type of Drop Ball issued on the current stroke
eventElementType
string
The type of event on current stroke.
E.g. "BallHoled", "DetailedLie", "Penalty"
seqNum
integer
The sequence number of the current event - for an order of events by timestamp.
holeOrder
integer
The player's current stroke being played on the nth Hole of the current round.
Please note: This is not the Hole Number.
E.g. holeOrder 2 is the player's 2nd Hole of the current Round which can be on Hole Number 11.
teamNo
integer
The player's Team Number for the current Tournament.
strokeNo
integer
The nth stroke of the current stroke event.
playerId
integer
The ID of the Player of the current stroke event.
penaltyType
string
The type of penalty issued on the current stroke event.
E.g. "Strokes"
holeNo
integer
The current Hole Number the stroke event took place on. Holes 1 - 18
clubTypeCode
string
This is the type of Club a player used for the shot. NB. this is only populated for Drives. Possible values: CDR = Driver CFW = Fairway Wood CIR = Iron CUK = Unknown
Field Name
Type
Description
coordinates
object
Object containing X/Y/Z coordinates of ball lie
x
double
The x coordinate of the ball lie. Measured in metres
y
double
The x coordinate of the ball lie. Measured in metres
z
double
The x coordinate of the ball lie. Can be null. Measured in metres
surfaceTypeCode
string
A three character code for current surface type the ball is on
distanceToPin
double
Distance left till current hole's pin. Measured in metres
shotDistance
double
Distance of the current stroke travelled. Measured in metres
blindShot
boolean
The current stroke landing area is not visible from the player’s perspective
surfaceType
string
The full name of the current surface type the ball is on
obstructions
boolean
An obstruction that is present on the current stroke play
Below is a table that describes each of the available Surface Types or Surface Type codes:
surfaceTypeCode
surfaceType
OFW
Fairway
OGR
Green
OIR
IntermediateRough
ORO
Rough or PrimaryRough
OST
FairwayBunker
OGS
Greenside Bunker
OCO
Fringe
ONA
NativeArea
OTO
Trees or TreeOutline
OBU
Bushes
ODS
Desert
OWA
Water
OTH
Other
OCA
CartPath
ODO
Dirt or DirtOutline
OTF
OtherFairway
OOB
OutOfBounds
OUK
Unknown
Score Object is available on stroke events with "eventElementType" :
"BallHoled" OR "Penalty"
Field Name
Type
Description
currentHolePar
integer
The Par of the current Hole of the Course
overallScoreToPar
integer
The current overall score of the player
currentHoleStrokes
integer
The total number of strokes taken by the player on the current hole
currentRoundScoreToPar
integer
The current score of the player of the current Round
*FOR MATCHPLAY EVENTS ONLY*
This endpoint returns the list of players that make up a Squad. This squad will represent a list of Player that make up a Team for Team Matches such as Ryder Cup, Presidents Cup & EurAsia Cup.
https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/squads
Please note that to access an entry list, you will have to enter the tournament ID in the “{id}” field.
Key
Value
Accept
application/vnd.imggaming.dde.api+json;version=1
Content-Type
application/json
Authorization
Bearer eyvhaoudfgpdfgo*
*Authorization header includes a truncated Bearer token, contact IMG for your auth token if you do not have.
Field
Type
Description
squadNo
integer
Number of squad
squadName
string
Name of squad
players
Array
Data for all players in the squad
Field
Type
Description
displayName
string
Display name of player
country
string
FIFA country code, 3 uppercase letters
isAmateur
string
Is the player an amateur or not. True or False
status
string
Describes current player status in tournament.
lastName
string
Last known name of the Player
firstName
string
First known name of the Player
playerId
integer
Unique id of a Player
playerPGATourId
integer or null
The unique PGA tour Player Id of that player (if applicable)
playerEuropeanTourId
integer or null
The unique European tour Player Id of that player (if applicable)
playerLPGATourId
integer or null
The unique LPGA tour Player Id of that player (if applicable)
playerRandAId
integer or null
Players R&A Id (if relevant)
This endpoint is to be used in conjunction with the Team Round Details web socket endpoint. You should use the response from this end point to decide which live streams you should connect to. As soon as you see a live stream available on this endpoint you should commence connecting to the web socket for that individual live stream event (I.e a Team playing a Round of Golf).
Per each live event, the endpoint will return the following information:
Name of the live tournament
Round number of the live tournament
Start time and status of the live tournament
Group and team identification number (also match identifier for match play and Ryder Cup)
Detailed information of the player
Entry type of each player
Endpoint for all live tournaments:
https://dde-api.data.imgarena.com/golf/tournaments/liveevents
Key
Value
Accept
application/vnd.imggaming.dde.api+json;version=1
Content-Type
application/json
Authorization
Bearer eyvhaoudfgpdfgo*
*Authorization header includes a truncated Bearer token, contact IMG for your auth token if you do not have.
This endpoint takes no request parameters.
Live Events Object
Field Name
Type
Description
tournamentId
int
The unique id of the tournament
tournamentName
string
The name of the tournament
roundNo
integer
The number of the round
startTime
object
See object below
Group
object
See object below
matchNo
integer
[Optional] will only be available for match play and Ryder Cup formats in which case matchNo
= groupNo
Start Time Object
Field Name
Type
Description
status
string
The status of the start time – e.g. ‘StartsAt’
time
date
The time the group are scheduled to start their round
Group Object
Field Name
Type
Description
featureGroup
boolean
Returns true if the group is a featured group
groupNo
integer
The official group’s number, an identifier for the group within the round and course.
teams
object
See object docs
matchNo
integer
[Optional] will only be available for match play and Ryder Cup formats in which case matchNo
= groupNo
Teams and Players Object
There are typically only 2 or 3 teams in a Groups - but below is an example of 4.
Field Name
Type
Description
orderOfPlayWithinGroup
integer
Order of play of the player. 0 meaning they are first.
players
object
See object below
teamNo
integer
teamNo of the player
Players Object
Field Name
Type
Description
playerId
integer
The ID of the player
displayName
string
The display name of the player
playerPGATourId
integer
The PGA Tour Id of the player where applicable
playerEuropeanTourId
integer
The European Tour Id of the player where applicable
playerLPGATourId
integer
The LPGA Tour Id of the player where applicable
playerRandAId
integer
Players R&A Id (if relevant)
firstName
string
The first name of the player
lastName
string
The last name of the player
country
string
The country code of the player’s country
isAmateur
boolean
Is the player an amateur or not
status
string
Players' status, one of the following: Entered, Alternate, Playing, Withdrawn, Retired, Disqualified, MissedCut, Removed, Unknown.
This endpoint returns information on all off the tee times of all the groups within a single tournament. This will return the tee times for all days of the tournament. It contains information on:
Course
Round
Tee sequence
Hole
Start date and time
Player and group number (and team number for Match Play tournaments.)
Endpoint for tournament schedule:
https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/schedule
To view a schedule, enter the ID of the event for example, the ID for The American Express 2025 is 1092, which will display the schedule for all 4 rounds. Note that you can pass ID as 1 to return sample data.
Key
Value
Accept
application/vnd.imggaming.dde.api+json;version=1
Content-Type
application/json
Authorization
Bearer eyvhaoudfgpdfgo*
*Authorization header includes a truncated Bearer token, contact IMG for your auth token if you do not have.
This endpoint currently takes no request parameters, we aim to add them, and once we have they will be detailed here. It will be query-able by date and this doc will be updated when that is ready.
Event Object
Field Name
Type
Description
Optional
date
date
The day that the round will be played for that group
round
integer
The round that is being played for that group
hole
integer
The hole in which the round is starting for that group
teeSeq
integer
The sequence on the tee for that group
courseId
integer
The ID of the course for the round for that group
courseName
string
The name of the course for the round for that group
status
string
The status of the round for that group. The values are either: NotStarted, InProgress or Finished.
matchType
string
"Strokeplay" or "Matchplay"
bookingStatus
string
If an end user has got a license for that group; always set to “Booked”
startTime
object
See object docs
groupId
integer
Unique ID for the group
group
object
See object docs
poolNo
integer
[Optional] number of the pool the match is in
YES
externalCourseId
string
The Golf Course Id
from the federation database. This is composed of the ID number concatenated with the federation abbreviation, either ET or PGA
Start Time Object
Field Name
Type
Description
status
string
The status of the start time – e.g. ‘StartsAt’
time
date
The time of the group are scheduled to start their round. Time is returned in UTC format
Group Object
Field Name
Type
Description
Optional
featureGroup
boolean
Returned as "true" if group is a featured grope. Note PGA only
groupNo
integer
The group’s number, an identifier for the group within that round.
MatchNo
integer
For Match Play tournaments only
When is Match Play tournament "matchNo" = "groupNo"
YES
teams
object
See object doc
Teams Object
Field Name
Type
Description
teamNo
integer
The ID of the team within the Tournament
orderOfPlayWithinGroup
integer
The order within the Group (or Match for Match Play.) Useful for ordering the display name of the Teams on the Front End.
players
object
Contains player objecy
Players Object
Field Name
Type
Description
playerId
integer
The ID of the player across the whole of Golf
displayName
string
The display name of the player
playerPGATourId
integer
Player's PGA tour Id (if relevant)
playerEuropeanTourId
integer
Player's European tour Id (if relevant)
playerRandAId
integer
Player's R&A Id (if relevant)
playerLPGATourId
integer
Player's LPGA tour Id (if relevant)
firstName
string
The first name of the player
lastName
string
The last name of the player
country
string
The country code of the player’s country
isAmateur
boolean
Is the player an amateur or not
status
string
The player’s entry type into the tournament
The above example is for Stroke Play, if two players will appear in a Team much like the Ryder Cup, this formation will look as follows:-
During a playoff, the schedule will be used in the same way as before. The only way of discerning whether or not a scheduled round would be a play off would be to understand the round type from the isPlayOff is True from the Tournaments end point.
This web socket endpoint returns the event-by-event data PER TEAM PER ROUND. You will need to make a connection for each team once per round. All of that team’s event-by-event data for that round will play out, and you should close the connection upon receiving the RoundFinished packet. This endpoint is in conjunction with the Live Events REST endpoint – when a team starts their round they will be included in the response to the /liveevents endpoint, and at that point you should commence connecting to the web socket for that team’s round live stream.
wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/round/{roundNo}/team/{teamId}
N.B – Please connect to wss://dde-staging-streams-golf.imggaming.com/golf/tournaments/99999/round/5/team/12 to get a sample one hole’s worth of data, including all of the mentioned keystrokes in the documentation.
Process for connecting to the web socket endpoints
Connect to SSL websocket address
Send JSON packet containing API token
Receive response indicating that connection is authorised (or a response indicating why the connection cannot be made)
Receive heartbeat packets every 10 seconds to verify the connection is live
Receive data packets
Once you have the API token, any further data that you send over the connection will be ignored.
This endpoint currently takes no request parameters, we aim to add them, and once we have they will be detailed here.
There are a number of different types of packets that can be sent through this endpoint. They are detailed in the Round Details Scenarios section.
Note that the team round details websockets is available via Rest - https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/round/{RoundNo}/team/{TeamID}?rest=true
Please note statistics are only available for events after the 16th June 2022.
This endpoint is a live websocket endpoint that returns the full set up player statistics rankings metrics for all rounds in a given tournament. Currently the whole player stats event is sent whenever a new RoundDetails packet is received from either Sport Services (formerly FlightScope), or PGA.
The authentication token provided will be required to make a connection to this websocket endpoint.
Once you have the API token, any further data that you send over the connection will be ignored.
N.B – This endpoint sends heartbeats in-between data packets to let you know that it is still connected.
This endpoint currently takes no request parameters
This can be found at:
Scoring = wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/stats/scoring
Approach Play = wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/stats/approach
Short Game = wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/stats/shortgame
Putting = wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/stats/putting
Driving = wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/stats/driving
Note that the player statistics ranking websockets are available via Rest:
Scoring - https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/stats/scoring?rest=true
Approach - https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/stats/approach?rest=true
Shortgame - https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/stats/shortgame?rest=true
Putting - https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/stats/putting?rest=true
Driving - https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/stats/driving?rest=true
)
Full list of statistics
Scoring
teeToGreenStrokesGained
Birdies or Better
Bogeys or Worse
Par 3 scoring
Par 4 scoring
Par 5 scoring
Driving
offTheTeeStrokesGained
Accuracy
Distance
driverUsage
bigMisses
Longest Drive
Approach
approachStrokesGained
Greens in Regulation
Green under Regulation
10-20ft
20-30ft
30ft+
Chances inside 10ft
Chances inside 20ft
Chances inside 30ft
offGreen
Short game
aroundTheGreenStrokesGained
fairway
fringe
other
rough
sand
scrambleFromFairwayFringe
screambleFromRoughHazard
Scrambles
Sand saves
Scrambles Other
Putting
puttingStrokesGained
Total putts
longest holed putt
Putts holed distance
putts per GIR
three putts
Each of these statistics has the following qualifying components:
Tournament
Total
Divisor
Rank (the overall player rank across a tournament for each metric within each discipline)
Field Average (the tournament average for each metric within each discipline)
Round
Total
Divisor
Rank (the specific round player rank across a tournament for each metric within each discipline)
Field Average (the round average for each metric within each discipline)
These qualifying components have different meanings that are dependent on the context. These are outlined along with the definitions of each statistic.
Definitions
Stat
Total
Data type for total
Divisor
Birdies or better
Total number of completed holes where the number of strokes is less than Par for that hole
integer
Holes Played
integer
Bogeys or worse
Total number of completed holes where the number of strokes is more than Par for that hole.
integer
Holes Played
integer
Par 3 scoring
Total Score to Par of all holes that are Par 3s. So if a player scores 4, 5, 3, 5 or the 4 Par 3s, they will be “+5”.
integer
Holes Played
integer
Par 4 scoring
Total Score to Par of all holes that are Par 4s. So if a player scores 4, 5, 3, 5 or the 4 Par 4s, they will be “+1”
integer
Holes Played
integer
Par 5 scoring
Total Score to Par of all holes that are Par 5s. So if a player scores 4, 5, 3, 5 or the 4 Par 5s, they will be “-3”.
integer
Holes Played
integer
Driving accuracy
Total number of Fairways found from Shot 1 on Par 4s and 5s.
integer
Total number of Par 4 and 5s played.
integer
Driving distance
Average Drive Distance of all par 4/5s. Limit to one decimal place
float
Number of driving holes played (*)
integer
Longest Drive
The longest distance from all tee shots on Par 4 and 5 holes for the round
float
Number of driving holes played (*)
Driver Usage
The number of Par 4/5 holes played where the tee shot Club Type is a Driver
float
Number of driving holes played (*)
Greens in Regulation
Total number of Greens in Regulation. Defined as finding the Green or Hole on or before the (n-2)th stroke.
integer
Total number of Holes Played
integer
Birdie Chances 10ft
Total number of Greens in Regulation, where the distance left to the hole is 10ft or 3 metres. If they mad an Eagle or Albatross this should count as a birdie chance hole
integer
Total number of holes played so far
integer
Birdie Chances 20ft
Total number of Greens in Regulation, where the distance left to the hole is 20ft or 6 metres. If they made an Eagle or Albatross this should count as a birdie chance hole.
integer
Total number of holes played so far
integer
Birdie Chances 30ft
Total number of Greens in Regulation, where the distance left to the hole is 30ft or 9 metres. If they made an Eagle or Albatross this should count as a birdie chance hole.
integer
Total number of holes played so far
integer
Sand Saves
Total number of holes where the “Greenside Bunker” has been found and the number of putts is 1 or 0.
integer
Total number of holes where the Greenside Bunker has been found.
integer
Scrambles
Total number of holes where the Green in Regulation is false but Score to Par 0 or -1.
integer
Total number of holes where the Green in Regulation is false
integer
Total Putts
Total number of strokes where the previous lie was “Green”.
integer
Total number of Holes Played
integer
Putts per GIR
Total number of strokes where the previous lie was “Green”. Only on holes where Green in Regulation was also made.
integer
Total number of Greens in Regulation
integer
Putts Holed Distance
Total distance of strokes that are defined as a Putt where the final lie was the Hole. Provide this value in “Meters”, with one decimal place.
float
Total number of Holes Played
integer
holeOuts
Total sum of any time a ball is holed where the previous surfaceType does NOT equal Green.
integer
Total number of holes Played
integer
threePutts
Total count of 3 or more putts on a hole.
integer
Total number of holes Played
integer
penaltyShots
Total sum of Penalty shots in a round.
integer
Total number of holes Played
integer
teeToGreenStrokesGained
Sum of Stroke Gained value for teeToGreen.
float
Total number of strokes considered to be teeToGreen.
integer
offTheTeeStrokesGained
Sum of Stroke Gained value for offTheTee.
float
Total number of strokes considered to be offTheTee.
integer
approachStrokesGained
Sum of Stroke Gained value for approach.
float
Total number of strokes considered to be approach.
integer
greensUnderRegulation
Total number of Greens Under Regulation. Defined as reaching the green in one on a par 4 (off the tee) or Reaching the green in two on a par 5.
integer
Total number of holes Played
integer
20-30ft
Total number of Birdie or Better Chances Inside 20 - 30 ft
integer
Total number of holes Played
integer
30ft+
Total number of Birdie or Better Chances inside 30 ft+
integer
Total number of holes Played
integer
10-20ft
Total number of Birdie or Better Chances Inside 10 - 20 ft
integer
Total number of holes Played
integer
puttingStrokesGained
Sum of Stroke Gained value for putting
float
Total number of strokes considered to be putting.
integer
sand
Total number of times the ball has ended up in the sand
integer
Total number of holes Played
integer
aroundTheGreenStrokesGained
Sum of Stroke Gained value for aroundTheGreen.
float
Total number of strokes considered to be aroundTheGreen.
integer
fringe
Total number of times the ball has ended up on the fringe.
integer
Total number of holes Played
integer
scrambleFromSand
Total number of scrambling success (inside 40 yards) where the surface type is either fairway bunker or greenside bunker.
integer
Total number of scrambling opportunity from either fairway bunker or greenside bunker.
integer
rough
Total number of times the ball has ended up in the rough.
integer
Total number of holes Played
integer
fairway
Total number of times the ball has ended up on the fairway
integer
Total number of holes Played
integer
scrambleFromFairwayFringe
Total number of scrambling success (inside 40 yards) where the surface type is either fairway or fringe.
integer
Total number of scrambling opportunity from either fairway or fringe.
integer
shortGame - other
Total number of times the ball has ended up in an area other then - Fairway and fringe (greenside bunker and fairway bunker) IMrough and primRough
integer
Total number of holes Played
integer
scrambleFromRoughHazard
Total number of scrambling success (inside 40 yards) where the surface type is either rough or other.
integer
Total number of scrambling opportunity from either rough or other.
integer
Sample json output (Putting)
This endpoint is a live websocket endpoint that returns all leaderboard information at any one time. Currently the whole leaderboard is sent whenever there is an update – this will look to be optimised in the future. You should receive a new update any time a player completes a hole, and their total strokes and “to par” score for the day changes.
The authentication token provided will be required to make a connection to this websocket endpoint.
Once you have the API token, any further data that you send over the connection will be ignored.
N.B – This endpoint sends heartbeats in-between data packets to let you know that it is still connected.
This endpoint currently takes no request parameters, we aim to add them, and once we have they will be detailed here.
wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/leaderboard
N.B. – Please use tournament ID “99999” to return you the sample data. This sample data is 3 leaderboard updates for 3 players towards the end of a round. The authentication token provided will be required to make a connection to this websocket endpoint.
Connect to SSL websocket address
Send JSON packet containing API token
Receive response indicating that connection is authorised (or a response indicating why the connection cannot be made)
Receive heartbeat packets every 10 seconds to verify the connection is live
Receive data packets
Once you have the API token, any further data that you send over the connection will be ignored. This endpoint sends heartbeats in-between data packets to let you know that it is still connected.
Request Parameters This endpoint currently takes no request parameters, we aim to add them, and once we have they will be detailed here. For this example we will be using the following endpoint URL for The American Express 2025: wss://dde-streams.imggaming.com/golf/tournaments/1092/leaderboard
Note that the leaderboard websocket is available via Rest - https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/leaderboard?rest=true
Leaderboard Object
Field Name
Type
Description
standings
object
see object docs
tournamentId
integer
Identifier for the tournament
timestamp
time
Time the update is sent
seqNum
integer
Sequence number of the update packet
currentRound
object
See object docs
roundStatuses
array
See array docs;
tournamentStatus
string
Possible values:
NotStarted, InProgress, PlayComplete, Suspended, Official
isPlaySuspendedOvernight
boolean
Flag will be set as true, if play is suspended over night.
Standings Array
Field Name
Type
Description
players
object
See object docs
holesThrough
object
See object docs
roundInfo
object
See object docs
roundInfo
object
See object docs
toParToday
object
See object docs
totalScore
object
See object docs
status
string
Player status, possible values: Possible values: Uncut, Cut, Withdrawn, Retired, Disqualified, DidNotStart, MadeCutButDidNotFinish, Other and Removed (*).
(*) Removed is currently not available.
currentRound
integer
Number of current round
teamNo
integer
What team the player is associated with (for individual tournaments players are in their own team of 1)
toPar
object
See object docs
position
object
See object docs
Players Array
Field Name
Type
Description
displayName
string
Player's display name
country
string
Country code of the player
isAmateur
boolean
True if player is an amateur
lastName
string
Last name
firstName
string
First name
id
integer
Player's identifier
gender
string
Gender of player
Holes Through Object
Field Name
Type
Description
value
integer
The number of holes that a player has completed at this point
displayValue
string
The number of holes that a player has completed at
roundInfo object
Field Name
Type
Description
Value (1)
object
Round 1 - see value object table
Value (2)
object
Round 2 - see value object table
Value (3)
object
Round 3 - see value object table
Value (4)
object
Round 4 - see value object table
Value (401)
object
Playoff round 1 after 4th round. The playoff numbering convention is "{round # after which the playoff is held}0{round # of playoff} "
roundInfo value object (including round values 1, 2, 3, 4, 401+)
Field Name
Type
Description
score
object
See object docs
toPar
object
See object docs
teeTime
string
Time golfer scheduled to tee off
startHole
integer
Number of the hole the player begins the round on (typically only 1 or 10)
roundFinishedPosition
integer
Overall tournament standings at the end of a given round
roundFinishedIsTied
boolean
Tie indicator for roundFinishedPosition
Round Info - Score Object
Field Name
Type
Description
value
integer
The overall number of strokes the player has taken in the selected round, updated a the end of the hole
displayValue
string
The overall number of strokes the player has taken in the selected round, updated a the end of the hole
Round info - toPar object
Field Name
Type
Description
value
integer
The overall "to par" score so far for the tournament for a given player. Updated after every hole finishes
displayValue
string
The overall "to par" score so far for the tournament for a given player. Updated after every hole finishes.
Round info - toParToday object
Field Name
Type
Description
value
integer
The overall "to par" score so far for the day for that player for the selected round. Updated after every hole finishes
displayValue
string
The overall "to par" score so far for the day for that player for the selected round. Updated after every hole finishes
Round info - totalScore object
Field Name
Type
Description
value
integer
The overall number of strokes the player has taken in the tournament to date, updated at the end of the round
displayValue
string
The overall number of strokes the player has taken in the tournament to date, updated at the end of the round
Position object
Field Name
Type
Description
order
integer
The unique order of that player in the leaderboard. To be used to order the players from top to bottom
value
integer
The player's position in the leaderboard. Players can have the same value
format
string
Either "absolute" if only player in that position, or "tied" is sharing the position with another player
displayValue
string
The player's position in the leaderboard - will include a "T" if tied
Current round object
Field Name
Type
Description
number
integer
Number of the current round
name
string
Name of the current round
cutline
object
Includes “required, a boolean field indicating if there is a cut on the current round or not, and “cut”, which is the current score that players need to be above to avoid the cut.
Cut line object
Field Name
Type
Description
cut
integer
Cut line score
required
boolean
Is it required to show a cut line true/false
roundStatus Array
An array containing multiple objects, each object contains the following:
Field Name
Type
Description
number
integer
Number of the current round
status
string
Status of the round. possible values:
GroupingsOfficial, InProgress, Maintenance, NotStarted, Official, PlayComplete, Suspended, Cancelled
Sample Response
Please note statistics are only available for events after the 16th June 2022.
This endpoint is a live websocket endpoint that returns the full set up player hole statistics for all rounds in a given tournament. Currently the whole player stats event is sent whenever a new RoundDetails packet is received from either FlightScope of PGA.
The authentication token provided will be required to make a connection to this websocket endpoint.
Once you have the API token, any further data that you send over the connection will be ignored.
N.B – This endpoint sends heartbeats in-between data packets to let you know that it is still connected.
This endpoint currently takes no request parameters
wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/playerstats
This can be found at - https://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/playerstats
Full list of Hole stats for each player
Holes
drivingDistance
fairway
gir
holeNo
holedPuttDistance
bunker
putts
rough
Playerstats Object
Field
Definition
Data Type
SeqNum
Sequence number of the update packet
integer
teamsStatistics
see object docs
object
timestamp
Time the update is sent
time
tournamentId
tournament ID
The id of the tournament
teamsStatistics Object
Field
Definition
Data Type
players
see object docs
object
teamsStatistics
see object docs
object
teamId
team id for the player
integer
players Object
Field Name
Type
Description
displayName
string
Name of the player
Country
string
Country of the player
isAmateur
boolean
True if player is an amateur
lastName
string
Last name
firstName
string
First name
gender
string
gender of player
id
integer
Player ID
holeStatistics Object
There is a subset of player stats that provides per round information about the player's performance on a limited number of statistics. These are as follows:
Field
Definition
Data Type
holeNo
The number of the hole
integer
gir
Did the player make a Greens in Regulation. Defined as finding the Green or Hole on or before the (n-2)th stroke.
boolean
holedPuttDistance
From what distance did a player hole out
float
fairway
Did the player hit the fairway from the teeshot
boolean
drivingDistance
Driving distance
float
bunker
Did the player hit the bunker
boolean
rough
Did the player hit the rough
boolean
putts
Number of putts to hole the ball
integer
teamsStatistics sample json output:
Applies when Tournament(s)/`format`="Match"
This web socket endpoint returns the event-by-event data PER MATCH. You will need to make a connection for every match played over the course of the tournament. Both (opposing) team’s event-by-event data for that match will play out, and you should close the connection upon receiving the RoundOfficial
packet. This endpoint is in conjunction with the Live Events REST endpoint – when a match starts it will be included in the response to the endpoint, and at that point you should commence connecting to the web socket for that match’s live stream.
N.B. this websocket will return data for all players in a match, each matchNo
is unique for the whole tournament e.g. there is no way of having a match in round 7 with the same matchNo
as in round 3 (even if the exact same players are playing in the match.)
wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/matchdetails/{matchNo}
Process for connecting to the web socket endpoints
Connect to SSL websocket address
Send JSON packet containing API token
Receive response indicating that connection is authorised (or a response indicating why the connection cannot be made)
Receive heartbeat packets every 10 seconds to verify the connection is live
Receive data packets
Once you have the API token, any further data that you send over the connection will be ignored.
This endpoint currently takes no request parameters, we aim to add them, and once we have they will be detailed here.
There are a number of different types of packets that can be sent through this endpoint. They are detailed in the section.
Key differences between Team Round Details & Team Match Details
stroke play feed keeps a log of a single player’s round, the match play output keeps a log of all players in the given match
groupNo
and matchNo
not included in events
matchType
: "Matchplay"
different possible values for finishReason
Note that the Team Match details for matchplay websockets is available via Rest - https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/matchdetails/{MatchNo}?rest=true
Please note statistics are only available for events after the 16th June 2022.
This endpoint is a live websocket endpoint that returns the statistics for all holes, on a per round basis for a given tournament. Currently the whole hole stats event is sent whenever a new RoundDetails packet is received from either FlightScope of PGA.
The authentication token provided will be required to make a connection to this websocket endpoint.
Once you have the API token, any further data that you send over the connection will be ignored.
N.B – This endpoint sends heartbeats in-between data packets to let you know that it is still connected.
This endpoint currently takes no request parameters
This can be found at - wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/holestats
Note that the hole statistics websockets is available via Rest - https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}/holestats?rest=true
holeStats Object
holeStats Array
The hole statistics are returned at round level and tournament level. The full list of statistics and their definitions are as follows:
These statistics are outputted per hole, per round.
Sample output:
This endpoint is a live web socket endpoint that returns a list of every match in a Match Play Tournament and the current live score / result of this match.
This is to be used in place of web socket for match play tournaments.
The authentication token provided will be required to make a connection to this web socket endpoint.
wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/matchplayleaderboard
Same as
Same as
Note that the matchplay leaderboard websockets is available via Rest - https://dde-api.data.imgarena.com/golf/tournaments/{EventID}/matchplayleaderboard?rest=true
Please find below all possible values and important details for roundName
, currentMatchScore
& finalMatchScore
FinalMatchScore
The possible values and formats for finalMatchScore
vary depending on the scenario:
Round finishes after 18 holes: possible values are equal to those found in the MatchScore section above (e.g. 1up, 2up)
Round finishes after more than 18 holes: the final match score value will read ‘[number of holes played] HOLES’. For example, if 20 holes are required to declare a winner, then the final match score will read “20 HOLES”
Round finishes in less than 18 holes: the final match score value will be of the format “[difference between player wins and losses] & [number of holes not played]”. 2 examples below:
Final Match Score of “3 & 1” means that the players ended the round when one player was up by 3 with 1 hole left.
Player A: won 4 holes, lost 1 hole, tied 12 holes -> 17 holes played total
Player B: won 1 hole, lost 4 holes, tied 12 holes -> 17 holes played total
Final Match Score of “5 & 4” means the players ended the round when one player was up by 5 with 4 holes left.
Player A: won 2 holes, lost 7 holes, tied 5 holes -> 14 holes played total
Player B: won 7 holes, lost 2 holes, tied 5 holes -> 14 holes played total
Can be "C" if player concedes the match before a ball is struck
No Playoffs in Ryder Cup
Two scenarios need to be addressed.
Scenario: A play-off match is required to determine the winner of a pool.
2. Scenario: There is no winner in a knock out match after 18 holes
This endpoint is a live websocket endpoint that returns individual team hole-by-hole scores. Currently the whole json is sent whenever there is an update – this will look to be optimised in the future to just send new data (deltas). You should receive a new update any time a player completes a hole, and their total strokes and “to par” score for the day changes.
The authentication token provided will be required to make a connection to this websocket endpoint.
This endpoint currently takes no request parameters, we aim to add them, and once we have they will be detailed here.
wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/teamholebyhole/{teamID}
The authentication token provided will be required to make a connection to this websocket endpoint.
Sample Endpoint URL for The American Express 2025 for team 1:
wss://dde-streams.data.imgarena.com/golf/tournaments/1092/teamholebyhole/1
https://dde-streams.data.imgarena.com/golf/golf/tournaments/{tournamentId}/teamholebyhole/{TeamID}?rest=true
Hole by hole object
Players object
roundScores Object
roundScores 1-4 (round) Object
Holes object
1-18 holes object
inScore Object
outScore Object
roundToPar object
roundScore object
roundPar object
Playoff holebyholes work in the same way, to the above holebybhole, however they are sent as a new object with a playOffScore on the same level as roundScores.
See below for an example from the Sony Open in Hawaii 2025 playoff:
Applies when Tournament(s)/`format`="Match"
This is a live websocket endpoint that returns hole by hole scores for a match. The whole json is sent whenever there is an update. You should receive a new update when a hole is completed.
The authentication token provided will be required to make a connection to this websocket endpoint.
This web socket is the match play equivalent to web socket for stroke play.
wss://dde-streams.data.imgarena.com/golf/tournaments/{tournamentId}/matchscore/{matchNo}
Same as
Same as
Note that the Match score websockets is available via Rest - https://dde-api.data.imgarena.com/golf/tournaments/{tournamentId}}/matchscore/{MatchNo}?rest=true
Please find below all possible values for cumulativeHolesAdvantage
holescores.strokes field is a string and indicates the number of strokes taken for the given hole. Possible values are any valid integer, as well as "c" and "-" .
Scenarios
Team holes the ball - strokes value will be an integer
Team concedes hole - strokes value will be "c"
Team wins hole but does not hole the ball - strokes value will be "-"
Team loses hole without conceding the hole or holing the ball - strokes value will be "-"
*For more information you can refer to holeScores.holeFinishedBy field (details below.)
HoleScores.playerScores.strokes field is an integer and indicates the number of strokes a player had on a hole during a fourball format match (aka better ball.)
To be clear, the overarching score for the team will be taken from Holescores object, but we suggest drilling down to HoleScores.playerScores object for UI implementations as this information is important to the end user.
Suggested business logic for fourballs (aka better ball):
GIVEN fourballs scorecard
WHEN holeScores.HoleFinishedBy
is "HoleConceded" for a team
THEN display "c" for both players' strokes score on the scorecard for that team
GIVEN fourballs scorecard
WHEN holeScores.HoleFinishedBy
is "LossOfHole" for a team
THEN display "-" for both players' strokes score on the scorecard for that team
GIVEN fourballs scorecard
WHEN holeScores.HoleFinishedBy
is "HoleWon" for a team
THEN display "-" for both players strokes score on the scorecard for that team
GIVEN fourballs scorecard
WHEN holeScores.HoleFinishedBy
is "BallHoled" for a team
THEN display playerScores.strokes
IF "playerScores.isBallHoled" : "true"
AND display "-" IF "playerScores.isBallHoled" : "false"
N.B. currently do not support 'gimmes' i.e. if a player is given a concession stroke from the other player it will go down as a successful stroke or "ballHoled".
For example, player A has 2 inches to make a par putt on a par 3 and player B says to the player to pick up his ball and take a 'gimme' it will go down as 3 strokes and "holeFinishedBy" as "BallHoled".
No Playoffs in Ryder Cup
Two scenarios need to be addressed.
Scenario: A play-off match is required to determine the winner of a pool.
Play-off matches will have same match score packet format as regular matches, along with unique matchNo
. Play-off matches will finish as soon as there is a winner, i.e. if the first hole is tied then a second hole is played etc. until there is a winner.
2. Scenario: There is no winner in a knock out match after 18 holes
In the case of a match not being settled in 18 holes, extra holes will be played until there is a winner. The client can determine when to use play-off logic based on the playOfSequence
field which will be "1" in the case of an extra play-off hole.
Indicates a team has started to play a the particular round.
Round Started Object
Players Object
Sample Event Packet:
Indicates a team has finished playing that particular round. NOT the last packet in the Round Details feed, see RoundOfficial below.
Round Finished Object
Sample Event Packet:
Indicates a team has finished playing that particular round and that the score for that round is now official and will not change – Upon receiving this packet you should disconnect from the web socket for this team’s round – no more data will be sent through after this packet.
Round Finished Object
Sample Event Packet:
packets refer to a match opposed to a round but still has same naming conventions as for stroke play
will return two packets, one for each team, the teamNo
will be provided on each packet. Both packets combined will cover all events for the entire hole.
Play-off matches will have same format as regular matches in the match score packet, along with unique matchNo
but will be played in a round with roundNo
: "301". All play-off matches will appear in this same round. Play-off matches will finish as soon as there is a winner, i.e. if the first hole is tied then a second hole is played etc. until there is a winner. It must also be noted that, in the case of a play-off, a new packet will be sent to account for the extra round.
Implementation will not be affected other than the fact that more than 18 holes will be played and the finalMatchScore
will have a different format as detailed in the section.
Field
Definition
Data Type
SeqNum
Sequence number of the update packet
integer
holeStats
See object docs
array
timestamp
Time the update is sent
time
tournamentId
Tournament ID
The id of the tournament
Field
Definition
Data Type
holeNumber
Hole number
integer
parNumber
Par value for hole
integer
rounds
Hole statistics by round -view table below
array
total
Hole Statistics for the tournament -view table below
array
Statistic
Definition
Data type
averagePutts
Average amount of putts players take to hole out
integer
pars
Total pars on a hole
integer
birdies
Total birdies on a hole
integer
bogeys
Total bogeys on a hole
integer
doubleBogeysOrWorse
Total double bogeys or worse on a hole
integer
eaglesOrBetter
Total eagles or better on a hole
integer
fairwaysHit
Total number of times players hit the fairway on a hole from the tee shot
integer
greensHit
Total number of times players hit the green on a hole from the tee shot
integer
threePutts
Total three putts (or worse) on a hole
integer
timesPlayed
Total number of times the hole has been played by all players
integer
scoringAverage
The scoring average on the hole
integer
Field Name
Type
Description
Possible Values
tournamentId
integer
Unique overall id of the Tournament
integer
timestamp
time stamp
Timestamp of message creation
time stamp
finished
boolean
checks if tournament status is official
boolean
seqNum
integer
Sequence number of the message
integer
currentRound
integer
Number of the current round. If tournament hasn’t started yet, this value will be 1
integer
tournamentStatus
string
Current status of the tournament
"NotStarted" "InProgress" "PlayComplete" "Official"
"PlaySuspended"
roundStatuses
array
see object docs
NA
matches
array
see object docs
NA
TournamentScores
object
see object docs
NA
YES
Field Name
Type
Description
Possible Values
number
integer
Number of the round
integer
status
string
Enum value for Round Status
"GroupingsOfficial"
"InProgress"
"Maintenance"
"NotStarted"
"Official"
"PlayComplete"
"Suspended"
"Cancelled"
Field Name
Type
Description
Possible Values
Optional
poolNo
integer
Number of the pool for the given match
integer
YES
courseId
Integer
Id of the Course for which the match will be played on
integer
matchNo
integer
The incremental number of the match throughout the Tournament
N.B. each matchNo
is unique per tournament
integer
poolMatchPosition
integer
Match position within the event
integer
YES
teams
array
see object docs below
NA
roundNo
integer
Incremental number of the Round
integer
roundName
string
Name of the round
matchStatus
string
Status of the match
"Not Started" "In Progress" "MatchComplete"
startHole
integer
Hole on which the match started; typically, either 1 or 10
integer
teeTime
time stamp
Match’s starting tee time with UTC offset
time stamp
Field Name
Type
Description
Possible Values
Optional
players
array
see object docs
NA
finaMatchScore
string
The player’s final score in the match
matchLeader
integer
Indicator of whether or not player is leading in the given match
"1" or "0"
seed
integer
Player’s seed at the start of the tournament
integer
YES
matchWinner
boolean
Flag indicating whether or not the player is the match winner
"true" or "false"
totalPoolPoints
decimal
Final sum of points from pool play matches (Number of pool play wins + [0.5 * Number of pool play ties])
decimal
YES
currentMatchScore
string
The player’s current score in the match
totalPoolHalves
integer
Final number of pool play match ties
integer
YES
poolPlayGroupNo
integer
Player’s pool number used in the first 3 rounds (group stage)
integer
YES
totalPoolLosses
integer
Final number of pool play match losses
integer
YES
poolWinner
boolean
Flag indicating whether or not the player won their pool play
"true" or "false"
YES
poolWins
integer
Current number of pool play match wins
integer
YES
teamNo
integer
Unique number of the Team during the Match Play tournament
integer
previousMatch
integer
Number of the player’s previous match
integer ("0" for round 1)
YES
thru
string
Number of holes played in round
integer, "-" or "F" if match is complete
isTied
integer
Flag indicating whether or not the player is tied for their position
"1" or "0"
poolLosses
integer
Current number of pool play match losses
integer
YES
position
integer
Player’s numerical ranking in the tournament
integer
YES
totalPoolWins
integer
Final number of pool play match wins
integer
YES
poolPoints
decimal
Current sum of points from pool play matches (Number of pool play wins + 0.5 * Number of pool play ties)
decimal
YES
poolHalves
integer
Current number of pool play match ties
integer
YES
Field Name
Type
Description
id
integer
Unique id of a Player
country
string
FIFA country code, 3 uppercase letters
lastName
string
Last known name of the Player
firstName
string
First known name of the Player
Field Name
Type
Description
Optional
scoreToWin
Integer
the score a squad needs to reach in order to win tournament
host
boolean
indicates if the squad is hosting the tournament
score
decimal
Total tournament score
squadName
string
name of the squad, either "Europe" or "USA"
SquadNo
integer
indicator of the squad
projectedScore
decimal
projected score
Field Name
Possible Values
roundName
Round1, Round2, Round3, Round of 16, Quarterfinals, Semifinals, Finals, Round for Playoff #1, Friday Foursomes, Friday Fourballs, Saturday Foursomes, Saturday Fourballs, Sunday Singles
currentMatchScore
T, 1up, 2up, 3up, 4up, 5up, 6up, 7up, 8up, 9up, 10up, 1dn, 2dn, 3dn, 4dn, 5dn, 6dn, 7dn, 8dn, 9dn, 10dn
Field Name
Type
Description
tournamentID
integer
tournament ID
players
object
See object docs
timestamp
time
Time the update sent
seqNum
integer
Sequence number of the packet
teamNo
integer
team number of player (players are usually in a team of 1)
roundScores
object
See object docs
playOffScore
object
See object docs. Only for playoff rounds
isOfficial
boolean
Have the scores been officialised
Field Name
Type
Description
displayName
string
Name of the player
Country
string
Country of the player
isAmateur
boolean
True if player is an amateur
lastName
string
Last name
firstName
string
First name
gender
string
Gender of player
id
integer
Player ID
Field Name
Type
Description
1- 4+ playoff (round)
object
The object in which the round score information is included
Field Name
Type
Description
holes
object
See object docs
inScore
object
See object docs
outScore
object
See object docs
roundPar
object
Includes value and roundPar of the par score for that round. See object docs
roundScore
object
Includes value and roundScore of the score for that team for that round. See object docs
roundToPar
object
Includes value and roundToPar for the team's overall to par score for that round. See object docs
Field Name
Type
Description
1- 18 (holes)
object
See object docs
Field Name
Type
Description
holeScore
integer
The to par score for that team in that hole
holePar
integer
The par score for that hole
holeOrder
integer
How many holes into their round is the team
holeYardage
integer
The length of the hole in yards
holeStrokes
integer
The number of strokes that the team did on that hole
Field Name
Type
Description
par
integer
The par score for the last 9 holes of the course
score
integer
The to par score for the last 9 holes of the course
strokes
integer
The number of strokes that the team did on the last 9 holes of the course
yardage
integer
The length of the last 9 holes in yards
Field Name
Type
Description
par
integer
The par score for the first 9 holes of the course
score
integer
The to par score for the first 9 holes of the course
strokes
integer
The number of strokes that the team did on the first 9 holes of the course
yardage
integer
The length of the first 9 holes in yards
Field Name
Type
Description
value
integer
Player's score relative to par on the current round
displayValue
string
Player's score relative to par on the current round
Field Name
Type
Description
value
integer
Player's score on the current round
displayValue
string
Player's score on the current round
Field Name
Type
Description
value
integer
Score for a round required for a player to make par
displayValue
string
Score for a round required for a player to make par
Field Name
Type
Description
OPTIONAL
tournamentId
integer
tournament identifier
timestamp
time
Time at which the scorecard feed was generated in UTC
teamScores
array
see object docs
isOfficial
boolean
Indicates whether or not the scorecard updates for the given player are complete. Occurs when a player has completed competing in the tournament either from retiring or finishing all rounds.
seqNum
integer
sequence number of the packet
scoringType
string
[Optional] is either "strokes" or "points"
YES
winningTeamNo
integer
identifier of the match winner; will be null until a winner is defined
YES
matchId
integer
match identifier
Field Name
Type
Description
Optional
matchTotalToPar
integer
[Optional] Integer, Score to par calculated for finished holes
YES
players
array
see object docs
matchPoints
Decimal
[Optional] Decimal, Score for team in match, usually it will be sum of points of MatchHoleScore points (available only for ScoringType set to Points)
YES
matchStrokes
integer
[Optional] Integer, Number of strokes taken in that match - based only on completed holes
YES
holeScores
array
see object docs
teamNo
integer
Team identifier
Field Name
Type
Description
Optional
cumulativeScoreToPar
integer
[Optional] Integer, Contains cumulative number of strokes compared to par of current and previous holes
YES
yardage
integer
The length of the hole in yards
par
integer
Par value for the given hole
holeFinished
boolean
flag to determine if a given hole is finished
scoreToPar
integer
[Optional] integer, score to par on particular hole. This value will be empty when hole was not played yet or conceded
YES
points
double
The accumulated points score for that match
YES
holeFinishedBy
string
The reason for which the hole ended; possible values:
"BallHoled" "HoleWon" "LossOfHole" "HoleConceded"
YES
cumulativeHolesAdvantage
string
The team’s score in the match at the time that the given hole was completed, see categorical fields
YES
strokes
string
Number of strokes taken for the given hole; if a hole is conceded, the strokes value is set to "c", can also be "-". see supplementary information
YES
holeNo
integer
Number of the hole
playOffSequence
integer
A counter indicating which playoff hole number the given hole pertains to, Will be 0 for non-playoff holes, and will count up from 1 for playoff holes
PlayerScores
array
Score per player on a given hole, this will be sent when teams are playing best ball (Four Balls) format so as to know the individual player score as well as the total team score
YES
Field Name
Type
Description
displayName
string
Name of the player
country
string
Country (3 upper case letters)
isAmateur
boolean
True if player is an amateur
lastName
string
Last name
firstName
string
First name
id
integer
Player ID
gender
string
gender of the player
Field
Type
Description
Optional
Strokes
integer
number of strokes on a given hole
ScoreToPar
integer
score to par on a given hole
id
integer
player ID
isBallHoled
Boolean
Flag indicating whether the ball was holed
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
groupId
integer
[Optional] The group ID of the player who did the event
groupNo
integer
The group number of the player who did the event
teamNo
integer
The team number of the player who did the event
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
eventElementType
string
The type of event
state
object
The type of status update, in this case always Hole Started.
roundNo
integer
The round number
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
groupId
integer
[Optional] The group ID of the player who did the event
groupNo
integer
The group number of the player who did the event
teamNo
integer
The team number of the player who did the event
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
timestamp
date
The timestamp of the event, in UTC
eventElementType
string
The type of event
state
string
The type of status update, in this case always Hole Finished
finishReason
string
“finishReason” is a string value that explains why a Hole was finished, can be BallHoled, Disqualified, Withdrawn.
roundNo
integer
Round number
score
array
See object below
scorePending
boolean
if score is pending
timestampReceived
date
TThe server time of the moment that this packet has been processed
Field Name
Type
Description
currentHolePar
integer
Current hole score
currentHoleStrokes
integer
current strokes on hole
currentRoundScoreToPar
string
Current round to par score
overallScoreToPar
string
overall score
Field Name
Type
Description
matchType
string
The type of match in which the event is being played; Strokeplay is the standard response currently
eventElementType
string
The type of event
state
object
The type of status update, in this case always Round Started.
seqNum
integer
The sequence number of the packet. Always starts at 1, increments in 1
groupId
integer
[optional] The group ID of the player who did the event
groupNo
integer
The group number of the player who did the event
teamNo
integer
The team Number of the player who did the event
players
array
See object docs
holeNo
integer
The hole No which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
roundNo
integer
The current round number
Field Name
Type
Description
displayName
string
The display name of the player
country
string
3-character ICO country code of the player*
isAmateur
boolean
true if the player is an amateur
lastName
string
the last name of the player
firstName
string
the first name of the player
gender
string
gender of the player
playerId
integer
The unique player ID of that player
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
groupID
integer
[Optional] The group ID of the player who did the event
groupNo
integer
The group No of the player who did the event
teamNon
integer
The team number of the player who did the event
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
eventElementType
string
The type of event
state
object
The type of status update, in this case always Round Finished.
roundNo
integer
The current round number
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
groupID
integer
[Optional] The group ID of the player who did the event
groupNo
integer
The group No of the player who did the event
teamNon
integer
The team number of the player who did the event
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
eventElementType
string
The type of event
state
object
The type of status update, in this case always Round Official.
Field Name
Type
Description
timestamp
time
The time of the heartbeat
eventelementType
string
The type of event, in this case always “heartbeat”
message
string
The heartbeat message
This event will be sent when a player is about to hit the ball, i.e, they are standing over the ball literally about to take their stroke.
Addressing Ball Object
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
groupId
integer
The group ID of the player who did the event
groupNo
integer
[Optional] The group number of the player who did the event
teamNo
integer
The team number of the player who did the event
playerId
integer
The player ID of the player who did the event
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
strokeNo
integer
The stroke associated with the event
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
eventElementType
string
The type of event, in this case AddressingBall
provisionalIndex
integer
indicates if the event is part of a provisional ball. 0 if not, 1 if first provisional ball, 2 if second provisional ball for that stroke, e.t.c…
player
object
See object below
clubTypeCode
string
This is the type of Club a player used for the shot. NB. this is only populated for Drives.
roundNo
integer
The current round number
displayName
string
The full name or display name of that player
country
string
The affiliated country (typically birthplace)
gender
string
The gender of player
isAmateur
string
Is that player an amateur or not (true/false)
lastName
string
The surname of the player
firstName
string
The forename of that player
id
Integer
The Player unique Id
Club Types
clubTypeCode
Description
CDR
Driver
CFW
Fairway Wood
CIR
Iron
CUK
Unknown
Sample Event Packet:
This event will be sent as soon as the player has hit the ball.
Hit Ball Object
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
groupID
integer
The group ID of the player who did the event
groupNo
integer
[Optional] The group number of the player who did the event
teamNo
integer
The team number of the player who did the event
playerId
integer
The player ID of the player who did the event
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
strokeNo
integer
The stroke associated with the event
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
eventElementType
string
The type of event, in this case HitBall
provisionalIndex
integer
indicates if the event is part of a provisional ball. 0 if not, 1 if first provisional ball, 2 if second provisional ball for that stroke, e.t.c…
player
object
See object below
roundNo
integer
round number of the event
score
object
See object below
displayName
string
The full name or display name of that player
country
string
The affiliated country (typically birthplace)
isAmateur
string
Is that player an amateur or not (true/false)
gender
string
the gender of the player
lastName
string
The surname of the player
firstName
string
The forename of that player
id
Integer
The Player unique Id
Score Object
Field Name
Type
Description
currentHoleStrokes
integer
The number of strokes that the team is on for that hole; Can be greater than ‘stroke’ above in the instance that the team has been awarded a penalty
currentHolePar
integer
The par score for the current hole
currentRoundScoreToPar
object
The team’s current ‘To Par’ score for the current round
overallScoreToPar
object
The team’s current ‘To Par’ score for the tournament
Sample Event Packet:
This will be sent as soon as we have any information on the lie of the ball. It is approximate because it assumes the data collector has not been able to get to where the ball has landed on the course, and will be estimating it’s lie based on a map.
Approximate Ball Lie Object
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
strokesAssessed
integer
Default as 1.
groupID
integer
The group ID of the player who did the event
groupNo
integer
[Optional] The group number of the player who did the event
teamNo
integer
The team number of the player who did the event
playerId
integer
The player ID of the player who did the event
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
strokeNo
integer
The stroke associated with the event
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
eventElementType
string
The type of event, in this case ApproximateLie
ballLie
object
See object below
player
object
See object below
provisionalIndex
integer
indicates if the event is part of a provisional ball. 0 if not, 1 if first provisional ball, 2 if second provisional ball for that stroke, e.t.c…
Ball Lie Object
Field Name
Type
Description
coordinates
object
See object below
shotDistance
decimal
How far the shot went for that stroke. Data returned in meters.
distanceToPin
integer
How far the ball is from the pin. Data returned in meters
surfaceType
string
Text string which describes the lie of the ball, can be inconsistent across different data collection systems / Tours. We recommend using the 3 letter codes.
See Surface Types table below.
surfaceTypeCode
string
3 letter enum code which describes the lie of the ball.
See Surface Types table below.
obstructions
boolean
true if the team has an obstruction next to the ball that makes the ball hard to hit
blindshot
boolean
true if the team cannot see the pin from where they are taking the shot
distanceToPinProb
array
distance to ping probability - only for PGA events
isPredictionUnconfident
boolean
isWaterProbable
boolean
if the ball is in the water - only for PGA events
strokesToPinProb
array
strokes to ping probability - only for PGA events
coordinates object:
Field
Type
Description
x
decimal
X co-ordinate of the ball
y
decimal
Y co-ordinate of the ball
z
decimal
Z co-ordinate of the ball
Surface Types:
surfaceTypeCode
surfaceType
OFW
Fairway
OGR
Green
OIR
IntermediateRough
ORO
Rough or PrimaryRough
OST
FairwayBunker
OGS
Greenside Bunker
OCO
Fringe
ONA
NativeArea
OTO
Trees or TreeOutline
OBU
Bushes
ODS
Desert
OWA
Water
OTH
Other
OCA
CartPath
ODO
Dirt or DirtOutline
OTF
OtherFairway
OOB
OutOfBounds
OWB
WasteBunker
OUK
Unknown
displayName
string
The full name or display name of that player
country
string
The affiliated country (typically birthplace)
gender
string
The gender of the player
isAmateur
string
Is that player an amateur or not (true/false)
lastName
string
The surname of the player
firstName
string
The forename of that player
id
Integer
The Player unique Id
Sample Event Packet:
This will be sent as soon as we have more detailed information on the lie of the ball – I.e the data collector has been able to walk over to the lie of the ball and give the exact GPS location of the ball.
Detailed Ball Lie Object
Field Name
Type
Description
ballLie
object
See object below
seqNum
integer
The sequence number of the packet.
strokesAssessed
integer
Default as 1.
groupNo
integer
[Optional] The group number of the player who did the event
groupId
integer
the group Id of the player who did the event
teamNo
integer
The team number of the player who did the event
playerId
integer
The player ID of the player who did the event
player
object
See object below
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
strokeNo
integer
The stroke associated with the event
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
eventElementType
string
The type of event, in this case ApproximateLie
provisionalIndex
integer
indicates if the event is part of a provisional ball. 0 if not, 1 if first provisional ball, 2 if second provisional ball for that stroke, e.t.c…
roundNo
integer
round number of the event
Ball Lie Object
Field Name
Type
Description
coordinates
decimal
Z co-ordinate of the ball
shotDistance
integer
How far the shot went for that stroke. Data returned in meters
distanceToPin
integer
How far the ball is from the pin. Data returned in meters
surfaceType
string
Text string which describes the lie of the ball, can be inconsistent across different data collection systems / Tours. We recommend using the 3 letter codes.
See Surface Types table above.
surfaceTypeCode
string
3 letter enum code which describes the lie of the ball.
See Surface Types table above.
obstructions
boolean
true if the team has an obstruction next to the ball that makes the ball hard to hit
blindshot
boolean
true if the team cannot see the pin from where they are taking the shot
coordinates object:
Field
Type
Description
x
decimal
X co-ordinate of the ball
y
decimal
Y co-ordinate of the ball
z
decimal
Z co-ordinate of the ball
displayName
string
The full name or display name of that player
country
string
The affiliated country (typically birthplace)
isAmateur
string
Is that player an amateur or not (true/false)
gender
string
The gender of the player
lastName
string
The surname of the player
firstName
string
The forename of that player
id
Integer
The Player unique Id
Sample Event Packet:
Will be sent when the ball has been holed.
Ball Holed Object
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
strokesAssessed
integer
Default as 1.
groupId
integer
The group Id of the player who did the event
groupNo
integer
[Optional] The group number of the player who did the event
teamNo
integer
The team number of the player who did the event
playerId
integer
The player ID of the player who did the event
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
strokeNo
integer
The stroke associated with the event
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
eventElementType
string
The type of event, in this case BallHoled
score
object
See object below
roundNo
integer
round number in the event
player
object
see object below
provisionalIndex
integer
indicates if the event is part of a provisional ball. 0 if not, 1 if first provisional ball, 2 if second provisional ball for that stroke, e.t.c…
Player Object
displayName
string
The full name or display name of that player
country
string
The affiliated country (typically birthplace)
isAmateur
string
Is that player an amateur or not (true/false)
gender
string
The gender of the player
lastName
string
The surname of the player
firstName
string
The forename of that player
id
Integer
The Player unique Id
Score Object
Field Name
Type
Description
currentHoleStrokes
integer
The number of strokes that the team is on for that hole; Can be greater than ‘stroke’ above in the instance that the team has been awarded a penalty
currentHolePar
integer
The par score for the current hole
currentRoundScore
object
The team’s current ‘To Par’ score for the current round
overallScore
object
The team’s current ‘To Par’ score for the tournament
Sample Event Packet
← Hole: Started / FinishedPenalty Stroke →
This event will be sent following when a player hits a provisional ball – it will indicate which of the provisional balls was chosen and how the player will continue their round.
Will be the event that follows any stroke events that have the provisionalIndex NOT set to 0.
ProvisionalBallSelected Object
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
groupNo
integer
[Optional] The group number of the player who did the event
groupId
integer
The group ID of the player who did the event
teamNo
integer
The team ID of the player who did the event
player
array
See object below
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
strokeNo
integer
The stroke associated with the event
timestamp
date
The timestamp of the event, in UTC
eventElementType
string
The type of event, in this case ProvisionalBallSelected
provisionalIndex
integer
indicates if the event is part of a provisional ball. 0 if not, 1 if first provisional ball, 2 if second provisional ball for that stroke, e.t.c…
penaltyStrokes
integer
The number of penalty strokes attributed to that particular provisional ball that was selected
ballLie
array
See object below
provisionalResult
int
the number of strokes assigned to that provisional ball selected
Ball Lie Object
Field Name
Type
Description
coordinates
object
See object below
shotDistance
integer
How far the shot went for that stroke. Data returned in meters.
distanceToPin
decimal
How far the ball is from the pin. Data returned in meters
surfaceType
string
Text string which describes the lie of the ball, can be inconsistent across different data collection systems / Tours. We recommend using the 3 letter codes.
See Surface Types table below.
surfaceTypeCode
string
3 letter enum code which describes the lie of the ball.
See Surface Types table below.
obstructions
boolean
true if the team has an obstruction next to the ball that makes the ball hard to hit
blindshot
boolean
true if the team cannot see the pin from where they are taking the shot
coordinates object:
Field
Type
Description
x
decimal
X co-ordinate of the ball
y
decimal
Y co-ordinate of the ball
z
decimal
Z co-ordinate of the ball
displayName
string
The full name or display name of that player
country
string
The affiliated country (typically birthplace)
gender
string
The gender of player
isAmateur
string
Is that player an amateur or not (true/false)
lastName
string
The surname of the player
firstName
string
The forename of that player
id
Integer
The Player unique Id
Sample Event Packet
← SuspensionsCorrections →
This packet will be sent whenever a previous packet needs correcting. The original event still happened, at the time that it happened, BUT some of the details within that packet are being updated. Corrections can happen to the last event that happened, or to an event that happened X events ago (I.e it can happen in and out of sequence).
Current List of Events that can be Corrected:
Approximate Lie
Detailed Lie
Penalty
Ball Drop
Note – this list will change over time as we add new packets that can be corrected.
Correction Object
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
timestamp
date
The timestamp of the event, in UTC
eventElementType
string
The type of event, in this case Correction
timestampReceived
date
The server time of the moment that this packet has been processed
corrections
object
contains all information on the packet that is being corrected, even if certain information within the packet has not been corrected
courseId
string
The ID of the course where the event took place
eventCorrectedIdentifier
object
See object below
groupId
integer
The group ID of the player who did the event
roundNo
integer
The current round number
Corrections Object
Field Name
Type
Description
ballLie
object
See object below
provisionalIndex
integer
indicates if the event is part of a provisional ball. 0 if not, 1 if first provisional ball, 2 if second provisional ball for that stroke, e.t.c…
strokeNo
integer
The stroke associated with the event that is being corrected
strokesAssessed
integer
The stroke assessed with the event that is being corrected
Ball Lie Object
Field Name
Type
Description
coordinates
object
See object below
shotDistance
integer
How far the shot went for that stroke. Data returned in meters.
distanceToPin
decimal
How far the ball is from the pin. Data returned in meters
surfaceType
string
Text string which describes the lie of the ball, can be inconsistent across different data collection systems / Tours. We recommend using the 3 letter codes.
See Surface Types table below.
surfaceTypeCode
string
3 letter enum code which describes the lie of the ball.
See Surface Types table below.
obstructions
boolean
true if the team has an obstruction next to the ball that makes the ball hard to hit
blindshot
boolean
true if the team cannot see the pin from where they are taking the shot
coordinates object:
Field
Type
Description
x
decimal
X co-ordinate of the ball
y
decimal
Y co-ordinate of the ball
z
decimal
Z co-ordinate of the ball
eventCorrectedIdentifier Object
This contains information unique to the event that is being corrected – use this information to reference the previous packet so you know what packet and what data to update.
Field Name
Type
Description
holeNo
integer
The hole in which the event took place that is being corrected
eventElementType
string
The type of event that is being corrected
strokeNo
integer
The stroke associated with the event that is being corrected
playerId
integer
The player ID of the player who did the event that is being corrected
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
teamNo
integer
The team number of the player who did the event
ODO
Dirt
For both PGA and DPWT
OFW
Fairway
For both PGA and DPWT
OST
Fairway Bunker
For both PGA and DPWT
OCO
Fringe
For both PGA and DPWT
OGR
Green
For both PGA and DPWT
OGS
Greenside Bunker
For both PGA and DPWT
OIR
Intermediate Rough
For both PGA and DPWT
ONA
Native Area
For both PGA and DPWT
OTH
Other
For both PGA and DPWT
ORO
Rough
For both PGA and DPWT
OTB
Tee Box
For both PGA and DPWT
OTO
Trees
For both PGA and DPWT
OUK
Unsure/Undefined
For both PGA and DPWT
OWA
WaterHazard/LateralWaterHazard
For both PGA and DPWT
OWB
Waste Bunker
For both PGA and DPWT
OBU
Bushes
DPWT only
ODS
Desert
DPWT only
OTF
OtherFairway
DPWT only
OOB
OutOfBounds
DPWT only
OCA
Cart Path
PGA only
OGR
Green
PGA only
OPT
Path
PGA only
ORK
Rock Outline
PGA only
OTB
Tee Box
For both PGA and DPWT
OWL
Wall
PGA only
Sample Event Packet
In this example an Detailed Lie packet has been corrected:
In order for players' score to remain accurate, there is a need for scorers to be able to correct inputs that have already been submitted into the tablets and submitted to the DDE.
Hole correction mode has been developed to support this need. It allows the wholesale correction of both completed and ongoing holes.
Hole correction mode is started and finished with a ModeChange packet.
ModeChange packet
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
eventElementType
string
The type of event, in this case ModeChange
teamNo
integer
The team Id in the case of a team event
mode
string
The type of mode change. Hole correction mode is started by BeginHoleCorrection and ended by EndHoleCorrection
Following a ModeChange of BeginHoleCorrection, individual holes are then resent as a standard series of stroke events and RoundStatusUpdates. These are always sent from the beginning of a hole, with the seqNum continuing from previous packets. These packets continue up until the point that the correction was initiated - this can be either the entirety of a hole, up to holing or up to the present moment (if the correction has been requested when a hole is ongoing).
Only one hole at a time can be corrected within the mode.
Hole correction mode is ended by a ModeChange of EndHoleCorrection.
See below for an example of a hole being corrected in it's entirety:
There are three connection statuses for the golf live data:
Connected: Connection is healthy, all scoring devices currently scoring that team for that round are fully connected and operational
Partially Disconnected: There is an issue with connection on some devices or networks, we cannot be entirely sure that data will come through in a timely manner.
Disconnected: All scoring devices are disconnected and we should not expect data for that
This packet will be sent to indicate that we are totally disconnected to all devices scoring for a team playing a round. You will only receive this packet once – Assume that the state of the round is disconnected until you receive either a Partially Disconnected or a Connected packet.
Disconnected Object
Sample Event Packet
2. Partial Disconnection
This packet will be sent to indicate that there is an issue with connection on some devices or networks and that we cannot be entirely sure that data will come through in a timely manner. You will only receive this packet once – Assume that the state of the round is partially disconnected until you receive either an Disconnected or Connected packet.
Partially Disconnected Object
This packet will be sent to indicate that we are now connected to all scoring devices via all networks for a team playing a round. It will be issued after a Disconnected packet to indicate connection is now back, or at any time after you have received a Partially Disconnected packet.
Connected Object
Sample Event Packet
This packet will be sent whenever it is apparent that the score for a particular hole is incorrect, after scoring for that hole has finished. This can happen because of manual error by the scorer or for many other reasons.
This packet will indicate which hole has the issue, and what the score should have been for that hole.
Correction Object
eventCorrectedIdentifier Object
This contains information unique to the event that is being corrected – use this information to reference the previous packet so you know what packet and what data to update.
Sample Event Packet
In this example an Approximate Lie packet has been corrected – The distance to pin and shot distance are the details which have been updated.
A penalty stroke is an additional stroke (or strokes) added to a player's score for an infraction of the rules (e.g. hitting the ball out of bounds). A penalty can either be followed by a drop, or hit without the player taking a drop, depending on whether or not the ball is playable.
A drop is the act of a player dropping a ball back on the course, after the previous shot lands in a place that is unplayable. A drop can either follow an infraction of the rules. and is therefore preceded by a penalty stroke, or following a situation in which the player's ball is deemed unplayable, but with no previous infraction of the rules (i.e. behind a man made object).
Ball Drop Object
Ball Lie Object
coordinates object:
zoneProbabilities Objects:
Penalty Object
There are broadly 5 combinations of drops and penalties that can occur on the golf course:
Penalty without drop
Penalty with drop
2 stroke penalty without drop
2 stroke penalty with drop
Free drop (i.e. drop without penalty)
Below are 5 examples of holes outlines each of these combinations
zoneProbabilities sample
Example data from 2018 Ryder Cup
The following JSON packets are taken from a like for like simulation of the 2021 Ryder Cup.
N.B. A different course was used for the purpose of this simulation (Abu Dhabi) and so the par values of each hole are that of the Abu Dhabi course and not the course where the tournament was actually played.
Other than the above these are final for Ryder Cup tournament format.
Playoff scores are returned by an endpoint that acts as a subset of teamholebyhole. A new websocket will be opened when the playoff begins (with a seqNo of 1). All of the attributes that are available in the above round details scenarios remain available during a playoff.
The major difference comes in the holeOrder and holeNos. Golf playoffs normally involve the repeated re-playing of the 18th hole, and as such playoffs can be distinguished from regulation play based on a combination of these things.
holeOrder will begin at 1 and holeNo at 18. See below for the beginning of a series of round details packets for a playoff:
For Match Play formats Playoffs are defined here: &
This example is taken from a playoff involving 6 players. See below for an example of how the European Tour represented this:
The following section covers IMG's Rest APIs and Websocket JSON packets that were taken from a the 2022 Presidents Cup.
This section covers the static data files from DDE
Field Name
Type
Description
timestamp
date
The timestamp of the event, in UTC
eventElementType
string
The type of event, in this case always “ConnectionStateChanged
state
string
The type of state, in this case “Disconnected”
Field Name
Type
Description
timestamp
date
The timestamp of the event, in UTC
eventElementType
string
The type of event, in this case always “ConnectionStateChanged
state
string
The type of state, in this case “Connected”
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
timestamp
date
The timestamp of the event, in UTC
eventElementType
string
The type of event, in this case HoleScoreUpdate
corrections
object
contains all the parts of the packet that have been changed, and their new values, i.e the new score values in this instance
groupId
integer
the group ID of the player who did the event
roundNo
integer
The current round numer
eventCorrectedIdentifier
object
See object below
timestampReceived
date
The server time of the moment that this packet has been processed
Field Name
Type
Description
hole
integer
The hole in which the event took place that is being corrected
playerId
integer
The player ID of the player who did the event that is being corrected
Field Name
Type
Description
seqNum
integer
The sequence number of the packet.
groupNo
integer
The group number of the player who did the event
groupId
integer
[Optional] The group ID of the player who did the event
teamNo
integer
The team ID of the player who did the event
playerId
integer
The player ID of the player who did the event
holeNo
integer
The hole in which the event took place
holeOrder
integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
integer
The ID of the course where the event took place
strokeNo
integer
The stroke associated with the event
timestamp
date
The timestamp of the event, in UTC
timestampReceived
date
The server time of the moment that this packet has been processed
eventElementType
string
The type of event, in this case BallDrop
dropType
string
Info on the type of drop. Possible values;
DropBehind, StrokeAndDistance, DropTwoClubLength, DropOppositeSide, FreeDrop, Other
strokesAssessed
integer
Current stroke assessed starting with 0.
roundNo
integer
Current round number
ballLie
object
See object below
player
object
See object below
provisionalIndex
integer
indicates if the event is part of a provisional ball. 0 if not, 1 if first provisional ball, 2 if second provisional ball for that stroke, e.t.c…
Field Name
Type
Description
coordinates
object
See object below
distanceToPin
decimal
How far the ball is from the pin. Data returned in meters
surfaceType
string
Text string which describes the lie of the ball, can be inconsistent across different data collection systems / Tours. We recommend using the 3 letter codes.
See Surface Types table below.
surfaceTypeCode
string
3 letter enum code which describes the lie of the ball.
See Surface Types table below.
Field
Type
Description
x
decimal
X co-ordinate of the ball
y
decimal
Y co-ordinate of the ball
z
decimal
Z co-ordinate of the ball
distanceToPinYards
float
Distance to Pin of the prediction
probabilityPercent
integer
Percentage of the where the ball is
zoneCode
string
zone code
zoneType
string
zone description
displayName
string
The full name or display name of that player
country
string
The affiliated country (typically birthplace)
isAmateur
string
Is that player an amateur or not (true/false)
gender
string
the gender of the player
lastName
string
The surname of the player
firstName
string
The forename of that player
id
Integer
The Player's unique Id
Field Name
Type
Description
score
object
See object below
seqNum
Integer
The sequence number of the packet.
groupNo
Integer
[Optional] The group ID of the player who did the event
groupId
Integer
The group number of the player who did the event
teamNo
Integer
The team ID of the player who did the event
playerId
Integer
The player ID of the player who did the event
holeNo
Integer
The hole in which the event took place
holeOrder
Integer
The hole order of the hole in which the event took place (e.g. if a player starts a round on hole 10, this will be 1) – always starts at 1 and ends on 18
courseId
Integer
The ID of the course where the event took place
strokeNo
Integer
The stroke associated with the event
timestamp
date
The timestamp of the event, in UTC
eventElementType
string
The type of event, in this case Penalty
penaltyStrokes
Integer
The number of strokes added to the player’s score for this penalty.
This will not be used in the future.
PLEASE NOTE: This is only available on the European Tour and will be deprecated.
penaltyType
string
The type of penalty. Possible values; Strokes, Disqualification.
PLEASE NOTE: This is only available on the European Tour and will be deprecated.
penaltyReason
string
describes reason of incurring the penalty by specific team. Possible values; OutOfBounds, ProvisionalBall, WaterHazard, Grounding.
PLEASE NOTE: This is only available on the European Tour and will be deprecated.
strokesAssessed
Integer
The stroke assessed, starts with 0.
roundNo
Integer
The current round number
player
object
See object below
provisionalIndex
Integer
indicates if the event is part of a provisional ball. 0 if not, 1 if first provisional ball, 2 if second provisional ball for that stroke, e.t.c…
Field Name
Type
Description
currentHoleStrokes
Integer
The number of strokes that the team is on for that hole; Can be greater than ‘stroke’ above in the instance that the team has been awarded a penalty
currentHolePar
Integer
The par score for the current hole
currentRoundScore
string
The team’s current ‘To Par’ score for the current round
overallScore
string
The team’s current ‘To Par’ score for the tournament
displayName
string
The full name or display name of that player
country
string
The affiliated country (typically birthplace)
isAmateur
string
Is that player an amateur or not (true/false)
gender
string
The gender of the player
lastName
string
The surname of the player
firstName
string
The forename of that player
id
Integer
The Player's unique Id