Ball Drops and Penalty Stroke

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

Field Name

Type

Description

seqNum

int

The sequence number of the packet. Always starts at 1, increments in 1

groupNo

int

[Optional] The group ID of the player who did the event

teamNo

int

The team ID of the player who did the event

playerId

int

The player ID of the player who did the event

holeNo

int

The hole in which the event took place

holeOrder

int

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

int

The ID of the course where the event took place

strokeNo

int

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

provisionalIndex

int

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

x

decimal

X co-ordinate of the ball

y

decimal

Y co-ordinate of the ball

z

decimal

Z co-ordinate of the ball

shotDistance

int

How far the shot went for that stroke

distanceToPin

int

How far the ball is from the pin

surfaceType

string

What type of grass/area is the ball in. Possible values;

Undefined, Unsure, Fairway, Green, Fringe, Rough, IntermediateRough, WaterHazard, LateralWaterHazard, FairwayBunker, GreensideBunker, Tee, OutOfBounds, OtherFairway, Trees, Desert, Other

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

Player Object

Field Name
Type
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)

lastName

string

The surname of the player

firstName

string

The forename of that player

id

Integer

The Player's unique Id

Penalty Object

Field Name

Type

Description

seqNum

int

The sequence number of the packet. Always starts at 1, increments in 1

groupNo

int

[Optional] The group ID of the player who did the event

teamNo

int

The team ID of the player who did the event

playerId

int

The player ID of the player who did the event

holeNo

int

The hole in which the event took place

holeOrder

int

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

int

The ID of the course where the event took place

strokeNo

int

The stroke associated with the event

matchType

string

The type of match in which the event is being played; Strokeplay is the standard response currently

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 Penalty

penaltyStrokes

int

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.

provisionalIndex

int

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…

Score Object

Field Name

Type

Description

currentHoleStrokes

int

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

int

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

Player Object

Field Name
Type
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)

lastName

string

The surname of the player

firstName

string

The forename of that player

id

Integer

The Player's unique Id

Drop and Penalty Scenarios

here are broadly 5 combinations of drops and penalties that can occur on the golf course:

  1. Penalty without drop

  2. Penalty with drop

  3. 2 stroke penalty without drop

  4. 2 stroke penalty with drop

  5. Free drop (i.e. drop without penalty)

Below are 5 examples of holes outlines each of these combinations


//ROUND STARTED - HOLE 1

{
    "players": [
        {
            "displayName": "Pedro FIGUEIREDO",
            "country": "POR",
            "isAmateur": false,
            "lastName": "FIGUEIREDO",
            "firstName": "Pedro",
            "id": 189
        }
    ],
    "timestamp": "2020-01-14T11:44:47.777Z",
    "courseId": "14",
    "state": "RoundStarted",
    "matchType": "Strokeplay",
    "groupNo": 1,
    "eventElementType": "RoundStatusUpdate",
    "seqNum": 1,
    "holeOrder": 1,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "teamNo": 1,
    "holeNo": 1
}

//HOLE STARTED - HOLE 1

