{"swagger":"2.0","info":{"description":"An updated version of the DecisionRules.io Management API, incorporating new and revised endpoints.","version":"1.25.2","title":"DecisionRules.io Management API","termsOfService":"https://docs.decisionrules.io/docs/terms-and-conditions/terms-and-conditions","contact":{"email":"support@decisionrules.io"}},"host":"api.decisionrules.io","basePath":"/api","securityDefinitions":{"bearerAuth":{"type":"apiKey","in":"header","name":"Authorization","description":"Please insert: \"Bearer <MANAGEMENT_API_KEY>\" into Authorization header."}},"security":[{"bearerAuth":[]}],"tags":[{"name":"Rule"},{"name":"Space"},{"name":"Tag"},{"name":"Rule Flow"},{"name":"Folder"},{"name":"Tools"},{"name":"Test"},{"name":"Test Suite"}],"schemes":["https","http"],"consumes":["application/json"],"produces":["application/json"],"paths":{"/rule/{identifier}":{"get":{"tags":["Rule"],"summary":"Get Latest Rule","description":"Get the latest version of a rule by ID or alias, regardless of publication status. Use GET /rule with the path query parameter when locating a rule by folder path; path segments must be folder names plus the rule name, not rule aliases or IDs, for example /Client/Important/Calculation.","operationId":"get_latest_rule","x-mcp":{"name":"get_latest_rule","title":"Get Latest Rule","description":"Use when the user asks for the current/latest version of a rule and provides a rule ID or rule alias. Do not use this for folder paths; use get_rule_by_path when the user provides a path such as /Client/Important/Calculation. Returns the highest version regardless of publication status.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Rule"}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}},"put":{"tags":["Rule"],"summary":"Update Latest Rule","description":"Update the latest version of a rule by ID or alias with the supplied rule payload.","operationId":"update_latest_rule","x-mcp":{"name":"update_latest_rule","title":"Update Latest Rule","description":"Use when the user wants to replace or edit the current/latest version of an existing rule and provides a rule ID or rule alias. The body must contain the full updated rule payload. Do not use for folder paths; use update_rule_by_path instead. To update a known version, use update_rule_version.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"body","in":"body","description":"Full DecisionRules rule payload to store as the latest version. Include the rule type-specific data such as decisionTable, script, lookup-table data, or workflowData as applicable.","required":true,"schema":{"$ref":"#/definitions/Rule"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Rule"}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}},"delete":{"tags":["Rule"],"summary":"Delete Latest Rule","description":"Delete the latest version of a rule by ID or alias, regardless of publication status.","operationId":"delete_latest_rule","x-mcp":{"name":"delete_latest_rule","title":"Delete Latest Rule","description":"Use when the user explicitly wants to delete the current/latest version of a rule by rule ID or alias. This deletes the highest version regardless of publication status. Use delete_rule_version when the user gives a version, and delete_rule_by_path when the user gives a folder path.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/rule/{identifier}/{version}":{"get":{"tags":["Rule"],"summary":"Get Rule Version","description":"Get a specific version of a rule by ID or alias, regardless of its publication status.","operationId":"get_rule_version","x-mcp":{"name":"get_rule_version","title":"Get Rule Version","description":"Use when the user asks for a specific rule version and provides a rule ID or rule alias plus a version number. Returns that exact version regardless of publication status. Do not use for folder paths; use get_rule_by_path with the version query parameter instead.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"version","in":"path","required":true,"type":"string","description":"The version of the rule."}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Rule"}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}},"put":{"tags":["Rule"],"summary":"Update Rule Version","description":"Update a specific version of a rule by ID or alias with the supplied rule payload.","operationId":"update_rule_version","x-mcp":{"name":"update_rule_version","title":"Update Rule Version","description":"Use when the user wants to replace or edit one exact rule version and provides a rule ID or rule alias plus a version number. The body must contain the full updated rule payload. Do not use for folder paths; use update_rule_by_path with version instead.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"version","in":"path","required":true,"type":"string","description":"The version of the rule."},{"name":"body","in":"body","description":"Full DecisionRules rule payload to store for the specified version. Include the rule type-specific data such as decisionTable, script, lookup-table data, or workflowData as applicable.","required":true,"schema":{"$ref":"#/definitions/Rule"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Rule"}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}},"delete":{"tags":["Rule"],"summary":"Delete Rule Version","description":"Delete a specific version of a rule by ID or alias.","operationId":"delete_rule_version","x-mcp":{"name":"delete_rule_version","title":"Delete Rule Version","description":"Use when the user explicitly wants to delete one exact rule version and provides a rule ID or rule alias plus a version number. Use delete_latest_rule only when no version is specified.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"version","in":"path","required":true,"type":"string","description":"The version of the rule."}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/rule/status/{identifier}/{status}/{version}":{"put":{"tags":["Rule"],"summary":"Update Rule Version Status","description":"Set a specific rule version to pending or published.","operationId":"update_rule_version_status","x-mcp":{"name":"update_rule_version_status","title":"Update Rule Version Status","description":"Use when the user wants to change the status of one exact rule version by rule ID or alias. The status path parameter must be either \"pending\" or \"published\"; version is required.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"status","in":"path","required":true,"type":"string","description":"pending XOR published."},{"name":"version","in":"path","required":true,"type":"string","description":"The version of the rule."}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Rule"}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/rule":{"get":{"tags":["Rule"],"summary":"Get Rule By Folder Path","description":"Get a rule by its folder path. Folder paths must start with \"/\" and use folder names plus the rule name, not rule aliases or IDs (for example, /Client/Important/Calculation). Use the version query parameter to target a specific rule version, for example path=/Client/Important/Calculation&version=2.","operationId":"get_rule_by_path","x-mcp":{"name":"get_rule_by_path","title":"Get Rule By Path","description":"Use when the user provides a folder path to a rule instead of a rule ID or alias. The path must start with \"/\" and use folder names plus the rule name, not rule aliases or IDs, for example /Client/Important/Calculation. Add version only when selecting a specific rule version at that path.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"path","in":"query","required":true,"type":"string","description":"Folder path to the rule. Must start with \"/\". Use folder names plus the rule name, not rule aliases or IDs. Example: /Client/Important/Calculation."},{"name":"version","in":"query","required":false,"type":"number","description":"Rule version to select for the folder path. Example: use path=/Client/Important/Calculation with version=2 to target Calculation v2."}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Rule"}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}},"post":{"tags":["Rule"],"summary":"Create Rule","description":"Create a new DecisionRules rule in the authenticated space.","operationId":"create_rule","x-mcp":{"name":"create_rule","title":"Create Rule","description":"Use when the user wants to create a new rule from a rule payload. The body must be a DecisionRules rule such as a decision-table, scripting/complex rule, lookup table, decision tree, or AI rule. To place it into a folder, use path with folder names, not folder IDs; the path must start with \"/\", for example /Client/Important.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"path","in":"query","description":"Target folder path for the new rule. Must start with \"/\" and use folder names, not folder IDs. Example: /Client/Important. When createFolder is true, missing folder segments in this path are created before the rule is placed there. Invalid folder paths or folder names fail without creating folders.","required":false,"type":"string"},{"name":"createFolder","in":"query","description":"Set to true to create missing folder segments from the path query parameter before creating the rule. Defaults to false.","required":false,"type":"boolean","default":false},{"name":"body","in":"body","description":"DecisionRules rule payload to create. Required fields depend on the rule type; type should be a concrete rule type such as decision-table, complex-rule, lookup-table, decision-tree, or ai-rule.","required":true,"schema":{"$ref":"#/definitions/Rule"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Rule"}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}},"put":{"tags":["Rule"],"summary":"Update Rule By Folder Path","description":"Update a rule selected by folder path. Folder paths must start with \"/\" and use folder names plus the rule name, not rule aliases or IDs (for example, /Client/Important/Calculation). Use the version query parameter to update a specific rule version at that path.","operationId":"update_rule_by_path","x-mcp":{"name":"update_rule_by_path","title":"Update Rule By Path","description":"Use when the user wants to update a rule identified by folder path instead of ID or alias. The path must start with \"/\" and use folder names plus the rule name, not rule aliases or IDs, for example /Client/Important/Calculation. Add version only when updating a specific rule version at that path. The body must contain the full updated rule payload.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"path","in":"query","required":true,"type":"string","description":"Folder path to the rule. Must start with \"/\". Use folder names plus the rule name, not rule aliases or IDs. Example: /Client/Important/Calculation."},{"name":"version","in":"query","required":false,"type":"number","description":"Rule version to update for the folder path. Example: use path=/Client/Important/Calculation with version=2 to target Calculation v2."},{"name":"body","in":"body","description":"Full DecisionRules rule payload to store at the folder path. Include the rule type-specific data and keep identifiers/version aligned with the target rule.","required":true,"schema":{"$ref":"#/definitions/Rule"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Rule"}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}},"delete":{"tags":["Rule"],"summary":"Delete Rule By Folder Path","description":"Delete a rule selected by folder path. Folder paths must start with \"/\" and use folder names plus the rule name, not rule aliases or IDs (for example, /Client/Important/Calculation). Use the version query parameter to delete a specific rule version at that path.","operationId":"delete_rule_by_path","x-mcp":{"name":"delete_rule_by_path","title":"Delete Rule By Path","description":"Use when the user wants to delete a rule identified by folder path instead of ID or alias. The path must start with \"/\" and use folder names plus the rule name, not rule aliases or IDs, for example /Client/Important/Calculation. Add version only when deleting a specific rule version at that path.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"path","in":"query","required":true,"type":"string","description":"Folder path to the rule. Must start with \"/\". Use folder names plus the rule name, not rule aliases or IDs. Example: /Client/Important/Calculation."},{"name":"version","in":"query","required":false,"type":"number","description":"Rule version to delete for the folder path. Example: use path=/Client/Important/Calculation with version=2 to target Calculation v2."}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}}},"/rule/{spaceId}":{"post":{"deprecated":true,"tags":["Rule"],"summary":"Create Rule For Space","description":"Create a new DecisionRules rule in the specified space.","operationId":"create_rule_for_space","x-mcp":{"name":"create_rule_for_space","title":"Create Rule For Space","description":"Create a new DecisionRules rule in the specified space.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"spaceId","in":"path","description":"ID of Space","required":true,"type":"string"},{"in":"body","name":"body","description":"Rule to save","required":true,"schema":{"$ref":"#/definitions/Rule"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or ruleId"},"406":{"description":"Wrong rule format"},"426":{"description":"Operation not allowed"}}}},"/rule/{identifier}/new-version":{"post":{"tags":["Rule"],"summary":"Create Rule Version","description":"Create a new version of an existing rule by ID or alias.","operationId":"create_rule_version","x-mcp":{"name":"create_rule_version","title":"Create Rule Version","description":"Use when the user wants to create a new version of an existing rule and provides a rule ID or rule alias. The body must contain the full rule payload for the new version. Use this instead of update_rule_version when the intent is to preserve the old version and add a new one.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"Unique rule ID or alias which is common to all rule versions."},{"name":"body","in":"body","description":"Full DecisionRules rule payload for the new version. The payload should represent the desired new rule version and include type-specific data.","required":true,"schema":{"$ref":"#/definitions/Rule"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Rule"}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/rule/lock":{"patch":{"tags":["Rule"],"summary":"Set Rule Lock By Folder Path","description":"Lock or unlock a rule selected by folder path. Folder paths must start with \"/\" and use folder names plus the rule name, not rule aliases or IDs (for example, /Client/Important/Calculation). Use the version query parameter to lock or unlock a specific rule version at that path.","operationId":"set_rule_lock_by_path","x-mcp":{"name":"set_rule_lock_by_path","title":"Set Rule Lock By Path","description":"Use when the user wants to lock or unlock a rule identified by folder path instead of ID or alias. The path must start with \"/\" and use folder names plus the rule name, not rule aliases or IDs, for example /Client/Important/Calculation. Add version only when locking or unlocking a specific rule version at that path. Body must be { \"locked\": true } or { \"locked\": false }.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"path","in":"query","required":true,"type":"string","description":"Folder path to the rule. Must start with \"/\". Use folder names plus the rule name, not rule aliases or IDs. Example: /Client/Important/Calculation."},{"name":"version","in":"query","required":false,"type":"number","description":"Rule version to lock or unlock for the folder path. Example: use path=/Client/Important/Calculation with version=2 to target Calculation v2."},{"name":"body","in":"body","required":true,"description":"Object that defines whether the rule should be locked.","schema":{"$ref":"#/definitions/RuleLockRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}}},"/rule/lock/{identifier}":{"patch":{"tags":["Rule"],"summary":"Set Latest Rule Lock","description":"Lock or unlock the latest version of a rule.","operationId":"set_latest_rule_lock","x-mcp":{"name":"set_latest_rule_lock","title":"Set Latest Rule Lock","description":"Use when the user wants to lock or unlock the current/latest version of a rule by rule ID or alias. Body must be { \"locked\": true } or { \"locked\": false }. Use set_rule_version_lock when a version is provided, or set_rule_lock_by_path when the user gives a folder path.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"body","in":"body","required":true,"description":"Object that defines if rule should be locked.","schema":{"$ref":"#/definitions/RuleLockRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/rule/lock/{identifier}/{version}":{"patch":{"tags":["Rule"],"summary":"Set Rule Version Lock","description":"Lock or unlock a specific rule version.","operationId":"set_rule_version_lock","x-mcp":{"name":"set_rule_version_lock","title":"Set Rule Version Lock","description":"Use when the user wants to lock or unlock one exact rule version by rule ID or alias plus version number. Body must be { \"locked\": true } or { \"locked\": false }.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"version","in":"path","required":true,"type":"string","description":"The version of the rule."},{"name":"body","in":"body","required":true,"description":"Object that defines if rule should be locked.","schema":{"$ref":"#/definitions/RuleLockRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/space":{"post":{"tags":["Space"],"summary":"Create Space","description":"Create a new space for the authenticated account.","operationId":"create_space","x-mcp":{"name":"create_space","title":"Create Space","description":"Use when the user wants to create a new DecisionRules space. The body must include the new space name, for example { \"name\": \"Production\" }. Do not use for selecting or listing an existing space.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"body","in":"body","required":true,"description":"Object with the new space name, for example { \"name\": \"Production\" }.","schema":{"$ref":"#/definitions/CreateSpaceRequest"}}],"responses":{"200":{"description":"OK","schema":{"type":"string","description":"Created space ID."}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}}},"/space/items":{"get":{"tags":["Space"],"summary":"List Space Items","description":"List rules and rule-flow dependencies in the authenticated space.","operationId":"list_space_items","x-mcp":{"name":"list_space_items","title":"List Space Items","description":"Use when the user wants an inventory of rules and rule flows in the authenticated space. Returns item metadata such as baseId, version, name, status, type, tags, description, lastUpdate, and rule-flow dependency references. Use this to discover IDs or versions before calling more specific tools.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"type":"object"},"example":[{"baseId":"009d9438-59fc-1531-50c5-76fb4741aaca","version":1,"name":"Client Profitability (Sample Rule)","status":"published","type":"decision-table","tags":[],"description":"Sample client profitability rule","lastUpdate":"2022-02-21T14:10:33.581Z"},{"baseId":"00941c5a-7d21-d332-7cbf-a4f742556a85","version":1,"name":"Decision Tree","status":"published","type":"decision-tree","tags":[],"description":"","lastUpdate":"2022-03-24T09:52:43.548Z"},{"baseId":"b7b3f52a-52f1-4b04-59ff-548bf063221b","version":1,"name":"Sample Rule Flow","status":"pending","type":"composition","tags":[],"description":"This is sample description","lastUpdate":"2021-11-14T08:43:22.611Z","rules":[{"id":"e72a23a2-0838-c52b-a284-baac28bc41b8"}]}]}}}}},"/space/{spaceId}":{"get":{"deprecated":true,"tags":["Space"],"summary":"List Space Rules","description":"List rules in the specified space.","operationId":"list_space_rules","x-mcp":{"name":"list_space_rules","title":"List Space Rules","description":"List rules in the specified space.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"spaceId","in":"path","description":"ID of Space","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key"}}}},"/info/space/{spaceId}":{"get":{"deprecated":true,"tags":["Space"],"summary":"List Space Rules","description":"Deprecated alias of GET /space/{spaceId}. List rules in the specified space.","operationId":"list_space_rules_info_alias","x-mcp":{"name":"list_space_rules_info_alias","title":"List Space Rules","description":"Deprecated alias of GET /space/{spaceId}. List rules in the specified space.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"spaceId","in":"path","description":"ID of Space","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key"}}}},"/tags/rules/{spaceId}/":{"get":{"deprecated":true,"tags":["Tag"],"summary":"List Rules By Tags","description":"List rules in a space that match the supplied tags.","operationId":"list_rules_by_tags","x-mcp":{"name":"list_rules_by_tags","title":"List Rules By Tags","description":"List rules in a space that match the supplied tags.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"produces":["application/json"],"parameters":[{"name":"spaceId","in":"path","description":"ID of Space","required":true,"type":"string"},{"name":"tags","in":"query","description":"Tags to search by as comma separated list","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or ruleId"},"401":{"description":"API key is missing"}}}},"/tags/rules/{spaceId}/{ruleId}":{"patch":{"deprecated":true,"tags":["Tag"],"summary":"Add Tags To Rule","description":"Add tags to all versions of a rule.","operationId":"add_tags_to_rule","x-mcp":{"name":"add_tags_to_rule","title":"Add Tags To Rule","description":"Add tags to all versions of a rule.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"produces":["application/json"],"parameters":[{"name":"spaceId","in":"path","description":"ID of Space","required":true,"type":"string"},{"name":"ruleId","in":"path","description":"ID of Rule","required":true,"type":"string"},{"in":"body","name":"body","description":"The only allowed special characters are \"() ? ! _ . &#58; -\"","required":true,"schema":{"$ref":"#/definitions/Tags"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or ruleId"},"401":{"description":"API key is missing"}}}},"/tags/rules/{spaceId}/{ruleId}/{version}":{"patch":{"deprecated":true,"tags":["Tag"],"summary":"Add Tags To Rule Version","description":"Add tags to a specific rule version.","operationId":"add_tags_to_rule_version","x-mcp":{"name":"add_tags_to_rule_version","title":"Add Tags To Rule Version","description":"Add tags to a specific rule version.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"produces":["application/json"],"parameters":[{"name":"spaceId","in":"path","description":"ID of Space","required":true,"type":"string"},{"name":"ruleId","in":"path","description":"ID of Rule","required":true,"type":"string"},{"name":"version","in":"path","description":"Version of Rule","required":true,"type":"string"},{"in":"body","name":"body","description":"The only allowed special characters are \"() ? ! _ . &#58; -\"","required":true,"schema":{"$ref":"#/definitions/Tags"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or ruleId"},"401":{"description":"API key is missing"}}}},"/tags/rules/{spaceId}/{ruleId}/":{"delete":{"deprecated":true,"tags":["Tag"],"summary":"Remove Tags From Rule","description":"Remove tags from all versions of a rule.","operationId":"remove_tags_from_rule","x-mcp":{"name":"remove_tags_from_rule","title":"Remove Tags From Rule","description":"Remove tags from all versions of a rule.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"produces":["application/json"],"parameters":[{"name":"spaceId","in":"path","description":"ID of Space","required":true,"type":"string"},{"name":"ruleId","in":"path","description":"ID of Rule","required":true,"type":"string"},{"name":"tags","in":"query","description":"Tags to remove from the rule as comma separated list","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or ruleId"},"401":{"description":"API key is missing"}}}},"/tags/rules/{spaceId}/{ruleId}/{version}/":{"delete":{"deprecated":true,"tags":["Tag"],"summary":"Remove Tags From Rule Version","description":"Remove tags from a specific rule version.","operationId":"remove_tags_from_rule_version","x-mcp":{"name":"remove_tags_from_rule_version","title":"Remove Tags From Rule Version","description":"Remove tags from a specific rule version.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"produces":["application/json"],"parameters":[{"name":"spaceId","in":"path","description":"ID of Space","required":true,"type":"string"},{"name":"ruleId","in":"path","description":"ID of Rule","required":true,"type":"string"},{"name":"version","in":"path","description":"Version of Rule","required":true,"type":"string"},{"name":"tags","in":"query","description":"Tags to remove from the rule as comma separated list","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or ruleId"},"401":{"description":"API key is missing"}}}},"/tags/items":{"get":{"tags":["Tag"],"summary":"List Items By Tags","description":"List space items that match the supplied tags.","operationId":"list_items_by_tags","x-mcp":{"name":"list_items_by_tags","title":"List Items By Tags","description":"Use when the user wants to find rules or rule flows in the authenticated space by tags. Provide tags as a comma-separated query string such as \"production,pricing\"; returned items must match the supplied tags.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"tags","in":"query","type":"string","required":true,"description":"Comma separated list of tags. The query at the end of the url address should look like this: ?tags=tag1,tag2. Such query would select all the rules where tag array contains both tag1 and tag"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/SpaceItem"}}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/tags/{identifier}":{"patch":{"tags":["Tag"],"summary":"Add Tags To Item","description":"Add tags to all versions of a rule or rule flow.","operationId":"add_tags_to_item","x-mcp":{"name":"add_tags_to_item","title":"Add Tags To Item","description":"Use when the user wants to add tags to every version of a rule or rule flow identified by ID or alias. The body must be an array of tag objects. Use add_tags_to_item_version when only one version should be changed.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"body","in":"body","required":true,"description":"Array of tags to add in JSON format","schema":{"$ref":"#/definitions/Tags"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Tags"}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}},"delete":{"tags":["Tag"],"summary":"Remove Tags From Item","description":"Remove tags from all versions of a rule or rule flow.","operationId":"remove_tags_from_item","x-mcp":{"name":"remove_tags_from_item","title":"Remove Tags From Item","description":"Use when the user wants to remove one or more tags from every version of a rule or rule flow identified by ID or alias. Provide tags as a CSV query array, for example tags=production,pricing. Use remove_tags_from_item_version when only one version should be changed.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"tags","in":"query","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"csv","description":"Comma separated list of tags. The query at the end of the url address should look like this: ?tags=tag1,tag2"}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/tags/{identifier}/{version}":{"patch":{"tags":["Tag"],"summary":"Add Tags To Item Version","description":"Add tags to a specific version of a rule or rule flow.","operationId":"add_tags_to_item_version","x-mcp":{"name":"add_tags_to_item_version","title":"Add Tags To Item Version","description":"Use when the user wants to add tags to one exact version of a rule or rule flow identified by ID or alias plus version. The body must be an array of tag objects. Use add_tags_to_item when all versions should be changed.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"version","in":"path","required":true,"type":"string","description":"The version of the rule."},{"name":"body","in":"body","required":true,"description":"Array of tags to add in JSON format","schema":{"$ref":"#/definitions/Tags"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Tags"}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}},"delete":{"tags":["Tag"],"summary":"Remove Tags From Item Version","description":"Remove tags from a specific version of a rule or rule flow.","operationId":"remove_tags_from_item_version","x-mcp":{"name":"remove_tags_from_item_version","title":"Remove Tags From Item Version","description":"Use when the user wants to remove one or more tags from one exact version of a rule or rule flow identified by ID or alias plus version. Provide tags as a CSV query array, for example tags=production,pricing. Use remove_tags_from_item when all versions should be changed.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"The ID or alias of the rule."},{"name":"version","in":"path","required":true,"type":"string","description":"The version of the rule."},{"name":"tags","in":"query","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"csv","description":"Comma separated list of tags. The query at the end of the url address should look like this: ?tags=tag1,tag2"}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/folder":{"get":{"tags":["Folder"],"summary":"Get Root Folder Tree","description":"Get the root folder tree, or use the path query parameter to get a folder or rule node by folder path. Folder paths must start with \"/\" and use folder names, not folder IDs (for example, /Client/Important).","operationId":"get_folder_tree_by_path","x-mcp":{"name":"get_folder_tree_by_path","title":"Get Folder Tree By Path","description":"Use when the user wants the root folder tree or wants to resolve a folder/rule node by folder path. Omit path for the root tree. If path is provided, it must start with \"/\" and use folder names, not folder IDs, for example /Client/Important.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"path","in":"query","required":false,"type":"string","description":"Folder path to target. Must start with \"/\" and use folder names, not folder IDs. Example: /Client/Important. Omit to target the root folder."}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}},"post":{"tags":["Folder"],"summary":"Create Folder Structure At Root Or Path","description":"Apply a folder structure at the root folder, or at the folder selected by the path query parameter. Folder paths must start with \"/\" and use folder names, not folder IDs (for example, /Client/Important).","operationId":"create_folder_by_path","x-mcp":{"name":"create_folder_by_path","title":"Create Folder By Path","description":"Use when the user wants to create one or more folders under the root folder or under a folder selected by path. Omit path to create under root. If path is provided, it must start with \"/\" and use folder names, not folder IDs, for example /Client/Important.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"path","in":"query","required":false,"type":"string","description":"Folder path to target. Must start with \"/\" and use folder names, not folder IDs. Example: /Client/Important. Omit to target the root folder."},{"in":"body","name":"body","required":true,"description":"Folder tree fragment to create under the selected folder. Use child names for folders and rules; folder children follow the Child schema.","schema":{"$ref":"#/definitions/Child"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}},"put":{"tags":["Folder"],"summary":"Overwrite Folder Structure At Root Or Path","description":"Overwrite the folder structure at the root folder, or at the folder selected by the path query parameter. Folder paths must start with \"/\" and use folder names, not folder IDs (for example, /Client/Important).","operationId":"overwrite_folder_tree_by_path","x-mcp":{"name":"overwrite_folder_tree_by_path","title":"Overwrite Folder Tree By Path","description":"Use when the user wants to replace the child folder structure under root or under a folder selected by path. This is an overwrite operation, so use create_folder_by_path for additive folder creation. If path is provided, it must start with \"/\" and use folder names, not folder IDs.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"path","in":"query","required":false,"type":"string","description":"Folder path to target. Must start with \"/\" and use folder names, not folder IDs. Example: /Client/Important. Omit to target the root folder."},{"in":"body","name":"body","required":true,"description":"Folder tree fragment that should replace the selected folder children. This overwrites the existing child structure under the target.","schema":{"$ref":"#/definitions/Child"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}},"delete":{"tags":["Folder"],"summary":"Delete Folder Tree By Path","description":"Delete the folder selected by the path query parameter. Folder paths must start with \"/\". Use path=/ with deleteAll=true to delete all root items.","operationId":"delete_folder_tree_by_path","x-mcp":{"name":"delete_folder_tree_by_path","title":"Delete Folder Tree By Path","description":"Use when the user explicitly wants to delete a folder selected by path, including descendant folders and rules. The path must start with \"/\" and use folder names, not folder IDs, for example /Client/Important. Use path=/ with deleteAll=true only when deleting all root items.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"path","in":"query","required":true,"type":"string","description":"Folder path to delete. Must start with \"/\" and use folder names, not folder IDs. Example: /Client/Important. Use path=/ only with deleteAll=true to delete all root items."},{"name":"deleteAll","in":"query","required":false,"type":"boolean","description":"Required with path=/ to delete all items from the root folder."}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}}},"/folder/{nodeId}":{"get":{"tags":["Folder"],"summary":"Get Folder Tree","description":"Get the folder tree under a folder node by node ID. Use GET /folder to target the root folder or a folder path.","operationId":"get_folder_tree","x-mcp":{"name":"get_folder_tree","title":"Get Folder Tree","description":"Use when the user provides a folder node ID and wants the folder tree under that node. Use get_folder_tree_by_path instead when the user provides a folder path such as /Client/Important.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"nodeId","in":"path","required":true,"type":"string","description":"Folder node ID. This is the folder-tree node ID, not a folder path or folder name. Root node is is \"root\""}],"responses":{"200":{"description":"OK","schema":{"type":"object","example":{"type":"FOLDER","name":"Example Folder","children":[{"type":"FOLDER","name":"Example Sub-Folder","id":"B456","children":[{"type":"RULE","name":"Sample Table","baseId":"xxx-yyy-zzz","version":1},{"type":"RULE","name":"Production Table","ruleAlias":"calcuation-rule"}]}]}}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}},"post":{"tags":["Folder"],"summary":"Create Folder","description":"Apply a folder structure under a folder node by node ID. Use POST /folder to target the root folder or a folder path.","operationId":"create_folder","x-mcp":{"name":"create_folder","title":"Create Folder","description":"Use when the user wants to create one or more folders under a folder selected by node ID. Use create_folder_by_path when the user provides a folder path.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"nodeId","in":"path","required":true,"type":"string","description":"Parent folder node ID where folders should be created. Use create_folder_by_path when you only know the folder path. Root node is is \"root\""},{"in":"body","name":"body","description":"Folder tree fragment to create under the selected folder node. Use folder names for new folder nodes.","required":true,"schema":{"$ref":"#/definitions/Child"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}},"put":{"tags":["Folder"],"summary":"Overwrite Folder Tree","description":"Overwrite the folder structure under a folder node by node ID. Use PUT /folder to target the root folder or a folder path.","operationId":"overwrite_folder_tree","x-mcp":{"name":"overwrite_folder_tree","title":"Overwrite Folder Tree","description":"Use when the user wants to replace the child folder structure under a folder selected by node ID. This is an overwrite operation; use create_folder for additive folder creation.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"nodeId","in":"path","required":true,"type":"string","description":"Parent folder node ID whose child structure should be overwritten. Root node is is \"root\""},{"in":"body","name":"body","description":"Folder tree fragment that should replace the selected folder node children. This overwrites the existing child structure under the target.","required":true,"schema":{"$ref":"#/definitions/Child"}}],"responses":{"200":{"description":"OK","schema":{"type":"object","example":{"type":"FOLDER","name":"Example Folder","children":[{"type":"FOLDER","name":"Example Sub-Folder","id":"B456","children":[{"type":"RULE","name":"Sample Table","baseId":"xxx-yyy-zzz","version":1},{"type":"RULE","name":"Production Table","ruleAlias":"calcuation-rule"}]}]}}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}},"delete":{"tags":["Folder"],"summary":"Delete Folder Tree","description":"Delete a folder selected by node ID, including descendant folders and rules. Use DELETE /folder to delete by path.","operationId":"delete_folder_tree","x-mcp":{"name":"delete_folder_tree","title":"Delete Folder Tree","description":"Use when the user explicitly wants to delete a folder selected by node ID, including descendant folders and rules. Use delete_folder_tree_by_path when the user provides a folder path.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"nodeId","in":"path","required":true,"type":"string","description":"Folder node ID to delete. This is the folder-tree node ID, not a folder path or folder name. Root node is is \"root\""},{"name":"deleteAll","in":"query","type":"boolean","description":"Confirmation to delete everything in Space"}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/folder/export":{"get":{"tags":["Folder"],"summary":"Export Root Folder","description":"Export the root folder with all descendant folders and rules.","operationId":"export_root_folder","x-mcp":{"name":"export_root_folder","title":"Export Root Folder","description":"Use when the user wants to export the entire root folder tree, including descendant folders and rules. Use export_folder when only a specific folder node should be exported.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}}},"/folder/export/{nodeId}":{"get":{"tags":["Folder"],"summary":"Export Folder","description":"Export a folder selected by node ID with all descendant folders and rules.","operationId":"export_folder","x-mcp":{"name":"export_folder","title":"Export Folder","description":"Use when the user wants to export a folder selected by node ID, including descendant folders and rules. Use export_root_folder for the whole root tree.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"nodeId","in":"path","required":true,"type":"string","description":"Folder node ID to export. Root node is is \"root\""}],"responses":{"200":{"description":"OK","schema":{"type":"object","example":{"export":{"exportType":"FOLDER","version":1,"createdAt":"2021-09-03T06:35:42.663Z","data":{"structure":{"type":"RULE","name":"My rule","id":"e72a23a2-0838-c52b-a284-baac28bc41b8","baseId":"e72a23a2-0838-c52b-a284-baac28bc41b8","ruleAlias":"Alias","version":1,"children":[]},"rules":[]}}}}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/folder/import":{"post":{"tags":["Folder"],"summary":"Import Folder At Root Or Path","description":"Import a folder tree and its rules under the root folder, or under the folder selected by the path query parameter. Folder paths must start with \"/\" and use folder names, not folder IDs (for example, /Client/Important).","operationId":"import_folder_by_path","x-mcp":{"name":"import_folder_by_path","title":"Import Folder By Path","description":"Use when the user wants to import an exported folder tree into root or into a folder selected by path. Omit path to import into root. If path is provided, it must start with \"/\" and use folder names, not folder IDs, for example /Client/Important.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"path","in":"query","required":false,"type":"string","description":"Folder path to import into. Must start with \"/\" and use folder names, not folder IDs. Example: /Client/Important. Omit to import into the root folder."},{"in":"body","name":"body","required":true,"description":"Exported folder payload to import. Use the folder export format, including folders and rules to recreate under the target.","schema":{"$ref":"#/definitions/ImportFolder"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}}},"/folder/import/{nodeId}":{"post":{"tags":["Folder"],"summary":"Import Folder","description":"Import a folder tree and its rules under a folder selected by node ID.","operationId":"import_folder","x-mcp":{"name":"import_folder","title":"Import Folder","description":"Use when the user wants to import an exported folder tree under a folder selected by node ID. Use import_folder_by_path when the user provides a folder path.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"nodeId","in":"path","required":true,"type":"string","description":"Folder node ID to import into. Root node is is \"root\""},{"in":"body","name":"body","description":"Exported folder payload to import. Use the folder export format, including folders and rules to recreate under the target node.","required":true,"schema":{"$ref":"#/definitions/ImportFolder"}}],"responses":{"200":{"description":"OK","schema":{"type":"object","example":{"folderNode":"4b261bbe2069"}}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/folder/find":{"post":{"tags":["Folder"],"summary":"Find Folder Node","description":"Find a folder or rule node by supported folder-tree attributes.","operationId":"find_folder_node","x-mcp":{"name":"find_folder_node","title":"Find Folder Node","description":"Use when the user needs to locate a folder or rule node in the folder tree by known metadata such as node id, name, baseId, alias, type, status, tags, or version. This is a lookup helper before move, rename, export, or delete operations.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"in":"body","name":"body","description":"Search criteria for a folder or rule node. Provide one or more known fields such as name, id, baseId, ruleAlias, ruleType, ruleStatus, tags, type, or version.","required":true,"schema":{"$ref":"#/definitions/FindFolderNodeRequest"}}],"responses":{"200":{"description":"OK","schema":{"type":"object","example":{"name":"Important table","baseId":"f30df343-e22d-4f39-d40f-ad5c946034f0","version":2,"ruleAlias":"big-production-table","ruleType":"decision-table","ruleStatus":"published","type":"RULE","tags":[],"description":"Sample Pricing Rule","parentId":"61a17c3d-2a32-f03a-1c41-64fd4f540d30","path":"/ClientA/production"}}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/rule/find":{"post":{"tags":["Folder"],"summary":"Find Rule Node","description":"Find a rule node in the folder tree by supported rule and folder-tree attributes.","operationId":"find_rule_node","x-mcp":{"name":"find_rule_node","title":"Find Rule Node","description":"Use when the user needs to locate rule nodes in the folder tree by rule metadata such as rule name, rule ID, baseId, alias, type, status, tags, or version. Use this to discover node IDs before moving or inspecting folder placement.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"in":"body","name":"body","description":"Search criteria for rule nodes. Provide one or more known rule fields such as name, id, baseId, ruleAlias, ruleType, ruleStatus, tags, or version.","required":true,"schema":{"$ref":"#/definitions/FindRuleNodeRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}}},"/folder/move":{"put":{"tags":["Folder"],"summary":"Move Folder Nodes","description":"Move folders or rules from their current parent to a new folder parent.","operationId":"move_folder_nodes","x-mcp":{"name":"move_folder_nodes","title":"Move Folder Nodes","description":"Use when the user wants to move folder nodes or rule nodes to another folder. The body must include nodes to move and either targetId or targetPath for the destination. Use targetPath with folder names, not folder IDs, when the user gives a path.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"position","in":"query","required":false,"type":"number","description":"Optional zero-based target position inside the destination folder."},{"in":"body","name":"body","description":"Move request. Include destination targetId or targetPath, plus nodes to move. Use targetPath with folder names, not folder IDs, when the destination is supplied as a path.","required":true,"schema":{"$ref":"#/definitions/MoveFolderNodesRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/rule/move":{"put":{"tags":["Folder"],"summary":"Move Rule Nodes","description":"Move rule nodes from their current parent to a new folder parent.","operationId":"move_rule_nodes","x-mcp":{"name":"move_rule_nodes","title":"Move Rule Nodes","description":"Use when the user wants to move rule nodes only. The body must include rule nodes and either targetId or targetPath for the destination. targetPath must start with \"/\" and use folder names, not folder IDs, for example /Client/Important.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"position","in":"query","required":false,"type":"number","description":"Optional zero-based target position inside the destination folder."},{"in":"body","name":"body","description":"Move request for rule nodes. Include destination targetId or targetPath, plus rule nodes to move. Each rule node should include baseId or id and version when selecting a specific version.","required":true,"schema":{"$ref":"#/definitions/MoveRuleNodesRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}}},"/folder/rename":{"patch":{"tags":["Folder"],"summary":"Rename Folder By Path","description":"Rename a folder selected by the path query parameter. Folder paths must start with \"/\" and use folder names, not folder IDs (for example, /Client/Important).","operationId":"rename_folder_by_path","x-mcp":{"name":"rename_folder_by_path","title":"Rename Folder By Path","description":"Use when the user wants to rename a folder selected by folder path. The path must start with \"/\" and use folder names, not folder IDs, for example /Client/Important. The body must include the new folder name.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"path","in":"query","required":true,"type":"string","description":"Folder path to rename. Must start with \"/\" and use folder names, not folder IDs. Example: /Client/Important."},{"name":"body","in":"body","required":true,"description":"New folder name.","schema":{"$ref":"#/definitions/RenameFolderRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}}},"/folder/rename/{nodeId}":{"patch":{"tags":["Folder"],"summary":"Rename Folder","description":"Rename a folder selected by node ID.","operationId":"rename_folder","x-mcp":{"name":"rename_folder","title":"Rename Folder","description":"Use when the user wants to rename a folder selected by node ID. The body must include the new folder name. Use rename_folder_by_path when the user provides a folder path.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"nodeId","in":"path","required":true,"type":"string","description":"Folder node ID to rename. This is the folder-tree node ID, not a folder path or folder name. Root node is is \"root\""},{"name":"body","in":"body","required":true,"description":"New name of folder","schema":{"$ref":"#/definitions/RenameFolderRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/tools/duplicates/{identifier}":{"get":{"tags":["Tools"],"summary":"Find Latest Rule Duplicates","description":"Find duplicate rows in the latest version of a decision table, regardless of publication status. Use find_rule_version_duplicates when checking a specific version.","operationId":"find_latest_rule_duplicates","x-mcp":{"name":"find_latest_rule_duplicates","title":"Find Latest Rule Duplicates","description":"Use when the user wants to detect duplicate rows in the current/latest version of a decision table identified by rule ID or alias. Checks the highest version regardless of publication status. Use find_rule_version_duplicates when the user provides a version.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"Rule ID or rule alias of the decision table to check. Do not use a folder path here."}],"responses":{"200":{"description":"OK","schema":{"type":"object","example":{}}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/tools/duplicates/{identifier}/{version}":{"get":{"tags":["Tools"],"summary":"Find Rule Version Duplicates","description":"Find duplicate rows in a specific version of a decision table.","operationId":"find_rule_version_duplicates","x-mcp":{"name":"find_rule_version_duplicates","title":"Find Rule Version Duplicates","description":"Use when the user wants to detect duplicate rows in one exact decision-table version and provides rule ID or alias plus version. Use find_latest_rule_duplicates when no version is provided.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"Rule ID or rule alias of the decision table to check. Do not use a folder path here."},{"name":"version","in":"path","required":true,"type":"string","description":"Decision table version number to check for duplicates."}],"responses":{"200":{"description":"OK","schema":{"type":"object","example":{}}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/tools/dependencies/{identifier}":{"get":{"tags":["Tools"],"summary":"Get Latest Rule Dependencies","description":"Get dependencies for the latest version of a rule, regardless of publication status. Use get_rule_version_dependencies for a specific version.","operationId":"get_latest_rule_dependencies","x-mcp":{"name":"get_latest_rule_dependencies","title":"Get Latest Rule Dependencies","description":"Use when the user wants dependency information for the current/latest version of a rule identified by rule ID or alias. Returns dependencies for the highest version regardless of publication status. Use get_rule_version_dependencies when the user provides a version.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"Rule ID or rule alias whose latest version dependencies should be returned. Do not use a folder path here."}],"responses":{"200":{"description":"OK","schema":{"type":"object","example":{}}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/tools/dependencies/{identifier}/{version}":{"get":{"tags":["Tools"],"summary":"Get Rule Version Dependencies","description":"Get dependencies for a specific rule version.","operationId":"get_rule_version_dependencies","x-mcp":{"name":"get_rule_version_dependencies","title":"Get Rule Version Dependencies","description":"Use when the user wants dependency information for one exact rule version and provides rule ID or alias plus version. Use get_latest_rule_dependencies when no version is provided.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"Rule ID or rule alias whose dependencies should be returned. Do not use a folder path here."},{"name":"version","in":"path","required":true,"type":"string","description":"Rule version number whose dependencies should be returned."}],"responses":{"200":{"description":"OK","schema":{"type":"object","example":{}}},"400":{"description":"Bad Request","schema":{"type":"string","example":"Error: This rule belongs to another user OR rule not found"}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication token missing"}}}}}}},"/rule-flow/{identifier}":{"get":{"deprecated":true,"tags":["Rule Flow"],"summary":"Get Latest Rule Flow","description":"Get the latest version of a rule flow by ID or alias, regardless of publication status.","operationId":"get_latest_rule_flow","x-mcp":{"name":"get_latest_rule_flow","title":"Get Latest Rule Flow","description":"Get the latest version of a rule flow by ID or alias, regardless of publication status.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"produces":["application/json"],"parameters":[{"name":"identifier","in":"path","description":"ID or alias of the rule flow.","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or identifier"}}}},"/rule-flow/{identifier}/{version}":{"get":{"deprecated":true,"tags":["Rule Flow"],"summary":"Get Rule Flow Version","description":"Get a specific rule-flow version by ID or alias.","operationId":"get_rule_flow_version","x-mcp":{"name":"get_rule_flow_version","title":"Get Rule Flow Version","description":"Get a specific rule-flow version by ID or alias.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"produces":["application/json"],"parameters":[{"name":"identifier","in":"path","description":"ID or alias of the rule flow.","required":true,"type":"string"},{"name":"version","in":"path","description":"Version of Rule Flow","required":true,"type":"number"}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or identifier"}}},"put":{"deprecated":true,"tags":["Rule Flow"],"summary":"Update Rule Flow Version","description":"Update a specific rule-flow version.","operationId":"update_rule_flow_version","x-mcp":{"name":"update_rule_flow_version","title":"Update Rule Flow Version","description":"Update a specific rule-flow version.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"identifier","in":"path","description":"ID or alias of the rule flow.","required":true,"type":"string"},{"name":"version","in":"path","description":"Version of Rule Flow","required":true,"type":"number"},{"in":"body","name":"body","description":"Rule Flow to update","required":true,"schema":{"$ref":"#/definitions/RuleFlow"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or identifier"},"406":{"description":"Wrong Rule Flow format"},"426":{"description":"Operation not allowed"}}},"delete":{"deprecated":true,"tags":["Rule Flow"],"summary":"Delete Rule Flow Version","description":"Delete a specific rule-flow version.","operationId":"delete_rule_flow_version","x-mcp":{"name":"delete_rule_flow_version","title":"Delete Rule Flow Version","description":"Delete a specific rule-flow version.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"produces":["application/json"],"parameters":[{"name":"identifier","in":"path","description":"ID or alias of the rule flow.","required":true,"type":"string"},{"name":"version","in":"path","description":"Version of Rule Flow","required":true,"type":"number"}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or identifier"}}}},"/rule-flow/status/{identifier}/{status}/{version}":{"put":{"deprecated":true,"tags":["Rule Flow"],"summary":"Update Rule Flow Version Status","description":"Set a specific rule-flow version to pending or published.","operationId":"update_rule_flow_version_status","x-mcp":{"name":"update_rule_flow_version_status","title":"Update Rule Flow Version Status","description":"Set a specific rule-flow version to pending or published.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"ID or alias of the rule flow."},{"name":"status","in":"path","required":true,"type":"string","enum":["published","pending"],"description":"Target status."},{"name":"version","in":"path","required":true,"type":"number","description":"Rule-flow version."}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"}}}},"/rule-flow":{"post":{"deprecated":true,"tags":["Rule Flow"],"summary":"Create Rule Flow","description":"Create a new rule flow in the authenticated space.","operationId":"create_rule_flow","x-mcp":{"name":"create_rule_flow","title":"Create Rule Flow","description":"Create a new rule flow in the authenticated space.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"Rule Flow to save","required":true,"schema":{"$ref":"#/definitions/RuleFlow"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid API key or identifier"},"406":{"description":"Wrong Rule Flow format"},"426":{"description":"Operation not allowed"}}}},"/rule-flow/export/{identifier}":{"get":{"tags":["Rule Flow"],"summary":"Export Latest Rule Flow","description":"Export the latest version of a rule flow with included rules, regardless of publication status.","operationId":"export_latest_rule_flow","x-mcp":{"name":"export_latest_rule_flow","title":"Export Latest Rule Flow","description":"Use when the user wants to export the current/latest version of a rule flow identified by ID or alias, including referenced rules. Returns an array suitable for import_rule_flow. Use export_rule_flow_version when the user provides a version.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"Unique rule flow ID or alias which is common to all versions."}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"type":"object"}}},"400":{"description":"Bad Request: Invalid API key or identifier","schema":{"example":{"error":{"message":"Invalid API key"}}}},"426":{"description":"Upgrade Required: Operation not allowed"}}}},"/rule-flow/export/{identifier}/{version}":{"get":{"tags":["Rule Flow"],"summary":"Export Rule Flow Version","description":"Export a specific rule-flow version with included rules.","operationId":"export_rule_flow_version","x-mcp":{"name":"export_rule_flow_version","title":"Export Rule Flow Version","description":"Use when the user wants to export one exact rule-flow version identified by ID or alias plus version, including referenced rules. Returns an array suitable for import_rule_flow.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"identifier","in":"path","required":true,"type":"string","description":"Unique rule flow ID or alias which is common to all versions."},{"name":"version","in":"path","required":true,"type":"number","description":"Version of the Rule Flow."}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"type":"object"}}},"400":{"description":"Bad Request: Invalid API key or identifier","schema":{"example":{"error":{"message":"Invalid API key"}}}},"426":{"description":"Upgrade Required: Operation not allowed"}}}},"/rule-flow/import":{"post":{"tags":["Rule Flow"],"summary":"Import Rule Flow","description":"Import an exported rule-flow payload. The request body is the array returned by export_rule_flow_version or export_latest_rule_flow; the first item must be the rule flow and the remaining items are referenced rules.","operationId":"import_rule_flow","x-mcp":{"name":"import_rule_flow","title":"Import Rule Flow","description":"Use when the user wants to import a rule-flow export array. The body must be the array returned by export_latest_rule_flow or export_rule_flow_version: first item is the rule flow, remaining items are referenced rules. Use new-version to create a new version of an existing rule flow, overwrite to replace an existing rule flow, version with overwrite/new-version when targeting a specific version, and folderId to place newly imported items into a folder node.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"new-version","in":"query","required":false,"type":"string","description":"ID or alias of the target Rule Flow for creating a new version"},{"name":"overwrite","in":"query","required":false,"type":"string","description":"ID or alias of the target Rule Flow for overwriting"},{"name":"version","in":"query","required":false,"type":"number","description":"Version of target Rule Flow"},{"name":"folderId","in":"query","required":false,"type":"string","description":"Folder node ID where newly imported rule flow items should be placed."},{"in":"body","name":"body","required":true,"description":"Exported rule-flow array returned by export_rule_flow_version or export_latest_rule_flow. The first item must be the rule flow and the remaining items are referenced rules.","schema":{"$ref":"#/definitions/ImportRuleFlowRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request: Invalid API key","schema":{"example":{"error":{"message":"Invalid API key"}}}},"406":{"description":"Not Acceptable: Wrong Rule Flow format"},"426":{"description":"Upgrade Required: Operation not allowed"}}}},"/statistics/owner":{"get":{"tags":["Statistics"],"summary":"Get Space Owner Statistics","description":"Get usage statistics for the owner of the authenticated space.","operationId":"get_space_owner_statistics","x-mcp":{"name":"get_space_owner_statistics","title":"Get Space Owner Statistics","description":"Use when the user asks for usage or quota statistics for the authenticated owner, such as current API calls, item usage, and plan limits.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[],"responses":{"200":{"description":"OK","schema":{"type":"object","example":{"apiCalls":{"currentUsage":32,"limit":15000000},"items":{"currentUsage":55,"limit":100}}}},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}}},"/test/{testSuiteId}":{"post":{"tags":["Test"],"summary":"Create Test","description":"Create a test in a test suite.","operationId":"create_test","x-mcp":{"name":"create_test","title":"Create Test","description":"Use when the user wants to add a new test case to an existing test suite. testSuiteId is the target suite ID. The body must include the test input and expected output for the rule under test.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"testSuiteId","in":"path","required":true,"type":"string","description":"The ID of the Test Suite"},{"name":"body","in":"body","description":"Test case to create. Include the test name, input data, and expected output for the rule under test.","required":true,"schema":{"$ref":"#/definitions/CreateTest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Test"}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}},"put":{"tags":["Test"],"summary":"Update Test","description":"Update a test in a test suite.","operationId":"update_test","x-mcp":{"name":"update_test","title":"Update Test","description":"Use when the user wants to edit an existing test case inside a test suite. testSuiteId is the suite that contains the test. The body must include the updated test object, including the test ID.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"testSuiteId","in":"path","required":true,"type":"string","description":"The ID of the Test Suite"},{"name":"body","in":"body","description":"Updated test case object. Include the test ID and changed fields such as name, input, expected output, or enabled state.","required":true,"schema":{"$ref":"#/definitions/Test"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Test"}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}}},"/test/move":{"put":{"tags":["Test"],"summary":"Move Tests","description":"Move tests to another test suite.","operationId":"move_tests","x-mcp":{"name":"move_tests","title":"Move Tests","description":"Use when the user wants to move existing tests to a new test suite for a target rule alias and version. The body requires ids, ruleAlias, ruleVersion, and name; name is the name for the newly created destination test suite.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"body","in":"body","description":"Move request for tests. Include ids of tests to move, target ruleAlias, target ruleVersion, and name for the newly created destination test suite.","required":true,"schema":{"$ref":"#/definitions/MoveTestsRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}}},"/test":{"delete":{"tags":["Test"],"summary":"Delete Tests","description":"Delete one or more tests.","operationId":"delete_tests","x-mcp":{"name":"delete_tests","title":"Delete Tests","description":"Use when the user explicitly wants to delete one or more tests. Provide ids as a comma-separated list of test IDs.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"ids","in":"query","required":true,"type":"string","description":"Comma-separated list of test IDs to delete"}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}}},"/testSuite/rule/{alias}/{version}":{"get":{"tags":["Test Suite"],"summary":"List Test Suites For Rule","description":"List test suites for a specific rule alias and version.","operationId":"list_test_suites_for_rule","x-mcp":{"name":"list_test_suites_for_rule","title":"List Test Suites For Rule","description":"Use when the user wants test suites for one rule and provides the rule alias plus rule version. The alias parameter is the ruleAlias, not rule ID or name.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"alias","in":"path","required":true,"type":"string","description":"The alias of the rule"},{"name":"version","in":"path","required":true,"type":"number","description":"The version of the rule"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/TestSuite"}}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}}},"/testSuite":{"get":{"tags":["Test Suite"],"summary":"List Test Suites","description":"List test suites in the authenticated space.","operationId":"list_test_suites","x-mcp":{"name":"list_test_suites","title":"List Test Suites","description":"Use when the user wants to list test suites in the authenticated space. Optionally pass filter as a JSON string, for example {\"ruleAlias\":\"my-rule\",\"ruleVersion\":1}, to narrow results.","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":[{"name":"filter","in":"query","required":false,"type":"string","description":"Optional JSON string representation of a TestSuiteFilter object. \n\nAllowed properties:\n* `ruleAlias` (string): The alias of the rule.\n* `ruleVersion` (number): The version of the rule.\n* `id` (string): The specific test suite ID.\n\nExample: `{\"ruleAlias\": \"my-rule\", \"ruleVersion\": 1}`."}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/RuleTestSuite"}}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}},"post":{"tags":["Test Suite"],"summary":"Create Test Suites","description":"Create one or more test suites.","operationId":"create_test_suites","x-mcp":{"name":"create_test_suites","title":"Create Test Suites","description":"Use when the user wants to create one or more test suites. The body must be an array of test suite objects, each tied to a ruleAlias and ruleVersion.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"body","in":"body","description":"Array of test suites to create. Each item should identify the target rule by ruleAlias and ruleVersion and include suite metadata such as name and tests when applicable.","required":true,"schema":{"$ref":"#/definitions/CreateTestSuitesRequest"}}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/TestSuite"}}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}},"put":{"tags":["Test Suite"],"summary":"Update Test Suite","description":"Update a test suite.","operationId":"update_test_suite","x-mcp":{"name":"update_test_suite","title":"Update Test Suite","description":"Use when the user wants to edit an existing test suite. The body must include the test suite ID and updated suite fields.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"body","in":"body","description":"Updated test suite object. Include the test suite ID and changed fields such as name, tests, or rule target.","required":true,"schema":{"$ref":"#/definitions/UpdateTestSuite"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/TestSuite"}},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}},"delete":{"tags":["Test Suite"],"summary":"Delete Test Suites","description":"Delete one or more test suites.","operationId":"delete_test_suites","x-mcp":{"name":"delete_test_suites","title":"Delete Test Suites","description":"Use when the user explicitly wants to delete one or more test suites. Provide ids as a comma-separated list of test suite IDs.","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"ids","in":"query","required":true,"type":"string","description":"Comma-separated list of test suite IDs to delete"}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}}},"/testSuite/move":{"put":{"tags":["Test Suite"],"summary":"Move Test Suites","description":"Move test suites to another rule alias and version.","operationId":"move_test_suites","x-mcp":{"name":"move_test_suites","title":"Move Test Suites","description":"Use when the user wants to move existing test suites to another rule target. The body must include test suite ids, target ruleAlias, and target ruleVersion.","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":[{"name":"body","in":"body","description":"Move request for test suites. Include ids of suites to move, target ruleAlias, and target ruleVersion.","required":true,"schema":{"$ref":"#/definitions/MoveTestSuitesRequest"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized","schema":{"type":"object","example":{"error":{"message":"Authentication bearer token missing"}}}}}}}},"definitions":{"Child":{"type":"object","properties":{"type":{"type":"string","enum":["FOLDER","RULE","ROOT"]},"name":{"type":"string"},"id":{"type":"string"},"baseId":{"type":"string"},"ruleAlias":{"type":"string"},"version":{"type":"number"},"children":{"type":"array","items":{"$ref":"#/definitions/Child"}}},"example":{"type":"FOLDER","name":"Example Folder","children":[{"type":"FOLDER","name":"Example Sub-Folder","id":"B456","children":[{"type":"RULE","name":"Sample Table","baseId":"xxx-yyy-zzz","version":1}]}]}},"Rule":{"type":"object","required":["name","description","inputSchema","outputSchema","type","status"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"inputSchema":{"type":"object"},"outputSchema":{"type":"object"},"type":{"type":"string","description":"Type of the rule.","enum":["decision-table","complex-rule","composition","decision-tree","workflow","integration-flow","lookup-table","ai-rule"]},"decisionTable":{"$ref":"#/definitions/DecisionTable"},"script":{"type":"string"},"status":{"type":"string","enum":["published","pending"]},"tags":{"type":"array","items":{"type":"string"}},"lastUpdate":{"type":"string","format":"date-time"},"createdIn":{"type":"string","format":"date-time"},"baseId":{"type":"string"},"ruleId":{"type":"string","description":"Rule ID for rule resources. Rule flows use compositionId instead."},"ruleAlias":{"type":"string"},"version":{"type":"number"},"locked":{"type":"boolean"},"previousBaseId":{"type":"string","description":"Previous base ID used during imports, especially rule-flow imports."},"userVariables":{"type":"array","items":{"$ref":"#/definitions/UserVariable"}},"auditLog":{"$ref":"#/definitions/AuditLog"},"nodes":{"type":"array","items":{"$ref":"#/definitions/TreeNode"}},"workflowData":{"type":"object","description":"Workflow or integration-flow data model."},"visualData":{"type":"object","description":"Visual editor data for workflow or integration-flow rules."},"columns":{"type":"array","description":"Lookup-table columns when type is lookup-table.","items":{"$ref":"#/definitions/LookupTableColumn"}},"primaryKeyColumn":{"type":"string","description":"Lookup-table primary key column alias when type is lookup-table."},"data":{"description":"Lookup-table row data when type is lookup-table, or AI rule configuration when type is ai-rule."},"metadata":{"$ref":"#/definitions/LookupTableMetadata"}}},"SpaceItem":{"type":"object","description":"Rule or rule-flow item returned by space and tag listing endpoints.","properties":{"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","description":"Concrete rule or rule-flow type."},"status":{"type":"string","enum":["published","pending"]},"ruleId":{"type":"string","description":"Rule ID when the item is a rule."},"compositionId":{"type":"string","description":"Composition ID when the item is a rule flow."},"baseId":{"type":"string"},"ruleAlias":{"type":"string"},"version":{"type":"number"},"tags":{"type":"array","items":{"type":"string"}},"createdIn":{"type":"string","format":"date-time"},"lastUpdate":{"type":"string","format":"date-time"}}},"UserVariable":{"type":"object","properties":{"name":{"type":"string"},"value":{},"saved":{"type":"boolean"},"editMode":{"type":"boolean"}}},"AuditLog":{"type":"object","properties":{"active":{"type":"boolean"},"debug":{"type":"object","properties":{"active":{"type":"boolean"}}},"ttl":{"type":"number"}}},"DecisionTable":{"type":"object","required":["columns","rows"],"properties":{"columns":{"type":"array","items":{"$ref":"#/definitions/Column"}},"rows":{"type":"array","items":{"$ref":"#/definitions/Row"}}}},"TreeNode":{"type":"object","required":["id","type","nodes"],"properties":{"id":{"type":"string"},"type":{"type":"string","description":"Type of the node.","enum":["if","then","result","else","condition","logic_group","logic_or","root"]},"operandText":{"type":"string","description":"Node text."},"nodes":{"type":"array","items":{"$ref":"#/definitions/TreeNode"}},"outputScalarValue":{"$ref":"#/definitions/OutputScalarValue"},"modelVariablePath":{"type":"string"},"scalarCondition":{"$ref":"#/definitions/ScalarCondition"}}},"Column":{"type":"object","required":["columnId","alias","type"],"properties":{"columnId":{"type":"string"},"alias":{"type":"string","description":"Stable column alias used by validations and lookup references."},"type":{"description":"If input, condition is required. If output, columnOutput is required. If calc, calculation is required.","type":"string","enum":["input","output","calc"]},"condition":{"$ref":"#/definitions/Condition"},"calculation":{"$ref":"#/definitions/Calculation"},"columnOutput":{"$ref":"#/definitions/ColumnOutput"},"validValues":{"type":"array","items":{"$ref":"#/definitions/ValidValue"}}}},"Row":{"type":"object","required":["cells","active"],"properties":{"cells":{"type":"array","items":{"$ref":"#/definitions/Cell"}},"active":{"type":"boolean"}}},"Cell":{"type":"object","properties":{"column":{"type":"string","description":"Id of specific Column"},"type":{"type":"string","description":"If input, then scalarCondition is required. If output, then outputScalarValue is required.","enum":["input","output","calc"]},"scalarCondition":{"$ref":"#/definitions/ScalarCondition"},"outputScalarValue":{"$ref":"#/definitions/OutputScalarValue"}}},"Condition":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"inputVariable":{"type":"string"},"definition":{"$ref":"#/definitions/ColumnConditionDefinition"}}},"ColumnConditionDefinition":{"type":"object","required":["type","content"],"properties":{"type":{"type":"string","enum":["INPUT_VARIABLE","CALC_VARIABLE","RULE_VARIABLE","CONSTANT","EMPTY"]},"content":{"description":"Path, variable name, or constant value used by the condition definition."}}},"Calculation":{"type":"object","required":["variable","name"],"properties":{"variable":{"type":"string"},"name":{"type":"string"}}},"ColumnOutput":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"outputVariable":{"type":"string"}}},"ScalarCondition":{"type":"object","properties":{"operator":{"type":"string"},"type":{"type":"string","enum":["general","date","function"]},"value":{"description":"Condition value. Range and list operators such as between, IN, and NOT IN use an array of strings; scalar operators use a string."},"stringValue":{"type":"string","description":"String representation used for function conditions."}}},"OutputScalarValue":{"type":"object","properties":{"value":{"description":"Output value. Function outputs may use an object tree; common outputs usually use a scalar value."},"stringValue":{"type":"string","description":"String representation used for function outputs."},"type":{"type":"string","enum":["common","function"]}}},"ValidValue":{"type":"object","properties":{"type":{"type":"string","enum":["GENERAL","DATE"]},"value":{"type":"object","properties":{"display":{"type":"string"},"value":{"type":"string"},"date":{"type":"string"},"time":{"type":"string"},"timezone":{"type":"string"}}}}},"Tags":{"type":"array","items":{"$ref":"#/definitions/Tag"},"example":[{"tagName":"yourTagName","color":"green"}]},"Tag":{"type":"object","required":["tagName"],"properties":{"tagName":{"type":"string"},"color":{"type":"string","enum":["default","red","gray","yellow","white","violet","green"]}}},"RuleLockRequest":{"type":"object","required":["locked"],"properties":{"locked":{"type":"boolean","description":"Set true to lock the rule version, or false to unlock it."}},"example":{"locked":true}},"RenameFolderRequest":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"New folder name."}},"example":{"name":"Renamed Folder"}},"LookupTableColumn":{"type":"object","required":["name","order","alias"],"properties":{"name":{"type":"string"},"order":{"type":"number"},"alias":{"type":"string","description":"Stable column alias used in lookup-table data rows."},"isPrimaryKey":{"type":"boolean"}}},"LookupTableMetadata":{"type":"object","properties":{"rowCount":{"type":"number"},"sizeBytes":{"type":"number"}}},"RuleFlow":{"type":"object","required":["name","inputSchema","description","outputSchema","type","status"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"inputSchema":{"type":"object"},"outputSchema":{"type":"object"},"type":{"type":"string"},"visualEditorData":{"type":"object","description":"Graphics model of Rule Flow"},"dataTree":{"type":"object","description":"Data model of Rule Flow"},"status":{"type":"string","enum":["published","pending"]},"zoomOptions":{"type":"object","properties":{"canvas_x":{"type":"number"},"canvas_y":{"type":"number"},"pos_x":{"type":"number"},"pos_y":{"type":"number"},"zoom":{"type":"number"}}},"compositionId":{"type":"string"},"baseId":{"type":"string"},"ruleAlias":{"type":"string"},"version":{"type":"number"},"lastUpdate":{"type":"string","format":"date-time"},"createdIn":{"type":"string","format":"date-time"},"tags":{"type":"array","items":{"type":"string"}},"auditLog":{"$ref":"#/definitions/AuditLog"},"locked":{"type":"boolean"},"rules":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"number"}}}}}},"ImportFolder":{"type":"object","properties":{"export":{"type":"object","properties":{"exportType":{"type":"string"},"version":{"type":"number"},"createdAt":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"structure":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"children":{"type":"array","items":{"type":"object"}}}},"rules":{"type":"array","items":{"type":"object"}}}}}}}},"CreateTest":{"type":"object","required":["name","strategy","input","expectedOutput","ignoredOutputs"],"properties":{"name":{"type":"string","maxLength":80},"strategy":{"type":"string","enum":["STANDARD","ARRAY","FIRST_MATCH","EVALUATE_ALL"],"description":"SolverStrategyEnum value"},"input":{"description":"Input data for the rule"},"expectedOutput":{"description":"Expected output from the rule. Can be an object or an array, depending on the solver response."},"ignoredOutputs":{"type":"array","items":{"type":"string"},"description":"List of object properties to ignore in the output comparison"}}},"Test":{"type":"object","required":["name","strategy","input","expectedOutput","ignoredOutputs"],"properties":{"id":{"type":"string"},"name":{"type":"string","maxLength":80},"strategy":{"type":"string","enum":["STANDARD","ARRAY","FIRST_MATCH","EVALUATE_ALL"]},"input":{"description":"Input data for the rule"},"expectedOutput":{"description":"Expected output from the rule. Can be an object or an array."},"ignoredOutputs":{"type":"array","items":{"type":"string"}},"sortedInputHash":{"type":"string"},"lastRunAt":{"description":"Last run timestamp, or null when the test has not run."},"createdAt":{"description":"Creation timestamp."},"updatedAt":{"description":"Last update timestamp, or null when not available."}}},"CreateTestSuite":{"type":"object","required":["spaceId","ruleAlias","ruleVersion","name","tests"],"properties":{"spaceId":{"type":"string"},"ruleAlias":{"type":"string"},"ruleVersion":{"type":"number"},"name":{"type":"string","maxLength":80},"tests":{"type":"array","items":{"$ref":"#/definitions/Test"}}}},"UpdateTestSuite":{"type":"object","required":["id","spaceId","ruleAlias","ruleVersion","name","tests","createdAt"],"properties":{"id":{"type":"string"},"userId":{"type":"string"},"spaceId":{"type":"string"},"ruleAlias":{"type":"string"},"ruleVersion":{"type":"number"},"name":{"type":"string","maxLength":80},"createdAt":{"description":"Creation timestamp, or null when not available."},"tests":{"type":"array","items":{"$ref":"#/definitions/Test"},"description":"Array of tests. Existing tests must include 'id' and 'createdAt'. New tests being added during the update can omit these."}}},"TestSuite":{"type":"object","required":["id","spaceId","ruleAlias","ruleVersion","name","tests","createdAt"],"properties":{"id":{"type":"string"},"userId":{"type":"string"},"spaceId":{"type":"string"},"ruleAlias":{"type":"string"},"ruleVersion":{"type":"number"},"name":{"type":"string","maxLength":80},"createdAt":{"description":"Creation timestamp, or null when not available."},"tests":{"type":"array","items":{"$ref":"#/definitions/Test"}}}},"RuleTestSuite":{"type":"object","properties":{"baseId":{"type":"string"},"baseType":{"type":"string","enum":["decision-table","complex-rule","composition","decision-tree","workflow","integration-flow","lookup-table","ai-rule"]},"status":{"type":"string","enum":["published","pending"]},"ruleName":{"type":"string"},"ruleAlias":{"type":"string"},"ruleVersion":{"type":"number"},"suites":{"type":"array","items":{"$ref":"#/definitions/TestSuite"}}}},"TestExecution":{"type":"object","properties":{"id":{"type":"string"},"testId":{"type":"string"},"name":{"type":"string"},"strategy":{"type":"string","enum":["STANDARD","ARRAY","FIRST_MATCH","EVALUATE_ALL"]},"input":{"description":"Input data for the rule"},"expectedOutput":{"description":"Expected output from the rule. Can be an object or an array."},"ignoredOutputs":{"type":"array","items":{"type":"string"}},"sortedInputHash":{"type":"string"},"lastRunAt":{"description":"Last run timestamp, or null when the test has not run."},"updatedAt":{"description":"Last update timestamp, or null when not available."},"resultStatus":{"type":"string","enum":["PASSED","FAILED","ERROR"]},"result":{"description":"Actual solver result. Can be an object or an array."}}},"MoveTestsRequest":{"type":"object","required":["ids","ruleAlias","ruleVersion","name"],"properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Array of test IDs to move."},"ruleAlias":{"type":"string","description":"Target rule alias."},"ruleVersion":{"type":"number","description":"Target rule version."},"name":{"type":"string","description":"Name for the newly created destination test suite."}}},"MoveTestSuitesRequest":{"type":"object","required":["ids","ruleAlias","ruleVersion"],"properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Array of test suite IDs to move."},"ruleAlias":{"type":"string","description":"Target rule alias."},"ruleVersion":{"type":"number","description":"Target rule version."}}},"CreateSpaceRequest":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Name of the new space."}},"example":{"name":"Production"}},"FindFolderNodeRequest":{"type":"object","properties":{"name":{"type":"string","description":"Optional folder or rule name."},"id":{"type":"string","description":"Optional folder-tree node ID."},"baseId":{"type":"string","description":"Optional rule base ID."},"ruleAlias":{"type":"string","description":"Optional rule alias."},"ruleType":{"type":"string","enum":["decision-table","complex-rule","composition","decision-tree"],"description":"Rule type for rule nodes."},"tags":{"type":"array","items":{"type":"string"},"description":"Optional list of tags."},"ruleStatus":{"type":"string","enum":["published","pending"],"description":"Current status of the rule."},"type":{"type":"string","enum":["FOLDER","RULE","ROOT"],"description":"Folder-tree node type."},"version":{"type":"number","description":"Rule version number."}},"example":{"name":"Example Rule","ruleAlias":"my-rule","ruleStatus":"published","type":"RULE","version":1}},"FindRuleNodeRequest":{"type":"object","properties":{"name":{"type":"string"},"id":{"type":"string"},"baseId":{"type":"string"},"ruleAlias":{"type":"string"},"ruleType":{"type":"string","enum":["decision-table","complex-rule","composition","decision-tree"]},"ruleStatus":{"type":"string","enum":["published","pending"]},"tags":{"type":"array","items":{"type":"string"}},"version":{"type":"number"}},"example":{"ruleAlias":"my-rule","ruleStatus":"published","version":1}},"MoveFolderNodesRequest":{"type":"object","properties":{"targetId":{"type":"string","description":"Destination folder node ID. Use either targetId or targetPath."},"targetPath":{"type":"string","description":"Destination folder path. Must start with \"/\" and use folder names, not folder IDs. Use either targetPath or targetId."},"nodes":{"type":"array","description":"Folder or rule nodes to move.","items":{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["FOLDER","RULE"]},"id":{"type":"string","description":"Folder-tree node ID."},"baseId":{"type":"string","description":"Rule base ID."},"ruleAlias":{"type":"string","description":"Rule alias."},"version":{"type":"number","description":"Optional rule version when moving a rule node."}}}}},"example":{"targetPath":"/folderA","nodes":[{"type":"FOLDER","id":"folder-001"},{"type":"RULE","baseId":"base-002","version":1}]}},"MoveRuleNodesRequest":{"type":"object","required":["nodes"],"properties":{"targetId":{"type":"string","description":"Destination folder node ID. Use either targetId or targetPath."},"targetPath":{"type":"string","description":"Destination folder path. Must start with \"/\" and use folder names, not folder IDs. Use either targetPath or targetId."},"nodes":{"type":"array","description":"Rule nodes to move.","items":{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["RULE"]},"baseId":{"type":"string","description":"Rule base ID. Use either baseId or ruleAlias."},"ruleAlias":{"type":"string","description":"Rule alias. Use either ruleAlias or baseId."},"version":{"type":"number","description":"Optional rule version."}}}}},"example":{"targetPath":"/Production","nodes":[{"type":"RULE","ruleAlias":"pricing-rule","version":1}]}},"ImportRuleFlowRequest":{"type":"array","description":"Exported rule-flow array. First item is the rule flow, followed by referenced rules.","items":{"type":"object"}},"CreateTestSuitesRequest":{"type":"array","items":{"$ref":"#/definitions/CreateTestSuite"}},"TestSuiteRun":{"type":"object","properties":{"id":{"type":"string"},"testSuiteId":{"type":"string"},"spaceId":{"type":"string"},"ruleAlias":{"type":"string"},"ruleVersion":{"type":"number"},"name":{"type":"string"},"status":{"type":"string","enum":["WAITING","RUNNING","COMPLETED","CANCELED","ERROR"]},"tests":{"type":"array","items":{"$ref":"#/definitions/TestExecution"}},"jobId":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"claimedAt":{"type":"string","format":"date-time"},"endedAt":{"type":"string","format":"date-time"}}}}}