The trusted source of structured disc golf course data for developers. Stop scraping. Use a stable, verified API.
last_verified_at and confidence_score — you decide when it is fresh enough.
All endpoints are read-only. No authentication required.
Request
curl -s "https://io.discgolfapi.com/v1/courses?country=GB" | jq .
Response
{
"schema_version": "1.0",
"generated_at": "2026-04-06T22:13:06Z",
"count": 1,
"meta": { "publish_version": "20260406T221306Z" },
"attribution": "DiscGolfAPI contributors and sources",
"attribution_required": true,
"license": "CC BY 4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"terms_url": "https://discgolfapi.com/terms",
"no_warranty": "Data is provided as-is without warranty of accuracy.",
"courses": [
{
"id": "crs_example_park",
"slug": "example-disc-golf-park",
"name": "Example Disc Golf Park",
"lat": 51.5074,
"lon": -0.1278,
"country_code": "GB",
"region_code": "ENG",
"locality": "London",
"website": "https://example.com/disc-golf",
"operator_name": null,
"holes": 18,
"existence_status": "existing",
"operational_status": "open",
"access_model": "public_free",
"condition_status": "good",
"listing_status": "listed",
"confidence_score": 0.82,
"verification_strength": "strong",
"last_verified_at": "2026-04-06T12:00:00Z",
"updated_at": "2026-04-06T22:13:06Z",
"primary_layout": {
"id": "abc123",
"slug": "main-layout",
"name": "Main Layout",
"holes": 18,
"par_total": 54,
"length_meters": 1640,
"confidence_score": 0.82,
"verification_strength": "strong",
"last_verified_at": "2026-04-06T12:00:00Z"
},
"attributes": null
}
]
}
| Field | Type | Description |
|---|---|---|
| id | string | Stable public identifier — never changes once assigned |
| confidence_score | number 0–1 | Multi-source confidence that the record is accurate. 0.6+ is publishable, 0.8+ is strong. |
| last_verified_at | ISO timestamp | When the course was last checked against a primary source |
| operational_status | enum | open, seasonal, limited, closed_temporarily, closed_permanently, unknown |
| listing_status | enum | listed = fully verified. listed_with_warning = some fields uncertain. |
| access_model | enum | public_free, public_paid, members_only, private_permission_required, unknown |
| existence_status | enum | existing = course is known to exist. unverified = not yet confirmed. |
| condition_status | enum | Physical condition of the course: good, fair, poor, unknown |
| verification_strength | enum | How well-evidenced the record is: strong, moderate, weak |
| slug | string | URL-safe identifier derived from the course name. Stable but may update if the name changes substantially. |
| operator_name | string | null | Named operator or managing organisation, if known |
| primary_layout | object | null | The main layout for this course (holes, par, length, verification metadata). Null if no layout data has been collected. |
| attributes | object | null | Supplementary course attributes (facilities, terrain, access notes). Null until the attributes pipeline is built. |
| updated_at | ISO timestamp | When any field on this record was last modified |