> This page is optimized for agents. Use the linked Markdown pages and llms.txt indexes for related API content.

# Discovery index

> Public discovery of resource paths, publication, authentication and the supported response version. An accepted bearer key can also supply account access details; discovery does not require a key.

- Product: Service
- Section: service
- Snapshot: Current
- Method: `GET`
- Path: `/`
- Availability: generally-available

## Execute with curl

```bash
curl "https://api.golfapi.dev/"
```

## Execute with JavaScript

```javascript
const response = await fetch(`https://api.golfapi.dev/`);
const body = await response.json();
```

## Execute with Python

```python
import requests

response = requests.get(
    f"https://api.golfapi.dev/",
    timeout=10,
)
response.raise_for_status()
body = response.json()
```

## Responses

### Response `200`

Category: success  

The index.

#### `application/json`

##### Generated example

```json
{
  "name": "name",
  "description": "description",
  "documentation": "documentation",
  "openapi": "openapi",
  "openapi_well_known": "openapi_well_known",
  "docs": "docs",
  "version": {
    "current": "current",
    "header": "header",
    "retired": [
      "retired"
    ],
    "note": "note",
    "deprecated": [
      {
        "version": "version",
        "deprecated_on": "deprecated_on",
        "sunset": "sunset",
        "notice": "notice"
      }
    ]
  },
  "authentication": {
    "scheme": "scheme",
    "header": "header",
    "format": "format",
    "note": "note"
  },
  "rate_limit": {
    "limit": 0,
    "window_seconds": 0,
    "headers": [
      "headers"
    ],
    "note": "note"
  },
  "resources": [
    {
      "name": "name",
      "entitlement": "entitlement",
      "serving": "serving",
      "published": true,
      "list": "list",
      "detail": "detail",
      "sub_resources": [
        {
          "name": "name",
          "entitlement": "entitlement",
          "path": "path"
        }
      ]
    }
  ],
  "conventions": {
    "ordering": "ordering",
    "absent_fields": "absent_fields",
    "view": "view",
    "prices": "prices"
  },
  "coverage": {
    "name": "name",
    "entitlement": "entitlement",
    "path": "path",
    "note": "note"
  },
  "health": "health",
  "mcp": {
    "url": "url",
    "transport": "transport",
    "oauth": "oauth",
    "guide": "guide",
    "note": "note"
  },
  "entitlements": [
    "entitlements"
  ],
  "pinned_version": "pinned_version",
  "catalog_release": "catalog_release",
  "catalog_published": "catalog_published",
  "changes": {
    "name": "name",
    "entitlement": "entitlement",
    "path": "path",
    "note": "note"
  }
}
```

##### Schema

###### Index

Type: `Index`  

The discovery index. Generated from the same registries the router is built from, and includes publication and version information.

###### `name`

Type: `string`  
Required: yes  

###### `description`

Type: `string`  
Required: yes  

###### `documentation`

Type: `string`  
Format: `uri`  
Required: yes  

###### `openapi`

Type: `string`  
Format: `uri`  
Required: yes  

###### `openapi_well_known`

Type: `string`  
Format: `uri`  
Required: yes  

###### `docs`

Type: `string`  
Format: `uri`  
Required: yes  

###### `mcp`

Type: `object`  
Required: no  

The read-only MCP server. Each tool sends one GET to this API with the caller's key.

###### `url`

Type: `string`  
Format: `uri`  
Required: yes  

The MCP server's address.

###### `transport`

Type: `string`  
Required: yes  

###### `oauth`

Type: `string`  
Format: `uri`  
Required: yes  

The server's OAuth protected-resource metadata.

###### `guide`

Type: `string`  
Format: `uri`  
Required: yes  

###### `note`

Type: `string`  
Required: yes  

###### `entitlements`

Type: `string[]`  
Required: no  

Resources the sent key can read. Present only when the request carries a known key.

###### string

Type: `string`  

###### `pinned_version`

Type: `string`  
Required: no  

The response version the sent key is pinned to. Present only when the request carries a known key.

###### `catalog_release`

Type: `string`  
Required: no  

The build the sent key reads now. Pass it to /changes as after. Present only when the request carries a known key and the live build was read.

###### `catalog_published`

Type: `string`  
Format: `date-time`  
Required: no  

When catalog_release was published. Present with catalog_release.

###### `version`

Type: `object`  
Required: yes  

###### `current`

Type: `string`  
Format: `date`  
Required: yes  

The one version served, and the default when Golfapi-Version is omitted.

###### `header`

Type: `string`  
Required: yes  

###### `retired`

Type: `string[]`  
Required: yes  

Versions no longer served. A request naming one is 400.

###### string

Type: `string`  
Format: `date`  

###### `deprecated`

Type: `object[]`  
Required: no  

Replaced versions still served until their sunset date, at least 90 days after the replacement shipped. Responses in one carry Deprecation, Sunset and a Link to the notice.

###### object

Type: `object`  

###### `version`

Type: `string`  
Format: `date`  
Required: yes  

###### `deprecated_on`

Type: `string`  
Format: `date`  
Required: yes  

###### `sunset`

Type: `string`  
Format: `date`  
Required: yes  

###### `notice`

Type: `string`  
Format: `uri`  
Required: yes  

###### `note`

Type: `string`  
Required: yes  

Plain-language restatement of the version rule. `current` is not the API's release number, which this index does not carry.

###### `authentication`

Type: `object`  
Required: yes  

###### `scheme`

Type: `string`  
Required: yes  

###### `header`

Type: `string`  
Required: yes  

###### `format`

Type: `string`  
Required: yes  

###### `note`

Type: `string`  
Required: yes  

###### `rate_limit`

Type: `object`  
Required: yes  

The default cap and the window it applies over, stated before the first request rather than only on the RateLimit-* headers of the response to it. A key's own cap can differ and is always on RateLimit-Limit.

###### `limit`

Type: `number`  
Required: yes  

###### `window_seconds`

Type: `number`  
Required: yes  

###### `headers`

Type: `string[]`  
Required: no  

###### string

Type: `string`  

###### `note`

Type: `string`  
Required: no  

###### `resources`

Type: `object[]`  
Required: yes  

###### object

Type: `object`  

###### `name`

Type: `string`  
Required: yes  

###### `entitlement`

Type: `string`  
Required: yes  

###### `serving`

Type: `string`  
Format: `date`  
Required: yes  

The version this resource answers at, which is `version.current`. It does not indicate whether the resource has been published.

###### `published`

Type: `boolean`  
Required: yes  

Whether the resource has a published catalog. An entitled request to an unpublished resource returns 503.

###### `list`

Type: `string`  
Format: `uri`  
Required: yes  

###### `detail`

Type: `string`  
Required: yes  

###### `sub_resources`

Type: `object[]`  
Required: no  

Routes hanging off this resource's detail path. Present only on resources that have them.

###### object

Type: `object`  

###### `name`

Type: `string`  
Required: yes  

###### `entitlement`

Type: `string`  
Required: yes  

###### `path`

Type: `string`  
Required: yes  

###### `conventions`

Type: `object`  
Required: yes  

Shared rules for list order, absent fields and served document depth.

###### `ordering`

Type: `string`  
Required: yes  

###### `absent_fields`

Type: `string`  
Required: yes  

###### `view`

Type: `string`  
Required: yes  

###### `prices`

Type: `string`  
Required: no  

###### `coverage`

Type: `object`  
Required: yes  

Published catalog counts by manufacturer and release year. Use coverage to assess the published scope before interpreting an empty result.

###### `name`

Type: `string`  
Required: yes  

###### `entitlement`

Type: `string`  
Required: yes  

###### `path`

Type: `string`  
Format: `uri`  
Required: yes  

###### `note`

Type: `string`  
Required: yes  

###### `changes`

Type: `object`  
Required: no  

Club ids each catalog release changed. Use it to refresh a stored copy without a full rescan.

###### `name`

Type: `string`  
Required: yes  

###### `entitlement`

Type: `string`  
Required: yes  

###### `path`

Type: `string`  
Format: `uri`  
Required: yes  

###### `note`

Type: `string`  
Required: yes  

###### `health`

Type: `string`  
Format: `uri`  
Required: yes  

## Related representations

- [Human documentation](/api/service/methods/index/)
- [curl Markdown](/api/service/curl/methods/index.md)
- [JavaScript Markdown](/api/service/javascript/methods/index.md)
- [Python Markdown](/api/service/python/methods/index.md)
- [product llms.txt](/api/service/llms.txt)
