Skip to main content

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

ai_agent.tool_called

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:
CategoryEvents
Sessionssession.created, session.started, session.ended
Providersession.provider.connected, session.provider.disconnected
Transcriptstranscript.ready, transcript.segment
Recordingsrecording.ready, recording.failed
Analysisanalysis.complete, analysis.failed
AI Agentai_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.