# Highlighted differences between IMGA API and the new LD Golf API

### Overview

Use this page as a migration summary.

It highlights the main differences between IMGA and LD Golf API behavior.

### Technical differences

* Authentication uses JWTs from [Common IAM Guide](/live-data/live-data-golf-api-design/ld-golf-api-documentation/common-iam-guide.md).&#x20;
* WebSocket clients must send `Client.Heartbeat` every `30` seconds.
* Live event WebSocket streams support `Client.Init` after connect.
* WebSocket messages use a CloudEvents envelope. REST responses do not.

Timestamp fields have different meanings:

* `time` is the envelope generation time.
* `data.created_at` is the event or state version time.
* `data.payload.event_time` is the on-course event time.

See [General Information](/live-data/live-data-golf-api-design/ld-golf-api-documentation/general-information.md) and [Live Events](/live-data/live-data-golf-api-design/ld-golf-api-documentation/live-events/live-events.md).

### Static data differences

* Tournaments, rounds, and holes keep the same high-level structure.
* Core entities now align with SR identifiers across products.
* Responses include both SR IDs, such as `sr:stage:12345`, and numeric IDs.
* Request paths use numeric IDs only.
* Field names follow current LD Golf API naming, such as `snake_case`.
* Teams and players are modeled as competitors, while the API still returns squad, team, and player structures.
* The players endpoint is limited to tours in scope.
* Tournament status is exposed through `GET /golf/rest/v1/tournaments`.
* There is no separate live tournament status endpoint.
* Hole distances originate in meters. Yardage values can differ slightly because of conversion and rounding.

For valid tournament statuses, see [Tournaments list](/live-data/live-data-golf-api-design/ld-golf-api-documentation/ld-golf-api-endpoints-static/tournaments-list.md).

### Live events differences

* Stroke play live events are scoped to a round.
* Match play live events are scoped to a match.
* There are no separate live event streams per team or player.
* The same live event resource is available through REST history and WebSocket streaming.
* `UPDATE` and `DELETE` replace the old IMGA correction workflow.
* Consumers should replace or remove stored events by `data.id`.
* Event identifiers are UUIDs, not sequence numbers.
* `Provisional Ball` is not sent as a standalone event.
* Use `Stroke` and `Penalty` context instead.
* `Zone` for stroke events is an enumerated value.
* `RoundEnded` includes references, not full player objects.
* `blindshot` is not available.
* The probabilities table is not available.
* `BallDropped` has no drop type.
* `BallDropped` and `Penalty` do not include a provisional index.
* Penalty reason is not available.
* Disqualification is sent as `end_reason: DISQUALIFIED` in `HoleEnded`.
* Obstruction data is attached differently than in IMGA.
* Distance and coordinate fields can show rounding differences after unit conversion.

See [Live Events](/live-data/live-data-golf-api-design/ld-golf-api-documentation/live-events/live-events.md) and [DELETE/UPDATE approach](/live-data/live-data-golf-api-design/ld-golf-api-documentation/live-events/delete-update-approach.md).

### State and status differences

* Score state is not updated on `BallHoled`.
* Score state updates when `HoleEnded` is produced.
* `scoreToWin` is not available.
* A dedicated round official event is not sent.
* Official status is reflected through status values such as `CONFIRMED`.
* Hole-ended score pending is not available.

Tournament status values:

* `NOT_STARTED`
* `IN_PROGRESS`
* `INTERRUPTED`
* `CANCELED`
* `ENDED`
* `CONFIRMED`
* `MAINTENANCE`
* `SUSPENDED`

See [State (leaderboard, scoreboard, hole-by-hole)](/live-data/live-data-golf-api-design/ld-golf-api-documentation/state-leaderboard-scoreboard-hole-by-hole.md).

### Client and visualization notes

* The first Live Data client iteration does not include stroke animations.
* Dedicated statistics coverage is out of scope for the first iteration.

### Related pages

* [General Information](/live-data/live-data-golf-api-design/ld-golf-api-documentation/general-information.md)
* [Common IAM Guide](/live-data/live-data-golf-api-design/ld-golf-api-documentation/common-iam-guide.md)
* [Live Events](/live-data/live-data-golf-api-design/ld-golf-api-documentation/live-events/live-events.md)
* [DELETE/UPDATE approach](/live-data/live-data-golf-api-design/ld-golf-api-documentation/live-events/delete-update-approach.md)
* [State (leaderboard, scoreboard, hole-by-hole)](/live-data/live-data-golf-api-design/ld-golf-api-documentation/state-leaderboard-scoreboard-hole-by-hole.md)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sportradar.com/live-data/live-data-golf-api-design/highlighted-differences-between-imga-api-and-the-new-ld-golf-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
