{"openapi":"3.1.0","info":{"title":"Golf Scoring API","version":"1.0.0","description":"Golf scoring and handicap maths as an API, computed locally and deterministically — the World Handicap System and Stableford numbers a golfer, club or scoring app works to. The handicap endpoint computes the course handicap from a handicap index: course handicap = index × (slope rating ÷ 113) + (course rating − par), rounded, so a 14.5 index on a 130-slope, 71.5-rated par-72 course plays off 16; it also applies the format allowance (e.g. 95 % for stroke play) to give the playing handicap. The stableford endpoint scores a hole on the standard scale: net par is 2 points, each stroke better adds one (birdie 3, eagle 4) and each worse subtracts one (bogey 1), with net double bogey or worse scoring 0, where the net score is the gross minus the strokes received on that hole. The net endpoint gives the round's net score — gross total minus the course handicap — against par. Everything is computed locally and deterministically, so it is instant and private. Ideal for golf, club-management, scoring and sports app developers, handicap and Stableford tools, and golf education. Pure local computation — no key, no third-party service, instant. Slope defaults to the neutral 113. Live, nothing stored. 3 compute endpoints. A scoring aid, not an official handicap record.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/golf-api","description":"oanor gateway"}],"tags":[{"name":"Golf"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/handicap":{"get":{"operationId":"get_v1_handicap","tags":["Golf"],"summary":"WHS course handicap","description":"","parameters":[{"name":"handicap_index","in":"query","required":true,"description":"Handicap index","schema":{"type":"string"},"example":"14.5"},{"name":"slope_rating","in":"query","required":false,"description":"Slope rating (default 113)","schema":{"type":"string"},"example":"130"},{"name":"course_rating","in":"query","required":false,"description":"Course rating","schema":{"type":"string"},"example":"71.5"},{"name":"par","in":"query","required":false,"description":"Par (default 72)","schema":{"type":"string"},"example":"72"},{"name":"allowance_percent","in":"query","required":false,"description":"Handicap allowance % (default 100)","schema":{"type":"string"},"example":"95"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"WHS course handicap = Handicap Index × (Slope ÷ 113) + (Course Rating − Par), rounded. Playing handicap applies the format's allowance (e.g. 95% for stroke play, 90% singles match).","inputs":{"par":72,"slope_rating":130,"course_rating":71.5,"handicap_index":14.5,"allowance_percent":95},"course_handicap":16,"playing_handicap":15,"course_handicap_raw":16.181},"meta":{"timestamp":"2026-06-06T07:14:08.362Z","request_id":"68e34bf1-6f56-4f0e-85ed-5ff4e49bb536"},"status":"ok","message":"Course handicap","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/net":{"get":{"operationId":"get_v1_net","tags":["Golf"],"summary":"Net score (round)","description":"","parameters":[{"name":"gross_total","in":"query","required":true,"description":"Gross total for the round","schema":{"type":"string"},"example":"90"},{"name":"course_handicap","in":"query","required":true,"description":"Course handicap","schema":{"type":"string"},"example":"16"},{"name":"par","in":"query","required":false,"description":"Course par (default 72)","schema":{"type":"string"},"example":"72"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Net score = gross total − course handicap. Compare net to par to see the handicap-adjusted result for the round.","inputs":{"par":72,"gross_total":90,"course_handicap":16},"net_score":74,"net_to_par":2,"gross_to_par":18},"meta":{"timestamp":"2026-06-06T07:14:08.451Z","request_id":"60c18bc4-7b25-497f-a0ee-edcccea3420c"},"status":"ok","message":"Net score","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/stableford":{"get":{"operationId":"get_v1_stableford","tags":["Golf"],"summary":"Stableford points (hole)","description":"","parameters":[{"name":"gross","in":"query","required":true,"description":"Gross strokes on the hole","schema":{"type":"string"},"example":"5"},{"name":"par","in":"query","required":true,"description":"Hole par","schema":{"type":"string"},"example":"4"},{"name":"strokes_received","in":"query","required":false,"description":"Strokes received on the hole","schema":{"type":"string"},"example":"1"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Stableford: net par scores 2 points, each stroke better +1 (birdie 3, eagle 4), each worse −1 (bogey 1), and net double bogey or worse scores 0. Net score = gross − strokes received.","inputs":{"par":4,"gross":5,"strokes_received":1},"result":"par","net_score":4,"net_to_par":0,"stableford_points":2},"meta":{"timestamp":"2026-06-06T07:14:08.531Z","request_id":"acf1e80d-d6fe-46fc-b0d6-4b1167654b11"},"status":"ok","message":"Stableford points","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"notes":"Slope defaults to 113 (the neutral rating). Stableford uses the standard 2-points-for-net-par scale. A scoring aid, not an official handicap record.","service":"golf-api","endpoints":{"GET /v1/net":"Net score for a round from the gross total and course handicap.","GET /v1/meta":"This document.","GET /v1/handicap":"Course and playing handicap from handicap index, slope and course rating.","GET /v1/stableford":"Stableford points for a hole from gross, par and strokes received."},"description":"Golf scoring maths: WHS course handicap, Stableford points and net score."},"meta":{"timestamp":"2026-06-06T07:14:08.618Z","request_id":"07591e29-f2db-4dac-8a40-281a68a58c5b"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":6250,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":440,"monthly_call_quota":57500,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1230,"monthly_call_quota":241000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3950,"monthly_call_quota":1355000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/golf-api"}