{"openapi":"3.1.0","info":{"title":"Zuper Catalog (BYOK) API","version":"0.1.0","description":"Zuper Catalog (BYOK) lets an AI assistant read your own Zuper Catalog data through the Zuper Catalog API with a key you supply (Zuper API key). Read-only: 6 tools (list_products, get_product, list_product_categories, list_product_groups, list_pricelists, list_trade_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-zuper-catalog.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-zuper-catalog/docs"},"termsOfService":"https://connectorbay.com/byok-zuper-catalog/terms"},"servers":[{"url":"https://byok-zuper-catalog.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-zuper-catalog/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_products":{"post":{"operationId":"list_products","summary":"List products and parts with id, name, brand, type, category, stock quantity, minimum quantity and price. Filter by keyw","description":"List products and parts with id, name, brand, type, category, stock quantity, minimum quantity and price. Filter by keyword, category, type or brand. Use for \"Which pool chemical products are in my Zuper parts catalog\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"keyword":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keyword search.","title":"Keyword"},"product_category":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Product category uid from list_product_categories.","title":"Product Category"},"product_type":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Product type, for example PRODUCT or PARTS.","title":"Product Type"},"brand":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Brand name.","title":"Brand"},"sort_by":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Sort key, for example created_at.","title":"Sort By"},"sort":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"DESC","description":"Sort direction: DESC or ASC.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 1000; keep small).","title":"Count"}},"required":["dc_region"],"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/get_product":{"post":{"operationId":"get_product","summary":"Get one product or part by uid with id, name, brand, type, category, stock, price and currency. Use for \"Show the detail","description":"Get one product or part by uid with id, name, brand, type, category, stock, price and currency. Use for \"Show the details of Zuper product b13f69d0\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"product_uid":{"description":"Product uid from list_products.","maxLength":200,"title":"Product Uid","type":"string"}},"required":["dc_region","product_uid"],"title":"get_productArguments","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 product categories with uid, name and description. Use for \"What product categories does my Zuper catalog have\".","description":"List product categories with uid, name and description. Use for \"What product categories does my Zuper catalog have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"keyword":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keyword search.","title":"Keyword"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many categories per page.","title":"Count"},"sort":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"DESC","description":"Sort direction: DESC or ASC.","title":"Sort"}},"required":["dc_region"],"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_groups":{"post":{"operationId":"list_product_groups","summary":"List product groups (bundles of products) with uid, name, description, number of products and creation date. Use for \"Wh","description":"List product groups (bundles of products) with uid, name, description, number of products and creation date. Use for \"Which product groups are set up in Zuper\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"keyword":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keyword search.","title":"Keyword"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active groups only, false for inactive ones.","title":"Is Active"},"sort_by":{"anyOf":[{"enum":["product_group_name","created_at"],"type":"string"},{"type":"null"}],"default":"created_at","description":"Sort key: product_group_name or created_at.","title":"Sort By"},"sort":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"DESC","description":"Sort direction: DESC or ASC.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many groups per page.","title":"Limit"}},"required":["dc_region"],"title":"list_product_groupsArguments","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_pricelists":{"post":{"operationId":"list_pricelists","summary":"List price lists with uid, name, type (per item, fixed discount or fixed margin), active flag and dates. Use for \"Which ","description":"List price lists with uid, name, type (per item, fixed discount or fixed margin), active flag and dates. Use for \"Which price lists exist in Zuper\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"keyword":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keyword search.","title":"Keyword"},"pricelist_type":{"anyOf":[{"enum":["PER_ITEM","FIXED_DISCOUNT","FIXED_MARGIN"],"type":"string"},{"type":"null"}],"default":null,"description":"PER_ITEM, FIXED_DISCOUNT or FIXED_MARGIN.","title":"Pricelist Type"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active price lists only.","title":"Is Active"},"sort_by":{"anyOf":[{"enum":["created_at","pricelist_name"],"type":"string"},{"type":"null"}],"default":"created_at","description":"Sort key: created_at or pricelist_name.","title":"Sort By"},"sort":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"ASC","description":"ASC or DESC.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many price lists per page.","title":"Limit"}},"required":["dc_region"],"title":"list_pricelistsArguments","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_trade_types":{"post":{"operationId":"list_trade_types","summary":"List trade types (business units) with uid, name, display order, active flag and monthly goal. Use for \"What trade types","description":"List trade types (business units) with uid, name, display order, active flag and monthly goal. Use for \"What trade types are configured in Zuper\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"keyword":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keyword search.","title":"Keyword"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active trade types only.","title":"Is Active"},"sort_by":{"anyOf":[{"enum":["display_order","created_at"],"type":"string"},{"type":"null"}],"default":"display_order","description":"Sort key: display_order or created_at.","title":"Sort By"},"sort":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"ASC","description":"ASC or DESC.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 1000; keep small).","title":"Count"}},"required":["dc_region"],"title":"list_trade_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}}}}