OpenGolf Connect

One connector for every launch monitor.

Stream shots from any GSPro-OpenConnect device — R10, MLM2PRO, Uneekor, SkyTrak, Foresight and more — straight into OpenGolfAPI through one open standard. A developer-grade pipe for golf shot data. Free to send.

Where your shot data lives

Today a shot dies inside whatever app captured it. Send it to OpenGolfAPI instead and it becomes portable — tied to the player, session & course you tag it to — across every app you build. One pipe in, structured data out.

launch monitor ──▶ OpenGolf Connect (:921) ──▶ POST /v1/shots ──▶ stored on the open API tagged to your player, session & course │ better product ◀──────────────── portable across every app you build

Indoors, shots come from the simulator. Outdoors, GPS breadcrumbs and pin sightings come in as Moments. One pipe in, your structured data out — across every app you build.

01Quickstart

Run the connector, point your launch monitor's software at this machine on port 921, and hit a shot. No build step.

# grab a free key at courses.opengolfapi.org/api-keys, then:
npx @opengolf/connect --key=ogapi_xxx --player=my-player-id

# custom port if 921 is taken by GSPro
npx @opengolf/connect --key=ogapi_xxx --port=2483

In your launch monitor app, choose GSPro / OpenAPI / OpenConnect as the simulator and set the server to <this-machine-ip>:921. That's it — shots stream to OpenGolfAPI and the connector prints → ingested for each one.

02Supported devices

Anything that speaks GSPro OpenConnect works today via the universal :921 listener — no per-device code. First-party native drivers (deeper read + arm/control) are on the roadmap for the devices with a clean open base.

DeviceModel idWorks nowNative driver
Any GSPro / OpenConnect simgspro_921:921 universaln/a
Garmin Approach R10garmin_r10:921 universalplanned
Rapsodo MLM2PROmlm2pro:921 universalplanned
Uneekor EYE XO / MINI / QEDuneekor_eyexo:921 universalplanned
Square Golfsquare_golf:921 universalplanned
SkyTrak / SkyTrak+skytrak:921 universal
Foresight GC2 / GC3 / GCQuadforesight_gc:921 universalspec
Bushnell Launch Probushnell_lp:921 universalspec
FlightScope Mevo+mevo_plus:921 universal
Trackman (sim mode)trackman:921 universal

Machine-readable matrix: devices.json. Don't see your device? If its software has a GSPro / OpenConnect output, it already works — tell us and we'll add it to the list.

03Shots API

Base URL https://api.opengolfapi.org/api/v1. Ingest is free but keyed — grab a free key, then sending shots in is the hook. Accepts OpenShot JSON or a raw GSPro OpenConnect payload (we normalize either).

POST/shots— ingest one shot or an array (max 500)
curl -X POST https://api.opengolfapi.org/api/v1/shots \
  -H 'X-API-Key: ogapi_xxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "api_version": "0",
    "device": { "model": "garmin_r10", "shot_number": 1 },
    "ball":   { "speed": 150, "launch_angle": 12, "back_spin": 2700, "side_spin": 0, "carry": 230 },
    "club":   { "speed": 90, "selected": "driver" },
    "context":{ "course_id": "uuid", "hole": 1, "player_id": "me" }
  }'
→ { "ok": true, "ingested": 1, "ids": ["…"] }
POST/shots/echo— validate + normalize WITHOUT storing (sandbox)
GET/shots?player=&session=&course=&limit=— history (one filter required)

Every shot conforms to the OpenShot standard (CC0) — one normalized shape across every device. Send what your device measures; read your own data back.

Developer references: OpenAPI spec · llms.txt · OpenShot field catalog.

04SDK & Moments

For apps (not just sims), the @opengolfapi/sdk writes Moments — the atomic unit of the flywheel: shot, breadcrumb, pin, presence, condition, tee, green.

import { OpenGolf } from '@opengolfapi/sdk'
const og = new OpenGolf({ apiKey: 'ogapi_xxx' })

// read the map (free)
const holes = await og.holes(courseId)

// write a round of moments (GPS track → stored on the open API)
await og.submitRound(courseId, watchTrack)

05What you can build

Ship a complete golf app for free — across any hardware, one API.

🟢 Free, on the open API

  • GPS rangefinder / course-finder
  • Launch-monitor range tracker (any device)
  • Shot logger & round tracker
  • "My bag" club-gapping app
  • Find-my-group / who's-on-the-course
  • League / tournament round tracking
  • A new device connector
  • An AI golf assistant (via MCP)
  • A glasses / wearable caddie

06One open standard for shot data

Every launch monitor speaks its own dialect. OpenShot is the common one — send a shot from any device and it lands in the API in the same shape, free. Read your own data back the same way.

📤 Send

  • Any GSPro-OpenConnect device, free
  • One open schema — OpenShot (CC0)
  • Connector or direct POST /v1/shots
  • Shots, sessions, rounds & Moments

📥 Read

  • Your own shot & session history
  • The course map your shots play on
  • Normalized across every device
  • Build apps on top — MCP & SDK

Open standard, MIT connector, free to send. Build the app — we'll carry the data.

Build a launch monitor, sensor, or wearable? Partner with the standard.

Ship OpenShot-native and every app on the platform speaks your device on day one. The spec is open (CC0), the connector is free, and integration is one JSON shape — most vendors are sending shots the same afternoon.

Downloads & specs

Partner with us

Drop your email — we answer within a day. Device listing, co-testing, spec extensions for what your hardware measures, and your users' shots portable across every app on the platform.