{"openapi":"3.1.0","info":{"title":"Revel Systems (BYOK) API","version":"0.1.0","description":"Revel Systems (BYOK) lets an AI assistant read your own Revel Systems data through the Revel Systems API with a key you supply (Revel API key and secret joined with a colon (KEY:SECRET)). Read-only: 10 tools (list_establishments, list_products, list_product_categories, list_product_classes, list_orders, list_payment_types, list_discounts, list_business_days, list_pos_stations,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-revel.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-revel/docs"},"termsOfService":"https://connectorbay.com/byok-revel/terms"},"servers":[{"url":"https://byok-revel.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-revel/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_establishments":{"post":{"operationId":"list_establishments","summary":"List the Revel locations (establishments) of the enterprise with name, active flag, time zone, phone and brand. Needs an","description":"List the Revel locations (establishments) of the enterprise with name, active flag, time zone, phone and brand. Needs an enterprise-level key. Use for \"Which locations are in my Revel enterprise\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Revel account subdomain, the part before .revelup.com (for example 'mybistro'). Lowercase letters, digits and hyphens.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (the API asks for fewer than 100; default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of objects to skip, to page through results.","title":"Offset"},"order_by":{"anyOf":[{"enum":["id","-id"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by id or -id.","title":"Order By"}},"required":["subdomain"],"title":"list_establishmentsArguments","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 menu products with price, cost, SKU, category, active flag and food, drink or alcohol flags. Filter by category, na","description":"List menu products with price, cost, SKU, category, active flag and food, drink or alcohol flags. Filter by category, name, SKU, active or online display. Use for \"What active products are in category 12 and what do they sell for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Revel account subdomain, the part before .revelup.com (for example 'mybistro'). Lowercase letters, digits and hyphens.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"establishment":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only objects of this establishment (location) id.","title":"Establishment"},"category":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only products in this ProductCategory id.","title":"Category"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only products with exactly this name.","title":"Name"},"sku":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only the product with this SKU.","title":"Sku"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active products only.","title":"Active"},"display_online":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for products shown in online ordering only.","title":"Display Online"},"limit":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (the API asks for fewer than 100; default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of objects to skip, to page through results.","title":"Offset"},"order_by":{"anyOf":[{"enum":["sorting","id","-sorting","-id"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by sorting, id, -sorting or -id.","title":"Order By"}},"required":["subdomain"],"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_product_categories":{"post":{"operationId":"list_product_categories","summary":"List menu categories with name, parent, sorting and active flag. Use for \"What categories are on my Revel menu\".","description":"List menu categories with name, parent, sorting and active flag. Use for \"What categories are on my Revel menu\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Revel account subdomain, the part before .revelup.com (for example 'mybistro'). Lowercase letters, digits and hyphens.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"establishment":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only objects of this establishment (location) id.","title":"Establishment"},"parent":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only subcategories of this parent category id.","title":"Parent"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active categories only.","title":"Active"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only categories with exactly this name.","title":"Name"},"limit":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (the API asks for fewer than 100; default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of objects to skip, to page through results.","title":"Offset"},"order_by":{"anyOf":[{"enum":["sorting","id","-sorting","-id"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by sorting, id, -sorting or -id.","title":"Order By"}},"required":["subdomain"],"title":"list_product_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_product_classes":{"post":{"operationId":"list_product_classes","summary":"List product classes (reporting groups such as food or beverage) with parent and active flag. Use for \"What product clas","description":"List product classes (reporting groups such as food or beverage) with parent and active flag. Use for \"What product classes do I use for reporting\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Revel account subdomain, the part before .revelup.com (for example 'mybistro'). Lowercase letters, digits and hyphens.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (the API asks for fewer than 100; default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of objects to skip, to page through results.","title":"Offset"}},"required":["subdomain"],"title":"list_product_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/list_orders":{"post":{"operationId":"list_orders","summary":"List orders (newest first by default) with totals only: subtotal, tax, gratuity, discounts, final total, dining option, ","description":"List orders (newest first by default) with totals only: subtotal, tax, gratuity, discounts, final total, dining option, guest count and whether it is closed or a web order. No customer details are returned. Use for \"What were my latest closed orders and their totals\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Revel account subdomain, the part before .revelup.com (for example 'mybistro'). Lowercase letters, digits and hyphens.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"establishment":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only objects of this establishment (location) id.","title":"Establishment"},"closed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for closed orders only.","title":"Closed"},"web_order":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for web-originated orders only.","title":"Web Order"},"dining_option":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only orders with this dining option id.","title":"Dining Option"},"limit":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (the API asks for fewer than 100; default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of objects to skip, to page through results.","title":"Offset"},"order_by":{"anyOf":[{"enum":["updated_date","created_date","id","-updated_date","-created_date","-id"],"type":"string"},{"type":"null"}],"default":"-created_date","description":"Order by updated_date, created_date, id or the same with a leading minus for newest first.","title":"Order By"}},"required":["subdomain"],"title":"list_ordersArguments","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_payment_types":{"post":{"operationId":"list_payment_types","summary":"List the payment types set up for the establishment (cash, card, house account and similar) with active flag. Use for \"W","description":"List the payment types set up for the establishment (cash, card, house account and similar) with active flag. Use for \"Which payment types can my Revel POS take\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Revel account subdomain, the part before .revelup.com (for example 'mybistro'). Lowercase letters, digits and hyphens.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (the API asks for fewer than 100; default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of objects to skip, to page through results.","title":"Offset"}},"required":["subdomain"],"title":"list_payment_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_discounts":{"post":{"operationId":"list_discounts","summary":"List configured discounts with name, amount, type, active flag, validity dates and minimum spend. Use for \"What discount","description":"List configured discounts with name, amount, type, active flag, validity dates and minimum spend. Use for \"What discounts are configured in Revel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Revel account subdomain, the part before .revelup.com (for example 'mybistro'). Lowercase letters, digits and hyphens.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"establishment":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only objects of this establishment (location) id.","title":"Establishment"},"limit":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (the API asks for fewer than 100; default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of objects to skip, to page through results.","title":"Offset"},"order_by":{"anyOf":[{"enum":["id","-id"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by id or -id.","title":"Order By"}},"required":["subdomain"],"title":"list_discountsArguments","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_business_days":{"post":{"operationId":"list_business_days","summary":"List business days (opened and closed fiscal days) per establishment, newest first when ordered by -id. Use for \"When we","description":"List business days (opened and closed fiscal days) per establishment, newest first when ordered by -id. Use for \"When were my last business days opened and closed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Revel account subdomain, the part before .revelup.com (for example 'mybistro'). Lowercase letters, digits and hyphens.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"establishment":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only business days of this establishment id.","title":"Establishment"},"limit":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (the API asks for fewer than 100; default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of objects to skip, to page through results.","title":"Offset"},"order_by":{"anyOf":[{"enum":["id","-id"],"type":"string"},{"type":"null"}],"default":"-id","description":"Order by id or -id.","title":"Order By"}},"required":["subdomain"],"title":"list_business_daysArguments","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_pos_stations":{"post":{"operationId":"list_pos_stations","summary":"List POS stations (terminals) with name, active flag, mode, model, last time online and revenue center. Use for \"Which P","description":"List POS stations (terminals) with name, active flag, mode, model, last time online and revenue center. Use for \"Which POS terminals are active and when were they last online\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Revel account subdomain, the part before .revelup.com (for example 'mybistro'). Lowercase letters, digits and hyphens.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"establishment":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only objects of this establishment (location) id.","title":"Establishment"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active stations only, false for inactive.","title":"Active"},"limit":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (the API asks for fewer than 100; default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of objects to skip, to page through results.","title":"Offset"}},"required":["subdomain"],"title":"list_pos_stationsArguments","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_revenue_centers":{"post":{"operationId":"list_revenue_centers","summary":"List revenue centers (cost areas such as dining room or bar) with active flag. Use for \"What revenue centers do I have\".","description":"List revenue centers (cost areas such as dining room or bar) with active flag. Use for \"What revenue centers do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Revel account subdomain, the part before .revelup.com (for example 'mybistro'). Lowercase letters, digits and hyphens.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"establishment":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only objects of this establishment (location) id.","title":"Establishment"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only revenue centers with exactly this name.","title":"Name"},"limit":{"anyOf":[{"maximum":99,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many objects to return (the API asks for fewer than 100; default 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of objects to skip, to page through results.","title":"Offset"}},"required":["subdomain"],"title":"list_revenue_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}}}}