curl --request POST \
--url https://api.zelto.ai/v1/benchmarks/{id}/cases/from-conversations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"conversationIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"expected": "as_recorded",
"checkGroupId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tags": [
"<string>"
],
"skippedJudgeIds": [],
"dryRun": true
}
'import requests
url = "https://api.zelto.ai/v1/benchmarks/{id}/cases/from-conversations"
payload = {
"conversationIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"expected": "as_recorded",
"checkGroupId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tags": ["<string>"],
"skippedJudgeIds": [],
"dryRun": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
conversationIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
expected: 'as_recorded',
checkGroupId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
tags: ['<string>'],
skippedJudgeIds: [],
dryRun: true
})
};
fetch('https://api.zelto.ai/v1/benchmarks/{id}/cases/from-conversations', 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.zelto.ai/v1/benchmarks/{id}/cases/from-conversations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'conversationIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'expected' => 'as_recorded',
'checkGroupId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'tags' => [
'<string>'
],
'skippedJudgeIds' => [
],
'dryRun' => true
]),
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.zelto.ai/v1/benchmarks/{id}/cases/from-conversations"
payload := strings.NewReader("{\n \"conversationIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"expected\": \"as_recorded\",\n \"checkGroupId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tags\": [\n \"<string>\"\n ],\n \"skippedJudgeIds\": [],\n \"dryRun\": true\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.zelto.ai/v1/benchmarks/{id}/cases/from-conversations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"conversationIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"expected\": \"as_recorded\",\n \"checkGroupId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tags\": [\n \"<string>\"\n ],\n \"skippedJudgeIds\": [],\n \"dryRun\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zelto.ai/v1/benchmarks/{id}/cases/from-conversations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"conversationIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"expected\": \"as_recorded\",\n \"checkGroupId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tags\": [\n \"<string>\"\n ],\n \"skippedJudgeIds\": [],\n \"dryRun\": true\n}"
response = http.request(request)
puts response.read_body{
"cases": [
{
"id": "<string>",
"revision": 123,
"type": "turn",
"title": "<string>",
"checkGroupId": "<string>",
"source": "production",
"sourceConversationId": "<string>",
"sourceAgent": {
"id": "<string>",
"name": "<string>"
},
"tags": [
"<string>"
],
"language": "<string>",
"retired": true,
"draft": true,
"preview": "<string>",
"sourceAgentVersionLabel": "<string>",
"referenceUnverified": true,
"unpublished": true,
"skippedJudgeIds": [
"<string>"
],
"judgeParamOverrides": {},
"addedInVersion": 123,
"retiredInVersion": 123,
"toolExpectation": {
"expect": "call",
"calls": [
{
"tool": "<string>",
"arguments": {}
}
],
"ordered": true,
"forbiddenTools": [
"<string>"
],
"noExtraArguments": true,
"replyAt": 5
},
"replyExpectation": {
"check": "reference",
"text": "<string>",
"idealReply": "<string>"
},
"traceSource": {
"kind": "trace",
"traceId": "<string>",
"spanId": "<string>",
"turns": "transcript"
},
"status": "ready",
"contentPurged": true,
"contentDeleted": true,
"createdAt": "<string>",
"updatedAt": "<string>"
}
],
"skipped": [
{
"reason": "<string>",
"conversationId": "<string>",
"traceId": "<string>"
}
],
"dryRun": true,
"warning": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"hint": "<string>",
"parameter": "<string>",
"unknown": [
"<string>"
],
"valid": [
"<string>"
],
"details": {}
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"hint": "<string>",
"parameter": "<string>",
"unknown": [
"<string>"
],
"valid": [
"<string>"
],
"details": {}
}{
"error": "validation_failed",
"code": "validation_failed",
"message": "<string>",
"hint": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"hint": "<string>",
"parameter": "<string>",
"unknown": [
"<string>"
],
"valid": [
"<string>"
],
"details": {}
}{
"error": "validation_failed",
"code": "validation_failed",
"message": "<string>",
"hint": "<string>",
"details": {}
}Agregar casos desde llamadas
Convierte llamadas de producción de los agentes del benchmark en casos con una estrategia. Copia la transcripción, el audio y las variables de las llamadas al benchmark: el contenido del benchmark se conserva hasta que lo elimines y la política de retención de la organización no lo borra. Se omiten las llamadas ya agregadas para el mismo paso.
curl --request POST \
--url https://api.zelto.ai/v1/benchmarks/{id}/cases/from-conversations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"conversationIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"expected": "as_recorded",
"checkGroupId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tags": [
"<string>"
],
"skippedJudgeIds": [],
"dryRun": true
}
'import requests
url = "https://api.zelto.ai/v1/benchmarks/{id}/cases/from-conversations"
payload = {
"conversationIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"expected": "as_recorded",
"checkGroupId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tags": ["<string>"],
"skippedJudgeIds": [],
"dryRun": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
conversationIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
expected: 'as_recorded',
checkGroupId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
tags: ['<string>'],
skippedJudgeIds: [],
dryRun: true
})
};
fetch('https://api.zelto.ai/v1/benchmarks/{id}/cases/from-conversations', 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.zelto.ai/v1/benchmarks/{id}/cases/from-conversations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'conversationIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'expected' => 'as_recorded',
'checkGroupId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'tags' => [
'<string>'
],
'skippedJudgeIds' => [
],
'dryRun' => true
]),
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.zelto.ai/v1/benchmarks/{id}/cases/from-conversations"
payload := strings.NewReader("{\n \"conversationIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"expected\": \"as_recorded\",\n \"checkGroupId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tags\": [\n \"<string>\"\n ],\n \"skippedJudgeIds\": [],\n \"dryRun\": true\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.zelto.ai/v1/benchmarks/{id}/cases/from-conversations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"conversationIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"expected\": \"as_recorded\",\n \"checkGroupId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tags\": [\n \"<string>\"\n ],\n \"skippedJudgeIds\": [],\n \"dryRun\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zelto.ai/v1/benchmarks/{id}/cases/from-conversations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"conversationIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"expected\": \"as_recorded\",\n \"checkGroupId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tags\": [\n \"<string>\"\n ],\n \"skippedJudgeIds\": [],\n \"dryRun\": true\n}"
response = http.request(request)
puts response.read_body{
"cases": [
{
"id": "<string>",
"revision": 123,
"type": "turn",
"title": "<string>",
"checkGroupId": "<string>",
"source": "production",
"sourceConversationId": "<string>",
"sourceAgent": {
"id": "<string>",
"name": "<string>"
},
"tags": [
"<string>"
],
"language": "<string>",
"retired": true,
"draft": true,
"preview": "<string>",
"sourceAgentVersionLabel": "<string>",
"referenceUnverified": true,
"unpublished": true,
"skippedJudgeIds": [
"<string>"
],
"judgeParamOverrides": {},
"addedInVersion": 123,
"retiredInVersion": 123,
"toolExpectation": {
"expect": "call",
"calls": [
{
"tool": "<string>",
"arguments": {}
}
],
"ordered": true,
"forbiddenTools": [
"<string>"
],
"noExtraArguments": true,
"replyAt": 5
},
"replyExpectation": {
"check": "reference",
"text": "<string>",
"idealReply": "<string>"
},
"traceSource": {
"kind": "trace",
"traceId": "<string>",
"spanId": "<string>",
"turns": "transcript"
},
"status": "ready",
"contentPurged": true,
"contentDeleted": true,
"createdAt": "<string>",
"updatedAt": "<string>"
}
],
"skipped": [
{
"reason": "<string>",
"conversationId": "<string>",
"traceId": "<string>"
}
],
"dryRun": true,
"warning": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"hint": "<string>",
"parameter": "<string>",
"unknown": [
"<string>"
],
"valid": [
"<string>"
],
"details": {}
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"hint": "<string>",
"parameter": "<string>",
"unknown": [
"<string>"
],
"valid": [
"<string>"
],
"details": {}
}{
"error": "validation_failed",
"code": "validation_failed",
"message": "<string>",
"hint": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"hint": "<string>",
"parameter": "<string>",
"unknown": [
"<string>"
],
"valid": [
"<string>"
],
"details": {}
}{
"error": "validation_failed",
"code": "validation_failed",
"message": "<string>",
"hint": "<string>",
"details": {}
}Autorizaciones
Envía Authorization: Bearer YOUR_API_KEY. La clave corresponde a una sola organización.
Encabezados
Clave opcional, única por organización (1-255 caracteres ASCII imprimibles, por ejemplo un UUID). Reenviar una solicitud con la misma clave devuelve el resultado original en lugar de crear otro; usarla para una solicitud distinta devuelve 409 idempotency_key_reused.
1 - 255Parámetros de ruta
Id del benchmark.
Cuerpo
1 - 200 elementsQué pasos de cada llamada se convierten en casos: last_reply, every_reply, every_tool_call, conversation (LLM) o whole_recording, caller_turns (STT).
last_reply, every_reply, every_tool_call, conversation, whole_recording, caller_turns as_recorded: el paso grabado es la referencia. review: guardar como casos en borrador para terminarlos uno a uno.
as_recorded, review Etiquetas de usuario (máximo 20); se normalizan a minúsculas con guiones.
20200100Planifica los casos y los devuelve sin guardar nada (la lectura igualmente queda registrada en la auditoría).
Idioma de los títulos de caso generados y de las personas de llamante redactadas: en-us (predeterminado), es o pt.
en-us, es, pt 
