GolfDataAPI API

Golf equipment catalog and dated retailer price observations. $0.005 per lookup.

GitHub OpenAPI

Operations 29

GET /v1/catalog Reviewed factual records independently eligible for agent API use; no affiliate enrollment required.
GET /catalog Reviewed factual catalog for public web display.
GET /v1/meta Catalog stats: counts by category, enrichment coverage, snapshot count, freshness.
GET /v1/pricing Price ladder, lookup costs and machine URLs.
GET /v1/spotlight Twelve enriched products with 90 day daily-low series, current low, 30 and 90 day lows. Cached one hour.
GET /v1/limits Caller's lane and remaining quota, or the keyless limits without a key.
GET /v1/products Search canonical products.
GET /v1/products/{id} One product plus its enrichment_sources provenance rows.
GET /p/{slug}/{id} Public HTML product page with dated price observations and available history.
GET /p/{id} Redirect to the canonical public HTML product page.
GET /compare/{slug}/{idA}/{idB} Public HTML price comparison page for two canonical products.
GET /drops Public HTML page of the biggest current price drops, grouped by category.
GET /drops/{category} Public HTML page of the biggest price drops in one category.
GET /partners Public HTML partner kit page with free key, badge and Price Index terms for publishers and creators.
GET /brands Public HTML index of major golf brands.
GET /brands/{brand} Public HTML hub of observed prices for one major brand.
GET /retailers Public HTML index of retailers with fresh priced products.
GET /retailers/{retailer} Public HTML hub of products a retailer prices lowest.
GET /badge/{productId}.svg Embeddable SVG price badge for one product.
GET /v1/prices/current Latest stored advertised prices per retailer with optional machine checked verdicts.
GET /v1/prices/history Daily price snapshots per retailer, days up to 365.
GET /v1/compare Dated price observations plus min, max, median, recorded 30 and 90 day lows, and optional machine checked verdicts.
GET /v1/offers/discover Discover admitted marketplace sources and verify each through the Chip gate.
GET /v1/offers/verified Verify one known marketplace source (golf-offer.v1).
POST /v1/keys Issue a free key to an email, once per email. Body {email}, JSON or form-encoded. 3 per minute per IP.
GET /reports/2026-08 Paid August 2026 Market Movement Report as HTML. Stripe Payment Link redirects here with session_id; the session is the access token.
GET /v1/keys/claim Claim the paid key for a completed Stripe Checkout Session, once. Stripe Payment Links redirect here with session_id. 3 per minute per IP.
POST /v1/contact Submit a retailer or brand contact request. Body {company,email,feed_url,message,reason}, JSON or form-encoded.
POST /mcp MCP streamable HTTP, JSON-RPC 2.0. Same reads as tools.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/golfdata-co:golfdataapi-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

