Callbacks

Call analyzed

This webhook uses Telnyx headers (telnyx-timestamp, telnyx-signature-ed25519) that are compatible with Standard Webhooks specification for SDK generation. Custom validation logic can map these to standard webhook-timestamp and webhook-signature equivalents. See https://github.com/standard-webhooks/standard-webhooks for details.

Delivered after an AI assistant conversation ends and post-call processing completes. The payload consolidates the conversation's generated insights, its recordings, and the call's full cost breakdown (AI Voice Assistant engine minutes, LLM inference, call control, SIP trunking, recording).

postWebhookcallAnalyzed

Headers

telnyx-timestampinteger required

Unix timestamp for replay attack prevention

Unix timestamp (seconds since epoch) of when the webhook was sent - compatible with webhook-timestamp

telnyx-signature-ed25519string required

Ed25519 signature of timestamp|payload for verification

Base64 encoded Ed25519 signature for webhook verification - compatible with webhook-signature

Payload

Example payload

{
  "data": {
    "record_type": "event",
    "event_type": "call.analyzed",
    "id": "afa6f4ac-f569-575b-9127-75a2746cf0ab",
    "occurred_at": "2026-10-15T20:38:46.308491Z",
    "payload": {
      "assistant_id": "assistant-258e1b9b-aa09-5f71-a931-56fd3cf2eb1c",
      "call_control_id": "v3:b5aa7d950dfd551e916cc42bee82e56e-510c4d08",
      "call_leg_id": "9f4eec6d-19a9-503f-be41-024cfaf1d5a6",
      "call_session_id": "340a438e-f327-5f36-be97-e5c13bde3a05",
      "client_state": "g3QAAAACbQAAAAtkYXRhX2NlbnRlcm0AAAADY2gxbQAAAApkZXBsb3ltZW50bQAAAARiYXNl",
      "connection_id": "1294850382059482660",
      "conversation_id": "dc76aa9a-a1c2-5e6b-aed4-6775fe240151",
      "conversation_insights": [
        {
          "conversation_insights": [
            {
              "insight_id": "6c5018ff-25a2-5364-b6be-f53de3d493c6",
              "result": "The user called the voice assistant to schedule a dental appointment. The assistant confirmed availability for Tuesday at 10:00 AM and transferred the call to the office scheduling line to complete the booking."
            }
          ],
          "status": "completed"
        }
      ],
      "cost": {
        "breakdown": [
          {
            "cost": "0.050000",
            "product": "ai-voice-assistant"
          },
          {
            "cost": "0.003600",
            "product": "callcontrol-cdrs"
          },
          {
            "cost": "0.000900",
            "product": "inference"
          },
          {
            "cost": "0.000800",
            "product": "recording-cdrs"
          },
          {
            "cost": "0.005000",
            "product": "siptrunking-cdrs"
          }
        ],
        "currency": "USD",
        "total": "0.060300"
      },
      "duration_sec": 37,
      "from": "+131****7421",
      "llm_model": "moonshotai/Kimi-K2.6",
      "reason": "normal",
      "recordings": [
        {
          "channels": "dual",
          "download_urls": {
            "mp3": "https://us-central-1.telnyxcloudstorage.com/recordings/06069104-45f7-5d17-9fa7-34cfeb4534fa/2026-10-15/9f4eec6d-19a9-503f.mp3"
          },
          "end_time": "2026-10-15T20:34:52.395814Z",
          "format": "mp3",
          "id": "850f003e-1278-5d6b-baf2-918aae3031dc",
          "start_time": "2026-10-15T20:34:07.955834Z"
        }
      ],
      "stt_model": "deepgram/flux",
      "to": "+131****4802",
      "tts_model_id": "Ultra",
      "tts_provider": "telnyx",
      "tts_voice_id": "c80920a7-535c-5d39-b630-8ddf52d5a4f0"
    }
  }
}

Response

The server must return an HTTP 200, otherwise we will reattempt delivery at the failover webhook URL.

Changes

Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.