curl --request PATCH \
--url https://api.cekura.ai/observability/v2/call-logs/{id}/ \
--header 'Content-Type: application/json' \
--header 'X-CEKURA-API-KEY: <api-key>' \
--data '
{
"feedback": "<string>",
"call_id": "<string>",
"transcript_json": "<unknown>",
"timestamp": "2023-11-07T05:31:56Z",
"duration": 1,
"call_ended_reason": "<string>",
"customer_number": "<string>",
"metadata": {},
"dynamic_variables": {},
"reevaluate_metrics": true
}
'import requests
url = "https://api.cekura.ai/observability/v2/call-logs/{id}/"
payload = {
"feedback": "<string>",
"call_id": "<string>",
"transcript_json": "<unknown>",
"timestamp": "2023-11-07T05:31:56Z",
"duration": 1,
"call_ended_reason": "<string>",
"customer_number": "<string>",
"metadata": {},
"dynamic_variables": {},
"reevaluate_metrics": True
}
headers = {
"X-CEKURA-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-CEKURA-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
feedback: '<string>',
call_id: '<string>',
transcript_json: '<unknown>',
timestamp: '2023-11-07T05:31:56Z',
duration: 1,
call_ended_reason: '<string>',
customer_number: '<string>',
metadata: {},
dynamic_variables: {},
reevaluate_metrics: true
})
};
fetch('https://api.cekura.ai/observability/v2/call-logs/{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.cekura.ai/observability/v2/call-logs/{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([
'feedback' => '<string>',
'call_id' => '<string>',
'transcript_json' => '<unknown>',
'timestamp' => '2023-11-07T05:31:56Z',
'duration' => 1,
'call_ended_reason' => '<string>',
'customer_number' => '<string>',
'metadata' => [
],
'dynamic_variables' => [
],
'reevaluate_metrics' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-CEKURA-API-KEY: <api-key>"
],
]);
$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.cekura.ai/observability/v2/call-logs/{id}/"
payload := strings.NewReader("{\n \"feedback\": \"<string>\",\n \"call_id\": \"<string>\",\n \"transcript_json\": \"<unknown>\",\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"duration\": 1,\n \"call_ended_reason\": \"<string>\",\n \"customer_number\": \"<string>\",\n \"metadata\": {},\n \"dynamic_variables\": {},\n \"reevaluate_metrics\": true\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-CEKURA-API-KEY", "<api-key>")
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.cekura.ai/observability/v2/call-logs/{id}/")
.header("X-CEKURA-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"feedback\": \"<string>\",\n \"call_id\": \"<string>\",\n \"transcript_json\": \"<unknown>\",\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"duration\": 1,\n \"call_ended_reason\": \"<string>\",\n \"customer_number\": \"<string>\",\n \"metadata\": {},\n \"dynamic_variables\": {},\n \"reevaluate_metrics\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cekura.ai/observability/v2/call-logs/{id}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-CEKURA-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"feedback\": \"<string>\",\n \"call_id\": \"<string>\",\n \"transcript_json\": \"<unknown>\",\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"duration\": 1,\n \"call_ended_reason\": \"<string>\",\n \"customer_number\": \"<string>\",\n \"metadata\": {},\n \"dynamic_variables\": {},\n \"reevaluate_metrics\": true\n}"
response = http.request(request)
puts response.read_body{
"call_id": "<string>",
"id": 123,
"duration": "<string>",
"voice_recording_url": "<string>",
"critical_categories": [
{
"category_id": 123,
"category": "<string>",
"deviation": 123,
"wrongly_marked": true,
"feedback": "<string>",
"priority": "critical"
}
],
"transcript_object": [
{
"role": "<string>",
"content": "<string>",
"timestamp": 123
}
],
"status": "success",
"agent_id": "<string>",
"agent_name": "<string>",
"agent_version": {},
"evaluation": {
"metrics": [
{
"id": 123,
"name": "<string>",
"type": "<string>",
"score": 123,
"enum": "<string>",
"value": "<string>",
"explanation": [
"<string>"
],
"extra": {}
}
]
},
"metadata": {},
"dynamic_variables": {},
"testing_channel_index": 123,
"waveform": {},
"timestamp": "2023-11-07T05:31:56Z",
"success": true,
"is_reviewed": true,
"feedback": "<string>",
"rubric": "<unknown>",
"transcript": "<string>",
"call_ended_reason": "<string>",
"dropoff_point": "<string>",
"topic": "<string>",
"customer_number": "<string>",
"user_generated_transcript": "<unknown>",
"error_message": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"trace_id": "<string>",
"is_log_present": true,
"agent": 123,
"project": 123
}{
"field_name": [
"<string>"
]
}{
"detail": "<string>"
}Update Call Log
Update editable source data for an existing production call log.
curl --request PATCH \
--url https://api.cekura.ai/observability/v2/call-logs/{id}/ \
--header 'Content-Type: application/json' \
--header 'X-CEKURA-API-KEY: <api-key>' \
--data '
{
"feedback": "<string>",
"call_id": "<string>",
"transcript_json": "<unknown>",
"timestamp": "2023-11-07T05:31:56Z",
"duration": 1,
"call_ended_reason": "<string>",
"customer_number": "<string>",
"metadata": {},
"dynamic_variables": {},
"reevaluate_metrics": true
}
'import requests
url = "https://api.cekura.ai/observability/v2/call-logs/{id}/"
payload = {
"feedback": "<string>",
"call_id": "<string>",
"transcript_json": "<unknown>",
"timestamp": "2023-11-07T05:31:56Z",
"duration": 1,
"call_ended_reason": "<string>",
"customer_number": "<string>",
"metadata": {},
"dynamic_variables": {},
"reevaluate_metrics": True
}
headers = {
"X-CEKURA-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-CEKURA-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
feedback: '<string>',
call_id: '<string>',
transcript_json: '<unknown>',
timestamp: '2023-11-07T05:31:56Z',
duration: 1,
call_ended_reason: '<string>',
customer_number: '<string>',
metadata: {},
dynamic_variables: {},
reevaluate_metrics: true
})
};
fetch('https://api.cekura.ai/observability/v2/call-logs/{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.cekura.ai/observability/v2/call-logs/{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([
'feedback' => '<string>',
'call_id' => '<string>',
'transcript_json' => '<unknown>',
'timestamp' => '2023-11-07T05:31:56Z',
'duration' => 1,
'call_ended_reason' => '<string>',
'customer_number' => '<string>',
'metadata' => [
],
'dynamic_variables' => [
],
'reevaluate_metrics' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-CEKURA-API-KEY: <api-key>"
],
]);
$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.cekura.ai/observability/v2/call-logs/{id}/"
payload := strings.NewReader("{\n \"feedback\": \"<string>\",\n \"call_id\": \"<string>\",\n \"transcript_json\": \"<unknown>\",\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"duration\": 1,\n \"call_ended_reason\": \"<string>\",\n \"customer_number\": \"<string>\",\n \"metadata\": {},\n \"dynamic_variables\": {},\n \"reevaluate_metrics\": true\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-CEKURA-API-KEY", "<api-key>")
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.cekura.ai/observability/v2/call-logs/{id}/")
.header("X-CEKURA-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"feedback\": \"<string>\",\n \"call_id\": \"<string>\",\n \"transcript_json\": \"<unknown>\",\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"duration\": 1,\n \"call_ended_reason\": \"<string>\",\n \"customer_number\": \"<string>\",\n \"metadata\": {},\n \"dynamic_variables\": {},\n \"reevaluate_metrics\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cekura.ai/observability/v2/call-logs/{id}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-CEKURA-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"feedback\": \"<string>\",\n \"call_id\": \"<string>\",\n \"transcript_json\": \"<unknown>\",\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"duration\": 1,\n \"call_ended_reason\": \"<string>\",\n \"customer_number\": \"<string>\",\n \"metadata\": {},\n \"dynamic_variables\": {},\n \"reevaluate_metrics\": true\n}"
response = http.request(request)
puts response.read_body{
"call_id": "<string>",
"id": 123,
"duration": "<string>",
"voice_recording_url": "<string>",
"critical_categories": [
{
"category_id": 123,
"category": "<string>",
"deviation": 123,
"wrongly_marked": true,
"feedback": "<string>",
"priority": "critical"
}
],
"transcript_object": [
{
"role": "<string>",
"content": "<string>",
"timestamp": 123
}
],
"status": "success",
"agent_id": "<string>",
"agent_name": "<string>",
"agent_version": {},
"evaluation": {
"metrics": [
{
"id": 123,
"name": "<string>",
"type": "<string>",
"score": 123,
"enum": "<string>",
"value": "<string>",
"explanation": [
"<string>"
],
"extra": {}
}
]
},
"metadata": {},
"dynamic_variables": {},
"testing_channel_index": 123,
"waveform": {},
"timestamp": "2023-11-07T05:31:56Z",
"success": true,
"is_reviewed": true,
"feedback": "<string>",
"rubric": "<unknown>",
"transcript": "<string>",
"call_ended_reason": "<string>",
"dropoff_point": "<string>",
"topic": "<string>",
"customer_number": "<string>",
"user_generated_transcript": "<unknown>",
"error_message": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"trace_id": "<string>",
"is_log_present": true,
"agent": 123,
"project": 123
}{
"field_name": [
"<string>"
]
}{
"detail": "<string>"
}Authorizations
API Key Authentication. It should be included in the header of each request.
Path Parameters
A unique integer value identifying this call log.
Body
Human-reviewed call outcome. Use success, failure, reviewed_success, or reviewed_failure.
success- Successfailure- Failurereviewed_success- Reviewed Successreviewed_failure- Reviewed Failure
success, failure, reviewed_success, reviewed_failure Human feedback about the call.
Unique identifier for the call. Example:
"call_abc123xyz""stereo_audio_session_456"
100Format of the transcript_json payload. Tells Cekura how to parse roles and timestamps.
vapi— Vapi webhook format:[{"role": "bot"|"user", "message": "...", "time": 0.0}]retell— Retell webhook formatelevenlabs— ElevenLabs formatlivekit— LiveKit formatpipecat— Pipecat formatdeepgram— Deepgram formatcekura(default) —[{"role": "Testing Agent"|"Main Agent", "content": "...", "start_time": 0.0, "end_time": 2.5}]. Valid roles are"Testing Agent"and"Main Agent"only — using"agent"or"user"will return a validation error.
Omit this field to detect the supported format automatically.
cekura- cekuravocera- voceravapi- vapiretell- retelldeepgram- deepgrampipecat- pipecatlivekit- livekitelevenlabs- elevenlabs
cekura, vocera, vapi, retell, deepgram, pipecat, livekit, elevenlabs Call transcript in supported format (Vapi, Retell, Deepgram, ElevenLabs, Cekura)
Check the Transcript Format documentation for more details.
Cekura Transcript Format Example:
[
{
"role": "Testing Agent",
"content": "Hello.",
"end_time": 1.9399999,
"start_time": 1.4399999
},
{
"role": "Main Agent",
"content": "Hello. I want to book appointment today. My name is John.",
"end_time": 7.539999511718751,
"start_time": 3.1
},
{
"role": "Testing Agent",
"content": "Well, I mean, sure. What time exactly are we talking about here",
"end_time": 15.71,
"start_time": 12.01
},
{
"role": "Main Agent",
"content": "6 PM.",
"end_time": 18.269999,
"start_time": 17.609999
}
]
When the call occurred.
Example: 2024-03-15T10:15:45Z
Call duration in minutes as a non-negative number. For example, use 1.5 for one minute and 30 seconds.
x >= 0Reason why the call ended Example:
"customer-ended-call""agent-ended-call"
100Customer's phone number or identifier Example:
"+1234567890""customer_abc123"
100Additional call metadata. Supplied top-level keys are merged with existing metadata; supplied keys overwrite matching keys and omitted keys are preserved. Example:
{
"customer_id": "123",
"order_id": "ORD-12345",
"name": "John Doe"
}
Show child attributes
Show child attributes
Dynamic variables used to replace {{variables}} in agent description. Supplied top-level keys are merged with existing variables; supplied keys overwrite matching keys and omitted keys are preserved. Example:
{
"subscription_id": "SUB-12345",
"product_type": "premium"
}
Show child attributes
Show child attributes
Run metric evaluation on the call log after applying this update. Releases a call that was ingested with deferred evaluation, otherwise re-evaluates an already evaluated call. Calls whose evaluation is still running are left untouched.
Response
Unique identifier for the call. Example:
"call_abc123xyz""stereo_audio_session_456"
100Call duration in minutes in MM:SS format.
Example: 01:10
URL to access the voice recording.
Example: "https://storage.example.com/recordings/call_123_20240315.mp3"
Critical categories from call evaluation
Show child attributes
Show child attributes
Structured transcript data with timestamps. Example:
[
{
"role": "Testing Agent",
"content": "Hello",
"start_time": 1.2,
"end_time": 1.8
},
{
"role": "Main Agent",
"content": "Hello, how can I help you today?",
"start_time": 1.8,
"end_time": 2.5
}
]`
Show child attributes
Show child attributes
success- Successfailure- Failurereviewed_success- Reviewed Successreviewed_failure- Reviewed Failure
success, failure, reviewed_success, reviewed_failure Agent ID.
Example: 2142
Agent name
The agent version (history record) that was live when this call was ingested, or null.
Show child attributes
Show child attributes
Evaluation results for the call. Example:
{
"metrics": [
{
"id": 35,
"name": "Instruction Follow",
"type": "binary",
"score": 0,
"explanation": ["Agent failed to follow the opening script", "Missed key product information"],
"vocera_defined_metric_code": "5dedc41b",
"function_name": "check_critical_deviations",
"extra": {
"categories": [
{
"category_id": 5,
"category": "Script Adherence Issue",
"deviation": "Agent deviated from required script",
"priority": "critical"
}
]
}
},
{
"id": 18,
"name": "Customer Satisfaction",
"type": "binary",
"score": 5,
"explanation": ["Customer expressed satisfaction with service"]
}
]
}
Show child attributes
Show child attributes
Additional call metadata. Example:
{
"ended_reason": "customer-ended-call",
"ringing_duration": 3.941,
"call_type": "inbound"
}
Show child attributes
Show child attributes
Dynamic Variables used in the call. Example:
{
"customer_name": "John Doe",
"order_id": "ORD-12345",
"product_type": "premium"
}
Show child attributes
Show child attributes
The channel index of the testing agent in the audio recording
Amplitude envelope of the recording, one array of values per audio channel, so a waveform can be drawn without downloading the audio. Null for recordings processed before peaks were stored.
Show child attributes
Show child attributes
When the call occurred.
Example: 2024-03-15T10:15:45Z
Whether the call was successful.
Example: true or false
Whether the call has been reviewed.
Example: true or false
Feedback about the call.
Example: "Great Call"
Detailed rubric evaluation data Example:
[
{
"metric_id": 100,
"metric_name": "Call Quality",
"value": 5,
"explanation": ["The response was accurate"],
"passed": true,
"conditions": "score gte 5",
"expected_conditions": {"operator": "and", "conditions": [{"field": "score", "op": "gte", "value": 5}]}
}
]
Full text transcript of the call. Example:
[00:01] Testing Agent: Hello.
[00:02] Main Agent: Hello, how can I help you today?
[00:03] Testing Agent: Well, I mean, sure. What time exactly are we talking about here
[00:04] Main Agent: 6 PM.
[00:05] Testing Agent: Great. I'll book that for you. Just a sec.
[00:06] Main Agent: Okay.
Reason why the call ended. Example:
"customer-ended-call""agent-ended-call"
100Point in conversation where user disengaged.
Example: "end of conversation as no queries remaining"
1000Topic of the call. Example:
"product_inquiry""technical_support"
1000Customer's phone number or identifier. Example:
"+1234567890""customer_abc123"
100Manually created or corrected transcript data. Example:
[
{
"role": "Testing Agent",
"content": "I need help with my order",
"timestamp": "00:15"
}
]`
When this record was created.
Example: 2024-03-15T10:30:45Z
When this record was last updated.
Example: 2024-03-15T10:35:11Z
OpenTelemetry trace ID (32-char hex). Set when OTel tracing is enabled.
32Whether provider execution logs are stored for this call.
Agent ID
Project ID (denormalized from agent for query performance)