Get PAL
curl --request GET \
--url https://tavusapi.com/v2/pals/{pal_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://tavusapi.com/v2/pals/{pal_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://tavusapi.com/v2/pals/{pal_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://tavusapi.com/v2/pals/{pal_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://tavusapi.com/v2/pals/{pal_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://tavusapi.com/v2/pals/{pal_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://tavusapi.com/v2/pals/{pal_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"pal_id": "pcb7a34da5fe",
"pal_name": "Life Coach",
"system_prompt": "As a Life Coach, you are a dedicated professional who specializes in...",
"callback_url": "https://yourwebsite.com/webhook",
"greeting": "Hey there! What can I help you with today?",
"dynamic_greeting": false,
"default_face_id": "rc9cff32ceba",
"conferencing_email": "acme-anna@tavusinvite.com",
"disclosure_type": "auto",
"verbal_disclosure": "Just so you know, you're speaking with an AI agent from Acme.",
"visual_disclosure": "You are speaking with an AI agent.",
"document_ids": [
"d1234567890",
"d2468101214"
],
"document_tags": [
"product_info",
"company_policies"
],
"layers": {
"llm": {
"model": "<string>",
"base_url": "your-base-url",
"api_key": "your-api-key",
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
]
}
},
"required": [
"location"
]
}
}
}
],
"headers": {
"Authorization": "Bearer your-api-key"
},
"extra_body": {
"temperature": 0.7,
"top_p": 0.9
}
},
"tts": {
"api_key": "your-api-key",
"tts_engine": "tavus-auto",
"voice_id": "v0a1b2c3d4e5f",
"external_voice_id": "external-voice-id",
"voice_settings": {
"speed": 0.5,
"emotion": [
"positivity:high",
"curiosity"
]
},
"tts_model_name": "sonic-3",
"pronunciation_dictionary_id": "pd_abc123def456"
},
"perception": {
"perception_model": "raven-1",
"callouts": "off",
"emotion_recognition": "auto",
"perception_analysis_queries": [
"Which error messages appeared on the shared screen?"
],
"visual_awareness_queries": [
"Is the user showing an ID card?",
"Does the user appear distressed or uncomfortable?"
],
"visual_tool_prompt": "You have a tool to notify the system when an ID card is detected, named `notify_if_id_shown`. You MUST use this tool when a form of ID is detected.",
"visual_tools": [
{
"type": "function",
"function": {
"name": "notify_if_id_shown",
"description": "Use this function when a drivers license or passport is detected in the image with high confidence. After collecting the ID, internally use final_ask()",
"parameters": {
"type": "object",
"properties": {
"id_type": {
"type": "string",
"description": "best guess on what type of ID it is"
}
},
"required": [
"id_type"
]
}
}
}
],
"screen_awareness_queries": [
"What error message is visible on the shared screen?"
],
"screen_tool_prompt": "Call notify_screen_error when an error dialog appears on the shared screen.",
"audio_awareness_queries": [
"Does the user sound frustrated or confused?",
"Is the user speaking quickly as if in a hurry?"
],
"audio_tool_prompt": "You have a tool to escalate to a human agent when the user sounds very frustrated, named `escalate_to_human`. Use this tool when detecting sustained frustration.",
"audio_tools": [
{
"type": "function",
"function": {
"name": "escalate_to_human",
"description": "Escalate the conversation to a human agent when user frustration is detected",
"parameters": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "The reason for escalation"
}
},
"required": [
"reason"
]
}
}
}
]
},
"stt": {
"stt_engine": "tavus-auto",
"hotwords": "This is a hotword example"
},
"conferencing": {
"username": "acme-anna",
"allowlist": [
"alex@acme.com",
".*@acme\\.com"
]
},
"mcp": {
"connectors": [
"c8-58ea0f6420b2"
],
"connector_tools": {
"c8-58ea0f6420b2": [
"search_messages",
"list_channels"
]
},
"prompt": "Use search_jobs to find jobs and get_job for details; always filter jobs by the technician's name.",
"spoken_updates": "outcome",
"visual_updates": "outcome"
}
},
"created_at": "",
"updated_at": "<string>"
}{
"error": "Invalid pal_id"
}{
"message": "Invalid access token"
}PAL
Get PAL
Returns a single PAL by its unique identifier.
GET
/
v2
/
pals
/
{pal_id}
Get PAL
curl --request GET \
--url https://tavusapi.com/v2/pals/{pal_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://tavusapi.com/v2/pals/{pal_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://tavusapi.com/v2/pals/{pal_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://tavusapi.com/v2/pals/{pal_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://tavusapi.com/v2/pals/{pal_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://tavusapi.com/v2/pals/{pal_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://tavusapi.com/v2/pals/{pal_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"pal_id": "pcb7a34da5fe",
"pal_name": "Life Coach",
"system_prompt": "As a Life Coach, you are a dedicated professional who specializes in...",
"callback_url": "https://yourwebsite.com/webhook",
"greeting": "Hey there! What can I help you with today?",
"dynamic_greeting": false,
"default_face_id": "rc9cff32ceba",
"conferencing_email": "acme-anna@tavusinvite.com",
"disclosure_type": "auto",
"verbal_disclosure": "Just so you know, you're speaking with an AI agent from Acme.",
"visual_disclosure": "You are speaking with an AI agent.",
"document_ids": [
"d1234567890",
"d2468101214"
],
"document_tags": [
"product_info",
"company_policies"
],
"layers": {
"llm": {
"model": "<string>",
"base_url": "your-base-url",
"api_key": "your-api-key",
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": [
"celsius",
"fahrenheit"
]
}
},
"required": [
"location"
]
}
}
}
],
"headers": {
"Authorization": "Bearer your-api-key"
},
"extra_body": {
"temperature": 0.7,
"top_p": 0.9
}
},
"tts": {
"api_key": "your-api-key",
"tts_engine": "tavus-auto",
"voice_id": "v0a1b2c3d4e5f",
"external_voice_id": "external-voice-id",
"voice_settings": {
"speed": 0.5,
"emotion": [
"positivity:high",
"curiosity"
]
},
"tts_model_name": "sonic-3",
"pronunciation_dictionary_id": "pd_abc123def456"
},
"perception": {
"perception_model": "raven-1",
"callouts": "off",
"emotion_recognition": "auto",
"perception_analysis_queries": [
"Which error messages appeared on the shared screen?"
],
"visual_awareness_queries": [
"Is the user showing an ID card?",
"Does the user appear distressed or uncomfortable?"
],
"visual_tool_prompt": "You have a tool to notify the system when an ID card is detected, named `notify_if_id_shown`. You MUST use this tool when a form of ID is detected.",
"visual_tools": [
{
"type": "function",
"function": {
"name": "notify_if_id_shown",
"description": "Use this function when a drivers license or passport is detected in the image with high confidence. After collecting the ID, internally use final_ask()",
"parameters": {
"type": "object",
"properties": {
"id_type": {
"type": "string",
"description": "best guess on what type of ID it is"
}
},
"required": [
"id_type"
]
}
}
}
],
"screen_awareness_queries": [
"What error message is visible on the shared screen?"
],
"screen_tool_prompt": "Call notify_screen_error when an error dialog appears on the shared screen.",
"audio_awareness_queries": [
"Does the user sound frustrated or confused?",
"Is the user speaking quickly as if in a hurry?"
],
"audio_tool_prompt": "You have a tool to escalate to a human agent when the user sounds very frustrated, named `escalate_to_human`. Use this tool when detecting sustained frustration.",
"audio_tools": [
{
"type": "function",
"function": {
"name": "escalate_to_human",
"description": "Escalate the conversation to a human agent when user frustration is detected",
"parameters": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "The reason for escalation"
}
},
"required": [
"reason"
]
}
}
}
]
},
"stt": {
"stt_engine": "tavus-auto",
"hotwords": "This is a hotword example"
},
"conferencing": {
"username": "acme-anna",
"allowlist": [
"alex@acme.com",
".*@acme\\.com"
]
},
"mcp": {
"connectors": [
"c8-58ea0f6420b2"
],
"connector_tools": {
"c8-58ea0f6420b2": [
"search_messages",
"list_channels"
]
},
"prompt": "Use search_jobs to find jobs and get_job for details; always filter jobs by the technician's name.",
"spoken_updates": "outcome",
"visual_updates": "outcome"
}
},
"created_at": "",
"updated_at": "<string>"
}{
"error": "Invalid pal_id"
}{
"message": "Invalid access token"
}For AI agents, use
https://docs.tavus.io/openapi.yaml for the full HTTP API contract.Pending edits from PAL Maker are not returned unless the deployments have been updated. See PAL editing lifecycle.
Response
AI disclosure setting for EU AI Act compliance. always, auto (default, follows the conversation's policy param), or off.
Available options:
always, auto, off Example:
"auto"
Array of document IDs that the PAL has access to. These documents will be available to the PAL in all their conversations. The document_ids are returned in the response of the Get Document and the Create Document endpoints.
Example:
["d1234567890", "d2468101214"]

