Skip to main content
Tool calling lets a PAL trigger code while a conversation is happening - look something up, write to a CRM, hit a third-party API, or notify your frontend. Tools are reusable objects: create them once, and attach them to any number of PALs.
Skills vs tools: Tools are functions you define and attach for the LLM or Raven to call. Skills are Tavus-authored capabilities (search, presentation, Magic Canvas, etc.) you attach from the skill registry. A PAL can use both.

Tool Types

In-Call Tools

In-call tools fire during the conversation. Pick the type by setting origin 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. Set trigger_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 using type=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_call event 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.
See Tool Delivery for the request shape, URL templating, and response handling. See Tool Authentication for the auth types and how they map to outgoing headers.

Quick Start

  1. Create the tool at /v2/tools with a name, description, parameters JSON Schema, origin, and delivery.
  2. Attach it to a PAL at /v2/pals/{pal_id}/tools.
  3. 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.