Webhook Events
This page documents all webhook events sent by Kallglot.
Session Events
session.created
Sent when a new session is created.
{
"id": "evt_01HXYZ123456789",
"type": "session.created",
"created_at": "2026-03-26T11:00:00Z",
"data": {
"id": "sess_01HXYZ123456789",
"object": "session",
"status": "created",
"mode": "bidirectional_translation",
"source_language": "de",
"target_language": "en",
"metadata": {
"customer_id": "cust_123"
},
"created_at": "2026-03-26T11:00:00Z"
}
}
session.started
Sent when a session becomes active (first audio received).
{
"id": "evt_01HXYZ123456790",
"type": "session.started",
"created_at": "2026-03-26T11:00:15Z",
"data": {
"id": "sess_01HXYZ123456789",
"object": "session",
"status": "active",
"mode": "bidirectional_translation",
"source_language": "de",
"target_language": "en",
"started_at": "2026-03-26T11:00:15Z"
}
}
session.ended
Sent when a session ends.
{
"id": "evt_01HXYZ123456791",
"type": "session.ended",
"created_at": "2026-03-26T11:04:20Z",
"data": {
"id": "sess_01HXYZ123456789",
"object": "session",
"status": "ended",
"mode": "bidirectional_translation",
"duration": 245.3,
"end_reason": "completed",
"recording": {
"id": "rec_01HABC987654321",
"duration": 245.3
},
"transcript": {
"available": true,
"word_count": 512
},
"started_at": "2026-03-26T11:00:15Z",
"ended_at": "2026-03-26T11:04:20Z"
}
}
session.provider.connected
Sent when a telephony provider call connects.
{
"id": "evt_01HXYZ123456792",
"type": "session.provider.connected",
"created_at": "2026-03-26T11:00:12Z",
"data": {
"session_id": "sess_01HXYZ123456789",
"provider": {
"type": "twilio",
"call_sid": "CA1234567890abcdef",
"status": "connected",
"from": "+4915123456789",
"to": "+14155551234"
}
}
}
session.provider.disconnected
Sent when a telephony provider call disconnects.
{
"id": "evt_01HXYZ123456793",
"type": "session.provider.disconnected",
"created_at": "2026-03-26T11:04:18Z",
"data": {
"session_id": "sess_01HXYZ123456789",
"provider": {
"type": "twilio",
"call_sid": "CA1234567890abcdef",
"status": "disconnected",
"disconnect_reason": "customer_hangup",
"duration": 245
}
}
}
Transcript Events
transcript.ready
Sent when the full transcript is available after a session ends.
{
"id": "evt_01HXYZ123456794",
"type": "transcript.ready",
"created_at": "2026-03-26T11:04:30Z",
"data": {
"session_id": "sess_01HXYZ123456789",
"word_count": 512,
"segment_count": 45,
"duration": 245.3,
"languages": ["de", "en"]
}
}
transcript.segment
Sent in real-time for each transcript segment. Only delivered if you subscribe to real-time events.
{
"id": "evt_01HXYZ123456795",
"type": "transcript.segment",
"created_at": "2026-03-26T11:02:15Z",
"data": {
"session_id": "sess_01HXYZ123456789",
"segment": {
"id": "seg_042",
"speaker": "customer",
"language": "de",
"text": "Wann wird meine Bestellung geliefert?",
"translation": "When will my order be delivered?",
"start_time": 125.3,
"end_time": 128.1,
"is_final": true
}
}
}
Recording Events
recording.ready
Sent when a recording is processed and available for download.
{
"id": "evt_01HXYZ123456796",
"type": "recording.ready",
"created_at": "2026-03-26T11:05:00Z",
"data": {
"id": "rec_01HABC987654321",
"object": "recording",
"session_id": "sess_01HXYZ123456789",
"channel": "mixed",
"duration": 245.3,
"format": "mp3",
"size": 2943600,
"download_url": "https://storage.kallglot.com/recordings/rec_01HABC987654321?signature=xxx"
}
}
recording.failed
Sent when recording generation fails.
{
"id": "evt_01HXYZ123456797",
"type": "recording.failed",
"created_at": "2026-03-26T11:05:00Z",
"data": {
"session_id": "sess_01HXYZ123456789",
"error": {
"code": "recording_generation_failed",
"message": "Failed to generate recording due to audio processing error"
}
}
}
Analysis Events
analysis.complete
Sent when session analysis is complete.
{
"id": "evt_01HXYZ123456798",
"type": "analysis.complete",
"created_at": "2026-03-26T11:10:30Z",
"data": {
"id": "ana_01HDEF456789012",
"object": "analysis",
"session_id": "sess_01HXYZ123456789",
"status": "complete",
"results": {
"sentiment": {
"overall": 0.72,
"label": "positive"
},
"summary": {
"brief": "Customer inquired about order status. Agent confirmed delivery date."
},
"action_items": [
{
"description": "Send tracking number to customer",
"assignee": "agent",
"priority": "high"
}
],
"quality": {
"score": 85
}
}
}
}
analysis.failed
Sent when analysis fails.
{
"id": "evt_01HXYZ123456799",
"type": "analysis.failed",
"created_at": "2026-03-26T11:10:30Z",
"data": {
"id": "ana_01HDEF456789012",
"session_id": "sess_01HXYZ123456789",
"error": {
"code": "analysis_failed",
"message": "Unable to analyze transcript due to insufficient content"
}
}
}
AI Agent Events
Sent when an AI agent invokes a tool/function.
{
"id": "evt_01HXYZ123456800",
"type": "ai_agent.tool_called",
"created_at": "2026-03-26T11:02:30Z",
"data": {
"session_id": "sess_01HXYZ123456789",
"tool": {
"name": "lookup_order",
"arguments": {
"order_number": "12345"
},
"call_id": "call_abc123"
}
}
}
ai_agent.escalation_requested
Sent when an AI agent requests human escalation.
{
"id": "evt_01HXYZ123456801",
"type": "ai_agent.escalation_requested",
"created_at": "2026-03-26T11:03:00Z",
"data": {
"session_id": "sess_01HXYZ123456789",
"reason": "Customer requested to speak with a human",
"context": {
"summary": "Customer has billing dispute that requires manager approval",
"sentiment": "frustrated"
}
}
}
Subscribing to Events
In the Developer Portal, you can select which events to receive for each webhook endpoint:
| Category | Events |
|---|
| Sessions | session.created, session.started, session.ended |
| Provider | session.provider.connected, session.provider.disconnected |
| Transcripts | transcript.ready, transcript.segment |
| Recordings | recording.ready, recording.failed |
| Analysis | analysis.complete, analysis.failed |
| AI Agent | ai_agent.tool_called, ai_agent.escalation_requested |
Real-time events like transcript.segment may generate high volumes. Consider using WebSocket streaming instead for real-time data.