> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tavus.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> How tool calling works on Tavus - the two tool types, the two delivery channels, and where to find each detail.

**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.

<Note>
  **Skills vs tools:** [Tools](/sections/conversational-video-interface/pal/tools) are functions **you** define and attach for the LLM or Raven to call. [Skills](/sections/conversational-video-interface/skills/overview) are Tavus-authored capabilities (search, presentation, Magic Canvas, etc.) you attach from the skill registry. A PAL can use both.
</Note>

## 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](/sections/conversational-video-interface/pal/llm-tool)               |
| **Perception tool** | What Raven **sees or hears** in the audio/video streams.                  | [Tool Calling for Perception](/sections/conversational-video-interface/pal/perception-tool) |

Pick by setting `origin` on the tool: `"llm"`, `"vision"`, or `"audio"`. A single PAL can hold both types.

## Post-call actions

[Post-call actions](/sections/conversational-video-interface/pal/post-call-tool) 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. Set `trigger_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_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](/sections/conversational-video-interface/pal/llm-tool-delivery) for the request shape, URL templating, and response handling. See [Tool Authentication](/sections/conversational-video-interface/pal/llm-tool-auth) 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.

<Note>
  **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](/sections/troubleshooting#legacy-inline-tool-calling) for how it behaves and how to migrate.
</Note>