{
    "timestamp": "2020-01-14T11:44:48.641Z",
    "courseId": "14",
    "state": "HoleStarted",
    "groupNo": 1,
    "eventElementType": "RoundStatusUpdate",
    "seqNum": 2,
    "holeOrder": 1,
    "teamNo": 1,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//ADDRESSING BALL - STROKE 1 HOLE 1

{
    "clubTypeCode": "CUK",
    "timestamp": "2020-01-14T11:44:51.717Z",
    "courseId": "14",
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "AddressingBall",
    "seqNum": 3,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 1,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//HIT BALL - STROKE 1 HOLE 1

{
    "timestamp": "2020-01-14T11:44:51.839Z",
    "courseId": "14",
    "score": {
        "currentRoundScoreToPar": null,
        "overallScoreToPar": "+4",
        "currentHoleStrokes": 1,
        "currentHolePar": 4
    },
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "HitBall",
    "seqNum": 4,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 1,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",  
    "holeNo": 1
}

//APPROXIMATE LIE - STROKE 1 HOLE 1

{
    "timestamp": "2020-01-14T11:44:58.215Z",
    "courseId": "14",
    "ballLie": {
        "coordinates": {
            "x": 54.52712567395697,
            "y": 24.417225700900243,
            "z": 8.71733283997
        },
        "surfaceTypeCode": "OFW",
        "distanceToPin": 122.71993798754,
        "shotDistance": 249.887026067302,
        "blindShot": false,
        "surfaceType": "Fairway",
        "obstructions": false
    },
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "ApproximateLie",
    "seqNum": 5,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 1,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//DETAILED LIE - STROKE 1 HOLE 1

{
    "timestamp": "2020-01-14T11:44:58.243Z",
    "courseId": "14",
    "ballLie": {
        "coordinates": {
            "x": 54.52712567395697,
            "y": 24.417225700900243,
            "z": 8.71733283997
        },
        "surfaceTypeCode": "OFW",
        "distanceToPin": 122.71993798754,
        "shotDistance": 249.887026067302,
        "blindShot": false,
        "surfaceType": "Fairway",
        "obstructions": false
    },
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "DetailedLie",
    "seqNum": 6,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 1,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//PENALTY - STROKE 2 HOLE 1

{
    "penaltyStrokes": 1,
    "timestamp": "2020-01-14T11:45:50.628Z",
    "courseId": "14",
    "score": {
        "currentRoundScoreToPar": null,
        "overallScoreToPar": "+4",
        "currentHoleStrokes": 2,
        "currentHolePar": 4
    },
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "Penalty",
    "seqNum": 7,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 2,
    "playerId": 189,
    "penaltyReason": "Other",
    "penaltyType": "Strokes",
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//ADDRESSING BALL - STROKE 3 HOLE 1

{
    "clubTypeCode": "CUK",
    "timestamp": "2020-01-14T11:45:52.224Z",
    "courseId": "14",
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "AddressingBall",
    "seqNum": 8,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 3,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//HIT BALL - STROKE 3 HOLE 1

{
    "timestamp": "2020-01-14T11:45:52.544Z",
    "courseId": "14",
    "score": {
        "currentRoundScoreToPar": null,
        "overallScoreToPar": "+4",
        "currentHoleStrokes": 3,
        "currentHolePar": 4
    },
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "HitBall",
    "seqNum": 9,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 3,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//APPROXIMATE LIE - STROKE 3 HOLE 1

{
    "timestamp": "2020-01-14T11:45:57.507Z",
    "courseId": "14",
    "ballLie": {
        "coordinates": {
            "x": 54.52636727935783,
            "y": 24.416365382358514,
            "z": 9.74028968811
        },
        "surfaceTypeCode": "OGR",
        "distanceToPin": 3.74760419333184,
        "shotDistance": 122.775070367609,
        "blindShot": false,
        "surfaceType": "Green",
        "obstructions": false
    },
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "ApproximateLie",
    "seqNum": 10,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 3,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//DETAILED LIE - STROKE 3 HOLE 1

{
    "timestamp": "2020-01-14T11:45:57.517Z",
    "courseId": "14",
    "ballLie": {
        "coordinates": {
            "x": 54.52636727935783,
            "y": 24.416365382358514,
            "z": 9.74028968811
        },
        "surfaceTypeCode": "OGR",
        "distanceToPin": 3.74760419333184,
        "shotDistance": 122.775070367609,
        "blindShot": false,
        "surfaceType": "Green",
        "obstructions": false
    },
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "DetailedLie",
    "seqNum": 11,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 3,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//ADDRESSING BALL - STROKE 4 HOLE 1

{
    "clubTypeCode": "CUK",
    "timestamp": "2020-01-14T11:45:59.720Z",
    "courseId": "14",
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "AddressingBall",
    "seqNum": 12,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 4,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//HIT BALL - STROKE 4 HOLE 1

{
    "timestamp": "2020-01-14T11:45:59.863Z",
    "courseId": "14",
    "score": {
        "currentRoundScoreToPar": null,
        "overallScoreToPar": "+4",
        "currentHoleStrokes": 4,
        "currentHolePar": 4
    },
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "HitBall",
    "seqNum": 13,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 4,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//BALL HOLED - STROKE 4 HOLE 1

{
    "timestamp": "2020-01-14T11:46:04.380Z",
    "courseId": "14",
    "score": {
        "currentRoundScoreToPar": null,
        "overallScoreToPar": "+4",
        "currentHoleStrokes": 4,
        "currentHolePar": 4
    },
    "provisionalIndex": 0,
    "groupNo": 1,
    "eventElementType": "BallHoled",
    "seqNum": 14,
    "holeOrder": 1,
    "teamNo": 1,
    "strokeNo": 4,
    "playerId": 189,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

//HOLE FINISHED - HOLE 1

{
    "timestamp": "2020-01-14T11:46:04.896Z",
    "courseId": "14",
    "state": "HoleFinished",
    "finishReason": "BallHoled",
    "score": {
        "currentRoundScoreToPar": "0",
        "overallScoreToPar": "+4",
        "currentHoleStrokes": 4,
        "currentHolePar": 4
    },
    "groupNo": 1,
    "eventElementType": "RoundStatusUpdate",
    "seqNum": 15,
    "holeOrder": 1,
    "teamNo": 1,
    "timestampReceived": "2022-01-13T23:19:35.878Z",
    "holeNo": 1
}

Last updated