Tubussie
02/26/2026, 3:31 AMAI Evy
02/26/2026, 3:31 AMAI Evy
02/26/2026, 3:31 AMcall_analyzed webhook instead of polling the API repeatedly. [(1) ]()
Here's how to set it up:
1. Configure your webhook to listen for the call_analyzed event type. [(2) ]()
2. Wait for the webhook — Post-call analysis results are typically available within seconds of the call ending and will be pushed to your endpoint automatically. [(1) ]()
3. Access the data — The call_analysis field in the webhook payload contains your custom analysis data including custom_analysis_data. [(3) ]()
Important notes:
- Post-call analysis fields will not be populated for calls that were not connected or where no conversation took place — check whether the field exists before using it. [(4) ]()
- If you have data storage opt-out enabled, post-call analysis will not run. You would need to disable that setting for analysis to work. [(5) ]()
- If using Make (Integromat) , use the "keep or use current data" option to grab the analyzed data, and check the webhook queue (truck icon) for unprocessed webhooks. [(6) ]()
For more details on consuming post-call analysis via webhooks: [Post Call Analysis Overview]()AI Evy
02/26/2026, 3:31 AMAI Evy
02/26/2026, 3:31 AMTubussie
02/26/2026, 3:32 AMAI Evy
02/26/2026, 3:32 AMAI Evy
02/26/2026, 3:32 AMcall_analyzed event type.
3. Handle the webhook payload — when a call is analyzed, you'll receive the full call data including the call_analysis object automatically. [(1) ]()
Here's sample code for handling the webhook:
javascript
app.post("/webhook", (req: Request, res: Response) => {
if (
!Retell.verify(
JSON.stringify(req.body) ,
process.env.RETELL_API_KEY,
req.headers["x-retell-signature"] as string,
)
) {
console.error("Invalid signature") ;
return;
}
const {event, call} = req.body;
switch (event) {
case "call_analyzed":
console.log("Call analyzed event received", call.call_id) ;
break;
}
res.status(204) .send() ;
}) ;AI Evy
02/26/2026, 3:32 AMdial_no_answer) , the call_analyzed webhook may not trigger since no analysis is performed when no conversation occurred. [(4) ]()
For webhook configuration details: [Webhook Overview]()AI Evy
02/26/2026, 3:32 AMAI Evy
02/26/2026, 3:32 AMTubussie
02/26/2026, 3:34 AMAI Evy
02/26/2026, 3:34 AMAI Evy
02/26/2026, 3:34 AMcall_inbound, and for inbound SMS/chat, you use chat_inbound.
[(1) ]()
The webhook will POST the payload to your endpoint with the same timeout (10 seconds) and retry behavior (up to 3 times) for both.
Key differences in the payload:
- For inbound calls, the event field is "event": "call_inbound"
- For inbound SMS/chat, the event field is "event": "chat_inbound"
Response format:
- For calls: respond with call_inbound object containing your overrides
- For SMS/chat: respond with chat_inbound object (simply replace call_inbound with chat_inbound in your response)
The same fields are available for override in both cases, including override_agent_id, dynamic_variables, metadata, and agent_override.
Check out these potentially useful sources for more details:
- [Inbound webhook]()
- [Webhook Overview]()AI Evy
02/26/2026, 3:34 AMAI Evy
02/26/2026, 3:34 AM