v52

OpenAPI 3.1.0raw.githubusercontent.com2026-07-311,1941,9384.1 MB
Callbacks

Call Conversation Ended

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.

postWebhookcallConversationEnded

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": {
    "created_at": "2025-05-29T13:35:38.927621Z",
    "event_type": "call.conversation.ended",
    "id": "eb8775a6-634f-48b0-b177-d5465a8a8e9f",
    "occurred_at": "2025-05-29T13:35:38.817785Z",
    "payload": {
      "assistant_id": "assistant-d9082b56-ba2d-4ad1-a50c-58661eb1463d",
      "call_control_id": "v3:HDR1vQHx697hpP9xZ0bhlbUOWPFPDtPcxw-nuSMuC6mGVpb0euoklQ",
      "call_leg_id": "cc29cce6-3c91-11f0-a8e5-02420aef3d20",
      "call_session_id": "cc29c8d6-3c91-11f0-aa7c-02420aef3d20",
      "calling_party_type": "sip",
      "client_state": "g3QAAAACbQAAAAtkYXRhX2NlbnRlcm0AAAADY2gxbQAAAApkZXBsb3ltZW50bQAAAARiYXNl",
      "connection_id": "2694492062593582591",
      "conversation_id": "0424805b-adc1-4ff8-9f95-e1de6883ecbe",
      "duration_sec": 3,
      "from": "+13124287921",
      "llm_model": "openai/gpt-4o",
      "reason": "customer_disconnect",
      "stt_model": "distil-whisper/distil-large-v2",
      "to": "jamesw@assistant-d9082b56-ba2d-4ad1-a50c-58661eb1463d.sip.telnyx.com",
      "tts_model_id": "Natural",
      "tts_provider": "telnyx",
      "tts_voice_id": "Marissa"
    },
    "record_type": "event"
  }
}

Response

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