v1
latestOpenAPI 3.0.32026-07-267015229.9 KBPALs
Create PAL
Creates a PAL and configures how it behaves in CVI for every conversation that uses that PAL.
default_face_id is required on POST /v2/pals (unlike the legacy POST /v2/personas path, where default_replica_id was optional).
Legacy: /v2/personas and persona_id / default_replica_id remain supported as aliases.
post/v2/pals
Request body
Example request
{
"pal_name": "Life Coach",
"system_prompt": "As a Life Coach, you are a dedicated professional who specializes in...",
"default_face_id": "r90bbd427f71",
"document_ids": [
"d1234567890",
"d2468101214"
],
"document_tags": [
"product_info",
"company_policies"
],
"objectives_id": "o12345",
"guardrail_ids": [
"g1234567890ab",
"g0987654321cd"
],
"guardrail_tags": [
"compliance",
"healthcare"
],
"guardrails_id": "g12345",
"layers": {
"perception": {
"perception_model": "raven-1",
"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"
]
}
}
}
],
"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": "Roey is the name of the person you're speaking with."
},
"conversational_flow": {
"turn_detection_model": "sparrow-1",
"turn_taking_patience": "medium",
"pal_interruptibility": "medium",
"voice_isolation": "near",
"wake_phrase": "Hey Charlie",
"sleep_phrase": "Thanks Charlie",
"idle_engagement": "off"
},
"llm": {
"base_url": "your-base-url",
"api_key": "your-api-key",
"speculative_inference": true,
"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",
"external_voice_id": "external-voice-id",
"voice_settings": {
"speed": 0.5,
"emotion": [
"positivity:high",
"curiosity"
]
},
"tts_emotion_control": true,
"tts_model_name": "sonic-3",
"pronunciation_dictionary_id": "pd_abc123def456"
},
"conferencing": {
"username": "acme-anna",
"allowlist": [
"alex@acme.com",
".*@acme\\.com"
]
}
}
}Response
Example response
{
"pal_id": "pcb7a34da5fe",
"pal_name": "Life Coach",
"conferencing_email": "acme-anna@tavusinvite.com"
}