{"openapi":"3.1.0","info":{"title":"Zenoti (BYOK) API","version":"0.1.0","description":"Zenoti (BYOK) lets an AI assistant read your own Zenoti data through the Zenoti API with a key you supply (Zenoti API key (created under Admin, Setup, Apps)). Read-only: 9 tools (list_centers, get_center, list_services, list_categories, list_rooms, list_employees, list_products, list_class_sessions, get_stock_quantities). The BYOK key travels with each request, is used for that one call only and...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-zenoti.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-zenoti/docs"},"termsOfService":"https://connectorbay.com/byok-zenoti/terms"},"servers":[{"url":"https://byok-zenoti.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-zenoti/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_centers":{"post":{"operationId":"list_centers","summary":"List the centers (locations) of the organization with id, code, name, display name, description, country and state. Use ","description":"List the centers (locations) of the organization with id, code, name, display name, description, country and state. Use for \"Which Zenoti centers do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 100).","title":"Size"}},"title":"list_centersArguments","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_center":{"post":{"operationId":"get_center","summary":"Get one center with name, code, phone, email, time zone id and currency id. Use for \"Show Zenoti center 34f7b069\".","description":"Get one center with name, code, phone, email, time zone id and currency id. Use for \"Show Zenoti center 34f7b069\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"center_id":{"description":"Unique 32-character id of the center (the id field from list_centers).","maxLength":40,"title":"Center Id","type":"string"}},"required":["center_id"],"title":"get_centerArguments","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_services":{"post":{"operationId":"list_services","summary":"List the active services of a center with name, duration, recovery time and price. Can filter by category or by catalog ","description":"List the active services of a center with name, duration, recovery time and price. Can filter by category or by catalog and add-on flags. Use for \"What services does Zenoti center 34f7b069 offer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"center_id":{"description":"Unique 32-character id of the center (the id field from list_centers).","maxLength":40,"title":"Center Id","type":"string"},"category_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only services of this category or sub-category id.","title":"Category Id"},"catalog_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for catalog-enabled services only.","title":"Catalog Enabled"},"only_add_ons":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for add-on services only.","title":"Only Add Ons"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 100).","title":"Size"}},"required":["center_id"],"title":"list_servicesArguments","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_categories":{"post":{"operationId":"list_categories","summary":"List the categories of a center for services, products, memberships or packages. Use for \"Which service categories does ","description":"List the categories of a center for services, products, memberships or packages. Use for \"Which service categories does Zenoti center 34f7b069 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"center_id":{"description":"Unique 32-character id of the center (the id field from list_centers).","maxLength":40,"title":"Center Id","type":"string"},"type":{"anyOf":[{"enum":["1","2","3","4"],"type":"string"},{"type":"null"}],"default":"1","description":"Kind of category: 1 services (default), 2 products, 3 memberships, 4 packages.","title":"Type"},"include_sub_categories":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to include sub-categories.","title":"Include Sub Categories"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 100).","title":"Size"}},"required":["center_id"],"title":"list_categoriesArguments","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_rooms":{"post":{"operationId":"list_rooms","summary":"List the active rooms of a center with name, capacity and whether only one appointment can use the room at a time. Use f","description":"List the active rooms of a center with name, capacity and whether only one appointment can use the room at a time. Use for \"What rooms does Zenoti center 34f7b069 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"center_id":{"description":"Unique 32-character id of the center (the id field from list_centers).","maxLength":40,"title":"Center Id","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 100).","title":"Size"}},"required":["center_id"],"title":"list_roomsArguments","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_employees":{"post":{"operationId":"list_employees","summary":"List the employees active in a center on a date, with employee code, name and job title. Use for \"Which employees work a","description":"List the employees active in a center on a date, with employee code, name and job title. Use for \"Which employees work at Zenoti center 34f7b069\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"center_id":{"description":"Unique 32-character id of the center (the id field from list_centers).","maxLength":40,"title":"Center Id","type":"string"},"date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Day on which the employees are active, as YYYY-MM-DD.","title":"Date"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 100).","title":"Size"}},"required":["center_id"],"title":"list_employeesArguments","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_products":{"post":{"operationId":"list_products","summary":"List the active products of a center with name, code, category, size and whether the product is retail or consumable. Us","description":"List the active products of a center with name, code, category, size and whether the product is retail or consumable. Use for \"What products does Zenoti center 34f7b069 sell\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"center_id":{"description":"Unique 32-character id of the center (the id field from list_centers).","maxLength":40,"title":"Center Id","type":"string"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 100).","title":"Size"}},"required":["center_id"],"title":"list_productsArguments","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_sessions":{"post":{"operationId":"list_class_sessions","summary":"List the class sessions of one or more centers with name, time, price, capacity, bookings and free slots. Page with page","description":"List the class sessions of one or more centers with name, time, price, capacity, bookings and free slots. Page with page and size. Use for \"What class sessions does Zenoti center d51712b1 have in June 2027\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"center_id":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Unique 32-character id of the center. Several centers can be given separated by commas.","title":"Center Id"},"start_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"First day, as YYYY-MM-DD.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Last day, as YYYY-MM-DD.","title":"End Date"},"class_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only classes with this name.","title":"Class Name"},"status":{"anyOf":[{"enum":["0","1","2","3","4"],"type":"string"},{"type":"null"}],"default":null,"description":"Session status: 0 active, 1 cancelled, 2 upcoming, 3 in progress, 4 completed.","title":"Status"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many sessions per page.","title":"Size"}},"title":"list_class_sessionsArguments","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_stock_quantities":{"post":{"operationId":"get_stock_quantities","summary":"Get the stock of retail and consumable products of a center on a date: store, floor and total quantity per product. Use ","description":"Get the stock of retail and consumable products of a center on a date: store, floor and total quantity per product. Use for \"How much stock does Zenoti center 34f7b069 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"center_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Unique 32-character id of the center.","title":"Center Id"},"inventory_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Day of the stock count, as YYYY-MM-DD.","title":"Inventory Date"},"product_type":{"anyOf":[{"enum":["1","2","3"],"type":"string"},{"type":"null"}],"default":"3","description":"Kind of products: 1 retail, 2 consumable, 3 all (default).","title":"Product Type"}},"title":"get_stock_quantitiesArguments","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}}}}