curl --request POST \
--url https://{subdomain}.mihu.ai/api/v1/qa-agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"name": "Support QA Agent",
"description": "Evaluates support conversations for empathy and compliance",
"evaluates_agent_type": "human",
"language": "English",
"is_default": true,
"skills": [
{
"name": "Greeting",
"weight": 15,
"description": "Professional opening and introduction"
},
{
"name": "Empathy",
"weight": 20,
"description": "Understanding and acknowledging customer concerns",
"positive_items": [
{
"name": "Used the customer's name",
"points": 5
}
],
"penalty_items": [
{
"name": "Interrupted the customer",
"penalty_points": -5
}
]
},
{
"name": "Compliance",
"weight": 25,
"description": "Adherence to regulatory and company policies"
},
{
"name": "Resolution",
"weight": 25,
"description": "Effective problem solving and issue resolution"
},
{
"name": "Sales",
"weight": 15,
"description": "Upselling and cross-selling opportunities"
}
]
}
EOFimport requests
url = "https://{subdomain}.mihu.ai/api/v1/qa-agents"
payload = {
"name": "Support QA Agent",
"description": "Evaluates support conversations for empathy and compliance",
"evaluates_agent_type": "human",
"language": "English",
"is_default": True,
"skills": [
{
"name": "Greeting",
"weight": 15,
"description": "Professional opening and introduction"
},
{
"name": "Empathy",
"weight": 20,
"description": "Understanding and acknowledging customer concerns",
"positive_items": [
{
"name": "Used the customer's name",
"points": 5
}
],
"penalty_items": [
{
"name": "Interrupted the customer",
"penalty_points": -5
}
]
},
{
"name": "Compliance",
"weight": 25,
"description": "Adherence to regulatory and company policies"
},
{
"name": "Resolution",
"weight": 25,
"description": "Effective problem solving and issue resolution"
},
{
"name": "Sales",
"weight": 15,
"description": "Upselling and cross-selling opportunities"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Support QA Agent',
description: 'Evaluates support conversations for empathy and compliance',
evaluates_agent_type: 'human',
language: 'English',
is_default: true,
skills: [
{
name: 'Greeting',
weight: 15,
description: 'Professional opening and introduction'
},
{
name: 'Empathy',
weight: 20,
description: 'Understanding and acknowledging customer concerns',
positive_items: [{name: 'Used the customer\'s name', points: 5}],
penalty_items: [{name: 'Interrupted the customer', penalty_points: -5}]
},
{
name: 'Compliance',
weight: 25,
description: 'Adherence to regulatory and company policies'
},
{
name: 'Resolution',
weight: 25,
description: 'Effective problem solving and issue resolution'
},
{
name: 'Sales',
weight: 15,
description: 'Upselling and cross-selling opportunities'
}
]
})
};
fetch('https://{subdomain}.mihu.ai/api/v1/qa-agents', 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://{subdomain}.mihu.ai/api/v1/qa-agents",
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([
'name' => 'Support QA Agent',
'description' => 'Evaluates support conversations for empathy and compliance',
'evaluates_agent_type' => 'human',
'language' => 'English',
'is_default' => true,
'skills' => [
[
'name' => 'Greeting',
'weight' => 15,
'description' => 'Professional opening and introduction'
],
[
'name' => 'Empathy',
'weight' => 20,
'description' => 'Understanding and acknowledging customer concerns',
'positive_items' => [
[
'name' => 'Used the customer\'s name',
'points' => 5
]
],
'penalty_items' => [
[
'name' => 'Interrupted the customer',
'penalty_points' => -5
]
]
],
[
'name' => 'Compliance',
'weight' => 25,
'description' => 'Adherence to regulatory and company policies'
],
[
'name' => 'Resolution',
'weight' => 25,
'description' => 'Effective problem solving and issue resolution'
],
[
'name' => 'Sales',
'weight' => 15,
'description' => 'Upselling and cross-selling opportunities'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://{subdomain}.mihu.ai/api/v1/qa-agents"
payload := strings.NewReader("{\n \"name\": \"Support QA Agent\",\n \"description\": \"Evaluates support conversations for empathy and compliance\",\n \"evaluates_agent_type\": \"human\",\n \"language\": \"English\",\n \"is_default\": true,\n \"skills\": [\n {\n \"name\": \"Greeting\",\n \"weight\": 15,\n \"description\": \"Professional opening and introduction\"\n },\n {\n \"name\": \"Empathy\",\n \"weight\": 20,\n \"description\": \"Understanding and acknowledging customer concerns\",\n \"positive_items\": [\n {\n \"name\": \"Used the customer's name\",\n \"points\": 5\n }\n ],\n \"penalty_items\": [\n {\n \"name\": \"Interrupted the customer\",\n \"penalty_points\": -5\n }\n ]\n },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\"\n },\n {\n \"name\": \"Resolution\",\n \"weight\": 25,\n \"description\": \"Effective problem solving and issue resolution\"\n },\n {\n \"name\": \"Sales\",\n \"weight\": 15,\n \"description\": \"Upselling and cross-selling opportunities\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://{subdomain}.mihu.ai/api/v1/qa-agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Support QA Agent\",\n \"description\": \"Evaluates support conversations for empathy and compliance\",\n \"evaluates_agent_type\": \"human\",\n \"language\": \"English\",\n \"is_default\": true,\n \"skills\": [\n {\n \"name\": \"Greeting\",\n \"weight\": 15,\n \"description\": \"Professional opening and introduction\"\n },\n {\n \"name\": \"Empathy\",\n \"weight\": 20,\n \"description\": \"Understanding and acknowledging customer concerns\",\n \"positive_items\": [\n {\n \"name\": \"Used the customer's name\",\n \"points\": 5\n }\n ],\n \"penalty_items\": [\n {\n \"name\": \"Interrupted the customer\",\n \"penalty_points\": -5\n }\n ]\n },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\"\n },\n {\n \"name\": \"Resolution\",\n \"weight\": 25,\n \"description\": \"Effective problem solving and issue resolution\"\n },\n {\n \"name\": \"Sales\",\n \"weight\": 15,\n \"description\": \"Upselling and cross-selling opportunities\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{subdomain}.mihu.ai/api/v1/qa-agents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Support QA Agent\",\n \"description\": \"Evaluates support conversations for empathy and compliance\",\n \"evaluates_agent_type\": \"human\",\n \"language\": \"English\",\n \"is_default\": true,\n \"skills\": [\n {\n \"name\": \"Greeting\",\n \"weight\": 15,\n \"description\": \"Professional opening and introduction\"\n },\n {\n \"name\": \"Empathy\",\n \"weight\": 20,\n \"description\": \"Understanding and acknowledging customer concerns\",\n \"positive_items\": [\n {\n \"name\": \"Used the customer's name\",\n \"points\": 5\n }\n ],\n \"penalty_items\": [\n {\n \"name\": \"Interrupted the customer\",\n \"penalty_points\": -5\n }\n ]\n },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\"\n },\n {\n \"name\": \"Resolution\",\n \"weight\": 25,\n \"description\": \"Effective problem solving and issue resolution\"\n },\n {\n \"name\": \"Sales\",\n \"weight\": 15,\n \"description\": \"Upselling and cross-selling opportunities\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "QA agent created successfully",
"data": {
"uuid": "7e1c9b3a-5d2f-4c8e-b6a1-0f9d8c7b6a5e",
"name": "Support QA Agent",
"description": "Evaluates support conversations for empathy and compliance",
"evaluates_agent_type": "human",
"is_active": true,
"is_default": true,
"evaluation_model": "advanced",
"strictness_level": 70,
"confidence_threshold": 85,
"auto_fail_threshold": 3,
"language": "English",
"custom_instructions": "Focus on product knowledge when evaluating technical support calls.",
"automatic_scoring": true,
"sentiment_analysis": true,
"compliance_checking": true,
"skills": [
{
"uuid": "9c2f5a44-1b7e-4f4a-9a6c-3d2f8e7b1c0a",
"name": "Empathy",
"description": "Understanding and acknowledging customer concerns",
"weight": 20,
"max_score": 10,
"ai_evaluation_prompt": "Evaluate whether the agent acknowledged the customer's feelings.",
"positive_items": [
{
"name": "Used the customer's name",
"points": 5
}
],
"penalty_items": [
{
"name": "Interrupted the customer",
"penalty_points": -5,
"is_auto_fail": false
}
],
"order": 2,
"is_custom": false
}
],
"total_weight": 100,
"weights_balanced": true,
"created_at": "2026-06-04T10:15:30+00:00",
"updated_at": "2026-06-04T10:15:30+00:00"
}
}{
"success": false,
"message": "Agent not found",
"data": []
}{
"success": false,
"message": "Agent not found",
"data": []
}{
"success": false,
"message": "Agent not found",
"data": []
}{
"success": false,
"message": "Agent not found",
"data": []
}Create a QA agent
Creates a QA agent with its scorecard. Send skills to define your own scorecard (weights must total 100%), or leave it out to start with the standard one: Greeting 15%, Empathy 20%, Compliance 25%, Resolution 25%, Sales 15%. Your first QA agent automatically becomes the default.
curl --request POST \
--url https://{subdomain}.mihu.ai/api/v1/qa-agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"name": "Support QA Agent",
"description": "Evaluates support conversations for empathy and compliance",
"evaluates_agent_type": "human",
"language": "English",
"is_default": true,
"skills": [
{
"name": "Greeting",
"weight": 15,
"description": "Professional opening and introduction"
},
{
"name": "Empathy",
"weight": 20,
"description": "Understanding and acknowledging customer concerns",
"positive_items": [
{
"name": "Used the customer's name",
"points": 5
}
],
"penalty_items": [
{
"name": "Interrupted the customer",
"penalty_points": -5
}
]
},
{
"name": "Compliance",
"weight": 25,
"description": "Adherence to regulatory and company policies"
},
{
"name": "Resolution",
"weight": 25,
"description": "Effective problem solving and issue resolution"
},
{
"name": "Sales",
"weight": 15,
"description": "Upselling and cross-selling opportunities"
}
]
}
EOFimport requests
url = "https://{subdomain}.mihu.ai/api/v1/qa-agents"
payload = {
"name": "Support QA Agent",
"description": "Evaluates support conversations for empathy and compliance",
"evaluates_agent_type": "human",
"language": "English",
"is_default": True,
"skills": [
{
"name": "Greeting",
"weight": 15,
"description": "Professional opening and introduction"
},
{
"name": "Empathy",
"weight": 20,
"description": "Understanding and acknowledging customer concerns",
"positive_items": [
{
"name": "Used the customer's name",
"points": 5
}
],
"penalty_items": [
{
"name": "Interrupted the customer",
"penalty_points": -5
}
]
},
{
"name": "Compliance",
"weight": 25,
"description": "Adherence to regulatory and company policies"
},
{
"name": "Resolution",
"weight": 25,
"description": "Effective problem solving and issue resolution"
},
{
"name": "Sales",
"weight": 15,
"description": "Upselling and cross-selling opportunities"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Support QA Agent',
description: 'Evaluates support conversations for empathy and compliance',
evaluates_agent_type: 'human',
language: 'English',
is_default: true,
skills: [
{
name: 'Greeting',
weight: 15,
description: 'Professional opening and introduction'
},
{
name: 'Empathy',
weight: 20,
description: 'Understanding and acknowledging customer concerns',
positive_items: [{name: 'Used the customer\'s name', points: 5}],
penalty_items: [{name: 'Interrupted the customer', penalty_points: -5}]
},
{
name: 'Compliance',
weight: 25,
description: 'Adherence to regulatory and company policies'
},
{
name: 'Resolution',
weight: 25,
description: 'Effective problem solving and issue resolution'
},
{
name: 'Sales',
weight: 15,
description: 'Upselling and cross-selling opportunities'
}
]
})
};
fetch('https://{subdomain}.mihu.ai/api/v1/qa-agents', 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://{subdomain}.mihu.ai/api/v1/qa-agents",
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([
'name' => 'Support QA Agent',
'description' => 'Evaluates support conversations for empathy and compliance',
'evaluates_agent_type' => 'human',
'language' => 'English',
'is_default' => true,
'skills' => [
[
'name' => 'Greeting',
'weight' => 15,
'description' => 'Professional opening and introduction'
],
[
'name' => 'Empathy',
'weight' => 20,
'description' => 'Understanding and acknowledging customer concerns',
'positive_items' => [
[
'name' => 'Used the customer\'s name',
'points' => 5
]
],
'penalty_items' => [
[
'name' => 'Interrupted the customer',
'penalty_points' => -5
]
]
],
[
'name' => 'Compliance',
'weight' => 25,
'description' => 'Adherence to regulatory and company policies'
],
[
'name' => 'Resolution',
'weight' => 25,
'description' => 'Effective problem solving and issue resolution'
],
[
'name' => 'Sales',
'weight' => 15,
'description' => 'Upselling and cross-selling opportunities'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://{subdomain}.mihu.ai/api/v1/qa-agents"
payload := strings.NewReader("{\n \"name\": \"Support QA Agent\",\n \"description\": \"Evaluates support conversations for empathy and compliance\",\n \"evaluates_agent_type\": \"human\",\n \"language\": \"English\",\n \"is_default\": true,\n \"skills\": [\n {\n \"name\": \"Greeting\",\n \"weight\": 15,\n \"description\": \"Professional opening and introduction\"\n },\n {\n \"name\": \"Empathy\",\n \"weight\": 20,\n \"description\": \"Understanding and acknowledging customer concerns\",\n \"positive_items\": [\n {\n \"name\": \"Used the customer's name\",\n \"points\": 5\n }\n ],\n \"penalty_items\": [\n {\n \"name\": \"Interrupted the customer\",\n \"penalty_points\": -5\n }\n ]\n },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\"\n },\n {\n \"name\": \"Resolution\",\n \"weight\": 25,\n \"description\": \"Effective problem solving and issue resolution\"\n },\n {\n \"name\": \"Sales\",\n \"weight\": 15,\n \"description\": \"Upselling and cross-selling opportunities\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://{subdomain}.mihu.ai/api/v1/qa-agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Support QA Agent\",\n \"description\": \"Evaluates support conversations for empathy and compliance\",\n \"evaluates_agent_type\": \"human\",\n \"language\": \"English\",\n \"is_default\": true,\n \"skills\": [\n {\n \"name\": \"Greeting\",\n \"weight\": 15,\n \"description\": \"Professional opening and introduction\"\n },\n {\n \"name\": \"Empathy\",\n \"weight\": 20,\n \"description\": \"Understanding and acknowledging customer concerns\",\n \"positive_items\": [\n {\n \"name\": \"Used the customer's name\",\n \"points\": 5\n }\n ],\n \"penalty_items\": [\n {\n \"name\": \"Interrupted the customer\",\n \"penalty_points\": -5\n }\n ]\n },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\"\n },\n {\n \"name\": \"Resolution\",\n \"weight\": 25,\n \"description\": \"Effective problem solving and issue resolution\"\n },\n {\n \"name\": \"Sales\",\n \"weight\": 15,\n \"description\": \"Upselling and cross-selling opportunities\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{subdomain}.mihu.ai/api/v1/qa-agents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Support QA Agent\",\n \"description\": \"Evaluates support conversations for empathy and compliance\",\n \"evaluates_agent_type\": \"human\",\n \"language\": \"English\",\n \"is_default\": true,\n \"skills\": [\n {\n \"name\": \"Greeting\",\n \"weight\": 15,\n \"description\": \"Professional opening and introduction\"\n },\n {\n \"name\": \"Empathy\",\n \"weight\": 20,\n \"description\": \"Understanding and acknowledging customer concerns\",\n \"positive_items\": [\n {\n \"name\": \"Used the customer's name\",\n \"points\": 5\n }\n ],\n \"penalty_items\": [\n {\n \"name\": \"Interrupted the customer\",\n \"penalty_points\": -5\n }\n ]\n },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\"\n },\n {\n \"name\": \"Resolution\",\n \"weight\": 25,\n \"description\": \"Effective problem solving and issue resolution\"\n },\n {\n \"name\": \"Sales\",\n \"weight\": 15,\n \"description\": \"Upselling and cross-selling opportunities\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "QA agent created successfully",
"data": {
"uuid": "7e1c9b3a-5d2f-4c8e-b6a1-0f9d8c7b6a5e",
"name": "Support QA Agent",
"description": "Evaluates support conversations for empathy and compliance",
"evaluates_agent_type": "human",
"is_active": true,
"is_default": true,
"evaluation_model": "advanced",
"strictness_level": 70,
"confidence_threshold": 85,
"auto_fail_threshold": 3,
"language": "English",
"custom_instructions": "Focus on product knowledge when evaluating technical support calls.",
"automatic_scoring": true,
"sentiment_analysis": true,
"compliance_checking": true,
"skills": [
{
"uuid": "9c2f5a44-1b7e-4f4a-9a6c-3d2f8e7b1c0a",
"name": "Empathy",
"description": "Understanding and acknowledging customer concerns",
"weight": 20,
"max_score": 10,
"ai_evaluation_prompt": "Evaluate whether the agent acknowledged the customer's feelings.",
"positive_items": [
{
"name": "Used the customer's name",
"points": 5
}
],
"penalty_items": [
{
"name": "Interrupted the customer",
"penalty_points": -5,
"is_auto_fail": false
}
],
"order": 2,
"is_custom": false
}
],
"total_weight": 100,
"weights_balanced": true,
"created_at": "2026-06-04T10:15:30+00:00",
"updated_at": "2026-06-04T10:15:30+00:00"
}
}{
"success": false,
"message": "Agent not found",
"data": []
}{
"success": false,
"message": "Agent not found",
"data": []
}{
"success": false,
"message": "Agent not found",
"data": []
}{
"success": false,
"message": "Agent not found",
"data": []
}Authorizations
Use a Bearer token to access these API endpoints. Example: "Bearer {your-token}"
Body
Create/update payload. On update only the fields you send are changed.
255"Support QA Agent"
"Evaluates support conversations for empathy and compliance"
Who this QA agent evaluates: human agents, AI agents, or both.
human, ai, both "human"
true
Send true to make this the default evaluator. To move the default away from an agent, set another one as default.
false
50"advanced"
How strictly conversations are scored. Higher = harsher.
0 <= x <= 10070
Minimum AI confidence (%) for a score to be applied.
0 <= x <= 10085
Number of critical violations after which an evaluation fails automatically.
0 <= x <= 103
Language for evaluation reports and feedback.
50"English"
Extra guidance applied to every evaluation.
"Focus on product knowledge when evaluating technical support calls."
true
true
true
The full scorecard. Sending it replaces the existing skills; weights must total 100%. Leave it out on create to start with the standard 5-skill scorecard.
1Show child attributes
Show child attributes