List PALs
curl --request GET \
--url https://tavusapi.com/v2/pals \
--header 'x-api-key: <api-key>'import requests
url = "https://tavusapi.com/v2/pals"
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', 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",
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"
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")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://tavusapi.com/v2/pals")
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{
"data": [
{
"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"
]
}
}
}
]
},
"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"
]
}
},
"created_at": "",
"updated_at": "<string>"
}
],
"total_count": 123
}{
"message": "Invalid access token"
}PAL
List PALs
This endpoint returns a list of all PALs created by the account associated with the API Key in use.
GET
/
v2
/
pals
List PALs
curl --request GET \
--url https://tavusapi.com/v2/pals \
--header 'x-api-key: <api-key>'import requests
url = "https://tavusapi.com/v2/pals"
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', 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",
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"
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")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://tavusapi.com/v2/pals")
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{
"data": [
{
"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"
]
}
}
}
]
},
"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"
]
}
},
"created_at": "",
"updated_at": "<string>"
}
],
"total_count": 123
}{
"message": "Invalid access token"
}For AI agents, use
https://docs.tavus.io/openapi.yaml for the full HTTP API contract.
