Skip to main content
Post-call actions run a tool automatically once a conversation ends. Unlike LLM and perception tool calling - which fire during the conversation and you handle in your own app - a post-call action runs after the call is over. Tavus fills its open arguments from the conversation transcript and perception analysis and delivers the call to your endpoint for you.
LLM and perception tools are surfaced to you as events to run yourself during the call. A post-call action is the opposite: it runs once, after the conversation ends, and Tavus delivers it for you - no client-side handling required.
Use a post-call action when something should happen once, after the call, based on what was discussed - for example: post a summary to Slack, create a CRM note or support ticket, or trigger a follow-up email.

How It Works

When a conversation ends, for each post-call action attached to the PAL:
  1. Tavus reads the conversation transcript and perception analysis.
  2. An AI step fills the action’s open arguments from that context - the fields you describe.
  3. Any fixed values you set are used exactly as provided.
  4. Tavus delivers an HTTPS request to your configured webhook endpoint.
Each action runs once per conversation. It is never shown to the model during the live conversation, so it can’t be triggered mid-call.
A post-call action needs a transcript to work from, so it won’t run for a conversation with no dialogue.

Defining a Post-Call Action

A post-call action is a tool you create with the Tools API, with three things set:

Parameters

Each parameter is either fixed or AI-filled:
Best practices:
  • Pin destinations and identifiers (channels, recipient IDs, record IDs) as fixed values so the AI never has to guess them.
  • Give every AI-filled field a precise description - it’s the biggest lever on the quality of what gets written.

Delivery

A post-call action uses the standard tool delivery field with delivery.api only. App-message delivery doesn’t apply once the call is over. Configure delivery.api with a URL, HTTP method, headers, body_template, and any auth. Tavus sends one HTTPS request to that endpoint when the action runs. See Tool Delivery for the request shape, URL templating, and response handling.

Example Configuration

A post-call action that posts a one-line summary to your backend. channel is pinned with a const; message is written by the AI from the transcript and perception analysis, and body_template maps both onto the request body. See the Tools API reference for the full request and Tool Delivery for the delivery model.
Create a post-call action

Observing Results

The delivery.api.url above is where the action fires - Tavus’s outbound request carrying your body_template. To see whether it actually ran and how it went, Tavus emits an application.post_call_action_executed event for each action it runs (one per attached post-call action), independent of how your endpoint responded. The event’s properties record the outcome: You can read it two ways:
  • Webhook - it’s delivered to the conversation’s callback_url, alongside the other conversation events. Branch on event_type == "application.post_call_action_executed".
  • Pull - it’s also returned on the verbose GET conversation response under events, so you can reconcile after the fact without running a webhook server.
application.post_call_action_executed

Attaching to a PAL

A post-call action runs for a PAL once you attach it, like any other tool - see Attach Tools to a PAL. Once attached, it runs after every conversation with that PAL.
Replace <api-key> with your actual API key when calling the Tools API. You can generate one in the PAL Maker.