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.

  • 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 and Live Events.

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 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 and DELETE/UPDATE approach.

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).

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.

Last updated

Was this helpful?