curl --request PATCH \
--url https://api.duvo.ai/v2/cases/{case_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"data": "<string>",
"json_data": {}
}
'import requests
url = "https://api.duvo.ai/v2/cases/{case_id}"
payload = {
"title": "<string>",
"data": "<string>",
"json_data": {}
}
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({title: '<string>', data: '<string>', json_data: {}})
};
fetch('https://api.duvo.ai/v2/cases/{case_id}', 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/cases/{case_id}",
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([
'title' => '<string>',
'data' => '<string>',
'json_data' => [
]
]),
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/cases/{case_id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"data\": \"<string>\",\n \"json_data\": {}\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.duvo.ai/v2/cases/{case_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"data\": \"<string>\",\n \"json_data\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.duvo.ai/v2/cases/{case_id}")
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 \"title\": \"<string>\",\n \"data\": \"<string>\",\n \"json_data\": {}\n}"
response = http.request(request)
puts response.read_body{
"case": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"queue_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"data": "<string>",
"status": "pending",
"priority": "none",
"display_status": "pending",
"claimed_at": "<string>",
"claimed_by_run_id": "<string>",
"completed_at": "<string>",
"postponed_to": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"created_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by_user_name": "<string>",
"created_by_user_email": "<string>",
"agent_run_status": "<string>",
"agent_run_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pending_human_request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pending_approval_batch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pending_approval_assignee_user_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"approval_approved_count": 4503599627370495,
"approval_rejected_count": 4503599627370495,
"labels": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "<string>",
"value": "<string>",
"color_hue": 180
}
],
"json_data": {},
"json_schema_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome_source": "system",
"outcome_severity": "critical",
"eval_summary": {
"passed": 123,
"total": 123,
"status": "ready",
"evaluationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"final_comment": "<string>",
"severityCounts": {
"critical": 4503599627370495,
"medium": 4503599627370495,
"low": 4503599627370495
}
},
"search_match_data_snippet": {
"before": "<string>",
"match": "<string>",
"after": "<string>"
}
},
"events": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"case_queue_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"human_request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "<string>",
"reason": "<string>",
"created_at": "<string>",
"agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_name": "<string>",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_name": "<string>",
"user_email": "<string>",
"human_request_title": "<string>"
}
],
"approvalBatches": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"case_queue_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"created_at": "<string>",
"resolved_at": "<string>",
"cancelled_at": "<string>",
"cancellation_reason": "<string>",
"rows": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assignee_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assignee_name": "<string>",
"assignee_email": "<string>",
"prompt": "<string>",
"decision": "approved",
"responded_at": "<string>",
"responded_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"responded_by_name": "<string>",
"responded_by_email": "<string>",
"cancelled_at": "<string>",
"cancellation_reason": "<string>",
"can_respond": true,
"resolution": "<string>"
}
]
}
],
"attachments": [],
"scopedApprovalBatches": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"case_queue_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_run_id": null,
"title": "<string>",
"created_at": "<string>",
"resolved_at": "<string>",
"cancelled_at": "<string>",
"cancellation_reason": "<string>",
"rows": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assignee_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assignee_name": "<string>",
"assignee_email": "<string>",
"prompt": "<string>",
"decision": "approved",
"responded_at": "<string>",
"responded_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"responded_by_name": "<string>",
"responded_by_email": "<string>",
"cancelled_at": "<string>",
"cancellation_reason": "<string>",
"can_respond": true,
"resolution": "<string>"
}
]
}
]
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Update Case
Edit a case’s title and/or its data payload. Provide at least one field. For the payload, send free-form data OR a structured json_data object, never both. json_data is validated against the queue’s Case schema and requires the queue to have one; a case that is already typed against a schema keeps its structured payload and rejects a free-text data write. Works on pending, in-progress, and settled cases. Other attributes (status, priority, labels) have their own dedicated endpoints. Returns the updated case with its event history and approval batches.
curl --request PATCH \
--url https://api.duvo.ai/v2/cases/{case_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"data": "<string>",
"json_data": {}
}
'import requests
url = "https://api.duvo.ai/v2/cases/{case_id}"
payload = {
"title": "<string>",
"data": "<string>",
"json_data": {}
}
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({title: '<string>', data: '<string>', json_data: {}})
};
fetch('https://api.duvo.ai/v2/cases/{case_id}', 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/cases/{case_id}",
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([
'title' => '<string>',
'data' => '<string>',
'json_data' => [
]
]),
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/cases/{case_id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"data\": \"<string>\",\n \"json_data\": {}\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.duvo.ai/v2/cases/{case_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"data\": \"<string>\",\n \"json_data\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.duvo.ai/v2/cases/{case_id}")
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 \"title\": \"<string>\",\n \"data\": \"<string>\",\n \"json_data\": {}\n}"
response = http.request(request)
puts response.read_body{
"case": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"queue_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"data": "<string>",
"status": "pending",
"priority": "none",
"display_status": "pending",
"claimed_at": "<string>",
"claimed_by_run_id": "<string>",
"completed_at": "<string>",
"postponed_to": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"created_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by_user_name": "<string>",
"created_by_user_email": "<string>",
"agent_run_status": "<string>",
"agent_run_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pending_human_request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pending_approval_batch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pending_approval_assignee_user_ids": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"approval_approved_count": 4503599627370495,
"approval_rejected_count": 4503599627370495,
"labels": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"key": "<string>",
"value": "<string>",
"color_hue": 180
}
],
"json_data": {},
"json_schema_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome_source": "system",
"outcome_severity": "critical",
"eval_summary": {
"passed": 123,
"total": 123,
"status": "ready",
"evaluationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"final_comment": "<string>",
"severityCounts": {
"critical": 4503599627370495,
"medium": 4503599627370495,
"low": 4503599627370495
}
},
"search_match_data_snippet": {
"before": "<string>",
"match": "<string>",
"after": "<string>"
}
},
"events": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"case_queue_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"human_request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "<string>",
"reason": "<string>",
"created_at": "<string>",
"agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_name": "<string>",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_name": "<string>",
"user_email": "<string>",
"human_request_title": "<string>"
}
],
"approvalBatches": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"case_queue_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"created_at": "<string>",
"resolved_at": "<string>",
"cancelled_at": "<string>",
"cancellation_reason": "<string>",
"rows": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assignee_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assignee_name": "<string>",
"assignee_email": "<string>",
"prompt": "<string>",
"decision": "approved",
"responded_at": "<string>",
"responded_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"responded_by_name": "<string>",
"responded_by_email": "<string>",
"cancelled_at": "<string>",
"cancellation_reason": "<string>",
"can_respond": true,
"resolution": "<string>"
}
]
}
],
"attachments": [],
"scopedApprovalBatches": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"case_queue_item_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_run_id": null,
"title": "<string>",
"created_at": "<string>",
"resolved_at": "<string>",
"cancelled_at": "<string>",
"cancellation_reason": "<string>",
"rows": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assignee_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"assignee_name": "<string>",
"assignee_email": "<string>",
"prompt": "<string>",
"decision": "approved",
"responded_at": "<string>",
"responded_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"responded_by_name": "<string>",
"responded_by_email": "<string>",
"cancelled_at": "<string>",
"cancellation_reason": "<string>",
"can_respond": true,
"resolution": "<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 case's unique identifier
Body
New case title (1–500 characters).
1 - 500New free-form data payload handed to the agent when the case is claimed. Mutually exclusive with json_data.
New structured payload for a case on a queue that has a Case schema. Validated against that schema and mutually exclusive with data.
Show child attributes
Show child attributes
Response
Default Response
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Approval batches with Run references redacted for Process-scoped access. When present, use this field instead of approvalBatches, which is empty for these callers.
Show child attributes
Show child attributes
Was this page helpful?