{"openapi":"3.1.0","info":{"title":"Bookeo (BYOK) API","version":"0.1.0","description":"Bookeo (BYOK) lets an AI assistant read your own Bookeo data through the Bookeo API with a key you supply (Bookeo API key (the key issued when a business owner authorizes your application)). Read-only: 11 tools (get_business, get_api_key_info, list_products, list_availability_slots, list_bookings, get_booking, list_customer_bookings, list_customers, list_payments, list_resources,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-bookeo.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-bookeo/docs"},"termsOfService":"https://connectorbay.com/byok-bookeo/terms"},"servers":[{"url":"https://byok-bookeo.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-bookeo/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/get_business":{"post":{"operationId":"get_business","summary":"Show the business behind the key: name, description, website, contact email and address. Use for \"What business details ","description":"Show the business behind the key: name, description, website, contact email and address. Use for \"What business details does Bookeo hold for my account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_businessArguments","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_api_key_info":{"post":{"operationId":"get_api_key_info","summary":"Show the account id, the permissions granted to this key and when it was created. Use for \"Which Bookeo permissions does","description":"Show the account id, the permissions granted to this key and when it was created. Use for \"Which Bookeo permissions does my API key have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_api_key_infoArguments","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 products (tours, classes, appointments) offered, with type, duration, default rates and booking limits. Use for","description":"List the products (tours, classes, appointments) offered, with type, duration, default rates and booking limits. Use for \"Which products can customers book in Bookeo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"anyOf":[{"enum":["fixed","fixedCourse","flexibleTime"],"type":"string"},{"type":"null"}],"default":null,"description":"Only products of this type: fixed, fixedCourse or flexibleTime.","title":"Type"},"items_per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (1 to 100, default 50).","title":"Items Per Page"},"page_navigation_token":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Token from info.pageNavigationToken of the first answer, to fetch a later page together with page_number.","title":"Page Navigation Token"},"page_number":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number to fetch (starting at 1); only used together with page_navigation_token.","title":"Page Number"}},"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_availability_slots":{"post":{"operationId":"list_availability_slots","summary":"List bookable time slots with seats left for fixed-time products in a date range (at most 31 days). Use for \"Which slots","description":"List bookable time slots with seats left for fixed-time products in a date range (at most 31 days). Use for \"Which slots are still open for the harbor tour next week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"description":"Start of the search window, ISO 8601 date-time such as 2026-10-20T00:00:00-07:00.","maxLength":40,"title":"Start Time","type":"string"},"end_time":{"description":"End of the search window; at most 31 days after start_time.","maxLength":40,"title":"End Time","type":"string"},"product_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only slots of this product id (see list_products); without it all fixed and fixed-course products are included.","title":"Product Id"},"items_per_page":{"anyOf":[{"maximum":300,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many slots per page (1 to 300, default 50).","title":"Items Per Page"},"page_navigation_token":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Token from info.pageNavigationToken of the first answer, to fetch a later page together with page_number.","title":"Page Navigation Token"},"page_number":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number to fetch (starting at 1); only used together with page_navigation_token.","title":"Page Number"}},"required":["start_time","end_time"],"title":"list_availability_slotsArguments","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_bookings":{"post":{"operationId":"list_bookings","summary":"List bookings that start in a time window (at most 31 days), with product, times, cancellation flag, party size and pric","description":"List bookings that start in a time window (at most 31 days), with product, times, cancellation flag, party size and price totals. Use for \"What bookings do we have next week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"description":"Include bookings starting at or after this ISO 8601 date-time.","maxLength":40,"title":"Start Time","type":"string"},"end_time":{"description":"Include bookings starting at or before this ISO 8601 date-time; at most 31 days after start_time.","maxLength":40,"title":"End Time","type":"string"},"product_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only bookings of this product id.","title":"Product Id"},"include_canceled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to include canceled bookings.","title":"Include Canceled"},"items_per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (1 to 100, default 50).","title":"Items Per Page"},"page_navigation_token":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Token from info.pageNavigationToken of the first answer, to fetch a later page together with page_number.","title":"Page Navigation Token"},"page_number":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number to fetch (starting at 1); only used together with page_navigation_token.","title":"Page Number"}},"required":["start_time","end_time"],"title":"list_bookingsArguments","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_booking":{"post":{"operationId":"get_booking","summary":"Get one booking by its booking number with product, times, status, party size, resources and price totals. Use for \"Show","description":"Get one booking by its booking number with product, times, status, party size, resources and price totals. Use for \"Show booking 123456789\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"booking_number":{"description":"The booking number, for example '123456789'.","maxLength":200,"title":"Booking Number","type":"string"}},"required":["booking_number"],"title":"get_bookingArguments","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_customer_bookings":{"post":{"operationId":"list_customer_bookings","summary":"List all bookings of one customer, optionally within a date range. Use for \"What has customer c1 booked\".","description":"List all bookings of one customer, optionally within a date range. Use for \"What has customer c1 booked\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"customer_id":{"description":"Bookeo customer id (see list_customers).","maxLength":200,"title":"Customer Id","type":"string"},"begin_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only bookings on or after this date (YYYY-MM-DD).","title":"Begin Date"},"end_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only bookings on or before this date (YYYY-MM-DD).","title":"End Date"},"items_per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (1 to 100, default 50).","title":"Items Per Page"},"page_navigation_token":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Token from info.pageNavigationToken of the first answer, to fetch a later page together with page_number.","title":"Page Navigation Token"},"page_number":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number to fetch (starting at 1); only used together with page_navigation_token.","title":"Page Number"}},"required":["customer_id"],"title":"list_customer_bookingsArguments","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_customers":{"post":{"operationId":"list_customers","summary":"List or search customers by name or email with booking, cancellation and no-show counts and membership status (contact d","description":"List or search customers by name or email with booking, cancellation and no-show counts and membership status (contact details are left out). Use for \"Find the customer named Garcia\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search_text":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text to search for in the field chosen by search_field; empty lists everyone.","title":"Search Text"},"search_field":{"anyOf":[{"enum":["name","firstName","lastName","emailAddress"],"type":"string"},{"type":"null"}],"default":"name","description":"Field to search: name, firstName, lastName or emailAddress.","title":"Search Field"},"created_since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only customers created since this ISO 8601 date-time.","title":"Created Since"},"current_members":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"Include current members (default true).","title":"Current Members"},"current_non_members":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"Include customers who are not members (default true).","title":"Current Non Members"},"items_per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (1 to 100, default 50).","title":"Items Per Page"},"page_navigation_token":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Token from info.pageNavigationToken of the first answer, to fetch a later page together with page_number.","title":"Page Navigation Token"},"page_number":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number to fetch (starting at 1); only used together with page_navigation_token.","title":"Page Number"}},"title":"list_customersArguments","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_payments":{"post":{"operationId":"list_payments","summary":"List payments received, filtered by time period or method, with amount, method, reason and gateway. Use for \"What paymen","description":"List payments received, filtered by time period or method, with amount, method, reason and gateway. Use for \"What payments did we receive this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only payments from this ISO 8601 date-time.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only payments up to this ISO 8601 date-time.","title":"End Time"},"payment_method":{"anyOf":[{"enum":["creditCard","paypal","bankTransfer","cash","checque","debitCard","existingCredit","accountCredit","moneyVoucher","other"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this method.","title":"Payment Method"},"items_per_page":{"anyOf":[{"maximum":300,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many payments per page (1 to 300, default 50).","title":"Items Per Page"},"page_navigation_token":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Token from info.pageNavigationToken of the first answer, to fetch a later page together with page_number.","title":"Page Navigation Token"},"page_number":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number to fetch (starting at 1); only used together with page_navigation_token.","title":"Page Number"}},"title":"list_paymentsArguments","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_resources":{"post":{"operationId":"list_resources","summary":"List bookable resources such as guides, rooms or equipment, grouped by resource type. Use for \"Which resources are set u","description":"List bookable resources such as guides, rooms or equipment, grouped by resource type. Use for \"Which resources are set up in Bookeo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"items_per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (1 to 100, default 50).","title":"Items Per Page"},"page_navigation_token":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Token from info.pageNavigationToken of the first answer, to fetch a later page together with page_number.","title":"Page Navigation Token"},"page_number":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number to fetch (starting at 1); only used together with page_navigation_token.","title":"Page Number"}},"title":"list_resourcesArguments","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_people_categories":{"post":{"operationId":"list_people_categories","summary":"List the participant categories (adult, child and so on) and how many seats each takes. Use for \"Which people categories","description":"List the participant categories (adult, child and so on) and how many seats each takes. Use for \"Which people categories does Bookeo use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_people_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}}}}