Tool Types
In-Call Tools
In-call tools fire during the conversation. Pick the type by settingorigin on the tool: "llm", "vision", or "audio". A single PAL can hold both LLM and perception tools.
Post-Call Actions
Post-call actions 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.
System Tools
System tools are built-in tools Tavus provides. They are available on every conversation. You do not create them, attach them, update them, or delete them. List them with Get Tools usingtype=system (or type=all to see system tools first, then your tools). System tools have is_system_tool: true, owner_id: null, and use their name as the tool_id.
end_call
end_call is always available. The conversational LLM can invoke it when the call should end - for example after the participant says goodbye, after objectives are complete, or when your system prompt tells the PAL to wrap up.
Steer when the PAL uses it with the system prompt, objectives, or conversational context. You do not attach end_call to a PAL.
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.
