Create Tool
Create a standalone tool that can be attached to one or more PALs via Attach Tools To PAL.
In-call tools (trigger_type: in_call, default) are invoked during the conversation by an LLM (origin: llm) or a perception model (origin: vision / origin: audio).
Post-call actions (trigger_type: post_call) run once after the conversation ends; omit origin and set delivery.api (HTTPS webhook). See Post-Call Actions.
Every tool dispatches via exactly one delivery channel:
delivery.app_message: true(default) - calls land on your frontend as aconversation.tool_callevent over the Daily data channel.delivery.api- Tavus makes an HTTPS request to a URL you configure. Supports five auth types and{placeholder}templating in the URL path, query string, and body.
See Tools Overview, LLM Tool Delivery, and LLM Tool Auth for the conceptual model.
Authorizations
Body
Function name the LLM uses to call the tool. Must match OpenAI function-naming rules (letters, digits, underscores; must start with a letter or underscore; max 64 characters) and be unique within your account.
"get_weather"
Natural-language description used by the LLM to decide when to call the tool. description plus the serialized parameters together must be at most 10000 characters.
"Get the current weather for a city"
JSON Schema describing the tool's arguments. Follows the standard OpenAI function-calling shape. Property names starting with tavus_ are reserved for Tavus-injected placeholders and are rejected.
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name"
}
},
"required": ["city"]
}How the tool call is dispatched. Exactly one channel must be enabled:
app_message: truealone - the call is delivered to your frontend over the Daily data channel as aconversation.tool_callevent.apiset withapp_message: false- Tavus makes an HTTPS request toapi.url.
If delivery is omitted on create, the default is { "app_message": true }.
When the tool runs. in_call (default) offers the tool during the live conversation. post_call runs once after the conversation ends; omit origin and set delivery.api (HTTPS webhook). See Post-Call Actions.
in_call, post_call "in_call"
Live modality for in-call tools only. Required when trigger_type is in_call (defaults to llm). Must be omitted or null for post_call tools.
llm, vision, audio "llm"
What the PAL does while the tool call is in flight. generate_filler (default for llm tools) lets the LLM speak a contextual filler line. static_filler plays the static_filler string verbatim. silent says nothing. passthrough skips filler entirely. Must be null for perception tools.
generate_filler, static_filler, silent, passthrough "generate_filler"
what the PAL does after the tool returns. generate_response re-prompts the LLM with the result so it can answer naturally. response_in_result speaks the response text returned by your endpoint verbatim. add_to_context silently adds the result to conversation context. fire_and_forget ignores the result. Perception tools must use fire_and_forget.
generate_response, response_in_result, add_to_context, fire_and_forget "generate_response"
Phrase the PAL speaks while the tool call is in flight. Required when on_call is static_filler; must be null for perception tools.
"Sure, let me grab that for you."
Response
Tool created
A standalone tool definition. Returned by every tool endpoint and embedded in the data array of the PAL-tool endpoints.
Unique identifier for the tool. System tools use their name as the tool_id (e.g. end_call).
"tabc123def456"
Internal user ID that owns the tool. null for built-in system tools.
3675
Function name the LLM uses to call the tool.
"get_weather"
Natural-language description of the tool.
"Get the current weather for a city"
JSON Schema describing the tool's arguments.
{
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name"
}
},
"required": ["city"]
}How the tool call is dispatched. Exactly one channel must be enabled:
app_message: truealone - the call is delivered to your frontend over the Daily data channel as aconversation.tool_callevent.apiset withapp_message: false- Tavus makes an HTTPS request toapi.url.
If delivery is omitted on create, the default is { "app_message": true }.
Whether this is a built-in system tool. System tools cannot be modified or deleted.
false
When the tool runs. post_call tools execute server-side after the conversation ends via delivery.api (HTTPS webhook).
in_call, post_call "in_call"
Live modality for in-call tools. Null for post-call tools.
llm, vision, audio "llm"
What the PAL does while the tool call is in flight. Always null for perception tools.
generate_filler, static_filler, silent, passthrough "generate_filler"
What the PAL does after the tool returns.
generate_response, response_in_result, add_to_context, fire_and_forget "generate_response"
Phrase the PAL speaks while the tool call is in flight. Set when on_call is static_filler.
"Sure, let me grab that for you."
ISO 8601 timestamp of when the tool was created.
"2026-05-15T10:30:00"
ISO 8601 timestamp of when the tool was last updated.
"2026-05-15T10:30:00"

