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.
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.
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.
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.
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.
| Device | Model id | Works now | Native driver |
|---|---|---|---|
| Any GSPro / OpenConnect sim | gspro_921 | :921 universal | n/a |
| Garmin Approach R10 | garmin_r10 | :921 universal | planned |
| Rapsodo MLM2PRO | mlm2pro | :921 universal | planned |
| Uneekor EYE XO / MINI / QED | uneekor_eyexo | :921 universal | planned |
| Square Golf | square_golf | :921 universal | planned |
| SkyTrak / SkyTrak+ | skytrak | :921 universal | — |
| Foresight GC2 / GC3 / GCQuad | foresight_gc | :921 universal | spec |
| Bushnell Launch Pro | bushnell_lp | :921 universal | spec |
| 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.
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).
/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": ["…"] }
/shots/echo— validate + normalize WITHOUT storing (sandbox)/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.
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)
Ship a complete golf app for free — across any hardware, one API.
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.
POST /v1/shotsOpen standard, MIT connector, free to send. Build the app — we'll carry the data.
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.
npx @opengolf/connect · source on GitHubnpx -y @opengolfapi/mcp-serverDrop 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.