Two in-call tool types
| Type | Triggered by | Pages |
|---|---|---|
| LLM tool | What the user says - the conversational LLM decides to call the tool. | Tool Calling for LLM |
| Perception tool | What Raven sees or hears in the audio/video streams. | Tool Calling for Perception |
origin on the tool: "llm", "vision", or "audio". A single PAL can hold both types.
Post-call actions
Post-call actions are a third pattern: they run once after the conversation ends, with Tavus filling open arguments from the transcript and perception analysis and delivering the call for you. Settrigger_type: "post_call" (and omit origin) instead of using in-call origin values.
Two delivery channels
Every tool dispatches via exactly one channel:- App message (default) - the call lands as a
conversation.tool_callevent your frontend handles. - API call - Tavus makes an HTTPS request to a URL you configure - your own callback endpoint or a third-party API directly.
Quick start
- Create the tool at
/v2/toolswith aname,description,parametersJSON Schema,origin, anddelivery. - Attach it to a PAL at
/v2/pals/{pal_id}/tools. - Start a conversation with that PAL; the tool is now callable.
Legacy inline tools: Older integrations define tools directly on the PAL (
layers.llm.tools, layers.perception.visual_tools, layers.perception.audio_tools). That path still runs for existing PALs but is deprecated for new work. See Legacy inline tool calling for how it behaves and how to migrate.
