Skip to main content
POST
/
observability
/
v1
/
observe
curl --request POST \
  --url https://api.cekura.ai/observability/v1/observe/ \
  --header 'Content-Type: application/json' \
  --header 'X-CEKURA-API-KEY: <api-key>' \
  --data '
{
  "call_id": "call_12345678",
  "agent": 1,
  "voice_recording_url": "https://example.com/recordings/call_12345678.mp3",
  "transcript_type": "vapi",
  "transcript_json": [
    {
      "role": "agent",
      "message": "Hello, how can I help you today?",
      "time": 0
    },
    {
      "role": "user",
      "message": "I need help with my account",
      "time": 2.5
    }
  ],
  "call_ended_reason": "completed",
  "customer_number": "+1234567890",
  "metadata": {
    "customer_id": "cust_123",
    "campaign_id": "camp_456"
  },
  "timestamp": "2025-10-03T10:30:00Z",
  "dynamic_variables": {
    "customer_name": "John Doe",
    "order_id": "ORD-12345"
  }
}
'
{
  "id": 123,
  "duration": "<string>",
  "success": true,
  "is_reviewed": true,
  "status": "success",
  "feedback": "<string>",
  "metrics": [
    {
      "id": 123,
      "name": "<string>",
      "type": "<string>",
      "score": 123,
      "enum": "<string>",
      "value": "<string>"
    }
  ],
  "call_ended_reason": "<string>",
  "customer_number": "<string>",
  "agent": 123,
  "call_id": "<string>",
  "timestamp": "2023-11-07T05:31:56Z",
  "error_message": "<string>",
  "dropoff_point": "<string>",
  "topic": "<string>",
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z"
}

Authorizations

X-CEKURA-API-KEY
string
header
required

API Key Authentication. It should be included in the header of each request.

Body

call_id
string
required

Unique identifier for the call. Example:

  • "call_abc123xyz"
  • "stereo_audio_session_456"
Maximum string length: 100
agent
integer

Agent ID, required if assistant_id not provided Example: 2421

assistant_id
string | null

Provider's Assistant ID, required if agent not provided Example:

  • "asst_abc123xyz"
  • "agent_xyz789"
voice_recording
string<uri> | null

Audio recording file of the call. Example: Binary data "recordings/call_123_20240315.mp3"

voice_recording_url
string<uri> | null

URL to call recording audio file Example: "https://storage.example.com/recordings/call_123.mp3"

transcript_type
enum<string>
  • cekura - cekura
  • vocera - vocera
  • vapi - vapi
  • retell - retell
  • deepgram - deepgram
  • pipecat - pipecat
  • livekit - livekit
  • elevenlabs - elevenlabs
  • none-mono - none-mono
Available options:
cekura,
vocera,
vapi,
retell,
deepgram,
pipecat,
livekit,
elevenlabs,
none-mono
transcript_json
any

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
}
]
call_ended_reason
string | null

Reason why the call ended Example:

  • "customer-ended-call"
  • "agent-ended-call"
customer_number
string | null

Customer's phone number or identifier Example:

  • "+1234567890"
  • "customer_abc123"
metadata
any

Additional call metadata Example:

{
"customer_id": "123",
"order_id": "ORD-12345",
"name": "John Doe"
}
timestamp
string<date-time>

When the call occurred. Example: 2024-03-15T10:15:45Z

dynamic_variables
any

Dynamic variables used to replace {{variables}} in agent description. Example:

{
"subscription_id": "SUB-12345",
"product_type": "premium"
}
feedback
string | null

Feedback about the call Example: "Great call"

redact_fields
enum<string>[]

Optional list of sensitive fields to redact from the transcript and audio. If not provided, no redaction will occur. Available fields include: phone_number, email_address, credit_card, ssn, dob, healthcare_number, etc. Note: Redacting any fields incurs a cost of 0.4 credits per minute, regardless of how many fields are selected. Example: ["phone_number", "email_address", "credit_card"]

  • person_name - person_name
  • age - age
  • phone_number - phone_number
  • email_address - email_address
  • date - date
  • time - time
  • location - location
  • origin - origin
  • gender_sexuality - gender_sexuality
  • physical_attribute - physical_attribute
  • occupation - occupation
  • username - username
  • password - password
  • ip_address - ip_address
  • url - url
  • filename - filename
  • event - event
  • vehicle_id - vehicle_id
  • dob - dob
  • healthcare_number - healthcare_number
  • medical_professional - medical_professional
  • credit_card - credit_card
  • account_number - account_number
  • bank_account - bank_account
  • money - money
  • ssn - ssn
  • passport_number - passport_number
  • driver_license - driver_license
  • numerical_pii - numerical_pii
Available options:
person_name,
age,
phone_number,
email_address,
date,
time,
location,
origin,
gender_sexuality,
physical_attribute,
occupation,
username,
password,
ip_address,
url,
filename,
event,
vehicle_id,
dob,
healthcare_number,
medical_professional,
credit_card,
account_number,
bank_account,
money,
ssn,
passport_number,
driver_license,
numerical_pii

Response

Mixin for parsing restql query from request.

NOTE: We are using request.GET instead of request.query_params because this might be called before DRF request is created(i.e from dispatch). This means request.query_params might not be available when this mixin is used.

id
integer
duration
string

Call duration in minutes in MM:SS format. Example: 01:10

success
boolean | null

Whether the call was successful. Example: true or false

is_reviewed
boolean

Whether the call has been reviewed. Example: true or false

status
enum<string>

Status of the call or conversation. Example: "completed" or "failed"

  • success - Success
  • failure - Failure
  • reviewed_success - Reviewed Success
  • reviewed_failure - Reviewed Failure
Available options:
success,
failure,
reviewed_success,
reviewed_failure
feedback
string

Feedback about the call. Example: "Great Call"

metrics
object[]

Metrics of the call

call_ended_reason
string

Reason why the call ended. Example:

  • "customer-ended-call"
  • "agent-ended-call"
Maximum string length: 100
customer_number
string

Customer's phone number or identifier. Example:

  • "+1234567890"
  • "customer_abc123"
Maximum string length: 100
agent
integer | null

Agent ID

call_id
string

Unique identifier for the call. Example:

  • "call_abc123xyz"
  • "stereo_audio_session_456"
Maximum string length: 100
timestamp
string<date-time>

When the call occurred. Example: 2024-03-15T10:15:45Z

error_message
string | null
dropoff_point
string

Point in conversation where user disengaged. Example: "end of conversation as no queries remaining"

Maximum string length: 1000
topic
string

Topic of the call. Example:

  • "product_inquiry"
  • "technical_support"
Maximum string length: 1000
created_at
string<date-time>

When this record was created. Example: 2024-03-15T10:30:45Z

updated_at
string<date-time>

When this record was last updated. Example: 2024-03-15T10:35:11Z