{"standard":"OpenShot","api_version":"0","license":"CC0-1.0","schema":"https://opengolfapi.org/schemas/openshot/v0.json","units":{"speed":"mph","angle":"deg","spin":"rpm","distance":"yds","elevation":"ft"},"note":"Superset of GSPro OpenConnect (port 921) — any OpenConnect payload is valid OpenShot. Send api_version '0' and whatever your device measures; omit the rest. '+' on an angle = right.","note_free":"Everything below is free: send it, read your own back. Send what your device measures; omit the rest.","groups":[{"group":"envelope","fields":{"api_version":"const '0'","shot_id":"server-assigned UUID (response only)"}},{"group":"device","fields":{"id":"device id / serial (pseudonymous)","model":"e.g. 'garmin_r10', 'mlm2pro', 'uneekor_eyexo', 'gspro_921'","shot_number":"integer"}},{"group":"ball","note":"ball flight","fields":{"speed":"req, mph","launch_angle":"vertical (VLA), deg","azimuth":"horizontal (HLA), deg, +=right","back_spin":"rpm","side_spin":"rpm, +=right/slice","total_spin":"rpm","spin_axis":"deg","carry":"yds","total":"yds (total distance)"}},{"group":"club","note":"club delivery (optional; many LMs omit)","fields":{"selected":"e.g. '7i', 'driver'","speed":"mph","angle_of_attack":"deg","path":"deg","face_to_target":"deg vs target line","face_angle":"deg (alias of face_to_target)","loft":"deg","lie":"deg","impact_h":"mm, +=toe","impact_v":"mm, +=high","closure_rate":"deg/s","smash_factor":"ball.speed / club.speed"}},{"group":"context","note":"your own linkage — tag a shot to a player, session, round, or course/hole","fields":{"player_id":"pseudonymous; anonymous-by-default, claimable","session_id":"","round_id":"","course_id":"","hole":"","lie":"tee|fairway|rough|sand|green|recovery|range","captured_at":"date-time"}},{"group":"analytics","note":"computed, server-added on reads","fields":{"shot_shape":"draw|fade|straight|hook|slice|pull|push"}}]}