GolfData docs
Read-only golf equipment prices through REST and MCP. Start keyless, add a key when you need metered history and compare.
Quickstart
Try it keyless
Search and single product lookup need no key. Run the curl below.
Get a free key
One POST issues 1,000 lookups a month, forever. No card.
Call the API
Send x-api-key on metered routes. Read the 402 body when a call needs more.
Authentication
Search, single product lookup, pricing, meta, spotlight and limits are keyless at 10 requests per minute per IP. Everything else takes an x-api-key header. Keys come from POST /v1/keys.
Endpoints
| Endpoint | Access | Lookups | Curl |
|---|---|---|---|
| GET /v1/meta | Keyless | Free | curl "https://golfdata.co/v1/meta" |
| GET /v1/pricing | Keyless | Free | curl "https://golfdata.co/v1/pricing" |
| GET /v1/spotlight | Keyless | Free | curl "https://golfdata.co/v1/spotlight" |
| GET /v1/limits | Keyless | Free | curl "https://golfdata.co/v1/limits" |
| GET /v1/products | Keyless | Free | curl "https://golfdata.co/v1/products?brand=...&category=...&q=...&limit=..." |
| GET /v1/products/{id} | Keyless | 1 | curl "https://golfdata.co/v1/products/..." |
| GET /p/{slug}/{id} | Keyless | Free | curl "https://golfdata.co/p/.../..." |
| GET /p/{id} | Keyless | Free | curl "https://golfdata.co/p/..." |
| GET /compare/{slug}/{idA}/{idB} | Keyless | Free | curl "https://golfdata.co/compare/.../.../..." |
| GET /drops | Keyless | Free | curl "https://golfdata.co/drops" |
| GET /drops/{category} | Keyless | Free | curl "https://golfdata.co/drops/..." |
| GET /partners | Keyless | Free | curl "https://golfdata.co/partners" |
| GET /brands | Keyless | Free | curl "https://golfdata.co/brands" |
| GET /brands/{brand} | Keyless | Free | curl "https://golfdata.co/brands/..." |
| GET /retailers | Keyless | Free | curl "https://golfdata.co/retailers" |
| GET /retailers/{retailer} | Keyless | Free | curl "https://golfdata.co/retailers/..." |
| GET /badge/{productId}.svg | Keyless | Free | curl "https://golfdata.co/badge/....svg" |
| GET /v1/prices/current | Key | 1 | curl "https://golfdata.co/v1/prices/current?product_id=..." -H "x-api-key: gd_free_..." |
| GET /v1/prices/history | Key | 2 | curl "https://golfdata.co/v1/prices/history?product_id=...&days=..." -H "x-api-key: gd_free_..." |
| GET /v1/compare | Key | 2 | curl "https://golfdata.co/v1/compare?product_id=..." -H "x-api-key: gd_free_..." |
| GET /v1/offers/discover | Key | 2 | curl "https://golfdata.co/v1/offers/discover?canonical_product_id=...&variant_id=...&offset=..." -H "x-api-key: gd_free_..." |
| GET /v1/offers/verified | Key | 2 | curl "https://golfdata.co/v1/offers/verified?source_kind=...&source_id=...&canonical_product_id=...&variant_id=..." -H "x-api-key: gd_free_..." |
| POST /v1/keys | Keyless | Free | curl -X POST https://golfdata.co/v1/keys -H "content-type: application/json" -d '{"email":"you@example.com"}' |
| GET /reports/2026-08 | Keyless | Free | curl "https://golfdata.co/reports/2026-08?session_id=..." |
| GET /v1/keys/claim | Keyless | Free | curl "https://golfdata.co/v1/keys/claim?session_id=..." |
| POST /v1/contact | Keyless | Free | curl -X POST https://golfdata.co/v1/contact -H "content-type: application/json" -d '{"company":"Acme","email":"you@example.com","reason":"retailer"}' |
| POST /mcp | Keyless | Free | curl -X POST https://golfdata.co/mcp -H "content-type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' |
Response examples
GET /v1/meta
Catalog stats: counts by category, enrichment coverage, snapshot count, freshness.
curl "https://golfdata.co/v1/meta" {"name":"GolfDataAPI","price_snapshots_total":374050,"latest_snapshot_at":"2026-09-16T12:00:00Z","enrichment_coverage":{"enriched":958,"partial":1501,"flagged":483,"unenriched":6587,"not_found":58}} Counts are live; call /v1/meta for the current numbers.
GET /v1/pricing
Price ladder, lookup costs and machine URLs.
curl "https://golfdata.co/v1/pricing" {"unit_price_usd":0.005,"lanes":[{"name":"keyless","price_usd":0,"rate_limit_per_min":10},{"name":"free","price_usd":0,"lookups":1000},{"name":"builder","price_usd":49,"lookups":10000}],"free_key_url":"https://golfdata.co/v1/keys","openapi_url":"https://golfdata.co/openapi.json"} GET /v1/spotlight
Twelve enriched products with 90 day daily-low series, current low, 30 and 90 day lows. Cached one hour.
curl "https://golfdata.co/v1/spotlight" {"count":12,"generated_at":"2026-09-16T12:00:00Z","products":[{"id":"29fab062-2d10-4aae-b545-e1ca7e4a269c","name":"Callaway Golf Elyte Hybrid","brand":"Callaway","current_low":175.99,"low_30d":175.99,"low_90d":175.99,"series":[{"date":"2026-09-16","low":175.99}]}]} GET /v1/limits
Caller's lane and remaining quota, or the keyless limits without a key.
curl "https://golfdata.co/v1/limits" {"lane":"keyless","remaining":null,"rate_limit_per_min":10,"pricing_url":"https://golfdata.co/v1/pricing"} GET /v1/products
Search canonical products.
curl "https://golfdata.co/v1/products?brand=...&category=...&q=...&limit=..." {"products":[{"id":"f6d55db1-e9e6-44c7-b85c-9d289e24b671","name":"DARKSPEED LS Driver","brand":"Cobra","category":"drivers","msrp":549,"enrichment_status":"enriched"}],"count":1} GET /v1/products/{id}
One product plus its enrichment_sources provenance rows.
curl "https://golfdata.co/v1/products/..." {"id":"f6d55db1-e9e6-44c7-b85c-9d289e24b671","name":"DARKSPEED LS Driver","brand":"Cobra","model":"DARKSPEED LS Driver","category":"drivers","msrp":549,"enrichment_status":"enriched","enrichment_sources":[]} GET /p/{slug}/{id}
Public HTML product page with current price and 90 day history.
curl "https://golfdata.co/p/.../..." <!doctype html><html><head><title>DARKSPEED LS Driver price history and lowest price | GolfData</title></head><body>...</body></html> GET /p/{id}
Redirect to the canonical public HTML product page.
curl "https://golfdata.co/p/..." HTTP 301 -> /p/darkspeed-ls-driver/f6d55db1-e9e6-44c7-b85c-9d289e24b671 GET /compare/{slug}/{idA}/{idB}
Public HTML price comparison page for two canonical products.
curl "https://golfdata.co/compare/.../.../..." {"ok":true} GET /drops
Public HTML page of the biggest current price drops, grouped by category.
curl "https://golfdata.co/drops" {"ok":true} GET /drops/{category}
Public HTML page of the biggest price drops in one category.
curl "https://golfdata.co/drops/..." {"ok":true} GET /partners
Public HTML partner kit page with free key, badge and Price Index terms for publishers and creators.
curl "https://golfdata.co/partners" {"ok":true} GET /brands
Public HTML index of major golf brands.
curl "https://golfdata.co/brands" {"ok":true} GET /brands/{brand}
Public HTML hub of observed prices for one major brand.
curl "https://golfdata.co/brands/..." {"ok":true} GET /retailers
Public HTML index of retailers with fresh priced products.
curl "https://golfdata.co/retailers" {"ok":true} GET /retailers/{retailer}
Public HTML hub of products a retailer prices lowest.
curl "https://golfdata.co/retailers/..." {"ok":true} GET /badge/{productId}.svg
Embeddable SVG price badge for one product.
curl "https://golfdata.co/badge/....svg" {"ok":true} GET /v1/prices/current
Latest stored advertised prices per retailer.
curl "https://golfdata.co/v1/prices/current?product_id=..." -H "x-api-key: gd_free_..." {"product_id":"f6d55db1-e9e6-44c7-b85c-9d289e24b671","offers":[{"retailer":"Amazon","price":449.99,"in_stock":true,"url":"https://www.amazon.com/dp/example"}]} GET /v1/prices/history
Daily price snapshots per retailer, days up to 365.
curl "https://golfdata.co/v1/prices/history?product_id=...&days=..." -H "x-api-key: gd_free_..." {"product_id":"f6d55db1-e9e6-44c7-b85c-9d289e24b671","days":30,"rows":[{"retailer":"Amazon","price":449.99,"recorded_at":"2026-09-16T12:00:00Z"}]} GET /v1/compare
Current prices plus min, max, median and 30 and 90 day lows.
curl "https://golfdata.co/v1/compare?product_id=..." -H "x-api-key: gd_free_..." {"product_id":"f6d55db1-e9e6-44c7-b85c-9d289e24b671","stats":{"low_30d":449.99,"low_90d":449.99,"median":479.99},"retailers":[{"retailer":"Amazon","current_price":449.99}]} GET /v1/offers/discover
Discover admitted marketplace sources and verify each through the Chip gate.
curl "https://golfdata.co/v1/offers/discover?canonical_product_id=...&variant_id=...&offset=..." -H "x-api-key: gd_free_..." {"offers":[],"next_offset":null,"selection_metadata_not_offer":null} GET /v1/offers/verified
Verify one known marketplace source (golf-offer.v1).
curl "https://golfdata.co/v1/offers/verified?source_kind=...&source_id=...&canonical_product_id=...&variant_id=..." -H "x-api-key: gd_free_..." {"verified_offer":{"source_kind":"product","source_id":"...","price":449.99,"currency":"USD"}} POST /v1/keys
Issue a free key to an email, once per email. Body {email}, JSON or form-encoded. 3 per minute per IP.
curl -X POST https://golfdata.co/v1/keys -H "content-type: application/json" -d '{"email":"you@example.com"}' {"key":"gd_free_...","lane":"free","lookups_per_month":1000,"pricing_url":"https://golfdata.co/v1/pricing"} 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.
curl "https://golfdata.co/reports/2026-08?session_id=..." <!doctype html><html><head><title>Golf Equipment Price Index, August 2026, Market Movement Report | GolfData</title></head><body>...</body></html> 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.
curl "https://golfdata.co/v1/keys/claim?session_id=..." {"key":"gd_live_...","lane":"builder","lookups_per_month":10000} POST /v1/contact
Submit a retailer or brand contact request. Body {company,email,feed_url,message,reason}, JSON or form-encoded.
curl -X POST https://golfdata.co/v1/contact -H "content-type: application/json" -d '{"company":"Acme","email":"you@example.com","reason":"retailer"}' {"status":"received","message":"We will reply within two business days."} POST /mcp
MCP streamable HTTP, JSON-RPC 2.0. Same reads as tools.
curl -X POST https://golfdata.co/mcp -H "content-type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' {"jsonrpc":"2.0","id":1,"result":{"tools":[{"name":"search_products"},{"name":"get_product"},{"name":"get_current_prices"},{"name":"get_price_history"},{"name":"compare_prices"}]}} MCP setup
Add the server to Claude, Cursor or ChatGPT with the same config block. The transport is streamable HTTP JSON-RPC 2.0.
{
"mcpServers": {
"golfdata": { "url": "https://golfdata.co/mcp" }
}
} Rate limits and quotas
| Lane | Requests per minute | Monthly lookups |
|---|---|---|
| keyless | 10 | Custom |
| free | 10 | 1,000 |
| pack | 60 | 4,000 |
| builder | 60 | 10,000 |
| pro | 300 | 50,000 |
| enterprise | Custom | Custom |
Errors
402
Key required or lane exhausted. The body carries pricing and key URLs.
{
"error": "key_required",
"message": "This route needs x-api-key.",
"pricing_url": "https://golfdata.co/v1/pricing",
"free_key_url": "https://golfdata.co/v1/keys",
"docs_url": "https://golfdata.co/llms.txt"
} 429
Rate limit or quota reached. Retry after the returned delay.
{
"error": "rate_limit",
"retry_after_seconds": 6,
"message": "Slow down. This lane allows 10 requests per minute.",
"pricing_url": "https://golfdata.co/v1/pricing"
} Integrity levels
Every field traced to a source. Cite it with confidence.
Key fields traced, the rest unconfirmed. Check the fields you cite.
Needs human review before it is cited or shipped.