curl --request POST \
--url https://api.sigmamind.ai/v1/qa-rules \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"ruleName": "Tone & Professionalism Check",
"evaluationCriteria": "Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.",
"agentIds": [
"D5D0p7TUs66TTAEAx"
],
"ruleDescription": "Ensures agents maintain a professional and empathetic tone throughout the conversation.",
"expectedValue": true
}
'import requests
url = "https://api.sigmamind.ai/v1/qa-rules"
payload = {
"ruleName": "Tone & Professionalism Check",
"evaluationCriteria": "Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.",
"agentIds": ["D5D0p7TUs66TTAEAx"],
"ruleDescription": "Ensures agents maintain a professional and empathetic tone throughout the conversation.",
"expectedValue": True
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ruleName: 'Tone & Professionalism Check',
evaluationCriteria: 'Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.',
agentIds: ['D5D0p7TUs66TTAEAx'],
ruleDescription: 'Ensures agents maintain a professional and empathetic tone throughout the conversation.',
expectedValue: true
})
};
fetch('https://api.sigmamind.ai/v1/qa-rules', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sigmamind.ai/v1/qa-rules",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'ruleName' => 'Tone & Professionalism Check',
'evaluationCriteria' => 'Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.',
'agentIds' => [
'D5D0p7TUs66TTAEAx'
],
'ruleDescription' => 'Ensures agents maintain a professional and empathetic tone throughout the conversation.',
'expectedValue' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sigmamind.ai/v1/qa-rules"
payload := strings.NewReader("{\n \"ruleName\": \"Tone & Professionalism Check\",\n \"evaluationCriteria\": \"Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.\",\n \"agentIds\": [\n \"D5D0p7TUs66TTAEAx\"\n ],\n \"ruleDescription\": \"Ensures agents maintain a professional and empathetic tone throughout the conversation.\",\n \"expectedValue\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sigmamind.ai/v1/qa-rules")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"ruleName\": \"Tone & Professionalism Check\",\n \"evaluationCriteria\": \"Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.\",\n \"agentIds\": [\n \"D5D0p7TUs66TTAEAx\"\n ],\n \"ruleDescription\": \"Ensures agents maintain a professional and empathetic tone throughout the conversation.\",\n \"expectedValue\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sigmamind.ai/v1/qa-rules")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"ruleName\": \"Tone & Professionalism Check\",\n \"evaluationCriteria\": \"Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.\",\n \"agentIds\": [\n \"D5D0p7TUs66TTAEAx\"\n ],\n \"ruleDescription\": \"Ensures agents maintain a professional and empathetic tone throughout the conversation.\",\n \"expectedValue\": true\n}"
response = http.request(request)
puts response.read_body{
"qaRuleId": "rule_YYdKgw1masomMfe8",
"workspaceId": "org_V6eZ2zg8ziDx5pft",
"ruleName": "Tone & Professionalism Check",
"ruleDescription": "Ensures agents maintain a professional and empathetic tone throughout the conversation.",
"agents": [
{
"name": "New AI Agent",
"agentId": "agent_D5D0p7TUs66TTAEAx",
"status": "Live"
}
],
"evaluationCriteria": "Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.",
"expectedValue": true
}{
"error": "Bad Request",
"message": "Invalid request parameters",
"path": "/v1/qa-rules",
"status": 400,
"timestamp": "2026-05-06T07:47:11.209Z"
}{
"error": "Unauthorized",
"message": "X-API-Key is missing or invalid",
"path": "/v1/qa-rules",
"status": 401,
"timestamp": "2026-05-06T07:47:11.209Z"
}{
"error": "Forbidden",
"message": "Access denied for this resource",
"path": "/v1/qa-rules",
"status": 403,
"timestamp": "2026-05-06T07:47:11.209Z"
}{
"error": "Not Found",
"message": "The requested resource was not found",
"path": "/v1/qa-rules",
"status": 404,
"timestamp": "2026-05-06T07:47:11.209Z"
}{
"error": "Internal Server Error",
"message": "Unexpected server error",
"path": "/v1/qa-rules",
"status": 500,
"timestamp": "2026-05-06T07:47:11.209Z"
}Create QA Rule
Creates a new QA rule with the specified configuration. Define the rule’s evaluation criteria and expected result. Returns the created QA rule, including its qaRuleId for subsequent get, update, delete, and issue-listing calls.
curl --request POST \
--url https://api.sigmamind.ai/v1/qa-rules \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"ruleName": "Tone & Professionalism Check",
"evaluationCriteria": "Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.",
"agentIds": [
"D5D0p7TUs66TTAEAx"
],
"ruleDescription": "Ensures agents maintain a professional and empathetic tone throughout the conversation.",
"expectedValue": true
}
'import requests
url = "https://api.sigmamind.ai/v1/qa-rules"
payload = {
"ruleName": "Tone & Professionalism Check",
"evaluationCriteria": "Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.",
"agentIds": ["D5D0p7TUs66TTAEAx"],
"ruleDescription": "Ensures agents maintain a professional and empathetic tone throughout the conversation.",
"expectedValue": True
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ruleName: 'Tone & Professionalism Check',
evaluationCriteria: 'Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.',
agentIds: ['D5D0p7TUs66TTAEAx'],
ruleDescription: 'Ensures agents maintain a professional and empathetic tone throughout the conversation.',
expectedValue: true
})
};
fetch('https://api.sigmamind.ai/v1/qa-rules', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sigmamind.ai/v1/qa-rules",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'ruleName' => 'Tone & Professionalism Check',
'evaluationCriteria' => 'Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.',
'agentIds' => [
'D5D0p7TUs66TTAEAx'
],
'ruleDescription' => 'Ensures agents maintain a professional and empathetic tone throughout the conversation.',
'expectedValue' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sigmamind.ai/v1/qa-rules"
payload := strings.NewReader("{\n \"ruleName\": \"Tone & Professionalism Check\",\n \"evaluationCriteria\": \"Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.\",\n \"agentIds\": [\n \"D5D0p7TUs66TTAEAx\"\n ],\n \"ruleDescription\": \"Ensures agents maintain a professional and empathetic tone throughout the conversation.\",\n \"expectedValue\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sigmamind.ai/v1/qa-rules")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"ruleName\": \"Tone & Professionalism Check\",\n \"evaluationCriteria\": \"Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.\",\n \"agentIds\": [\n \"D5D0p7TUs66TTAEAx\"\n ],\n \"ruleDescription\": \"Ensures agents maintain a professional and empathetic tone throughout the conversation.\",\n \"expectedValue\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sigmamind.ai/v1/qa-rules")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"ruleName\": \"Tone & Professionalism Check\",\n \"evaluationCriteria\": \"Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.\",\n \"agentIds\": [\n \"D5D0p7TUs66TTAEAx\"\n ],\n \"ruleDescription\": \"Ensures agents maintain a professional and empathetic tone throughout the conversation.\",\n \"expectedValue\": true\n}"
response = http.request(request)
puts response.read_body{
"qaRuleId": "rule_YYdKgw1masomMfe8",
"workspaceId": "org_V6eZ2zg8ziDx5pft",
"ruleName": "Tone & Professionalism Check",
"ruleDescription": "Ensures agents maintain a professional and empathetic tone throughout the conversation.",
"agents": [
{
"name": "New AI Agent",
"agentId": "agent_D5D0p7TUs66TTAEAx",
"status": "Live"
}
],
"evaluationCriteria": "Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary.",
"expectedValue": true
}{
"error": "Bad Request",
"message": "Invalid request parameters",
"path": "/v1/qa-rules",
"status": 400,
"timestamp": "2026-05-06T07:47:11.209Z"
}{
"error": "Unauthorized",
"message": "X-API-Key is missing or invalid",
"path": "/v1/qa-rules",
"status": 401,
"timestamp": "2026-05-06T07:47:11.209Z"
}{
"error": "Forbidden",
"message": "Access denied for this resource",
"path": "/v1/qa-rules",
"status": 403,
"timestamp": "2026-05-06T07:47:11.209Z"
}{
"error": "Not Found",
"message": "The requested resource was not found",
"path": "/v1/qa-rules",
"status": 404,
"timestamp": "2026-05-06T07:47:11.209Z"
}{
"error": "Internal Server Error",
"message": "Unexpected server error",
"path": "/v1/qa-rules",
"status": 500,
"timestamp": "2026-05-06T07:47:11.209Z"
}Authorizations
Authenticate every request by passing your API key in the X-API-Key header. To get your key, go to Dashboard → API Keys and create or copy your Production API key.
Body
The name of the QA rule, used to identify it in rule lists and evaluation reports.
"Tone & Professionalism Check"
The specific criteria used to evaluate agent responses against this rule.
"Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary."
List of agent Ids on which QA rule would apply
["D5D0p7TUs66TTAEAx"]
A brief explanation of what this QA rule evaluates and its intended purpose.
"Ensures agents maintain a professional and empathetic tone throughout the conversation."
The expected outcome of the evaluation criteria that determines a successful QA result. Set to true if the evaluation criteria returning true should be treated as a Success, or false if the evaluation criteria returning true should be treated as a Fail. Default is true.
true, false true
Response
OK
The unique identifier of the QA rule.
"rule_YYdKgw1masomMfe8"
The unique identifier of the workspace this QA rule belongs to.
"org_V6eZ2zg8ziDx5pft"
The name of the QA rule, used to identify it in rule lists and evaluation reports.
"Tone & Professionalism Check"
A brief explanation of what this QA rule evaluates and its intended purpose.
"Ensures agents maintain a professional and empathetic tone throughout the conversation."
Show child attributes
Show child attributes
The specific criteria or rubric used to evaluate agent responses against this rule.
"Evaluate whether agent greeted the customer by name, avoided interrupting, and closed with a resolution summary."
The expected evaluation result that determines whether the QA rule is satisfied. When the evaluation criteria returns a result matching this expected value, the interaction is marked as a Success; otherwise it is marked as a Fail.
true