{"openapi":"3.1.0","info":{"title":"YOGO (BYOK) API","version":"0.1.0","description":"YOGO (BYOK) lets an AI assistant read your own YOGO data through the YOGO API with a key you supply (YOGO API key). Read-only: 8 tools (list_classes, get_class, list_events, get_event, list_teachers, list_class_series_types, list_class_pass_types, list_membership_types). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-yogo.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-yogo/docs"},"termsOfService":"https://connectorbay.com/byok-yogo/terms"},"servers":[{"url":"https://byok-yogo.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-yogo/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_classes":{"post":{"operationId":"list_classes","summary":"List the studio's scheduled classes in a date range with start and end, seats, cancelled flag, class type, room and teac","description":"List the studio's scheduled classes in a date range with start and end, seats, cancelled flag, class type, room and teacher ids; can add class type, room and teacher details. Booked customers are never included. Use for \"Which yoga classes are scheduled at my YOGO studio in the next two weeks\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the range. Accepts YYYY-MM-DD, an ISO datetime, or keywords such as today, tomorrow, +14d, -1w (a literal + is sent encoded).","maxLength":40,"title":"Date From","type":"string"},"date_to":{"description":"End of the range. Accepts YYYY-MM-DD, an ISO datetime, or keywords such as today, tomorrow, +14d, -1w (a literal + is sent encoded).","maxLength":40,"title":"Date To","type":"string"},"class_type_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only classes of this class type id.","title":"Class Type Id"},"teacher_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only classes taught by this teacher (user) id.","title":"Teacher Id"},"room_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only classes in this room id.","title":"Room Id"},"include_cancelled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include cancelled classes.","title":"Include Cancelled"},"expand":{"anyOf":[{"enum":["classType","room","teachers","classType,room","classType,teachers","room,teachers","classType,room,teachers"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional extra detail to include: classType, room, teachers (comma-separated combinations such as 'room,teachers').","title":"Expand"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return per page (1 to 1000).","title":"Limit"},"after":{"anyOf":[{"maximum":2000000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor: the id of the last record of the previous page; leave out for the first page.","title":"After"}},"required":["date_from","date_to"],"title":"list_classesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_class":{"post":{"operationId":"get_class","summary":"Get one scheduled class by id with times, seats, cancelled flag and optional class type, room and teacher details. Use f","description":"Get one scheduled class by id with times, seats, cancelled flag and optional class type, room and teacher details. Use for \"Show YOGO class 5012 with its room and teacher\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"YOGO class id (from list_classes).","title":"Id","type":"integer"},"expand":{"anyOf":[{"enum":["classType","room","teachers","classType,room","classType,teachers","room,teachers","classType,room,teachers"],"type":"string"},{"type":"null"}],"default":null,"description":"Optional extra detail to include: classType, room, teachers (comma-separated combinations such as 'room,teachers').","title":"Expand"}},"required":["id"],"title":"get_classArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_events":{"post":{"operationId":"list_events","summary":"List one-off events and workshops with description, start date, seats, seats still available, price and registration cou","description":"List one-off events and workshops with description, start date, seats, seats still available, price and registration count; filter by date range and optionally include time slots. Use for \"What workshops and events does my YOGO studio have coming up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the event-date range. Accepts YYYY-MM-DD, an ISO datetime, or keywords such as today, tomorrow, +14d, -1w (a literal + is sent encoded).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the event-date range. Accepts YYYY-MM-DD, an ISO datetime, or keywords such as today, tomorrow, +14d, -1w (a literal + is sent encoded).","title":"Date To"},"expand":{"anyOf":[{"const":"timeSlots","type":"string"},{"type":"null"}],"default":null,"description":"Set to timeSlots to include each event's structured time slots.","title":"Expand"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return per page (1 to 1000).","title":"Limit"},"after":{"anyOf":[{"maximum":2000000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor: the id of the last record of the previous page; leave out for the first page.","title":"After"}},"title":"list_eventsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_event":{"post":{"operationId":"get_event","summary":"Get one event or workshop by id with seats, seats available, price and optional time slots. Use for \"How many seats are ","description":"Get one event or workshop by id with seats, seats available, price and optional time slots. Use for \"How many seats are left in YOGO event 77\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"YOGO event id (from list_events).","title":"Id","type":"integer"},"expand":{"anyOf":[{"const":"timeSlots","type":"string"},{"type":"null"}],"default":null,"description":"Set to timeSlots to include time slots.","title":"Expand"}},"required":["id"],"title":"get_eventArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_teachers":{"post":{"operationId":"list_teachers","summary":"List the studio's teachers with id, name and teacher description. Contact details are not returned. Use for \"Who teaches","description":"List the studio's teachers with id, name and teacher description. Contact details are not returned. Use for \"Who teaches at my YOGO studio\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return per page (1 to 1000).","title":"Limit"},"after":{"anyOf":[{"maximum":2000000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor: the id of the last record of the previous page; leave out for the first page.","title":"After"}},"title":"list_teachersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_class_series_types":{"post":{"operationId":"list_class_series_types","summary":"List course products (multi-session class series) with price, validity, number of classes, first and last class date and","description":"List course products (multi-session class series) with price, validity, number of classes, first and last class date and cancellation date; can include the scheduled classes. Use for \"What courses does my YOGO studio offer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"expand":{"anyOf":[{"enum":["studioClasses","livestreamClasses","studioClasses,livestreamClasses"],"type":"string"},{"type":"null"}],"default":null,"description":"Include the scheduled classes of each course: studioClasses, livestreamClasses or both.","title":"Expand"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return per page (1 to 1000).","title":"Limit"},"after":{"anyOf":[{"maximum":2000000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor: the id of the last record of the previous page; leave out for the first page.","title":"After"}},"title":"list_class_series_typesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_class_pass_types":{"post":{"operationId":"list_class_pass_types","summary":"List the class pass products for sale (punch cards and unlimited passes) with price, class count, validity days and purc","description":"List the class pass products for sale (punch cards and unlimited passes) with price, class count, validity days and purchase limit. Use for \"What class passes can customers buy at my YOGO studio\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return per page (1 to 1000).","title":"Limit"},"after":{"anyOf":[{"maximum":2000000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor: the id of the last record of the previous page; leave out for the first page.","title":"After"}},"title":"list_class_pass_typesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_membership_types":{"post":{"operationId":"list_membership_types","summary":"List the recurring membership products with registration fee, class limits per day, week and month, and payment options.","description":"List the recurring membership products with registration fee, class limits per day, week and month, and payment options. Use for \"What memberships does my YOGO studio sell and what do they cost\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return per page (1 to 1000).","title":"Limit"},"after":{"anyOf":[{"maximum":2000000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor: the id of the last record of the previous page; leave out for the first page.","title":"After"}},"title":"list_membership_typesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}