golfclubxy

Hole-by-hole tee box and green GPS coordinates for golf courses, extracted from OpenStreetMap. 12,719 courses indexed.

Try it

curl "https://golfclubxy.willconia.com/courses?q=Pine+Valley"

Or open /courses?q=Pine Valley&limit=3 in a browser. Full interactive documentation lives at /docs.

Endpoints

PathReturns
GET /courses Search by name. Supports limit and offset.
GET /courses/{id} Full hole list: par, handicap, yardage, tee and green coordinates.
GET /courses/{id}/geojson The same holes as a GeoJSON FeatureCollection.
GET /courses/{id}/gpx GPX 1.1 waypoints, for GPS watches and handhelds.
GET /courses/{id}/kml KML placemarks, for Google Earth and mapping tools.
GET /health Service and database status.

Every endpoint is read-only and needs no API key. Tee colour can be selected with ?tee=white; the course's own default is used otherwise.

Data quality

Coverage is only as good as the underlying OpenStreetMap mapping, and that varies a lot between courses. Rather than interpolating over the gaps, every course carries a tier, a confidence value, and a warnings array describing exactly what could not be determined.

Tee box and green coordinates are bounding-box centers of the mapped polygon, matching Overpass out center semantics. That is a usable reference point for yardage, not a surveyed pin position.

Usage limits

Requests are rate limited per IP address. Exceeding the limit returns 429 with a Retry-After header — back off and retry rather than retrying immediately. Cross-origin browser requests are permitted from any origin.

Data license

Coordinate data is derived from OpenStreetMap and is licensed under the Open Database License (ODbL) 1.0. If you use it, you must credit © OpenStreetMap contributors.

Displaying the data on screen produces a Produced Work, which carries the attribution requirement. Redistributing the coordinates themselves is likely to count as a Derivative Database, which additionally carries ODbL share-alike obligations. The GPX and KML exports embed this notice inside the file so it travels with the data.