Skip to main content
POST
/
observability
/
v1
/
observe
Ingest a production call (webhook)
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": "<string>",
  "agent": 123,
  "assistant_id": "<string>",
  "voice_recording": "<string>",
  "voice_recording_url": "<string>",
  "transcript_json": "<unknown>",
  "call_ended_reason": "<string>",
  "customer_number": "<string>",
  "metadata": "<unknown>",
  "timestamp": "2023-11-07T05:31:56Z",
  "dynamic_variables": "<unknown>",
  "feedback": "<string>",
  "redact_fields": [],
  "metric_ids": "<string>",
  "main_agent_channel_index": 123
}
'
{
  "call_id": "<string>",
  "id": 123,
  "duration": "<string>",
  "success": true,
  "is_reviewed": true,
  "feedback": "<string>",
  "metrics": [
    {
      "id": 123,
      "name": "<string>",
      "type": "<string>",
      "score": 123,
      "enum": "<string>",
      "value": "<string>"
    }
  ],
  "call_ended_reason": "<string>",
  "customer_number": "<string>",
  "agent": 123,
  "agent_name": "<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",
  "transcript": "<string>",
  "transcript_object": "<unknown>",
  "evaluation": "<string>"
}

Documentation Index

Fetch the complete documentation index at: https://docs.cekura.ai/llms.txt

Use this file to discover all available pages before exploring further.

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>
write-only

Format 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 format
  • elevenlabs — ElevenLabs format
  • livekit — LiveKit format
  • pipecat — Pipecat format
  • deepgram — Deepgram format
  • cekura (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.
  • none-mono — mono audio with no transcript; Cekura generates the transcript automatically.

Omit this field to use the default Cekura format.

  • 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
metric_ids
string
write-only

Comma-separated metric IDs to evaluate for this call. Example: "118,119". To run metrics after the call is created, use the evaluate_metrics endpoint instead.

main_agent_channel_index
integer | null

Channel index (0 or 1) of the main agent in stereo recordings. When provided, skips automatic channel detection. Example: 0 means channel 0 is the main agent, channel 1 is the customer/testing agent.

Response

call_id
string
required

Unique identifier for the call. Example:

  • "call_abc123xyz"
  • "stereo_audio_session_456"
Maximum string length: 100
id
integer
read-only
duration
string
read-only

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[]
read-only

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

agent_name
string
read-only

Agent name

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>
read-only

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

updated_at
string<date-time>
read-only

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

transcript
string

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.
transcript_object
any | null

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
    }
]`
evaluation
string
read-only

Evaluation of the call