golfdata-co-api-openapi.json Raw ↑
{
  "openapi": "3.1.0",
  "info": {
    "title": "GolfDataAPI",
    "version": "1.0.0",
    "description": "Golf equipment catalog and dated retailer price observations. $0.005 per lookup."
  },
  "servers": [
    {
      "url": "https://golfdata.co"
    }
  ],
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key"
      }
    },
    "schemas": {
      "AgentOffer": {
        "type": "object",
        "required": [
          "source",
          "canonical_product_id",
          "offer_id",
          "variant_id",
          "variant",
          "attributes",
          "title",
          "merchant",
          "image_url",
          "price",
          "last_observed_price",
          "stock",
          "verification",
          "affiliate",
          "unknown_fields"
        ],
        "properties": {
          "source": {
            "type": "object",
            "required": [
              "kind",
              "id"
            ],
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "deal",
                  "product"
                ]
              },
              "id": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          "canonical_product_id": {
            "type": "string",
            "format": "uuid"
          },
          "offer_id": {
            "type": "string",
            "format": "uuid"
          },
          "variant_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "variant": {
            "oneOf": [
              {
                "type": "object",
                "required": [
                  "hand",
                  "flex",
                  "loft",
                  "shaftMaterial",
                  "shaftModel",
                  "setMakeup",
                  "headSize",
                  "length",
                  "condition"
                ],
                "properties": {
                  "hand": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "flex": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "loft": {
                    "type": [
                      "number",
                      "null"
                    ]
                  },
                  "shaftMaterial": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "shaftModel": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "setMakeup": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "headSize": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "length": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "condition": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "attributes": {
            "type": "object",
            "additionalProperties": {
              "type": [
                "string",
                "number",
                "null"
              ]
            }
          },
          "title": {
            "type": "string"
          },
          "merchant": {
            "type": "string"
          },
          "image_url": {
            "type": [
              "string",
              "null"
            ]
          },
          "price": {
            "type": "object",
            "required": [
              "amount",
              "currency",
              "observed_at",
              "freshness"
            ],
            "properties": {
              "amount": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "currency": {
                "type": "null"
              },
              "observed_at": {
                "type": "string",
                "format": "date-time"
              },
              "freshness": {
                "type": "string"
              }
            }
          },
          "last_observed_price": {
            "type": "object",
            "required": [
              "amount",
              "currency",
              "observed_at"
            ],
            "properties": {
              "amount": {
                "type": "number"
              },
              "currency": {
                "type": "null"
              },
              "observed_at": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "stock": {
            "type": "object",
            "required": [
              "in_stock_at_observation",
              "observed_at"
            ],
            "properties": {
              "in_stock_at_observation": {
                "const": true
              },
              "observed_at": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "verification": {
            "type": "object",
            "required": [
              "path",
              "link_verified_at",
              "policy_version",
              "valid_until"
            ],
            "properties": {
              "path": {
                "const": "chip-commerce-gate"
              },
              "link_verified_at": {
                "type": "string",
                "format": "date-time"
              },
              "policy_version": {
                "type": "string"
              },
              "valid_until": {
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "affiliate": {
            "type": "object",
            "required": [
              "status",
              "network",
              "url",
              "click_attribution"
            ],
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "affiliate",
                  "nonaffiliate"
                ]
              },
              "network": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "click_attribution": {
                "const": "not_created"
              }
            }
          },
          "unknown_fields": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "actionability": {
            "type": "object",
            "required": [
              "status",
              "blockers"
            ],
            "properties": {
              "status": {
                "const": "not_purchase_ready"
              },
              "blockers": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        },
        "description": "Read-only observed evidence. verified_offer is not purchase readiness. Currency is unknown; no click attribution or purchase authority is created. valid_until bounds verification evidence, not a merchant price guarantee."
      },
      "VerifiedOfferResponse": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "schema_version",
              "status",
              "reason",
              "offer"
            ],
            "properties": {
              "schema_version": {
                "const": "golf-offer.v1"
              },
              "status": {
                "const": "verified_offer"
              },
              "reason": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "offer": {
                "$ref": "#/components/schemas/AgentOffer"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "schema_version",
              "status",
              "reason",
              "offer"
            ],
            "properties": {
              "schema_version": {
                "const": "golf-offer.v1"
              },
              "status": {
                "const": "check_price"
              },
              "reason": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "offer": {
                "$ref": "#/components/schemas/AgentOffer"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "schema_version",
              "status",
              "reason",
              "offer"
            ],
            "properties": {
              "schema_version": {
                "const": "golf-offer.v1"
              },
              "status": {
                "const": "unavailable"
              },
              "reason": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "offer": {
                "type": "null"
              }
            }
          }
        ]
      },
      "OfferDiscoveryResponse": {
        "type": "object",
        "required": [
          "schema_version",
          "canonical_product_id",
          "variant_id",
          "status",
          "results",
          "variants",
          "variants_truncated",
          "coverage"
        ],
        "properties": {
          "schema_version": {
            "const": "golf-offers.v1"
          },
          "canonical_product_id": {
            "type": "string",
            "format": "uuid"
          },
          "variant_id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "offers",
              "unavailable",
              "variant_required",
              "variant_unavailable",
              "invalid_request"
            ]
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VerifiedOfferResponse"
            }
          },
          "variants": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "variant_id",
                "attributes",
                "specs_verified",
                "specs_observed_at",
                "role"
              ],
              "properties": {
                "variant_id": {
                  "type": "string",
                  "format": "uuid"
                },
                "attributes": {
                  "type": "object",
                  "additionalProperties": {
                    "type": [
                      "string",
                      "number"
                    ]
                  }
                },
                "specs_verified": {
                  "type": "boolean"
                },
                "specs_observed_at": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date-time"
                },
                "role": {
                  "const": "selection_metadata_not_offer"
                }
              }
            }
          },
          "variants_truncated": {
            "type": "boolean"
          },
          "coverage": {
            "type": "object",
            "required": [
              "candidates_examined",
              "unavailable_count",
              "source_window_count",
              "source_window_truncated",
              "may_have_more",
              "next_offset",
              "pagination_consistency"
            ],
            "properties": {
              "candidates_examined": {
                "type": "integer"
              },
              "unavailable_count": {
                "type": "integer"
              },
              "source_window_count": {
                "type": "integer"
              },
              "source_window_truncated": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "may_have_more": {
                "type": "boolean"
              },
              "next_offset": {
                "type": [
                  "integer",
                  "null"
                ],
                "minimum": 0,
                "maximum": 15
              },
              "pagination_consistency": {
                "const": "live_window_not_snapshot"
              }
            }
          }
        }
      },
      "OfferVerdict": {
        "type": "object",
        "required": [
          "verdict",
          "reasons"
        ],
        "properties": {
          "verdict": {
            "type": "string",
            "enum": [
              "pass",
              "hold",
              "reject"
            ]
          },
          "reasons": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    }
  },
  "paths": {
    "/v1/catalog": {
      "get": {
        "summary": "Reviewed factual records independently eligible for agent API use; no affiliate enrollment required.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/catalog": {
      "get": {
        "summary": "Reviewed factual catalog for public web display.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/v1/meta": {
      "get": {
        "summary": "Catalog stats: counts by category, enrichment coverage, snapshot count, freshness.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/v1/pricing": {
      "get": {
        "summary": "Price ladder, lookup costs and machine URLs.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/v1/spotlight": {
      "get": {
        "summary": "Twelve enriched products with 90 day daily-low series, current low, 30 and 90 day lows. Cached one hour.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/v1/limits": {
      "get": {
        "summary": "Caller's lane and remaining quota, or the keyless limits without a key.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/v1/products": {
      "get": {
        "summary": "Search canonical products.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [
          {
            "name": "brand",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/v1/products/{id}": {
      "get": {
        "summary": "One product plus its enrichment_sources provenance rows.",
        "description": "Costs 1 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "8–128 characters. Reuse returns 409 without a second charge only when atomic metering is enabled. The legacy metering lane ignores this header; do not assume replay protection.",
            "schema": {
              "type": "string",
              "minLength": 8,
              "maxLength": 128
            }
          }
        ],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/p/{slug}/{id}": {
      "get": {
        "summary": "Public HTML product page with dated price observations and available history.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/p/{id}": {
      "get": {
        "summary": "Redirect to the canonical public HTML product page.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "301": {
            "description": "Redirect to canonical product URL.",
            "headers": {
              "Location": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/compare/{slug}/{idA}/{idB}": {
      "get": {
        "summary": "Public HTML price comparison page for two canonical products.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "idA",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "idB",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "security": [
          {},
          {
            "apiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "402": {
            "description": "Key required. Body carries pricing_url, free_key_url, docs_url and checkout_url when set."
          },
          "409": {
            "description": "Idempotency key already used for this API key when atomic metering is enabled."
          },
          "429": {
            "description": "Rate limit or quota reached. Body carries retry_after_seconds and the same URLs."
          },
          "502": {
            "description": "Upstream data request failed."
          },
          "503": {
            "description": "Backend or atomic usage reservation/finalization unavailable."
          }
        }
      }
    },
    "/drops": {
      "get": {
        "summary": "Public HTML page of the biggest current price drops, grouped by category.",
        "description": "Costs 0 lookup(s) at $0.005 each. Works without a key, 10 per minute per IP.",
        "par

# --- truncated at 32 KB (64 KB total) ---
# Full source: https://artifacts.apis.io/golfdata-co/openapi/_original/golfdata-co-api-openapi.json