Server definition
- Hash
- sha256:a8194848d32bfee48e6c0b144c4e932b1cca881d4b0b7a2aed56f9bb6b8a4475
- What it is
- What a remote MCP server returned when asked what it offers: 4 tools
The blob, as servednamed by its sha256
{
"instructions": "The PGA of America MCP server is designed to provide AI agents and LLMs with the insight and expertise of over 31,000 certified PGA golf professionals through a suite of specialized tools. Use this server to find a golf coach, search for programs, book a lesson, and improve your game.\n\n## Tool Selection Guardrails\n\n- Use `search_golf_coaches` when the user is trying to find, browse, or compare coaches for private lessons in a location. Coach results also include a short teaser of upcoming public programs those coaches host.\n- Use `search_golf_programs` when the user is trying to find clinics, camps, classes, group events, or other PGA Coach programs in a location.\n- Use `get_golf_coach_availability` only when a specific coach has already been identified (via coach profile URL, known slug, or prior selection from `search_golf_coaches` or `search_golf_programs` results).\n- If the user asks for availability but has not selected a coach, run `search_golf_coaches` first (or reuse a coach already identified from `search_golf_programs`) and ask the user to choose a coach.\n- If the user request is unrelated to golf lesson/program discovery or lesson booking (for example weather, travel booking, or general sports trivia), do not call these tools.\n- Never display or mention internal identifiers to the user (for example coach `slug`, offering `id`/`offeringId`, program `id`, facility IDs, or pagination cursors). Use these values only for tool calls.\n\n## Workflows\n\n### Find a program\n\n1. Collect a location if the user has not provided one.\n2. Call `search_golf_programs` with `searchLocation` (and optional `searchRadius`; default 50 miles).\n3. Present program titles, dates, prices, hosting coaches, and facilities. Do not expose internal identifiers.\n4. Use the top-level `coaches` and `facilities` arrays to summarize who is teaching and where programs are held.\n5. Direct the user to each program's `programUrl` to view details and register. Offer coach `profileUrl` / `bookingUrl` when helpful.\n6. If the user wants more results from the same query, call `search_golf_programs` again with `paginationCursor` from the prior response while preserving the original location and radius. Additional pages reuse the collected nearby programs and do not repeat GraphQL discovery.\n\n### Book a lesson\n\nUse the following tool-call sequence to successfully book a lesson:\n\n1. Collect missing prerequisites:\n - If a coach was already identified from `search_golf_programs`, reuse that coach `slug` and skip to availability.\n - If no location is provided and no coach is selected, ask for a location before calling `search_golf_coaches`.\n - If the user wants more coach results from the same query, call `search_golf_coaches` again with `paginationCursor` from the prior response while preserving the original location and radius.\n2. If no coach is selected yet, call `search_golf_coaches` with the user's location (`searchLocation`, optionally `searchRadius`) to find candidate coaches and offerings.\n3. Present coaches and offering titles to the user, but do not expose internal identifiers. Save the selected coach `slug` and desired offering context for internal use only.\n4. Resolve references to selected coaches (for example \"Anthony\" or \"him\") to the chosen coach `slug` before continuing. If ambiguous, ask a clarifying question.\n5. Call `get_golf_coach_availability` with the selected coach `slug` to retrieve up-to-date offering availability (`availableTimes`) and offering IDs.\n - If the user already selected a specific offering, pass its `offeringId` to scope results to that offering.\n6. Let the user choose an offering and time:\n - Prefer the availability/search widgets when shown. When the user continues from a widget, read the selected booking from the widget/view model context (`offeringId`, `startDateTime`, title, coach, price) — treat that as their selection and continue in chat (do not send them back into widget forms). The visible follow-up message is human-friendly only; do not expect internal IDs in chat text.\n - Chat-only booking (no widget interaction) is also supported: ask the user to choose one available time from the tool results.\n - Resolve the offering by title from prior search or availability context when needed. If multiple offerings share a similar name, ask a clarifying question before booking.\n - Match the chosen date/time to one of the returned `availableTimes` ISO8601 values for `startDateTime`.\n7. Collect required participant details in chat (natural language), then call `book_golf_lesson`:\n - Ask who the lesson is for. If they are booking for someone other than themselves, or age is unclear, ask whether that person is 17 or younger.\n - Adult (18+): `firstName`, `lastName`, `email`, optional `phone`\n - Junior (17 or younger): `firstName`, `lastName`, `guardianFirstName`, `guardianLastName`, `email`, optional `phone`\n - Call `book_golf_lesson` with:\n - `offeringId` (from widget/view model context or availability/search result, never user-entered text)\n - `startDateTime` (exact ISO8601 from widget/view model context, or one of the returned `availableTimes`)\n - `student` object matching the `adult` or `junior` schema\n8. Handle booking outcome:\n - If `lesson.confirmationCode` is returned, confirm the booking and share the confirmation code.\n - If `continuationUrl` is returned, direct the user to that URL to complete payment or other required steps.\n - If only `message` indicates failure, report it and help the user choose another time or offering.\n",
"tools": [
{
"description": "Request to book a golf lesson for a specific coach's offering.\n- `offeringId` is an internal identifier; never show or mention it to the user.\n- A continuation URL will be returned that you can direct the user to after calling this tool.\n- If the offering was booked automatically (e.g., free lesson or no prepayment required), the confirmation code will also be included.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"offeringId": {
"description": "Internal offering record ID to book a lesson for. Never display or mention this identifier to the user.",
"type": "string"
},
"startDateTime": {
"description": "The start date and time of the lesson in ISO 8601 format.",
"type": "string"
},
"student": {
"anyOf": [
{
"properties": {
"email": {
"description": "The email address of the student booking the lesson.",
"type": "string"
},
"firstName": {
"description": "The first name of the student booking the lesson.",
"type": "string"
},
"lastName": {
"description": "The last name of the student booking the lesson.",
"type": "string"
},
"phone": {
"description": "The phone number of the student booking the lesson.",
"type": "string"
},
"type": {
"const": "adult",
"type": "string"
}
},
"required": [
"type",
"firstName",
"lastName",
"email"
],
"type": "object"
},
{
"description": "The contact information for the student participating in the lesson. Student type can be either 'adult' or 'junior'. If the student is a junior, the guardian's information is also required.",
"properties": {
"email": {
"description": "The email address of the student booking the lesson.",
"type": "string"
},
"firstName": {
"description": "The first name of the student booking the lesson.",
"type": "string"
},
"guardianFirstName": {
"description": "The first name of the guardian booking the lesson.",
"type": "string"
},
"guardianLastName": {
"description": "The last name of the guardian booking the lesson.",
"type": "string"
},
"lastName": {
"description": "The last name of the student booking the lesson.",
"type": "string"
},
"phone": {
"description": "The phone number of the student booking the lesson.",
"type": "string"
},
"type": {
"const": "junior",
"type": "string"
}
},
"required": [
"type",
"firstName",
"lastName",
"guardianFirstName",
"guardianLastName",
"email"
],
"type": "object"
}
]
}
},
"required": [
"offeringId",
"startDateTime",
"student"
],
"type": "object"
},
"name": "book_golf_lesson",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"continuationUrl": {
"description": "The URL to continue the booking flow after calling this tool.",
"type": "string"
},
"lesson": {
"additionalProperties": false,
"description": "Confirmation details for the booked lesson (if booked successfully).",
"properties": {
"confirmationCode": {
"type": "string"
}
},
"required": [
"confirmationCode"
],
"type": "object"
},
"message": {
"description": "A message describing the outcome of the booking.",
"type": "string"
}
},
"required": [
"message"
],
"type": "object"
}
},
{
"description": "Retrieve offering details and available lesson times for one specific coach.\nUse this when the user asks for schedule, openings, or available times for a known coach.\nIf the user has not selected a coach yet, call `search_golf_coaches` first (or reuse a coach already identified from `search_golf_programs`).\nCoach `slug` and offering `id` values are internal identifiers and must never be shown or mentioned to the user.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"offeringId": {
"description": "Optional offering ID to scope availability to a single offering. Use this when the user has already selected an offering.",
"type": "string"
},
"slug": {
"description": "Coach slug from a pga.com profile URL, prior `search_golf_coaches` results, or prior `search_golf_programs` results (e.g., `anthonyvitale`). Internal-only value; never display or mention it to the user.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_golf_coach_availability",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"coach": {
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"offerings": {
"items": {
"additionalProperties": false,
"properties": {
"availableTimes": {
"description": "The available times for the offering in ISO8601 (format with offset)",
"items": {
"type": "string"
},
"type": "array"
},
"duration": {
"description": "Session duration in minutes",
"type": "number"
},
"id": {
"description": "The unique identifier for the offering. DO NOT display this to the user. Reference this as the `offeringId` when booking a lesson via the `book_golf_lesson` tool.",
"type": "string"
},
"location": {
"description": "Where the session will take place",
"type": "string"
},
"price": {
"description": "Price per session in USD",
"type": "number"
},
"requiresPrepayment": {
"description": "Whether this offering requires online prepayment",
"type": "boolean"
},
"timezone": {
"description": "The IANA timezone (e.g., America/Los_Angeles) for the location",
"type": "string"
},
"title": {
"description": "The name of the offering. Use this instead of the `id` when describing the offering to the user",
"type": "string"
}
},
"required": [
"id",
"title",
"location",
"timezone",
"price",
"duration",
"requiresPrepayment",
"availableTimes"
],
"type": "object"
},
"type": "array"
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"slug": {
"description": "Internal unique identifier for the coach. Do not display or mention this value to users; use it only when calling other tools.",
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"slug",
"name",
"title",
"photo",
"offerings"
],
"type": "object"
}
},
"required": [
"coach"
],
"type": "object"
}
},
{
"description": "Search for qualified PGA golf coaches listed on pga.com/coach in the specified location (required).\nUse this tool when the user asks to find, browse, or compare coaches for private lessons in a location.\nFor location-first discovery of clinics, camps, classes, or other group programs, use `search_golf_programs` instead.\nIf the user asks for availability for a specific coach, use `get_golf_coach_availability` instead.\nInternal record identifiers (for example coach `slug` and offering `id`) are for tool calls only and must never be shown or mentioned to the user.\n- Search results include the coach's profile information, private-lesson offerings, pricing, and a short teaser of upcoming public programs they host (capped at 2). For location-first program discovery, use `search_golf_programs`.\n- Use that program context to recommend which group offering best fits the golfer when relevant; present upcoming programs when available.\n- Results are ordered by proximity to the search location, so list them to the user in this order.\n- Results are paginated, so use the pagination cursor provided at the end of the response to retrieve the next page of results.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"paginationCursor": {
"description": "Pagination cursor from a prior `search_golf_coaches` response. Use only when fetching additional pages of the same search.",
"type": "string"
},
"searchLocation": {
"description": "Required location used to find nearby coaches. Accepts city/state, ZIP code, full address, or latitude/longitude coordinates.",
"type": "string"
},
"searchRadius": {
"default": 25,
"description": "Search radius in miles from `searchLocation`. Use 25 by default unless the user requests a different radius.",
"minimum": 0,
"type": "number"
}
},
"required": [
"searchLocation"
],
"type": "object"
},
"name": "search_golf_coaches",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"coaches": {
"items": {
"additionalProperties": false,
"properties": {
"bio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"bookingUrl": {
"description": "The URL to view the coach's offerings and book a lesson",
"format": "uri",
"type": "string"
},
"facilities": {
"items": {
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"id",
"name"
],
"type": "object"
},
"type": "array"
},
"location": {
"additionalProperties": false,
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
}
},
"required": [
"city",
"state"
],
"type": "object"
},
"memberType": {
"anyOf": [
{
"enum": [
"PGA Member",
"PGA Associate"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "The coach's membership designation with the PGA of America"
},
"name": {
"type": "string"
},
"nextAvailability": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"dateTime": {
"description": "The next available time in ISO8601 format with offset",
"type": "string"
},
"timezone": {
"description": "The IANA timezone (e.g., America/Los_Angeles)",
"type": "string"
}
},
"required": [
"dateTime",
"timezone"
],
"type": "object"
},
{
"type": "null"
}
],
"description": "The next available time to book a session"
},
"offerings": {
"items": {
"additionalProperties": false,
"properties": {
"category": {
"enum": [
"INTRO",
"PRIVATE",
"ON_COURSE",
"SWING_EVALUATION",
"CLUB_FITTING",
"OTHER"
],
"type": "string"
},
"duration": {
"description": "Session duration in minutes",
"type": "number"
},
"id": {
"description": "The unique identifier for the offering. DO NOT display this to the user. Reference this as the `offeringId` when booking a lesson via the `book_golf_lesson` tool.",
"type": "string"
},
"location": {
"description": "Where the session will take place",
"type": "string"
},
"price": {
"description": "Price per session in USD",
"type": "number"
},
"requiresPrepayment": {
"description": "Whether this offering requires online prepayment",
"type": "boolean"
},
"timezone": {
"description": "The IANA timezone (e.g., America/Los_Angeles) for the location",
"type": "string"
},
"title": {
"description": "The name of the offering. Use this instead of the `id` when describing the offering to the user",
"type": "string"
}
},
"required": [
"id",
"title",
"category",
"location",
"timezone",
"price",
"duration",
"requiresPrepayment"
],
"type": "object"
},
"type": "array"
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"profileUrl": {
"description": "The URL to the coach's profile",
"format": "uri",
"type": "string"
},
"programs": {
"description": "Upcoming public group programs hosted by this coach (clinics, camps, classes), capped at 2 teasers. Use search_golf_programs for location-first discovery. Empty when none are listed.",
"items": {
"additionalProperties": false,
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"endDateTime": {
"description": "Program end time in ISO8601 format with offset",
"type": "string"
},
"facility": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"city": {
"type": "string"
},
"name": {
"type": "string"
},
"state": {
"type": "string"
},
"street": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"zipCode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"street",
"city",
"state",
"zipCode"
],
"type": "object"
},
{
"type": "null"
}
]
},
"hasWaitlist": {
"type": "boolean"
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Program price in USD"
},
"programUrl": {
"description": "Public URL to view details and register",
"format": "uri",
"type": "string"
},
"registrationFull": {
"type": "boolean"
},
"sessionCount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Number of sessions in the program, when available"
},
"startDateTime": {
"description": "Program start time in ISO8601 format with offset",
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"timezone": {
"description": "The IANA timezone for the program times",
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"title",
"description",
"startDateTime",
"endDateTime",
"timezone",
"price",
"sessionCount",
"tags",
"registrationFull",
"hasWaitlist",
"photo",
"programUrl",
"facility"
],
"type": "object"
},
"type": "array"
},
"slug": {
"description": "Internal unique identifier for the coach. Do not display or mention this value to users; use it only when calling other tools.",
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"slug",
"name",
"title",
"memberType",
"location",
"bio",
"photo",
"profileUrl",
"bookingUrl",
"nextAvailability",
"offerings",
"facilities",
"programs"
],
"type": "object"
},
"type": "array"
},
"count": {
"type": "number"
},
"endCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"hasNextPage": {
"type": "boolean"
}
},
"required": [
"coaches",
"count",
"hasNextPage",
"endCursor"
],
"type": "object"
}
},
{
"description": "Search for upcoming public PGA Coach programs (clinics, camps, classes, and other group events) near a location (required).\nUse this tool when the user asks to find programs, clinics, camps, classes, or group events — not private one-on-one lessons.\nFor private lesson coaches, use `search_golf_coaches` instead.\nInternal record identifiers (for example program `id` and coach `slug`) are for tool calls only and must never be shown or mentioned to the user.\n- Search results include program details plus the hosting coach and facility for each program.\n- The response also includes top-level `coaches` and `facilities` arrays summarizing the unique coaches and venues in the result set — always present those to the user.\n- Results are ordered by program start instant and filtered to the requested radius.\n- Discovery uses nearby PGA Coach profiles (nearest 20 in the radius), then loads up to 30 upcoming public programs per coach in a 180-day window in one batched GraphQL request. Facility coordinates still have to fall inside the radius.\n- Results are paginated. The pagination cursor carries the remaining nearby programs so additional pages do not repeat GraphQL discovery. Reuse that cursor with the original location and radius.\n- Direct golfers to the program URL to view details and register. Coach profile and booking URLs are also included when the golfer wants to learn more about the coach.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"paginationCursor": {
"description": "Pagination cursor from a prior `search_golf_programs` response. Use only when fetching additional pages of the same search (same location and radius).",
"type": "string"
},
"searchLocation": {
"description": "Required location used to find nearby PGA Coach programs. Accepts city/state, ZIP code, full address, or latitude/longitude coordinates.",
"type": "string"
},
"searchRadius": {
"default": 50,
"description": "Search radius in miles from `searchLocation`. Use 50 by default unless the user requests a different radius.",
"minimum": 0,
"type": "number"
}
},
"required": [
"searchLocation"
],
"type": "object"
},
"name": "search_golf_programs",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"coaches": {
"description": "Unique coaches hosting the returned programs. Present these alongside the programs so golfers can see who is teaching.",
"items": {
"additionalProperties": false,
"properties": {
"bio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"bookingUrl": {
"description": "The URL to view the coach's offerings and book a lesson",
"format": "uri",
"type": "string"
},
"location": {
"additionalProperties": false,
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
}
},
"required": [
"city",
"state"
],
"type": "object"
},
"memberType": {
"anyOf": [
{
"enum": [
"PGA Member",
"PGA Associate"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "The coach's membership designation with the PGA of America"
},
"name": {
"type": "string"
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"profileUrl": {
"description": "The URL to the coach's public PGA.com profile",
"format": "uri",
"type": "string"
},
"slug": {
"description": "Internal coach slug. Do not display or mention this value to users; use it only when calling other tools.",
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"title",
"memberType",
"slug",
"bio",
"photo",
"profileUrl",
"bookingUrl",
"location"
],
"type": "object"
},
"type": "array"
},
"count": {
"type": "number"
},
"endCursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"facilities": {
"description": "Unique facilities hosting the returned programs. Present these alongside the programs so golfers can see where programs are held.",
"items": {
"additionalProperties": false,
"properties": {
"city": {
"type": "string"
},
"name": {
"type": "string"
},
"state": {
"type": "string"
},
"street": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The IANA timezone for the facility, when available"
},
"zipCode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"street",
"city",
"state",
"zipCode",
"timezone"
],
"type": "object"
},
"type": "array"
},
"hasNextPage": {
"type": "boolean"
},
"programs": {
"items": {
"additionalProperties": false,
"properties": {
"coach": {
"additionalProperties": false,
"properties": {
"bio": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"bookingUrl": {
"description": "The URL to view the coach's offerings and book a lesson",
"format": "uri",
"type": "string"
},
"location": {
"additionalProperties": false,
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string"
}
},
"required": [
"city",
"state"
],
"type": "object"
},
"memberType": {
"anyOf": [
{
"enum": [
"PGA Member",
"PGA Associate"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "The coach's membership designation with the PGA of America"
},
"name": {
"type": "string"
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"profileUrl": {
"description": "The URL to the coach's public PGA.com profile",
"format": "uri",
"type": "string"
},
"slug": {
"description": "Internal coach slug. Do not display or mention this value to users; use it only when calling other tools.",
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"title",
"memberType",
"slug",
"bio",
"photo",
"profileUrl",
"bookingUrl",
"location"
],
"type": "object"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"distanceMiles": {
"description": "Approximate distance from the search location in miles",
"type": "number"
},
"endDateTime": {
"description": "Program end time in ISO8601 format with offset",
"type": "string"
},
"facility": {
"additionalProperties": false,
"properties": {
"city": {
"type": "string"
},
"name": {
"type": "string"
},
"state": {
"type": "string"
},
"street": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The IANA timezone for the facility, when available"
},
"zipCode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"street",
"city",
"state",
"zipCode",
"timezone"
],
"type": "object"
},
"hasWaitlist": {
"type": "boolean"
},
"id": {
"description": "Internal unique identifier for the program. Do not display or mention this value to users.",
"type": "string"
},
"photo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Program price in USD"
},
"programUrl": {
"description": "Public URL where a golfer can view and register",
"format": "uri",
"type": "string"
},
"registrationFull": {
"type": "boolean"
},
"sessionCount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Number of sessions included in the program, when available"
},
"startDateTime": {
"description": "Program start time in ISO8601 format with offset",
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"timezone": {
"description": "The IANA timezone (e.g., America/Los_Angeles)",
"type": "string"
},
"title": {
"type": "string"
}
},
"required": [
"id",
"title",
"description",
"startDateTime",
"endDateTime",
"timezone",
"price",
"sessionCount",
"tags",
"registrationFull",
"hasWaitlist",
"photo",
"programUrl",
"facility",
"distanceMiles",
"coach"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"programs",
"coaches",
"facilities",
"count",
"hasNextPage",
"endCursor"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:a8194848d32bfee48e6c0b144c4e932b1cca881d4b0b7a2aed56f9bb6b8a4475 | sha256sum