curl --request PUT \
--url https://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"rubrics": [
{
"title": "<string>",
"description": "<string>"
}
]
}
'import requests
url = "https://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics"
payload = { "rubrics": [
{
"title": "<string>",
"description": "<string>"
}
] }
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({rubrics: [{title: '<string>', description: '<string>'}]})
};
fetch('https://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics', 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.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics",
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([
'rubrics' => [
[
'title' => '<string>',
'description' => '<string>'
]
]
]),
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://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics"
payload := strings.NewReader("{\n \"rubrics\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\"\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://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rubrics\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics")
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 \"rubrics\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"rubrics": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"title": "<string>",
"description": "<string>",
"sort_order": 123,
"deleted_at": "<string>"
}
]
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Replace Case Queue Eval Rubrics
Replace the entire case-level evaluation rubric set on a queue’s current version (1 to N rubrics, N being 12 by default and 25 on teams with the newer rubric generator enabled). Existing rubrics are removed and the supplied list becomes the new set. An empty list is refused — whole-case evaluation regenerates rubrics for an empty set at the next settlement, so a cleared set would not stay cleared; remove individual rubrics instead. Targets the queue’s current version (build-set), which exists once its first Agent-processed case settles — this fails with 409 before then. Cases already judged keep their original verdicts.
curl --request PUT \
--url https://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"rubrics": [
{
"title": "<string>",
"description": "<string>"
}
]
}
'import requests
url = "https://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics"
payload = { "rubrics": [
{
"title": "<string>",
"description": "<string>"
}
] }
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({rubrics: [{title: '<string>', description: '<string>'}]})
};
fetch('https://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics', 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.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics",
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([
'rubrics' => [
[
'title' => '<string>',
'description' => '<string>'
]
]
]),
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://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics"
payload := strings.NewReader("{\n \"rubrics\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\"\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://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rubrics\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.duvo.ai/v2/case-queues/{queue_id}/eval-rubrics")
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 \"rubrics\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"rubrics": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slug": "<string>",
"title": "<string>",
"description": "<string>",
"sort_order": 123,
"deleted_at": "<string>"
}
]
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Authorizations
API key authentication. Get your API key from the Duvo dashboard.
Path Parameters
The queue's unique identifier
Body
The complete case-level rubric set for the queue's current version (at least 1 rubric). Replaces every existing rubric.
1 - 25 elementsShow child attributes
Show child attributes
Response
Default Response
Show child attributes
Show child attributes
Was this page helpful?