# DKG Golf — agent notes This file is for agents. The page header link "Robots Click here" points here. DKG Golf (https://golf.dkgenergy.ca) lists open tee times for Alberta and nearby courses. It does not book. book_url is the club's own site. Do not scrape the HTML app. Use the JSON API. ## Clubs GET https://golf.dkgenergy.ca/api/clubs Each item: name, slug, region, booking_provider, has_live_feed. Only has_live_feed true returns times. Others are listed so you know they exist. ## Tee times GET https://golf.dkgenergy.ca/api/tee-times?date=YYYY-MM-DD®ion=REGION&time=TIME&holes=HOLES&players=PLAYERS - region: calgary (north + south together) | calgary-north | calgary-south | banff-canmore | invermere | cranbrook-kimberley | edmonton | calgary-simulators - calgary-simulators is indoor simulator bays in Calgary. holes is 18 as a stand-in for a session. spots is how many bays are open. price, when present, is the bay's hourly rate. - time: any | morning | midday | afternoon - holes: any | 9 | 18 - players: 1 | 2 | 3 | 4 - date: today through 21 days ahead, America/Edmonton One region per request. The sheet is the last saved check, not a live scrape. Today through 6 days ahead are refreshed by a sweep every 15 minutes from 06:00–22:00 America/Edmonton, and hourly overnight. Fast clubs are usually under 30 minutes old (refreshed when older than 12 minutes, checked every 15). Clubs on CPS or Tee-On classic need a slower fetch and are refreshed a few at a time: expect about 15–45 minutes for today and up to a few hours for later days. Check fetched_at on each tee time (or clubs[].fetched_at) for the real age. A club with no saved sheet yet is listed in clubs_failed. HTTP 400 and {"error":"..."} means the query was invalid. HTTP 200 with clubs_failed means some clubs did not answer. Use the tee_times that did come back. Do not treat a rate-limit or bot-check on one club as failure of the whole region. time is ISO 8601 in America/Edmonton. price is CAD or null. fetched_at is when that club's saved sheet was read from the club (UTC ISO). generated_at is when this response was built. clubs lists each club that answered with its fetched_at; oldest_fetched_at is the oldest of them. spots is how many players can still join, or null when the club does not publish a count (Tee-On clubs); null means it may still fit your group. holes is 9 or 18. Example: https://golf.dkgenergy.ca/api/tee-times?date=2026-09-24®ion=calgary&time=morning&holes=18&players=2 ## Pages Human share links keep only ?date=YYYY-MM-DD, and only when that day is not today. Region, time, holes, players, and venue are per-device prefs, not URL params. Old ?region=&time=&holes=&players=&venue= query strings are ignored so a shared link does not override the recipient's filters. Do not drive the page click by click when the API can answer. ## Do not call POST /api/ingest is private. /api/groups is for people sharing a foursome code, not for collecting tee times.