Replace the scorecard skills
curl --request PUT \
--url https://{subdomain}.mihu.ai/api/v1/qa-agents/{uuid}/skills \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"skills": [
{
"name": "Greeting",
"weight": 15,
"description": "Professional opening and introduction"
},
{
"name": "Empathy",
"weight": 20,
"description": "Understanding and acknowledging customer concerns"
},
{
"name": "Compliance",
"weight": 25,
"description": "Adherence to regulatory and company policies",
"penalty_items": [
{
"name": "Skipped identity verification",
"penalty_points": -10,
"is_auto_fail": true
}
]
},
{
"name": "Resolution",
"weight": 25,
"description": "Effective problem solving and issue resolution"
},
{
"name": "Sales",
"weight": 15,
"description": "Upselling and cross-selling opportunities"
}
]
}
'import requests
url = "https://{subdomain}.mihu.ai/api/v1/qa-agents/{uuid}/skills"
payload = { "skills": [
{
"name": "Greeting",
"weight": 15,
"description": "Professional opening and introduction"
},
{
"name": "Empathy",
"weight": 20,
"description": "Understanding and acknowledging customer concerns"
},
{
"name": "Compliance",
"weight": 25,
"description": "Adherence to regulatory and company policies",
"penalty_items": [
{
"name": "Skipped identity verification",
"penalty_points": -10,
"is_auto_fail": True
}
]
},
{
"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.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
skills: [
{
name: 'Greeting',
weight: 15,
description: 'Professional opening and introduction'
},
{
name: 'Empathy',
weight: 20,
description: 'Understanding and acknowledging customer concerns'
},
{
name: 'Compliance',
weight: 25,
description: 'Adherence to regulatory and company policies',
penalty_items: [
{name: 'Skipped identity verification', penalty_points: -10, is_auto_fail: true}
]
},
{
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/{uuid}/skills', 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/{uuid}/skills",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'skills' => [
[
'name' => 'Greeting',
'weight' => 15,
'description' => 'Professional opening and introduction'
],
[
'name' => 'Empathy',
'weight' => 20,
'description' => 'Understanding and acknowledging customer concerns'
],
[
'name' => 'Compliance',
'weight' => 25,
'description' => 'Adherence to regulatory and company policies',
'penalty_items' => [
[
'name' => 'Skipped identity verification',
'penalty_points' => -10,
'is_auto_fail' => true
]
]
],
[
'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/{uuid}/skills"
payload := strings.NewReader("{\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 },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\",\n \"penalty_items\": [\n {\n \"name\": \"Skipped identity verification\",\n \"penalty_points\": -10,\n \"is_auto_fail\": true\n }\n ]\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("PUT", 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.put("https://{subdomain}.mihu.ai/api/v1/qa-agents/{uuid}/skills")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\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 },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\",\n \"penalty_items\": [\n {\n \"name\": \"Skipped identity verification\",\n \"penalty_points\": -10,\n \"is_auto_fail\": true\n }\n ]\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/{uuid}/skills")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\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 },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\",\n \"penalty_items\": [\n {\n \"name\": \"Skipped identity verification\",\n \"penalty_points\": -10,\n \"is_auto_fail\": true\n }\n ]\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": "Skills replaced 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": []
}QA Agents
Replace the scorecard skills
Replaces the scorecard without touching other settings. Include a skill’s uuid to keep and update it, omit the uuid to add a new skill — any skill you leave out is removed. Weights must total 100%.
PUT
/
api
/
v1
/
qa-agents
/
{uuid}
/
skills
Replace the scorecard skills
curl --request PUT \
--url https://{subdomain}.mihu.ai/api/v1/qa-agents/{uuid}/skills \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"skills": [
{
"name": "Greeting",
"weight": 15,
"description": "Professional opening and introduction"
},
{
"name": "Empathy",
"weight": 20,
"description": "Understanding and acknowledging customer concerns"
},
{
"name": "Compliance",
"weight": 25,
"description": "Adherence to regulatory and company policies",
"penalty_items": [
{
"name": "Skipped identity verification",
"penalty_points": -10,
"is_auto_fail": true
}
]
},
{
"name": "Resolution",
"weight": 25,
"description": "Effective problem solving and issue resolution"
},
{
"name": "Sales",
"weight": 15,
"description": "Upselling and cross-selling opportunities"
}
]
}
'import requests
url = "https://{subdomain}.mihu.ai/api/v1/qa-agents/{uuid}/skills"
payload = { "skills": [
{
"name": "Greeting",
"weight": 15,
"description": "Professional opening and introduction"
},
{
"name": "Empathy",
"weight": 20,
"description": "Understanding and acknowledging customer concerns"
},
{
"name": "Compliance",
"weight": 25,
"description": "Adherence to regulatory and company policies",
"penalty_items": [
{
"name": "Skipped identity verification",
"penalty_points": -10,
"is_auto_fail": True
}
]
},
{
"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.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
skills: [
{
name: 'Greeting',
weight: 15,
description: 'Professional opening and introduction'
},
{
name: 'Empathy',
weight: 20,
description: 'Understanding and acknowledging customer concerns'
},
{
name: 'Compliance',
weight: 25,
description: 'Adherence to regulatory and company policies',
penalty_items: [
{name: 'Skipped identity verification', penalty_points: -10, is_auto_fail: true}
]
},
{
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/{uuid}/skills', 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/{uuid}/skills",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'skills' => [
[
'name' => 'Greeting',
'weight' => 15,
'description' => 'Professional opening and introduction'
],
[
'name' => 'Empathy',
'weight' => 20,
'description' => 'Understanding and acknowledging customer concerns'
],
[
'name' => 'Compliance',
'weight' => 25,
'description' => 'Adherence to regulatory and company policies',
'penalty_items' => [
[
'name' => 'Skipped identity verification',
'penalty_points' => -10,
'is_auto_fail' => true
]
]
],
[
'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/{uuid}/skills"
payload := strings.NewReader("{\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 },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\",\n \"penalty_items\": [\n {\n \"name\": \"Skipped identity verification\",\n \"penalty_points\": -10,\n \"is_auto_fail\": true\n }\n ]\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("PUT", 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.put("https://{subdomain}.mihu.ai/api/v1/qa-agents/{uuid}/skills")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\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 },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\",\n \"penalty_items\": [\n {\n \"name\": \"Skipped identity verification\",\n \"penalty_points\": -10,\n \"is_auto_fail\": true\n }\n ]\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/{uuid}/skills")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\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 },\n {\n \"name\": \"Compliance\",\n \"weight\": 25,\n \"description\": \"Adherence to regulatory and company policies\",\n \"penalty_items\": [\n {\n \"name\": \"Skipped identity verification\",\n \"penalty_points\": -10,\n \"is_auto_fail\": true\n }\n ]\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": "Skills replaced 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}"
Path Parameters
The QA agent's uuid.
Body
application/json
Minimum array length:
1Show child attributes
Show child attributes
⌘I