Search golf clubs
GET
/v1/clubsUse near for a human-readable place search, or lat and lon for exact coordinates. Place searches default to a 50 km radius. The town filter matches the club address exactly.
Tags: clubs
Authentication
Send the API key as a Bearer token in the Authorization header.
Parameters
| Parameter | In | Type | Required | Description | Constraints |
|---|---|---|---|---|---|
name | query | string | No | Club-name filter only | min length: 2; max length: 200 |
lat | query | number | No | min: -90; max: 90 | |
lon | query | number | No | min: -180; max: 180 | |
radius_km | query | number | No | Geographic search radius. Defaults to 50 km when near is used. | min: 1; max: 200 |
near | query | string | No | Place name resolved to a geographic search centre | min length: 2; max length: 200 |
country | query | string | No | Optional ISO 3166-1 alpha-2 country code used with near | pattern: ^[A-Za-z]2$ |
public | query | boolean | No | ||
independent_players | query | boolean | No | Filter by access for players without club membership | |
dogs | query | boolean | No | ||
minimum_holes | query | integer | No | min: 1; max: 72 | |
maximum_green_fee | query | number | No | Exclude clubs whose known maximum green fee exceeds this amount | min: 0; max: 10000 |
town | query | string | No | Exact town filter | min length: 1; max length: 100 |
postal_code | query | string | No | Exact postal code or prefix | min length: 1; max length: 100 |
search | query | string | No | Search across name, town, and postal code | min length: 2; max length: 100 |
limit | query | integer | No | default: 20; min: 1; max: 100 | |
cursor | query | string | No | min length: 8; max length: 500 |
Example request
curl --request GET \
--url 'https://api.eae.golf/v1/clubs?name=name&lat=lat&lon=lon&radius_km=radius_km' \
--header 'Authorization: Bearer YOUR_API_KEY'
Responses
200 · Default Response
application/json
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
data | array<object> | Yes | ||
data[].id | string | No | format: uuid | |
data[].slug | string | No | ||
data[].name | string | No | ||
data[].location | object | No | ||
data[].location.town | `string | null` | No | |
data[].location.postalCode | `string | null` | No | |
data[].location.continent | `string | null` | No | |
data[].location.worldRegion | `string | null` | No | |
data[].location.country | `string | null` | No | |
data[].location.locationSlug | `string | null` | No | |
data[].location.latitude | `number | null` | No | |
data[].location.longitude | `number | null` | No | |
data[].location.distanceMeters | `number | null` | No | |
data[].access | object | No | ||
data[].access.publicAccess | `boolean | null` | No | |
data[].access.independentPlayersAllowed | `boolean | null` | No | |
data[].access.dogsAllowed | `boolean | null` | No | |
data[].courses | object | No | ||
data[].courses.count | integer | No | ||
data[].greenFees | object | No | ||
data[].greenFees.minimum | `number | null` | No | |
data[].greenFees.maximum | `number | null` | No | |
pagination | object | Yes | ||
pagination.hasMore | boolean | Yes | ||
pagination.nextCursor | `string | null` | Yes | |
meta | object | Yes | ||
meta.apiVersion | string | No | allowed: v1 | |
meta.plan | string | No | allowed: fairway, tour | |
meta.accessStatus | string | No | allowed: trial, active, suspended | |
meta.dataAccess | string | No | allowed: core, extended | |
meta.trialEndsAt | `string | null` | No | |
meta.catalogue | `object | object` | No | |
meta.notice | object | No | ||
meta.notice.code | string | Yes | allowed: trial_sample_no_match | |
meta.notice.message | string | Yes | ||
meta.search | object | No | ||
meta.search.mode | string | No | allowed: place, coordinates | |
meta.search.input | `string | null` | No | |
meta.search.resolvedName | `string | null` | No | |
meta.search.countryCode | `string | null` | No | |
meta.search.latitude | number | No | ||
meta.search.longitude | number | No | ||
meta.search.radiusKm | `number | null` | No |
Example
{
"data": [
{
"id": "00000000-0000-4000-8000-000000000000",
"slug": "golf-gut-glinde",
"name": "Golf Gut Glinde",
"location": {
"town": "string",
"postalCode": "string",
"continent": "Europe",
"worldRegion": "string",
"country": "England",
"locationSlug": "europe/england",
"latitude": 0,
"longitude": 0,
"distanceMeters": 0
},
"access": {
"publicAccess": true,
"independentPlayersAllowed": true,
"dogsAllowed": true
},
"courses": {
"count": 0
},
"greenFees": {
"minimum": 0,
"maximum": 0
}
}
],
"pagination": {
"hasMore": true,
"nextCursor": "string"
},
"meta": {
"apiVersion": "v1",
"plan": "fairway",
"accessStatus": "trial",
"dataAccess": "core",
"trialEndsAt": "2026-08-20T12:00:00Z",
"catalogue": {
"mode": "full"
},
"notice": {
"code": "trial_sample_no_match",
"message": "string"
},
"search": {
"mode": "place",
"input": "string",
"resolvedName": "string",
"countryCode": "string",
"latitude": 0,
"longitude": 0,
"radiusKm": 0
}
}
}
400 · Default Response
application/json
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
statusCode | integer | Yes | ||
error | string | Yes | ||
code | string | No | ||
message | string | Yes | ||
requestId | string | Yes |
Example
{
"statusCode": 0,
"error": "string",
"code": "trial_expired",
"message": "string",
"requestId": "req-7f3a2c"
}
401 · Default Response
application/json
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
statusCode | integer | Yes | ||
error | string | Yes | ||
code | string | No | ||
message | string | Yes | ||
requestId | string | Yes |
Example
{
"statusCode": 0,
"error": "string",
"code": "trial_expired",
"message": "string",
"requestId": "req-7f3a2c"
}
429 · Default Response
application/json
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
statusCode | integer | Yes | ||
error | string | Yes | ||
code | string | No | ||
message | string | Yes | ||
requestId | string | Yes |
Example
{
"statusCode": 0,
"error": "string",
"code": "trial_expired",
"message": "string",
"requestId": "req-7f3a2c"
}
502 · Default Response
application/json
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
statusCode | integer | Yes | ||
error | string | Yes | ||
code | string | No | ||
message | string | Yes | ||
requestId | string | Yes |
Example
{
"statusCode": 0,
"error": "string",
"code": "trial_expired",
"message": "string",
"requestId": "req-7f3a2c"
}
503 · Default Response
application/json
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
statusCode | integer | Yes | ||
error | string | Yes | ||
code | string | No | ||
message | string | Yes | ||
requestId | string | Yes |
Example
{
"statusCode": 0,
"error": "string",
"code": "trial_expired",
"message": "string",
"requestId": "req-7f3a2c"
}