DiscGolfAPI · Schema

DiscGolfAPI Course

JSON Schema for a public disc golf course record as published by DiscGolfAPI. Captures stable identity, location, operational and access status, confidence and verification signals, and the primary playing layout.

Disc GolfSportsCoursesOpen DataRecreation

Properties

Name Type Description
id string Stable public course identifier.
slug string URL-safe slug for the course.
name string Display name of the course.
lat numbernull Latitude in decimal degrees. Null when coordinates are not available.
lon numbernull Longitude in decimal degrees. Null when coordinates are not available.
country_code string ISO 3166-1 alpha-2 country code.
region_code stringnull Region, state, or subdivision code where available.
locality stringnull City, town, or locality name where available.
website stringnull Official course or operator website where available.
operator_name stringnull Operating organisation or club name where available.
holes integernull Known hole count. Null means unknown, not zero.
existence_status string Whether the course is believed to exist (e.g., existing, removed, proposed).
operational_status string Whether the course is currently playable (e.g., open, closed, seasonal).
access_model string Access model such as public, private, pay-to-play, or unknown.
condition_status string Reported condition of the course (e.g., maintained, neglected, unknown).
listing_status string Public listing status (e.g., listed, unlisted).
confidence_score number Numeric confidence signal for the record between 0 and 1.
verification_strength string Human-readable verification bucket such as low, medium, or high.
last_verified_at stringnull Timestamp of the most recent verification, when available.
updated_at string Timestamp of the most recent record update.
primary_layout object Primary playing layout for the course where defined.
attributes objectnull Open extension bag for forward-compatible course attributes.
View JSON Schema on GitHub

JSON Schema

discgolfapi-course-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api-evangelist.github.io/discgolfapi/json-schema/discgolfapi-course-schema.json",
  "title": "DiscGolfAPI Course",
  "description": "JSON Schema for a public disc golf course record as published by DiscGolfAPI. Captures stable identity, location, operational and access status, confidence and verification signals, and the primary playing layout.",
  "type": "object",
  "required": [
    "id",
    "slug",
    "name",
    "lat",
    "lon",
    "country_code",
    "region_code",
    "locality",
    "website",
    "operator_name",
    "holes",
    "existence_status",
    "operational_status",
    "access_model",
    "condition_status",
    "listing_status",
    "confidence_score",
    "verification_strength",
    "last_verified_at",
    "updated_at",
    "primary_layout",
    "attributes"
  ],
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^crs_[a-z0-9_]+$",
      "description": "Stable public course identifier."
    },
    "slug": {
      "type": "string",
      "description": "URL-safe slug for the course."
    },
    "name": {
      "type": "string",
      "description": "Display name of the course."
    },
    "lat": {
      "type": ["number", "null"],
      "minimum": -90,
      "maximum": 90,
      "description": "Latitude in decimal degrees. Null when coordinates are not available."
    },
    "lon": {
      "type": ["number", "null"],
      "minimum": -180,
      "maximum": 180,
      "description": "Longitude in decimal degrees. Null when coordinates are not available."
    },
    "country_code": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2,
      "description": "ISO 3166-1 alpha-2 country code."
    },
    "region_code": {
      "type": ["string", "null"],
      "description": "Region, state, or subdivision code where available."
    },
    "locality": {
      "type": ["string", "null"],
      "description": "City, town, or locality name where available."
    },
    "website": {
      "type": ["string", "null"],
      "format": "uri",
      "description": "Official course or operator website where available."
    },
    "operator_name": {
      "type": ["string", "null"],
      "description": "Operating organisation or club name where available."
    },
    "holes": {
      "type": ["integer", "null"],
      "minimum": 1,
      "description": "Known hole count. Null means unknown, not zero."
    },
    "existence_status": {
      "type": "string",
      "description": "Whether the course is believed to exist (e.g., existing, removed, proposed)."
    },
    "operational_status": {
      "type": "string",
      "description": "Whether the course is currently playable (e.g., open, closed, seasonal)."
    },
    "access_model": {
      "type": "string",
      "description": "Access model such as public, private, pay-to-play, or unknown."
    },
    "condition_status": {
      "type": "string",
      "description": "Reported condition of the course (e.g., maintained, neglected, unknown)."
    },
    "listing_status": {
      "type": "string",
      "description": "Public listing status (e.g., listed, unlisted)."
    },
    "confidence_score": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "Numeric confidence signal for the record between 0 and 1."
    },
    "verification_strength": {
      "type": "string",
      "description": "Human-readable verification bucket such as low, medium, or high."
    },
    "last_verified_at": {
      "type": ["string", "null"],
      "format": "date-time",
      "description": "Timestamp of the most recent verification, when available."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp of the most recent record update."
    },
    "primary_layout": {
      "oneOf": [
        { "$ref": "#/$defs/PrimaryLayout" },
        { "type": "null" }
      ],
      "description": "Primary playing layout for the course where defined."
    },
    "attributes": {
      "type": ["object", "null"],
      "additionalProperties": true,
      "description": "Open extension bag for forward-compatible course attributes."
    }
  },
  "$defs": {
    "PrimaryLayout": {
      "type": "object",
      "required": [
        "id",
        "slug",
        "name",
        "holes",
        "par_total",
        "length_meters",
        "confidence_score",
        "verification_strength",
        "last_verified_at"
      ],
      "properties": {
        "id": { "type": "string", "description": "Stable layout identifier." },
        "slug": { "type": "string", "description": "URL-safe slug for the layout." },
        "name": { "type": "string", "description": "Display name of the layout." },
        "holes": { "type": ["integer", "null"], "minimum": 1, "description": "Hole count of the layout." },
        "par_total": { "type": ["integer", "null"], "minimum": 1, "description": "Total par for the layout." },
        "length_meters": { "type": ["number", "null"], "minimum": 0, "description": "Total layout length in meters." },
        "confidence_score": { "type": "number", "minimum": 0, "maximum": 1, "description": "Confidence signal for the layout." },
        "verification_strength": { "type": "string", "description": "Verification bucket for the layout." },
        "last_verified_at": { "type": ["string", "null"], "format": "date-time", "description": "Layout verification timestamp." }
      }
    }
  }
}