curl --request PATCH \
--url https://api.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"name": "Resolution quality",
"criteria_md": "Score 1 only when the customer's issue was fully resolved.",
"evaluator_prompt": "You are an outcome judge. Rate the conversation against the criteria.",
"scope": "agent"
}
EOFimport requests
url = "https://api.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}"
payload = {
"name": "Resolution quality",
"criteria_md": "Score 1 only when the customer's issue was fully resolved.",
"evaluator_prompt": "You are an outcome judge. Rate the conversation against the criteria.",
"scope": "agent"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Resolution quality',
criteria_md: 'Score 1 only when the customer\'s issue was fully resolved.',
evaluator_prompt: 'You are an outcome judge. Rate the conversation against the criteria.',
scope: 'agent'
})
};
fetch('https://api.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}', 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.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Resolution quality',
'criteria_md' => 'Score 1 only when the customer\'s issue was fully resolved.',
'evaluator_prompt' => 'You are an outcome judge. Rate the conversation against the criteria.',
'scope' => 'agent'
]),
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.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}"
payload := strings.NewReader("{\n \"name\": \"Resolution quality\",\n \"criteria_md\": \"Score 1 only when the customer's issue was fully resolved.\",\n \"evaluator_prompt\": \"You are an outcome judge. Rate the conversation against the criteria.\",\n \"scope\": \"agent\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Resolution quality\",\n \"criteria_md\": \"Score 1 only when the customer's issue was fully resolved.\",\n \"evaluator_prompt\": \"You are an outcome judge. Rate the conversation against the criteria.\",\n \"scope\": \"agent\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Resolution quality\",\n \"criteria_md\": \"Score 1 only when the customer's issue was fully resolved.\",\n \"evaluator_prompt\": \"You are an outcome judge. Rate the conversation against the criteria.\",\n \"scope\": \"agent\"\n}"
response = http.request(request)
puts response.read_body{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "<string>",
"status": 429,
"retry_after": 2
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}Update an outcome rubric
Partially update an outcome rubric on an agent — any of name, criteria_md, evaluator_prompt, scope; omitted fields are preserved. The rubric must belong to the agent in the path, else 404. Owner, admin, or developer role required.
curl --request PATCH \
--url https://api.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"name": "Resolution quality",
"criteria_md": "Score 1 only when the customer's issue was fully resolved.",
"evaluator_prompt": "You are an outcome judge. Rate the conversation against the criteria.",
"scope": "agent"
}
EOFimport requests
url = "https://api.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}"
payload = {
"name": "Resolution quality",
"criteria_md": "Score 1 only when the customer's issue was fully resolved.",
"evaluator_prompt": "You are an outcome judge. Rate the conversation against the criteria.",
"scope": "agent"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Resolution quality',
criteria_md: 'Score 1 only when the customer\'s issue was fully resolved.',
evaluator_prompt: 'You are an outcome judge. Rate the conversation against the criteria.',
scope: 'agent'
})
};
fetch('https://api.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}', 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.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Resolution quality',
'criteria_md' => 'Score 1 only when the customer\'s issue was fully resolved.',
'evaluator_prompt' => 'You are an outcome judge. Rate the conversation against the criteria.',
'scope' => 'agent'
]),
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.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}"
payload := strings.NewReader("{\n \"name\": \"Resolution quality\",\n \"criteria_md\": \"Score 1 only when the customer's issue was fully resolved.\",\n \"evaluator_prompt\": \"You are an outcome judge. Rate the conversation against the criteria.\",\n \"scope\": \"agent\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Resolution quality\",\n \"criteria_md\": \"Score 1 only when the customer's issue was fully resolved.\",\n \"evaluator_prompt\": \"You are an outcome judge. Rate the conversation against the criteria.\",\n \"scope\": \"agent\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/agents/{agentId}/outcomes/rubrics/{rubricId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Resolution quality\",\n \"criteria_md\": \"Score 1 only when the customer's issue was fully resolved.\",\n \"evaluator_prompt\": \"You are an outcome judge. Rate the conversation against the criteria.\",\n \"scope\": \"agent\"\n}"
response = http.request(request)
puts response.read_body{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "<string>",
"status": 429,
"retry_after": 2
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}Authorizations
Dashboard JWT token from Clerk
Headers
Sandbox opt-in for Clerk-session-authenticated requests — see Test mode explained for the full credential-header matrix and worked samples. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
true, false Body
New rubric name (1–200 chars). Omit to keep the current name.
1 - 200"Resolution quality"
Revised success-criteria markdown the LLM judge evaluates against (1–10,000 chars). Omit to keep the current criteria.
1 - 10000"Score 1 only when the customer's issue was fully resolved."
Revised judge prompt (max 8000 chars — prompt-injection cap). Omit to keep the current prompt.
8000"You are an outcome judge. Rate the conversation against the criteria."
New evaluation scope for the rubric. The rubric must belong to the agent in the path; 404 otherwise.
agent, inbox, voice, org "agent"
Response
Successful response.