curl --request PATCH \
--url https://api.orbit.devotel.io/api/v1/agents/{agentId}/evals/datasets/{dsId}/rows/{rowId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": "What is your return policy?",
"expected_output": "Returns are free within 30 days of delivery.",
"metadata": {
"source": "helpdesk",
"ticket_id": "HD-2210"
}
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/agents/{agentId}/evals/datasets/{dsId}/rows/{rowId}"
payload = {
"input": "What is your return policy?",
"expected_output": "Returns are free within 30 days of delivery.",
"metadata": {
"source": "helpdesk",
"ticket_id": "HD-2210"
}
}
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({
input: 'What is your return policy?',
expected_output: 'Returns are free within 30 days of delivery.',
metadata: {source: 'helpdesk', ticket_id: 'HD-2210'}
})
};
fetch('https://api.orbit.devotel.io/api/v1/agents/{agentId}/evals/datasets/{dsId}/rows/{rowId}', 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}/evals/datasets/{dsId}/rows/{rowId}",
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([
'input' => 'What is your return policy?',
'expected_output' => 'Returns are free within 30 days of delivery.',
'metadata' => [
'source' => 'helpdesk',
'ticket_id' => 'HD-2210'
]
]),
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}/evals/datasets/{dsId}/rows/{rowId}"
payload := strings.NewReader("{\n \"input\": \"What is your return policy?\",\n \"expected_output\": \"Returns are free within 30 days of delivery.\",\n \"metadata\": {\n \"source\": \"helpdesk\",\n \"ticket_id\": \"HD-2210\"\n }\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}/evals/datasets/{dsId}/rows/{rowId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": \"What is your return policy?\",\n \"expected_output\": \"Returns are free within 30 days of delivery.\",\n \"metadata\": {\n \"source\": \"helpdesk\",\n \"ticket_id\": \"HD-2210\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/agents/{agentId}/evals/datasets/{dsId}/rows/{rowId}")
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 \"input\": \"What is your return policy?\",\n \"expected_output\": \"Returns are free within 30 days of delivery.\",\n \"metadata\": {\n \"source\": \"helpdesk\",\n \"ticket_id\": \"HD-2210\"\n }\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 one eval dataset row
Fix a single dataset row — correct the input, amend or clear the expected_output (null clears it), or replace the metadata. Only the supplied fields change; an empty body is an idempotent no-op that echoes the current row. The parent dataset’s recency clock is bumped so list views resort. 404 when the dataset (scoped to this agent) or the row is unknown. Requires the agents:write scope.
curl --request PATCH \
--url https://api.orbit.devotel.io/api/v1/agents/{agentId}/evals/datasets/{dsId}/rows/{rowId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": "What is your return policy?",
"expected_output": "Returns are free within 30 days of delivery.",
"metadata": {
"source": "helpdesk",
"ticket_id": "HD-2210"
}
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/agents/{agentId}/evals/datasets/{dsId}/rows/{rowId}"
payload = {
"input": "What is your return policy?",
"expected_output": "Returns are free within 30 days of delivery.",
"metadata": {
"source": "helpdesk",
"ticket_id": "HD-2210"
}
}
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({
input: 'What is your return policy?',
expected_output: 'Returns are free within 30 days of delivery.',
metadata: {source: 'helpdesk', ticket_id: 'HD-2210'}
})
};
fetch('https://api.orbit.devotel.io/api/v1/agents/{agentId}/evals/datasets/{dsId}/rows/{rowId}', 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}/evals/datasets/{dsId}/rows/{rowId}",
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([
'input' => 'What is your return policy?',
'expected_output' => 'Returns are free within 30 days of delivery.',
'metadata' => [
'source' => 'helpdesk',
'ticket_id' => 'HD-2210'
]
]),
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}/evals/datasets/{dsId}/rows/{rowId}"
payload := strings.NewReader("{\n \"input\": \"What is your return policy?\",\n \"expected_output\": \"Returns are free within 30 days of delivery.\",\n \"metadata\": {\n \"source\": \"helpdesk\",\n \"ticket_id\": \"HD-2210\"\n }\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}/evals/datasets/{dsId}/rows/{rowId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"input\": \"What is your return policy?\",\n \"expected_output\": \"Returns are free within 30 days of delivery.\",\n \"metadata\": {\n \"source\": \"helpdesk\",\n \"ticket_id\": \"HD-2210\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/agents/{agentId}/evals/datasets/{dsId}/rows/{rowId}")
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 \"input\": \"What is your return policy?\",\n \"expected_output\": \"Returns are free within 30 days of delivery.\",\n \"metadata\": {\n \"source\": \"helpdesk\",\n \"ticket_id\": \"HD-2210\"\n }\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
The row's user-side prompt / input text (1–10,000 chars). Omit to leave the stored input unchanged.
1 - 10000"What is your return policy?"
The reference answer the judge scores against (max 10,000 chars). Send null to clear it; omit to leave it unchanged.
10000"Returns are free within 30 days of delivery."
Free-form JSON metadata bag for the row (tags, source references). Send null to clear it; omit to leave it unchanged.
{
"source": "helpdesk",
"ticket_id": "HD-2210"
}
Response
Successful response.