Manjot Singh
01/06/2026, 12:40 PMAI Evy
01/06/2026, 12:40 PMAI Evy
01/06/2026, 12:40 PMcall_started — Only contains basic call info (call_id, agent_id, call_status, etc.) [(1) ]()
- call_ended — Includes transcript, recording_url, and public_log_url
- call_analyzed — Provides the call_analysis object with call_summary
Key things to check:
1. Which webhook event are you listening for? If you're only handling call_started, you won't receive transcript data since it's not available until the call ends.
2. Has the call actually ended? The transcript field is only available after call ends. [(2) ]()
3. Are you subscribed to the correct event types? Make sure you're listening for call_ended or call_analyzed events to receive transcript and analysis data. [(1) ]()
Expected data in call response after call ends: [(2) ]()
- transcript — Full transcription of the call
- transcript_object — Transcript as a list of utterances with timestamps
- recording_url — Recording of the call
- call_analysis — Post-call analysis including summary and sentiment (available after call_analyzed event)
Which webhook event type are you currently handling?AI Evy
01/06/2026, 12:40 PMAI Evy
01/06/2026, 12:40 PMManjot Singh
01/06/2026, 12:42 PMManjot Singh
01/06/2026, 12:42 PMAI Evy
01/06/2026, 12:42 PMAI Evy
01/06/2026, 12:43 PMcall_summary is part of the call_analysis object, which is only available after the call_analyzed event — not in call_ended. [(1) ]()
Webhook event data differences:
| Event Type | Data Included |
|------------|---------------|
| call_started | Basic call information |
| call_ended | All fields from the call object except call_analysis |
| call_analyzed | Full call data including call_analysis object |
To receive the call summary:
1. Subscribe to the call_analyzed webhook event type
2. Handle it in your webhook endpoint: [(2) ]()
javascript
app.post("/webhook", (req: Request, res: Response) => {
const {event, call} = req.body;
switch (event) {
case "call_started":
console.log("Call started event received", call.call_id) ;
break;
case "call_ended":
console.log("Call ended event received", call.call_id) ;
break;
case "call_analyzed":
console.log("Call analyzed event received", call.call_id) ;
break;
default:
console.log("Received an unknown event:", event) ;
}
// Acknowledge the receipt of the event
res.status(204) .send() ;
}) ;
The call_analysis object includes call_summary, user_sentiment, call_successful, and custom_analysis_data. [(3) ]()
Are you currently listening for the call_analyzed event specifically?AI Evy
01/06/2026, 12:43 PMAI Evy
01/06/2026, 12:43 PMManjot Singh
01/06/2026, 12:44 PMManjot Singh
01/06/2026, 12:44 PMAI Evy
01/06/2026, 12:44 PMAI Evy
01/06/2026, 12:45 PMoutbound_agent_id or inbound_agent_id configured depending on call direction. [(2) ]()
3. Webhook Timeout & Retries
The webhook has a timeout of 10 seconds. If within 10 seconds no success status (2xx) is received, the webhook will be retried, up to 3 times. [(3) ]()
4. Calls That Don't Connect
When the call did not connect (like calls with dial_failed, dial_no_answer, dial_busy disconnection reason) , it will not have its call_started webhook triggered. It will still have its call_ended and call_analyzed webhook triggered.
To debug:
- Check if the phone number is assigned to the same agent you're testing with in the browser
- Verify your webhook URL is accessible from the internet
- Check your server logs to see if any requests are coming through at all
Can you confirm that the phone number is linked to the same agent that works with browser testing?AI Evy
01/06/2026, 12:45 PMAI Evy
01/06/2026, 12:45 PMManjot Singh
01/06/2026, 12:45 PMManjot Singh
01/06/2026, 12:46 PMAI Evy
01/06/2026, 12:46 PMAI Evy
01/06/2026, 12:46 PMbash
curl --location 'localhost:8080/webhook' \
--header 'Content-Type: application/json' \
--data '{
"event": "call_ended",
"call": {
"call_type": "phone_call",
"from_number": "+12137771234",
"to_number": "+12137771235",
"direction": "inbound",
"call_id": "Jabr9TXYYJHfvl6Syypi88rdAHYHmcq6",
"agent_id": "oBeDLoLOeuAbiuaMFXRtDOLriTJ5tSxD",
"call_status": "registered",
"metadata": {},
"retell_llm_dynamic_variables": {
"customer_name": "John Doe"
},
"start_timestamp": 1714608475945,
"end_timestamp": 1714608491736,
"disconnection_reason": "user_hangup",
"transcript": "...",
"opt_out_sensitive_data_storage": false
}
}'
2. Check Webhook Response
Your endpoint must return a successful status code (2xx) within 10 seconds. [(2) ]()
3. Alternative: Retrieve Call Data via API
If webhooks aren't working for phone calls, you can retrieve the full call data (including transcript and call_analysis) using the Get Call API after the call ends: [(3) ]()
javascript
import Retell from 'retell-sdk';
const client = new Retell({
apiKey: 'YOUR_RETELL_API_KEY',
}) ;
const callResponse = await client.call.retrieve('119c3f8e47135a29e65947eeb34cf12d') ;
console.log(callResponse) ;AI Evy
01/06/2026, 12:46 PMAI Evy
01/06/2026, 12:46 PMAI Evy
01/06/2026, 12:46 PM