curl --request PATCH \ --url https://{subdomain}.mihu.ai/api/v1/agents/{uuid} \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data @- <<EOF{ "name": "Volvo Cagliari Service Agent", "description": "Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.", "company_name": "Volvo Cagliari", "role": "Inbound service appointment scheduler for a Volvo dealership in Cagliari.", "objective": "Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.", "tone": "Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.", "behavior_guidelines": "Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.", "company_service": "Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.", "topic": "Service appointment booking and vehicle maintenance questions.", "length_detail": "Keep replies under 25 words for voice; under 200 characters for text. One question at a time.", "interest_of_product": "<string>", "negative_response": "If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.", "custom_prompt": "<string>", "language": "en", "timezone": "America/New_York", "appointment_scheduling_enabled": true, "appointment_scheduling_randomly": true, "custom_llm_url": "<string>", "settings": { "voice": { "interaction": { "customer_speak_first": false, "inbound_first_message": "Hi, this is Sara from Volvo. How can I help you today?", "outbound_first_message": "Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?", "voice_mail_message": "Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.", "end_call_message": "Thank you for calling, have a great day!", "silence_message": "Are you still there? I want to make sure I'm helping you with what you need.", "max_silence_prompts": 3 }, "interruption": { "mode": "balanced" }, "voice_profile": { "language": "en", "voice_uuid": "ebeba3e0-89b5-4c94-9841-9555ab155dbc", "voice_name": "Giulia" }, "call_behavior": { "audio_recording": true, "background_sound": true, "silence_timeout_seconds": 60, "max_call_duration_seconds": 1800, "max_call_duration_message": "Thanks for the call — we've reached the time limit. Goodbye!" }, "compliance": { "eu_gdpr_compliance": true, "hipaa_compliance": false }, "normalizers": { "outbound": {}, "inbound": {} } }, "text": { "daily_limits": { "daily_max_messages_per_conversation": 100, "daily_conversation_limit_exceeded_message": "<string>" }, "timing_and_delay": { "base_delay": 0.5, "pause_before_reply": 1, "typing_speed_wpm_min": 40, "typing_speed_wpm_max": 60, "typing_speed_char": 0.05, "delay_jitter_min": 0.1, "delay_jitter_max": 1.5 }, "typing_simulation": { "show_typing_indicator": true, "simulate_typing_breaks": true, "simulate_typos_corrections": false }, "working_hours": { "enabled": false, "start": "9 AM", "end": "5 PM", "timezone": "America/New_York", "outside_hours_behavior": "Auto-reply", "offline_message": "<string>", "during_hours_agent": "ai" }, "handover": { "enabled": false, "handover_triggers": "User request", "handover_method": "Assign agent", "handover_message": "<string>", "assignment_strategy": "First available", "handover_timeout": 60, "fallback_agent": "Bot assistant" }, "confidence_controls": { "min_confidence_threshold": 0.7, "ask_clarifying_questions": false }, "message_behavior": { "second_message_behavior": { "enabled": false, "chance": 0.25, "delay_min": 1, "delay_max": 4 }, "follow_up_behavior": { "enabled": false, "delay_min": 24, "delay_max": 48 } }, "personality": { "use_response_variations": true, "emoji_usage": "None", "use_punctuation_variation": false, "use_filler_words": false, "enable_small_talk": false, "energy_level": "Friendly", "empathy_level": "Medium" }, "advanced": { "split_messages": true, "simulate_message_editing": false, "use_memory_based_context": false, "human_first_mode": false } } }, "guidelines": [ { "content": "Always confirm vehicle VIN or license plate before creating a service appointment.", "order": 0 } ], "notes": [ { "content": "Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.", "order": 0 } ], "procedures": [ { "name": "Book service appointment", "description": "Used when the customer wants to schedule a service appointment for their vehicle.", "steps": [ { "order": 1, "description": "Ask the customer for their vehicle license plate or VIN.", "intent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a" } ] } ], "training": [ { "content": "What does Volvo's standard warranty cover?", "intent": "warranty_inquiry", "response": "Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?" } ], "appointments": { "enabled": true, "random_assignment": true, "schedule_assignments": [ { "schedule_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "Service Appointment", "description": "When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.", "slot_rules": { "offer_slots_from": "3_hours", "book_slots_from": "6_hours", "max_appointments_per_day": 10, "conflict_resolution_enabled": true, "alternative_slots_count": 3, "suggestion_priority": "nearest", "prefer_same_day": true, "prefer_same_time_slot": false, "include_same_week": true }, "rescheduling": { "policy": "always_ask", "minor_change_hours": 2, "minor_change_same_day": true, "minor_change_same_week": false, "minor_change_same_slot": false, "min_rescheduling_notice": "2_hours" }, "cancellation": { "min_cancellation_notice": "24_hours", "ai_can_cancel": false, "require_cancellation_reason": true, "cancellation_fee_policy": "no_fee" }, "questions": { "inherit_from_schedule": true, "custom_questions": [ { "name": "License plate", "type": "text", "description": "Vehicle license plate number for the service appointment.", "required": true } ] }, "approval": { "require_approval": true, "approval_threshold": "1_hour", "approval_for_create": false, "approval_for_reschedule": true, "approval_for_cancel": true, "approval_for_notes": false, "notify_calendar_owner": "always", "notify_admins": "always", "expected_response_time": "5_min" } } ] }, "routing_rules": [ { "detection_mode": "intent", "trigger_keyword": "sales", "department_name": "Sales Department", "phrases": [ "I want to talk to sales" ], "ai_prompt": "Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.", "voice_response": "Sure, I'll transfer you to our sales team now. One moment please.", "voice_on_error": "I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.", "voice_on_success": "You've been successfully connected. Have a great day.", "destination_type": "extension", "destination": "101", "destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "transfer_type": "transfer_call", "transfer_config": {}, "priority": 1, "is_active": true } ], "guard_rules": [ { "name": "Legal complaint escalation", "when_condition": "Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.", "example_phrases": [ "I'm calling my lawyer about this" ], "then_action": "forward", "selected_channels": [], "say_before_forwarding": "I understand this is important — let me connect you with someone who can help.", "say_before_end": "I'm sorry I couldn't help further. Please contact our team directly. Goodbye.", "destination": "<string>", "destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "is_active": true, "is_default": false } ]}EOF
import requests
url = "https://{subdomain}.mihu.ai/api/v1/agents/{uuid}"
payload = {
"name": "Volvo Cagliari Service Agent",
"description": "Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.",
"company_name": "Volvo Cagliari",
"role": "Inbound service appointment scheduler for a Volvo dealership in Cagliari.",
"objective": "Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.",
"tone": "Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.",
"behavior_guidelines": "Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.",
"company_service": "Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.",
"topic": "Service appointment booking and vehicle maintenance questions.",
"length_detail": "Keep replies under 25 words for voice; under 200 characters for text. One question at a time.",
"interest_of_product": "<string>",
"negative_response": "If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.",
"custom_prompt": "<string>",
"language": "en",
"timezone": "America/New_York",
"appointment_scheduling_enabled": True,
"appointment_scheduling_randomly": True,
"custom_llm_url": "<string>",
"settings": {
"voice": {
"interaction": {
"customer_speak_first": False,
"inbound_first_message": "Hi, this is Sara from Volvo. How can I help you today?",
"outbound_first_message": "Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?",
"voice_mail_message": "Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.",
"end_call_message": "Thank you for calling, have a great day!",
"silence_message": "Are you still there? I want to make sure I'm helping you with what you need.",
"max_silence_prompts": 3
},
"interruption": { "mode": "balanced" },
"voice_profile": {
"language": "en",
"voice_uuid": "ebeba3e0-89b5-4c94-9841-9555ab155dbc",
"voice_name": "Giulia"
},
"call_behavior": {
"audio_recording": True,
"background_sound": True,
"silence_timeout_seconds": 60,
"max_call_duration_seconds": 1800,
"max_call_duration_message": "Thanks for the call — we've reached the time limit. Goodbye!"
},
"compliance": {
"eu_gdpr_compliance": True,
"hipaa_compliance": False
},
"normalizers": {
"outbound": {},
"inbound": {}
}
},
"text": {
"daily_limits": {
"daily_max_messages_per_conversation": 100,
"daily_conversation_limit_exceeded_message": "<string>"
},
"timing_and_delay": {
"base_delay": 0.5,
"pause_before_reply": 1,
"typing_speed_wpm_min": 40,
"typing_speed_wpm_max": 60,
"typing_speed_char": 0.05,
"delay_jitter_min": 0.1,
"delay_jitter_max": 1.5
},
"typing_simulation": {
"show_typing_indicator": True,
"simulate_typing_breaks": True,
"simulate_typos_corrections": False
},
"working_hours": {
"enabled": False,
"start": "9 AM",
"end": "5 PM",
"timezone": "America/New_York",
"outside_hours_behavior": "Auto-reply",
"offline_message": "<string>",
"during_hours_agent": "ai"
},
"handover": {
"enabled": False,
"handover_triggers": "User request",
"handover_method": "Assign agent",
"handover_message": "<string>",
"assignment_strategy": "First available",
"handover_timeout": 60,
"fallback_agent": "Bot assistant"
},
"confidence_controls": {
"min_confidence_threshold": 0.7,
"ask_clarifying_questions": False
},
"message_behavior": {
"second_message_behavior": {
"enabled": False,
"chance": 0.25,
"delay_min": 1,
"delay_max": 4
},
"follow_up_behavior": {
"enabled": False,
"delay_min": 24,
"delay_max": 48
}
},
"personality": {
"use_response_variations": True,
"emoji_usage": "None",
"use_punctuation_variation": False,
"use_filler_words": False,
"enable_small_talk": False,
"energy_level": "Friendly",
"empathy_level": "Medium"
},
"advanced": {
"split_messages": True,
"simulate_message_editing": False,
"use_memory_based_context": False,
"human_first_mode": False
}
}
},
"guidelines": [
{
"content": "Always confirm vehicle VIN or license plate before creating a service appointment.",
"order": 0
}
],
"notes": [
{
"content": "Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.",
"order": 0
}
],
"procedures": [
{
"name": "Book service appointment",
"description": "Used when the customer wants to schedule a service appointment for their vehicle.",
"steps": [
{
"order": 1,
"description": "Ask the customer for their vehicle license plate or VIN.",
"intent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
}
],
"training": [
{
"content": "What does Volvo's standard warranty cover?",
"intent": "warranty_inquiry",
"response": "Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?"
}
],
"appointments": {
"enabled": True,
"random_assignment": True,
"schedule_assignments": [
{
"schedule_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Service Appointment",
"description": "When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.",
"slot_rules": {
"offer_slots_from": "3_hours",
"book_slots_from": "6_hours",
"max_appointments_per_day": 10,
"conflict_resolution_enabled": True,
"alternative_slots_count": 3,
"suggestion_priority": "nearest",
"prefer_same_day": True,
"prefer_same_time_slot": False,
"include_same_week": True
},
"rescheduling": {
"policy": "always_ask",
"minor_change_hours": 2,
"minor_change_same_day": True,
"minor_change_same_week": False,
"minor_change_same_slot": False,
"min_rescheduling_notice": "2_hours"
},
"cancellation": {
"min_cancellation_notice": "24_hours",
"ai_can_cancel": False,
"require_cancellation_reason": True,
"cancellation_fee_policy": "no_fee"
},
"questions": {
"inherit_from_schedule": True,
"custom_questions": [
{
"name": "License plate",
"type": "text",
"description": "Vehicle license plate number for the service appointment.",
"required": True
}
]
},
"approval": {
"require_approval": True,
"approval_threshold": "1_hour",
"approval_for_create": False,
"approval_for_reschedule": True,
"approval_for_cancel": True,
"approval_for_notes": False,
"notify_calendar_owner": "always",
"notify_admins": "always",
"expected_response_time": "5_min"
}
}
]
},
"routing_rules": [
{
"detection_mode": "intent",
"trigger_keyword": "sales",
"department_name": "Sales Department",
"phrases": ["I want to talk to sales"],
"ai_prompt": "Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.",
"voice_response": "Sure, I'll transfer you to our sales team now. One moment please.",
"voice_on_error": "I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.",
"voice_on_success": "You've been successfully connected. Have a great day.",
"destination_type": "extension",
"destination": "101",
"destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"transfer_type": "transfer_call",
"transfer_config": {},
"priority": 1,
"is_active": True
}
],
"guard_rules": [
{
"name": "Legal complaint escalation",
"when_condition": "Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.",
"example_phrases": ["I'm calling my lawyer about this"],
"then_action": "forward",
"selected_channels": [],
"say_before_forwarding": "I understand this is important — let me connect you with someone who can help.",
"say_before_end": "I'm sorry I couldn't help further. Please contact our team directly. Goodbye.",
"destination": "<string>",
"destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"is_active": True,
"is_default": False
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Volvo Cagliari Service Agent',
description: 'Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.',
company_name: 'Volvo Cagliari',
role: 'Inbound service appointment scheduler for a Volvo dealership in Cagliari.',
objective: 'Book a service appointment for the customer\'s vehicle. Capture: VIN or license plate, preferred date, type of service.',
tone: 'Warm, professional, slightly formal. Use the customer\'s name. Avoid jargon — explain technical terms in plain language.',
behavior_guidelines: 'Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.',
company_service: 'Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.',
topic: 'Service appointment booking and vehicle maintenance questions.',
length_detail: 'Keep replies under 25 words for voice; under 200 characters for text. One question at a time.',
interest_of_product: '<string>',
negative_response: 'If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.',
custom_prompt: '<string>',
language: 'en',
timezone: 'America/New_York',
appointment_scheduling_enabled: true,
appointment_scheduling_randomly: true,
custom_llm_url: '<string>',
settings: {
voice: {
interaction: {
customer_speak_first: false,
inbound_first_message: 'Hi, this is Sara from Volvo. How can I help you today?',
outbound_first_message: 'Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?',
voice_mail_message: 'Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.',
end_call_message: 'Thank you for calling, have a great day!',
silence_message: 'Are you still there? I want to make sure I\'m helping you with what you need.',
max_silence_prompts: 3
},
interruption: {mode: 'balanced'},
voice_profile: {
language: 'en',
voice_uuid: 'ebeba3e0-89b5-4c94-9841-9555ab155dbc',
voice_name: 'Giulia'
},
call_behavior: {
audio_recording: true,
background_sound: true,
silence_timeout_seconds: 60,
max_call_duration_seconds: 1800,
max_call_duration_message: 'Thanks for the call — we\'ve reached the time limit. Goodbye!'
},
compliance: {eu_gdpr_compliance: true, hipaa_compliance: false},
normalizers: {outbound: {}, inbound: {}}
},
text: {
daily_limits: {
daily_max_messages_per_conversation: 100,
daily_conversation_limit_exceeded_message: '<string>'
},
timing_and_delay: {
base_delay: 0.5,
pause_before_reply: 1,
typing_speed_wpm_min: 40,
typing_speed_wpm_max: 60,
typing_speed_char: 0.05,
delay_jitter_min: 0.1,
delay_jitter_max: 1.5
},
typing_simulation: {
show_typing_indicator: true,
simulate_typing_breaks: true,
simulate_typos_corrections: false
},
working_hours: {
enabled: false,
start: '9 AM',
end: '5 PM',
timezone: 'America/New_York',
outside_hours_behavior: 'Auto-reply',
offline_message: '<string>',
during_hours_agent: 'ai'
},
handover: {
enabled: false,
handover_triggers: 'User request',
handover_method: 'Assign agent',
handover_message: '<string>',
assignment_strategy: 'First available',
handover_timeout: 60,
fallback_agent: 'Bot assistant'
},
confidence_controls: {min_confidence_threshold: 0.7, ask_clarifying_questions: false},
message_behavior: {
second_message_behavior: {enabled: false, chance: 0.25, delay_min: 1, delay_max: 4},
follow_up_behavior: {enabled: false, delay_min: 24, delay_max: 48}
},
personality: {
use_response_variations: true,
emoji_usage: 'None',
use_punctuation_variation: false,
use_filler_words: false,
enable_small_talk: false,
energy_level: 'Friendly',
empathy_level: 'Medium'
},
advanced: {
split_messages: true,
simulate_message_editing: false,
use_memory_based_context: false,
human_first_mode: false
}
}
},
guidelines: [
{
content: 'Always confirm vehicle VIN or license plate before creating a service appointment.',
order: 0
}
],
notes: [
{
content: 'Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.',
order: 0
}
],
procedures: [
{
name: 'Book service appointment',
description: 'Used when the customer wants to schedule a service appointment for their vehicle.',
steps: [
{
order: 1,
description: 'Ask the customer for their vehicle license plate or VIN.',
intent_uuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
]
}
],
training: [
{
content: 'What does Volvo\'s standard warranty cover?',
intent: 'warranty_inquiry',
response: 'Volvo\'s standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?'
}
],
appointments: {
enabled: true,
random_assignment: true,
schedule_assignments: [
{
schedule_uuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
name: 'Service Appointment',
description: 'When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.',
slot_rules: {
offer_slots_from: '3_hours',
book_slots_from: '6_hours',
max_appointments_per_day: 10,
conflict_resolution_enabled: true,
alternative_slots_count: 3,
suggestion_priority: 'nearest',
prefer_same_day: true,
prefer_same_time_slot: false,
include_same_week: true
},
rescheduling: {
policy: 'always_ask',
minor_change_hours: 2,
minor_change_same_day: true,
minor_change_same_week: false,
minor_change_same_slot: false,
min_rescheduling_notice: '2_hours'
},
cancellation: {
min_cancellation_notice: '24_hours',
ai_can_cancel: false,
require_cancellation_reason: true,
cancellation_fee_policy: 'no_fee'
},
questions: {
inherit_from_schedule: true,
custom_questions: [
{
name: 'License plate',
type: 'text',
description: 'Vehicle license plate number for the service appointment.',
required: true
}
]
},
approval: {
require_approval: true,
approval_threshold: '1_hour',
approval_for_create: false,
approval_for_reschedule: true,
approval_for_cancel: true,
approval_for_notes: false,
notify_calendar_owner: 'always',
notify_admins: 'always',
expected_response_time: '5_min'
}
}
]
},
routing_rules: [
{
detection_mode: 'intent',
trigger_keyword: 'sales',
department_name: 'Sales Department',
phrases: ['I want to talk to sales'],
ai_prompt: 'Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.',
voice_response: 'Sure, I\'ll transfer you to our sales team now. One moment please.',
voice_on_error: 'I\'m sorry, I couldn\'t reach sales right now. Please call back later or leave a message.',
voice_on_success: 'You\'ve been successfully connected. Have a great day.',
destination_type: 'extension',
destination: '101',
destination_agent_uuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
transfer_type: 'transfer_call',
transfer_config: {},
priority: 1,
is_active: true
}
],
guard_rules: [
{
name: 'Legal complaint escalation',
when_condition: 'Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.',
example_phrases: ['I\'m calling my lawyer about this'],
then_action: 'forward',
selected_channels: [],
say_before_forwarding: 'I understand this is important — let me connect you with someone who can help.',
say_before_end: 'I\'m sorry I couldn\'t help further. Please contact our team directly. Goodbye.',
destination: '<string>',
destination_agent_uuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
is_active: true,
is_default: false
}
]
})
};
fetch('https://{subdomain}.mihu.ai/api/v1/agents/{uuid}', 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://{subdomain}.mihu.ai/api/v1/agents/{uuid}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Volvo Cagliari Service Agent',
'description' => 'Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.',
'company_name' => 'Volvo Cagliari',
'role' => 'Inbound service appointment scheduler for a Volvo dealership in Cagliari.',
'objective' => 'Book a service appointment for the customer\'s vehicle. Capture: VIN or license plate, preferred date, type of service.',
'tone' => 'Warm, professional, slightly formal. Use the customer\'s name. Avoid jargon — explain technical terms in plain language.',
'behavior_guidelines' => 'Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.',
'company_service' => 'Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.',
'topic' => 'Service appointment booking and vehicle maintenance questions.',
'length_detail' => 'Keep replies under 25 words for voice; under 200 characters for text. One question at a time.',
'interest_of_product' => '<string>',
'negative_response' => 'If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.',
'custom_prompt' => '<string>',
'language' => 'en',
'timezone' => 'America/New_York',
'appointment_scheduling_enabled' => true,
'appointment_scheduling_randomly' => true,
'custom_llm_url' => '<string>',
'settings' => [
'voice' => [
'interaction' => [
'customer_speak_first' => false,
'inbound_first_message' => 'Hi, this is Sara from Volvo. How can I help you today?',
'outbound_first_message' => 'Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?',
'voice_mail_message' => 'Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.',
'end_call_message' => 'Thank you for calling, have a great day!',
'silence_message' => 'Are you still there? I want to make sure I\'m helping you with what you need.',
'max_silence_prompts' => 3
],
'interruption' => [
'mode' => 'balanced'
],
'voice_profile' => [
'language' => 'en',
'voice_uuid' => 'ebeba3e0-89b5-4c94-9841-9555ab155dbc',
'voice_name' => 'Giulia'
],
'call_behavior' => [
'audio_recording' => true,
'background_sound' => true,
'silence_timeout_seconds' => 60,
'max_call_duration_seconds' => 1800,
'max_call_duration_message' => 'Thanks for the call — we\'ve reached the time limit. Goodbye!'
],
'compliance' => [
'eu_gdpr_compliance' => true,
'hipaa_compliance' => false
],
'normalizers' => [
'outbound' => [
],
'inbound' => [
]
]
],
'text' => [
'daily_limits' => [
'daily_max_messages_per_conversation' => 100,
'daily_conversation_limit_exceeded_message' => '<string>'
],
'timing_and_delay' => [
'base_delay' => 0.5,
'pause_before_reply' => 1,
'typing_speed_wpm_min' => 40,
'typing_speed_wpm_max' => 60,
'typing_speed_char' => 0.05,
'delay_jitter_min' => 0.1,
'delay_jitter_max' => 1.5
],
'typing_simulation' => [
'show_typing_indicator' => true,
'simulate_typing_breaks' => true,
'simulate_typos_corrections' => false
],
'working_hours' => [
'enabled' => false,
'start' => '9 AM',
'end' => '5 PM',
'timezone' => 'America/New_York',
'outside_hours_behavior' => 'Auto-reply',
'offline_message' => '<string>',
'during_hours_agent' => 'ai'
],
'handover' => [
'enabled' => false,
'handover_triggers' => 'User request',
'handover_method' => 'Assign agent',
'handover_message' => '<string>',
'assignment_strategy' => 'First available',
'handover_timeout' => 60,
'fallback_agent' => 'Bot assistant'
],
'confidence_controls' => [
'min_confidence_threshold' => 0.7,
'ask_clarifying_questions' => false
],
'message_behavior' => [
'second_message_behavior' => [
'enabled' => false,
'chance' => 0.25,
'delay_min' => 1,
'delay_max' => 4
],
'follow_up_behavior' => [
'enabled' => false,
'delay_min' => 24,
'delay_max' => 48
]
],
'personality' => [
'use_response_variations' => true,
'emoji_usage' => 'None',
'use_punctuation_variation' => false,
'use_filler_words' => false,
'enable_small_talk' => false,
'energy_level' => 'Friendly',
'empathy_level' => 'Medium'
],
'advanced' => [
'split_messages' => true,
'simulate_message_editing' => false,
'use_memory_based_context' => false,
'human_first_mode' => false
]
]
],
'guidelines' => [
[
'content' => 'Always confirm vehicle VIN or license plate before creating a service appointment.',
'order' => 0
]
],
'notes' => [
[
'content' => 'Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.',
'order' => 0
]
],
'procedures' => [
[
'name' => 'Book service appointment',
'description' => 'Used when the customer wants to schedule a service appointment for their vehicle.',
'steps' => [
[
'order' => 1,
'description' => 'Ask the customer for their vehicle license plate or VIN.',
'intent_uuid' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]
]
],
'training' => [
[
'content' => 'What does Volvo\'s standard warranty cover?',
'intent' => 'warranty_inquiry',
'response' => 'Volvo\'s standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?'
]
],
'appointments' => [
'enabled' => true,
'random_assignment' => true,
'schedule_assignments' => [
[
'schedule_uuid' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'name' => 'Service Appointment',
'description' => 'When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.',
'slot_rules' => [
'offer_slots_from' => '3_hours',
'book_slots_from' => '6_hours',
'max_appointments_per_day' => 10,
'conflict_resolution_enabled' => true,
'alternative_slots_count' => 3,
'suggestion_priority' => 'nearest',
'prefer_same_day' => true,
'prefer_same_time_slot' => false,
'include_same_week' => true
],
'rescheduling' => [
'policy' => 'always_ask',
'minor_change_hours' => 2,
'minor_change_same_day' => true,
'minor_change_same_week' => false,
'minor_change_same_slot' => false,
'min_rescheduling_notice' => '2_hours'
],
'cancellation' => [
'min_cancellation_notice' => '24_hours',
'ai_can_cancel' => false,
'require_cancellation_reason' => true,
'cancellation_fee_policy' => 'no_fee'
],
'questions' => [
'inherit_from_schedule' => true,
'custom_questions' => [
[
'name' => 'License plate',
'type' => 'text',
'description' => 'Vehicle license plate number for the service appointment.',
'required' => true
]
]
],
'approval' => [
'require_approval' => true,
'approval_threshold' => '1_hour',
'approval_for_create' => false,
'approval_for_reschedule' => true,
'approval_for_cancel' => true,
'approval_for_notes' => false,
'notify_calendar_owner' => 'always',
'notify_admins' => 'always',
'expected_response_time' => '5_min'
]
]
]
],
'routing_rules' => [
[
'detection_mode' => 'intent',
'trigger_keyword' => 'sales',
'department_name' => 'Sales Department',
'phrases' => [
'I want to talk to sales'
],
'ai_prompt' => 'Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.',
'voice_response' => 'Sure, I\'ll transfer you to our sales team now. One moment please.',
'voice_on_error' => 'I\'m sorry, I couldn\'t reach sales right now. Please call back later or leave a message.',
'voice_on_success' => 'You\'ve been successfully connected. Have a great day.',
'destination_type' => 'extension',
'destination' => '101',
'destination_agent_uuid' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'transfer_type' => 'transfer_call',
'transfer_config' => [
],
'priority' => 1,
'is_active' => true
]
],
'guard_rules' => [
[
'name' => 'Legal complaint escalation',
'when_condition' => 'Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.',
'example_phrases' => [
'I\'m calling my lawyer about this'
],
'then_action' => 'forward',
'selected_channels' => [
],
'say_before_forwarding' => 'I understand this is important — let me connect you with someone who can help.',
'say_before_end' => 'I\'m sorry I couldn\'t help further. Please contact our team directly. Goodbye.',
'destination' => '<string>',
'destination_agent_uuid' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'is_active' => true,
'is_default' => false
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{subdomain}.mihu.ai/api/v1/agents/{uuid}"
payload := strings.NewReader("{\n \"name\": \"Volvo Cagliari Service Agent\",\n \"description\": \"Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.\",\n \"company_name\": \"Volvo Cagliari\",\n \"role\": \"Inbound service appointment scheduler for a Volvo dealership in Cagliari.\",\n \"objective\": \"Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.\",\n \"tone\": \"Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.\",\n \"behavior_guidelines\": \"Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.\",\n \"company_service\": \"Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.\",\n \"topic\": \"Service appointment booking and vehicle maintenance questions.\",\n \"length_detail\": \"Keep replies under 25 words for voice; under 200 characters for text. One question at a time.\",\n \"interest_of_product\": \"<string>\",\n \"negative_response\": \"If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.\",\n \"custom_prompt\": \"<string>\",\n \"language\": \"en\",\n \"timezone\": \"America/New_York\",\n \"appointment_scheduling_enabled\": true,\n \"appointment_scheduling_randomly\": true,\n \"custom_llm_url\": \"<string>\",\n \"settings\": {\n \"voice\": {\n \"interaction\": {\n \"customer_speak_first\": false,\n \"inbound_first_message\": \"Hi, this is Sara from Volvo. How can I help you today?\",\n \"outbound_first_message\": \"Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?\",\n \"voice_mail_message\": \"Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.\",\n \"end_call_message\": \"Thank you for calling, have a great day!\",\n \"silence_message\": \"Are you still there? I want to make sure I'm helping you with what you need.\",\n \"max_silence_prompts\": 3\n },\n \"interruption\": {\n \"mode\": \"balanced\"\n },\n \"voice_profile\": {\n \"language\": \"en\",\n \"voice_uuid\": \"ebeba3e0-89b5-4c94-9841-9555ab155dbc\",\n \"voice_name\": \"Giulia\"\n },\n \"call_behavior\": {\n \"audio_recording\": true,\n \"background_sound\": true,\n \"silence_timeout_seconds\": 60,\n \"max_call_duration_seconds\": 1800,\n \"max_call_duration_message\": \"Thanks for the call — we've reached the time limit. Goodbye!\"\n },\n \"compliance\": {\n \"eu_gdpr_compliance\": true,\n \"hipaa_compliance\": false\n },\n \"normalizers\": {\n \"outbound\": {},\n \"inbound\": {}\n }\n },\n \"text\": {\n \"daily_limits\": {\n \"daily_max_messages_per_conversation\": 100,\n \"daily_conversation_limit_exceeded_message\": \"<string>\"\n },\n \"timing_and_delay\": {\n \"base_delay\": 0.5,\n \"pause_before_reply\": 1,\n \"typing_speed_wpm_min\": 40,\n \"typing_speed_wpm_max\": 60,\n \"typing_speed_char\": 0.05,\n \"delay_jitter_min\": 0.1,\n \"delay_jitter_max\": 1.5\n },\n \"typing_simulation\": {\n \"show_typing_indicator\": true,\n \"simulate_typing_breaks\": true,\n \"simulate_typos_corrections\": false\n },\n \"working_hours\": {\n \"enabled\": false,\n \"start\": \"9 AM\",\n \"end\": \"5 PM\",\n \"timezone\": \"America/New_York\",\n \"outside_hours_behavior\": \"Auto-reply\",\n \"offline_message\": \"<string>\",\n \"during_hours_agent\": \"ai\"\n },\n \"handover\": {\n \"enabled\": false,\n \"handover_triggers\": \"User request\",\n \"handover_method\": \"Assign agent\",\n \"handover_message\": \"<string>\",\n \"assignment_strategy\": \"First available\",\n \"handover_timeout\": 60,\n \"fallback_agent\": \"Bot assistant\"\n },\n \"confidence_controls\": {\n \"min_confidence_threshold\": 0.7,\n \"ask_clarifying_questions\": false\n },\n \"message_behavior\": {\n \"second_message_behavior\": {\n \"enabled\": false,\n \"chance\": 0.25,\n \"delay_min\": 1,\n \"delay_max\": 4\n },\n \"follow_up_behavior\": {\n \"enabled\": false,\n \"delay_min\": 24,\n \"delay_max\": 48\n }\n },\n \"personality\": {\n \"use_response_variations\": true,\n \"emoji_usage\": \"None\",\n \"use_punctuation_variation\": false,\n \"use_filler_words\": false,\n \"enable_small_talk\": false,\n \"energy_level\": \"Friendly\",\n \"empathy_level\": \"Medium\"\n },\n \"advanced\": {\n \"split_messages\": true,\n \"simulate_message_editing\": false,\n \"use_memory_based_context\": false,\n \"human_first_mode\": false\n }\n }\n },\n \"guidelines\": [\n {\n \"content\": \"Always confirm vehicle VIN or license plate before creating a service appointment.\",\n \"order\": 0\n }\n ],\n \"notes\": [\n {\n \"content\": \"Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.\",\n \"order\": 0\n }\n ],\n \"procedures\": [\n {\n \"name\": \"Book service appointment\",\n \"description\": \"Used when the customer wants to schedule a service appointment for their vehicle.\",\n \"steps\": [\n {\n \"order\": 1,\n \"description\": \"Ask the customer for their vehicle license plate or VIN.\",\n \"intent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n }\n ],\n \"training\": [\n {\n \"content\": \"What does Volvo's standard warranty cover?\",\n \"intent\": \"warranty_inquiry\",\n \"response\": \"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?\"\n }\n ],\n \"appointments\": {\n \"enabled\": true,\n \"random_assignment\": true,\n \"schedule_assignments\": [\n {\n \"schedule_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"Service Appointment\",\n \"description\": \"When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.\",\n \"slot_rules\": {\n \"offer_slots_from\": \"3_hours\",\n \"book_slots_from\": \"6_hours\",\n \"max_appointments_per_day\": 10,\n \"conflict_resolution_enabled\": true,\n \"alternative_slots_count\": 3,\n \"suggestion_priority\": \"nearest\",\n \"prefer_same_day\": true,\n \"prefer_same_time_slot\": false,\n \"include_same_week\": true\n },\n \"rescheduling\": {\n \"policy\": \"always_ask\",\n \"minor_change_hours\": 2,\n \"minor_change_same_day\": true,\n \"minor_change_same_week\": false,\n \"minor_change_same_slot\": false,\n \"min_rescheduling_notice\": \"2_hours\"\n },\n \"cancellation\": {\n \"min_cancellation_notice\": \"24_hours\",\n \"ai_can_cancel\": false,\n \"require_cancellation_reason\": true,\n \"cancellation_fee_policy\": \"no_fee\"\n },\n \"questions\": {\n \"inherit_from_schedule\": true,\n \"custom_questions\": [\n {\n \"name\": \"License plate\",\n \"type\": \"text\",\n \"description\": \"Vehicle license plate number for the service appointment.\",\n \"required\": true\n }\n ]\n },\n \"approval\": {\n \"require_approval\": true,\n \"approval_threshold\": \"1_hour\",\n \"approval_for_create\": false,\n \"approval_for_reschedule\": true,\n \"approval_for_cancel\": true,\n \"approval_for_notes\": false,\n \"notify_calendar_owner\": \"always\",\n \"notify_admins\": \"always\",\n \"expected_response_time\": \"5_min\"\n }\n }\n ]\n },\n \"routing_rules\": [\n {\n \"detection_mode\": \"intent\",\n \"trigger_keyword\": \"sales\",\n \"department_name\": \"Sales Department\",\n \"phrases\": [\n \"I want to talk to sales\"\n ],\n \"ai_prompt\": \"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.\",\n \"voice_response\": \"Sure, I'll transfer you to our sales team now. One moment please.\",\n \"voice_on_error\": \"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.\",\n \"voice_on_success\": \"You've been successfully connected. Have a great day.\",\n \"destination_type\": \"extension\",\n \"destination\": \"101\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"transfer_type\": \"transfer_call\",\n \"transfer_config\": {},\n \"priority\": 1,\n \"is_active\": true\n }\n ],\n \"guard_rules\": [\n {\n \"name\": \"Legal complaint escalation\",\n \"when_condition\": \"Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.\",\n \"example_phrases\": [\n \"I'm calling my lawyer about this\"\n ],\n \"then_action\": \"forward\",\n \"selected_channels\": [],\n \"say_before_forwarding\": \"I understand this is important — let me connect you with someone who can help.\",\n \"say_before_end\": \"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.\",\n \"destination\": \"<string>\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"is_active\": true,\n \"is_default\": false\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.patch("https://{subdomain}.mihu.ai/api/v1/agents/{uuid}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Volvo Cagliari Service Agent\",\n \"description\": \"Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.\",\n \"company_name\": \"Volvo Cagliari\",\n \"role\": \"Inbound service appointment scheduler for a Volvo dealership in Cagliari.\",\n \"objective\": \"Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.\",\n \"tone\": \"Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.\",\n \"behavior_guidelines\": \"Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.\",\n \"company_service\": \"Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.\",\n \"topic\": \"Service appointment booking and vehicle maintenance questions.\",\n \"length_detail\": \"Keep replies under 25 words for voice; under 200 characters for text. One question at a time.\",\n \"interest_of_product\": \"<string>\",\n \"negative_response\": \"If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.\",\n \"custom_prompt\": \"<string>\",\n \"language\": \"en\",\n \"timezone\": \"America/New_York\",\n \"appointment_scheduling_enabled\": true,\n \"appointment_scheduling_randomly\": true,\n \"custom_llm_url\": \"<string>\",\n \"settings\": {\n \"voice\": {\n \"interaction\": {\n \"customer_speak_first\": false,\n \"inbound_first_message\": \"Hi, this is Sara from Volvo. How can I help you today?\",\n \"outbound_first_message\": \"Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?\",\n \"voice_mail_message\": \"Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.\",\n \"end_call_message\": \"Thank you for calling, have a great day!\",\n \"silence_message\": \"Are you still there? I want to make sure I'm helping you with what you need.\",\n \"max_silence_prompts\": 3\n },\n \"interruption\": {\n \"mode\": \"balanced\"\n },\n \"voice_profile\": {\n \"language\": \"en\",\n \"voice_uuid\": \"ebeba3e0-89b5-4c94-9841-9555ab155dbc\",\n \"voice_name\": \"Giulia\"\n },\n \"call_behavior\": {\n \"audio_recording\": true,\n \"background_sound\": true,\n \"silence_timeout_seconds\": 60,\n \"max_call_duration_seconds\": 1800,\n \"max_call_duration_message\": \"Thanks for the call — we've reached the time limit. Goodbye!\"\n },\n \"compliance\": {\n \"eu_gdpr_compliance\": true,\n \"hipaa_compliance\": false\n },\n \"normalizers\": {\n \"outbound\": {},\n \"inbound\": {}\n }\n },\n \"text\": {\n \"daily_limits\": {\n \"daily_max_messages_per_conversation\": 100,\n \"daily_conversation_limit_exceeded_message\": \"<string>\"\n },\n \"timing_and_delay\": {\n \"base_delay\": 0.5,\n \"pause_before_reply\": 1,\n \"typing_speed_wpm_min\": 40,\n \"typing_speed_wpm_max\": 60,\n \"typing_speed_char\": 0.05,\n \"delay_jitter_min\": 0.1,\n \"delay_jitter_max\": 1.5\n },\n \"typing_simulation\": {\n \"show_typing_indicator\": true,\n \"simulate_typing_breaks\": true,\n \"simulate_typos_corrections\": false\n },\n \"working_hours\": {\n \"enabled\": false,\n \"start\": \"9 AM\",\n \"end\": \"5 PM\",\n \"timezone\": \"America/New_York\",\n \"outside_hours_behavior\": \"Auto-reply\",\n \"offline_message\": \"<string>\",\n \"during_hours_agent\": \"ai\"\n },\n \"handover\": {\n \"enabled\": false,\n \"handover_triggers\": \"User request\",\n \"handover_method\": \"Assign agent\",\n \"handover_message\": \"<string>\",\n \"assignment_strategy\": \"First available\",\n \"handover_timeout\": 60,\n \"fallback_agent\": \"Bot assistant\"\n },\n \"confidence_controls\": {\n \"min_confidence_threshold\": 0.7,\n \"ask_clarifying_questions\": false\n },\n \"message_behavior\": {\n \"second_message_behavior\": {\n \"enabled\": false,\n \"chance\": 0.25,\n \"delay_min\": 1,\n \"delay_max\": 4\n },\n \"follow_up_behavior\": {\n \"enabled\": false,\n \"delay_min\": 24,\n \"delay_max\": 48\n }\n },\n \"personality\": {\n \"use_response_variations\": true,\n \"emoji_usage\": \"None\",\n \"use_punctuation_variation\": false,\n \"use_filler_words\": false,\n \"enable_small_talk\": false,\n \"energy_level\": \"Friendly\",\n \"empathy_level\": \"Medium\"\n },\n \"advanced\": {\n \"split_messages\": true,\n \"simulate_message_editing\": false,\n \"use_memory_based_context\": false,\n \"human_first_mode\": false\n }\n }\n },\n \"guidelines\": [\n {\n \"content\": \"Always confirm vehicle VIN or license plate before creating a service appointment.\",\n \"order\": 0\n }\n ],\n \"notes\": [\n {\n \"content\": \"Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.\",\n \"order\": 0\n }\n ],\n \"procedures\": [\n {\n \"name\": \"Book service appointment\",\n \"description\": \"Used when the customer wants to schedule a service appointment for their vehicle.\",\n \"steps\": [\n {\n \"order\": 1,\n \"description\": \"Ask the customer for their vehicle license plate or VIN.\",\n \"intent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n }\n ],\n \"training\": [\n {\n \"content\": \"What does Volvo's standard warranty cover?\",\n \"intent\": \"warranty_inquiry\",\n \"response\": \"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?\"\n }\n ],\n \"appointments\": {\n \"enabled\": true,\n \"random_assignment\": true,\n \"schedule_assignments\": [\n {\n \"schedule_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"Service Appointment\",\n \"description\": \"When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.\",\n \"slot_rules\": {\n \"offer_slots_from\": \"3_hours\",\n \"book_slots_from\": \"6_hours\",\n \"max_appointments_per_day\": 10,\n \"conflict_resolution_enabled\": true,\n \"alternative_slots_count\": 3,\n \"suggestion_priority\": \"nearest\",\n \"prefer_same_day\": true,\n \"prefer_same_time_slot\": false,\n \"include_same_week\": true\n },\n \"rescheduling\": {\n \"policy\": \"always_ask\",\n \"minor_change_hours\": 2,\n \"minor_change_same_day\": true,\n \"minor_change_same_week\": false,\n \"minor_change_same_slot\": false,\n \"min_rescheduling_notice\": \"2_hours\"\n },\n \"cancellation\": {\n \"min_cancellation_notice\": \"24_hours\",\n \"ai_can_cancel\": false,\n \"require_cancellation_reason\": true,\n \"cancellation_fee_policy\": \"no_fee\"\n },\n \"questions\": {\n \"inherit_from_schedule\": true,\n \"custom_questions\": [\n {\n \"name\": \"License plate\",\n \"type\": \"text\",\n \"description\": \"Vehicle license plate number for the service appointment.\",\n \"required\": true\n }\n ]\n },\n \"approval\": {\n \"require_approval\": true,\n \"approval_threshold\": \"1_hour\",\n \"approval_for_create\": false,\n \"approval_for_reschedule\": true,\n \"approval_for_cancel\": true,\n \"approval_for_notes\": false,\n \"notify_calendar_owner\": \"always\",\n \"notify_admins\": \"always\",\n \"expected_response_time\": \"5_min\"\n }\n }\n ]\n },\n \"routing_rules\": [\n {\n \"detection_mode\": \"intent\",\n \"trigger_keyword\": \"sales\",\n \"department_name\": \"Sales Department\",\n \"phrases\": [\n \"I want to talk to sales\"\n ],\n \"ai_prompt\": \"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.\",\n \"voice_response\": \"Sure, I'll transfer you to our sales team now. One moment please.\",\n \"voice_on_error\": \"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.\",\n \"voice_on_success\": \"You've been successfully connected. Have a great day.\",\n \"destination_type\": \"extension\",\n \"destination\": \"101\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"transfer_type\": \"transfer_call\",\n \"transfer_config\": {},\n \"priority\": 1,\n \"is_active\": true\n }\n ],\n \"guard_rules\": [\n {\n \"name\": \"Legal complaint escalation\",\n \"when_condition\": \"Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.\",\n \"example_phrases\": [\n \"I'm calling my lawyer about this\"\n ],\n \"then_action\": \"forward\",\n \"selected_channels\": [],\n \"say_before_forwarding\": \"I understand this is important — let me connect you with someone who can help.\",\n \"say_before_end\": \"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.\",\n \"destination\": \"<string>\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"is_active\": true,\n \"is_default\": false\n }\n ]\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://{subdomain}.mihu.ai/api/v1/agents/{uuid}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Volvo Cagliari Service Agent\",\n \"description\": \"Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.\",\n \"company_name\": \"Volvo Cagliari\",\n \"role\": \"Inbound service appointment scheduler for a Volvo dealership in Cagliari.\",\n \"objective\": \"Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.\",\n \"tone\": \"Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.\",\n \"behavior_guidelines\": \"Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.\",\n \"company_service\": \"Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.\",\n \"topic\": \"Service appointment booking and vehicle maintenance questions.\",\n \"length_detail\": \"Keep replies under 25 words for voice; under 200 characters for text. One question at a time.\",\n \"interest_of_product\": \"<string>\",\n \"negative_response\": \"If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.\",\n \"custom_prompt\": \"<string>\",\n \"language\": \"en\",\n \"timezone\": \"America/New_York\",\n \"appointment_scheduling_enabled\": true,\n \"appointment_scheduling_randomly\": true,\n \"custom_llm_url\": \"<string>\",\n \"settings\": {\n \"voice\": {\n \"interaction\": {\n \"customer_speak_first\": false,\n \"inbound_first_message\": \"Hi, this is Sara from Volvo. How can I help you today?\",\n \"outbound_first_message\": \"Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?\",\n \"voice_mail_message\": \"Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.\",\n \"end_call_message\": \"Thank you for calling, have a great day!\",\n \"silence_message\": \"Are you still there? I want to make sure I'm helping you with what you need.\",\n \"max_silence_prompts\": 3\n },\n \"interruption\": {\n \"mode\": \"balanced\"\n },\n \"voice_profile\": {\n \"language\": \"en\",\n \"voice_uuid\": \"ebeba3e0-89b5-4c94-9841-9555ab155dbc\",\n \"voice_name\": \"Giulia\"\n },\n \"call_behavior\": {\n \"audio_recording\": true,\n \"background_sound\": true,\n \"silence_timeout_seconds\": 60,\n \"max_call_duration_seconds\": 1800,\n \"max_call_duration_message\": \"Thanks for the call — we've reached the time limit. Goodbye!\"\n },\n \"compliance\": {\n \"eu_gdpr_compliance\": true,\n \"hipaa_compliance\": false\n },\n \"normalizers\": {\n \"outbound\": {},\n \"inbound\": {}\n }\n },\n \"text\": {\n \"daily_limits\": {\n \"daily_max_messages_per_conversation\": 100,\n \"daily_conversation_limit_exceeded_message\": \"<string>\"\n },\n \"timing_and_delay\": {\n \"base_delay\": 0.5,\n \"pause_before_reply\": 1,\n \"typing_speed_wpm_min\": 40,\n \"typing_speed_wpm_max\": 60,\n \"typing_speed_char\": 0.05,\n \"delay_jitter_min\": 0.1,\n \"delay_jitter_max\": 1.5\n },\n \"typing_simulation\": {\n \"show_typing_indicator\": true,\n \"simulate_typing_breaks\": true,\n \"simulate_typos_corrections\": false\n },\n \"working_hours\": {\n \"enabled\": false,\n \"start\": \"9 AM\",\n \"end\": \"5 PM\",\n \"timezone\": \"America/New_York\",\n \"outside_hours_behavior\": \"Auto-reply\",\n \"offline_message\": \"<string>\",\n \"during_hours_agent\": \"ai\"\n },\n \"handover\": {\n \"enabled\": false,\n \"handover_triggers\": \"User request\",\n \"handover_method\": \"Assign agent\",\n \"handover_message\": \"<string>\",\n \"assignment_strategy\": \"First available\",\n \"handover_timeout\": 60,\n \"fallback_agent\": \"Bot assistant\"\n },\n \"confidence_controls\": {\n \"min_confidence_threshold\": 0.7,\n \"ask_clarifying_questions\": false\n },\n \"message_behavior\": {\n \"second_message_behavior\": {\n \"enabled\": false,\n \"chance\": 0.25,\n \"delay_min\": 1,\n \"delay_max\": 4\n },\n \"follow_up_behavior\": {\n \"enabled\": false,\n \"delay_min\": 24,\n \"delay_max\": 48\n }\n },\n \"personality\": {\n \"use_response_variations\": true,\n \"emoji_usage\": \"None\",\n \"use_punctuation_variation\": false,\n \"use_filler_words\": false,\n \"enable_small_talk\": false,\n \"energy_level\": \"Friendly\",\n \"empathy_level\": \"Medium\"\n },\n \"advanced\": {\n \"split_messages\": true,\n \"simulate_message_editing\": false,\n \"use_memory_based_context\": false,\n \"human_first_mode\": false\n }\n }\n },\n \"guidelines\": [\n {\n \"content\": \"Always confirm vehicle VIN or license plate before creating a service appointment.\",\n \"order\": 0\n }\n ],\n \"notes\": [\n {\n \"content\": \"Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.\",\n \"order\": 0\n }\n ],\n \"procedures\": [\n {\n \"name\": \"Book service appointment\",\n \"description\": \"Used when the customer wants to schedule a service appointment for their vehicle.\",\n \"steps\": [\n {\n \"order\": 1,\n \"description\": \"Ask the customer for their vehicle license plate or VIN.\",\n \"intent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n }\n ],\n \"training\": [\n {\n \"content\": \"What does Volvo's standard warranty cover?\",\n \"intent\": \"warranty_inquiry\",\n \"response\": \"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?\"\n }\n ],\n \"appointments\": {\n \"enabled\": true,\n \"random_assignment\": true,\n \"schedule_assignments\": [\n {\n \"schedule_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"Service Appointment\",\n \"description\": \"When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.\",\n \"slot_rules\": {\n \"offer_slots_from\": \"3_hours\",\n \"book_slots_from\": \"6_hours\",\n \"max_appointments_per_day\": 10,\n \"conflict_resolution_enabled\": true,\n \"alternative_slots_count\": 3,\n \"suggestion_priority\": \"nearest\",\n \"prefer_same_day\": true,\n \"prefer_same_time_slot\": false,\n \"include_same_week\": true\n },\n \"rescheduling\": {\n \"policy\": \"always_ask\",\n \"minor_change_hours\": 2,\n \"minor_change_same_day\": true,\n \"minor_change_same_week\": false,\n \"minor_change_same_slot\": false,\n \"min_rescheduling_notice\": \"2_hours\"\n },\n \"cancellation\": {\n \"min_cancellation_notice\": \"24_hours\",\n \"ai_can_cancel\": false,\n \"require_cancellation_reason\": true,\n \"cancellation_fee_policy\": \"no_fee\"\n },\n \"questions\": {\n \"inherit_from_schedule\": true,\n \"custom_questions\": [\n {\n \"name\": \"License plate\",\n \"type\": \"text\",\n \"description\": \"Vehicle license plate number for the service appointment.\",\n \"required\": true\n }\n ]\n },\n \"approval\": {\n \"require_approval\": true,\n \"approval_threshold\": \"1_hour\",\n \"approval_for_create\": false,\n \"approval_for_reschedule\": true,\n \"approval_for_cancel\": true,\n \"approval_for_notes\": false,\n \"notify_calendar_owner\": \"always\",\n \"notify_admins\": \"always\",\n \"expected_response_time\": \"5_min\"\n }\n }\n ]\n },\n \"routing_rules\": [\n {\n \"detection_mode\": \"intent\",\n \"trigger_keyword\": \"sales\",\n \"department_name\": \"Sales Department\",\n \"phrases\": [\n \"I want to talk to sales\"\n ],\n \"ai_prompt\": \"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.\",\n \"voice_response\": \"Sure, I'll transfer you to our sales team now. One moment please.\",\n \"voice_on_error\": \"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.\",\n \"voice_on_success\": \"You've been successfully connected. Have a great day.\",\n \"destination_type\": \"extension\",\n \"destination\": \"101\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"transfer_type\": \"transfer_call\",\n \"transfer_config\": {},\n \"priority\": 1,\n \"is_active\": true\n }\n ],\n \"guard_rules\": [\n {\n \"name\": \"Legal complaint escalation\",\n \"when_condition\": \"Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.\",\n \"example_phrases\": [\n \"I'm calling my lawyer about this\"\n ],\n \"then_action\": \"forward\",\n \"selected_channels\": [],\n \"say_before_forwarding\": \"I understand this is important — let me connect you with someone who can help.\",\n \"say_before_end\": \"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.\",\n \"destination\": \"<string>\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"is_active\": true,\n \"is_default\": false\n }\n ]\n}"
response = http.request(request)
puts response.read_body
{ "success": true, "message": "<string>", "data": { "agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "<string>", "description": "<string>", "company_name": "<string>", "role": "<string>", "objective": "<string>", "tone": "<string>", "behavior_guidelines": "<string>", "company_service": "<string>", "topic": "<string>", "length_detail": "<string>", "interest_of_product": "<string>", "negative_response": "<string>", "status": "pending", "custom_prompt": "<string>", "language": "<string>", "speed": "<string>", "timezone": "<string>", "appointment_scheduling_enabled": true, "appointment_scheduling_randomly": true, "custom_llm_url": "<string>", "recommendations": "<string>", "settings": { "voice": {}, "text": {}, "memorize": {}, "evaluation": {} }, "guidelines": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "content": "Always confirm vehicle VIN or license plate before creating a service appointment.", "order": 0 } ], "notes": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "content": "Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.", "order": 0 } ], "procedures": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "Book service appointment", "description": "Used when the customer wants to schedule a service appointment for their vehicle.", "steps": [ { "order": 1, "description": "Ask the customer for their vehicle license plate or VIN.", "intent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a" } ] } ], "training": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "content": "What does Volvo's standard warranty cover?", "intent": "warranty_inquiry", "response": "Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?" } ], "intents": [ { "intent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "key": "<string>", "name": "<string>", "description": "<string>", "recommendation_actions": "<string>", "confidence_threshold": 123, "is_system": true, "intent_llm_handle_by_response": true, "webhook": { "url": "<string>", "auth_token": "<string>" }, "parameters": [ { "key": "email", "default": "<string>", "type": "string", "required": true } ], "created_at": "2023-11-07T05:31:56Z", "updated_at": "2023-11-07T05:31:56Z" } ], "webhooks": [ { "webhook_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "url": "<string>", "events": [ "conversation_status" ], "is_active": true, "has_secret": true, "created_at": "2023-11-07T05:31:56Z", "updated_at": "2023-11-07T05:31:56Z" } ], "appointments": {}, "routing_rules": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "detection_mode": "intent", "trigger_keyword": "sales", "department_name": "Sales Department", "phrases": [ "I want to talk to sales" ], "ai_prompt": "Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.", "voice_response": "Sure, I'll transfer you to our sales team now. One moment please.", "voice_on_error": "I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.", "voice_on_success": "You've been successfully connected. Have a great day.", "destination_type": "extension", "destination": "101", "destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "transfer_type": "transfer_call", "transfer_config": {}, "priority": 1, "is_active": true } ], "guard_rules": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "Legal complaint escalation", "when_condition": "Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.", "example_phrases": [ "I'm calling my lawyer about this" ], "then_action": "forward", "selected_channels": [ "phone" ], "say_before_forwarding": "I understand this is important — let me connect you with someone who can help.", "say_before_end": "I'm sorry I couldn't help further. Please contact our team directly. Goodbye.", "destination_type": "extension", "destination": "<string>", "destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "is_active": true, "is_default": false } ], "phone_numbers": [ { "phone_number_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "number": "<string>", "status": "active", "country_code": "<string>", "type": "<string>", "capabilities": { "call": true, "sms": true, "whatsapp": true, "whatsapp_call": true } } ], "channels": [ {} ], "created_at": "2023-11-07T05:31:56Z", "updated_at": "2023-11-07T05:31:56Z" }}
Agents
Update an agent
Updates core agent fields, voice/text settings, and any included collection sections. Use PATCH for partial changes to the agent profile or settings. If a collection section such as notes, guidelines, procedures, training, routing_rules, or guard_rules is included, that section replaces the existing section.
PATCH
/
api
/
v1
/
agents
/
{uuid}
Update an agent
curl --request PATCH \ --url https://{subdomain}.mihu.ai/api/v1/agents/{uuid} \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data @- <<EOF{ "name": "Volvo Cagliari Service Agent", "description": "Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.", "company_name": "Volvo Cagliari", "role": "Inbound service appointment scheduler for a Volvo dealership in Cagliari.", "objective": "Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.", "tone": "Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.", "behavior_guidelines": "Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.", "company_service": "Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.", "topic": "Service appointment booking and vehicle maintenance questions.", "length_detail": "Keep replies under 25 words for voice; under 200 characters for text. One question at a time.", "interest_of_product": "<string>", "negative_response": "If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.", "custom_prompt": "<string>", "language": "en", "timezone": "America/New_York", "appointment_scheduling_enabled": true, "appointment_scheduling_randomly": true, "custom_llm_url": "<string>", "settings": { "voice": { "interaction": { "customer_speak_first": false, "inbound_first_message": "Hi, this is Sara from Volvo. How can I help you today?", "outbound_first_message": "Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?", "voice_mail_message": "Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.", "end_call_message": "Thank you for calling, have a great day!", "silence_message": "Are you still there? I want to make sure I'm helping you with what you need.", "max_silence_prompts": 3 }, "interruption": { "mode": "balanced" }, "voice_profile": { "language": "en", "voice_uuid": "ebeba3e0-89b5-4c94-9841-9555ab155dbc", "voice_name": "Giulia" }, "call_behavior": { "audio_recording": true, "background_sound": true, "silence_timeout_seconds": 60, "max_call_duration_seconds": 1800, "max_call_duration_message": "Thanks for the call — we've reached the time limit. Goodbye!" }, "compliance": { "eu_gdpr_compliance": true, "hipaa_compliance": false }, "normalizers": { "outbound": {}, "inbound": {} } }, "text": { "daily_limits": { "daily_max_messages_per_conversation": 100, "daily_conversation_limit_exceeded_message": "<string>" }, "timing_and_delay": { "base_delay": 0.5, "pause_before_reply": 1, "typing_speed_wpm_min": 40, "typing_speed_wpm_max": 60, "typing_speed_char": 0.05, "delay_jitter_min": 0.1, "delay_jitter_max": 1.5 }, "typing_simulation": { "show_typing_indicator": true, "simulate_typing_breaks": true, "simulate_typos_corrections": false }, "working_hours": { "enabled": false, "start": "9 AM", "end": "5 PM", "timezone": "America/New_York", "outside_hours_behavior": "Auto-reply", "offline_message": "<string>", "during_hours_agent": "ai" }, "handover": { "enabled": false, "handover_triggers": "User request", "handover_method": "Assign agent", "handover_message": "<string>", "assignment_strategy": "First available", "handover_timeout": 60, "fallback_agent": "Bot assistant" }, "confidence_controls": { "min_confidence_threshold": 0.7, "ask_clarifying_questions": false }, "message_behavior": { "second_message_behavior": { "enabled": false, "chance": 0.25, "delay_min": 1, "delay_max": 4 }, "follow_up_behavior": { "enabled": false, "delay_min": 24, "delay_max": 48 } }, "personality": { "use_response_variations": true, "emoji_usage": "None", "use_punctuation_variation": false, "use_filler_words": false, "enable_small_talk": false, "energy_level": "Friendly", "empathy_level": "Medium" }, "advanced": { "split_messages": true, "simulate_message_editing": false, "use_memory_based_context": false, "human_first_mode": false } } }, "guidelines": [ { "content": "Always confirm vehicle VIN or license plate before creating a service appointment.", "order": 0 } ], "notes": [ { "content": "Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.", "order": 0 } ], "procedures": [ { "name": "Book service appointment", "description": "Used when the customer wants to schedule a service appointment for their vehicle.", "steps": [ { "order": 1, "description": "Ask the customer for their vehicle license plate or VIN.", "intent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a" } ] } ], "training": [ { "content": "What does Volvo's standard warranty cover?", "intent": "warranty_inquiry", "response": "Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?" } ], "appointments": { "enabled": true, "random_assignment": true, "schedule_assignments": [ { "schedule_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "Service Appointment", "description": "When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.", "slot_rules": { "offer_slots_from": "3_hours", "book_slots_from": "6_hours", "max_appointments_per_day": 10, "conflict_resolution_enabled": true, "alternative_slots_count": 3, "suggestion_priority": "nearest", "prefer_same_day": true, "prefer_same_time_slot": false, "include_same_week": true }, "rescheduling": { "policy": "always_ask", "minor_change_hours": 2, "minor_change_same_day": true, "minor_change_same_week": false, "minor_change_same_slot": false, "min_rescheduling_notice": "2_hours" }, "cancellation": { "min_cancellation_notice": "24_hours", "ai_can_cancel": false, "require_cancellation_reason": true, "cancellation_fee_policy": "no_fee" }, "questions": { "inherit_from_schedule": true, "custom_questions": [ { "name": "License plate", "type": "text", "description": "Vehicle license plate number for the service appointment.", "required": true } ] }, "approval": { "require_approval": true, "approval_threshold": "1_hour", "approval_for_create": false, "approval_for_reschedule": true, "approval_for_cancel": true, "approval_for_notes": false, "notify_calendar_owner": "always", "notify_admins": "always", "expected_response_time": "5_min" } } ] }, "routing_rules": [ { "detection_mode": "intent", "trigger_keyword": "sales", "department_name": "Sales Department", "phrases": [ "I want to talk to sales" ], "ai_prompt": "Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.", "voice_response": "Sure, I'll transfer you to our sales team now. One moment please.", "voice_on_error": "I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.", "voice_on_success": "You've been successfully connected. Have a great day.", "destination_type": "extension", "destination": "101", "destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "transfer_type": "transfer_call", "transfer_config": {}, "priority": 1, "is_active": true } ], "guard_rules": [ { "name": "Legal complaint escalation", "when_condition": "Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.", "example_phrases": [ "I'm calling my lawyer about this" ], "then_action": "forward", "selected_channels": [], "say_before_forwarding": "I understand this is important — let me connect you with someone who can help.", "say_before_end": "I'm sorry I couldn't help further. Please contact our team directly. Goodbye.", "destination": "<string>", "destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "is_active": true, "is_default": false } ]}EOF
import requests
url = "https://{subdomain}.mihu.ai/api/v1/agents/{uuid}"
payload = {
"name": "Volvo Cagliari Service Agent",
"description": "Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.",
"company_name": "Volvo Cagliari",
"role": "Inbound service appointment scheduler for a Volvo dealership in Cagliari.",
"objective": "Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.",
"tone": "Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.",
"behavior_guidelines": "Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.",
"company_service": "Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.",
"topic": "Service appointment booking and vehicle maintenance questions.",
"length_detail": "Keep replies under 25 words for voice; under 200 characters for text. One question at a time.",
"interest_of_product": "<string>",
"negative_response": "If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.",
"custom_prompt": "<string>",
"language": "en",
"timezone": "America/New_York",
"appointment_scheduling_enabled": True,
"appointment_scheduling_randomly": True,
"custom_llm_url": "<string>",
"settings": {
"voice": {
"interaction": {
"customer_speak_first": False,
"inbound_first_message": "Hi, this is Sara from Volvo. How can I help you today?",
"outbound_first_message": "Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?",
"voice_mail_message": "Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.",
"end_call_message": "Thank you for calling, have a great day!",
"silence_message": "Are you still there? I want to make sure I'm helping you with what you need.",
"max_silence_prompts": 3
},
"interruption": { "mode": "balanced" },
"voice_profile": {
"language": "en",
"voice_uuid": "ebeba3e0-89b5-4c94-9841-9555ab155dbc",
"voice_name": "Giulia"
},
"call_behavior": {
"audio_recording": True,
"background_sound": True,
"silence_timeout_seconds": 60,
"max_call_duration_seconds": 1800,
"max_call_duration_message": "Thanks for the call — we've reached the time limit. Goodbye!"
},
"compliance": {
"eu_gdpr_compliance": True,
"hipaa_compliance": False
},
"normalizers": {
"outbound": {},
"inbound": {}
}
},
"text": {
"daily_limits": {
"daily_max_messages_per_conversation": 100,
"daily_conversation_limit_exceeded_message": "<string>"
},
"timing_and_delay": {
"base_delay": 0.5,
"pause_before_reply": 1,
"typing_speed_wpm_min": 40,
"typing_speed_wpm_max": 60,
"typing_speed_char": 0.05,
"delay_jitter_min": 0.1,
"delay_jitter_max": 1.5
},
"typing_simulation": {
"show_typing_indicator": True,
"simulate_typing_breaks": True,
"simulate_typos_corrections": False
},
"working_hours": {
"enabled": False,
"start": "9 AM",
"end": "5 PM",
"timezone": "America/New_York",
"outside_hours_behavior": "Auto-reply",
"offline_message": "<string>",
"during_hours_agent": "ai"
},
"handover": {
"enabled": False,
"handover_triggers": "User request",
"handover_method": "Assign agent",
"handover_message": "<string>",
"assignment_strategy": "First available",
"handover_timeout": 60,
"fallback_agent": "Bot assistant"
},
"confidence_controls": {
"min_confidence_threshold": 0.7,
"ask_clarifying_questions": False
},
"message_behavior": {
"second_message_behavior": {
"enabled": False,
"chance": 0.25,
"delay_min": 1,
"delay_max": 4
},
"follow_up_behavior": {
"enabled": False,
"delay_min": 24,
"delay_max": 48
}
},
"personality": {
"use_response_variations": True,
"emoji_usage": "None",
"use_punctuation_variation": False,
"use_filler_words": False,
"enable_small_talk": False,
"energy_level": "Friendly",
"empathy_level": "Medium"
},
"advanced": {
"split_messages": True,
"simulate_message_editing": False,
"use_memory_based_context": False,
"human_first_mode": False
}
}
},
"guidelines": [
{
"content": "Always confirm vehicle VIN or license plate before creating a service appointment.",
"order": 0
}
],
"notes": [
{
"content": "Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.",
"order": 0
}
],
"procedures": [
{
"name": "Book service appointment",
"description": "Used when the customer wants to schedule a service appointment for their vehicle.",
"steps": [
{
"order": 1,
"description": "Ask the customer for their vehicle license plate or VIN.",
"intent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
]
}
],
"training": [
{
"content": "What does Volvo's standard warranty cover?",
"intent": "warranty_inquiry",
"response": "Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?"
}
],
"appointments": {
"enabled": True,
"random_assignment": True,
"schedule_assignments": [
{
"schedule_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "Service Appointment",
"description": "When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.",
"slot_rules": {
"offer_slots_from": "3_hours",
"book_slots_from": "6_hours",
"max_appointments_per_day": 10,
"conflict_resolution_enabled": True,
"alternative_slots_count": 3,
"suggestion_priority": "nearest",
"prefer_same_day": True,
"prefer_same_time_slot": False,
"include_same_week": True
},
"rescheduling": {
"policy": "always_ask",
"minor_change_hours": 2,
"minor_change_same_day": True,
"minor_change_same_week": False,
"minor_change_same_slot": False,
"min_rescheduling_notice": "2_hours"
},
"cancellation": {
"min_cancellation_notice": "24_hours",
"ai_can_cancel": False,
"require_cancellation_reason": True,
"cancellation_fee_policy": "no_fee"
},
"questions": {
"inherit_from_schedule": True,
"custom_questions": [
{
"name": "License plate",
"type": "text",
"description": "Vehicle license plate number for the service appointment.",
"required": True
}
]
},
"approval": {
"require_approval": True,
"approval_threshold": "1_hour",
"approval_for_create": False,
"approval_for_reschedule": True,
"approval_for_cancel": True,
"approval_for_notes": False,
"notify_calendar_owner": "always",
"notify_admins": "always",
"expected_response_time": "5_min"
}
}
]
},
"routing_rules": [
{
"detection_mode": "intent",
"trigger_keyword": "sales",
"department_name": "Sales Department",
"phrases": ["I want to talk to sales"],
"ai_prompt": "Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.",
"voice_response": "Sure, I'll transfer you to our sales team now. One moment please.",
"voice_on_error": "I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.",
"voice_on_success": "You've been successfully connected. Have a great day.",
"destination_type": "extension",
"destination": "101",
"destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"transfer_type": "transfer_call",
"transfer_config": {},
"priority": 1,
"is_active": True
}
],
"guard_rules": [
{
"name": "Legal complaint escalation",
"when_condition": "Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.",
"example_phrases": ["I'm calling my lawyer about this"],
"then_action": "forward",
"selected_channels": [],
"say_before_forwarding": "I understand this is important — let me connect you with someone who can help.",
"say_before_end": "I'm sorry I couldn't help further. Please contact our team directly. Goodbye.",
"destination": "<string>",
"destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"is_active": True,
"is_default": False
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Volvo Cagliari Service Agent',
description: 'Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.',
company_name: 'Volvo Cagliari',
role: 'Inbound service appointment scheduler for a Volvo dealership in Cagliari.',
objective: 'Book a service appointment for the customer\'s vehicle. Capture: VIN or license plate, preferred date, type of service.',
tone: 'Warm, professional, slightly formal. Use the customer\'s name. Avoid jargon — explain technical terms in plain language.',
behavior_guidelines: 'Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.',
company_service: 'Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.',
topic: 'Service appointment booking and vehicle maintenance questions.',
length_detail: 'Keep replies under 25 words for voice; under 200 characters for text. One question at a time.',
interest_of_product: '<string>',
negative_response: 'If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.',
custom_prompt: '<string>',
language: 'en',
timezone: 'America/New_York',
appointment_scheduling_enabled: true,
appointment_scheduling_randomly: true,
custom_llm_url: '<string>',
settings: {
voice: {
interaction: {
customer_speak_first: false,
inbound_first_message: 'Hi, this is Sara from Volvo. How can I help you today?',
outbound_first_message: 'Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?',
voice_mail_message: 'Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.',
end_call_message: 'Thank you for calling, have a great day!',
silence_message: 'Are you still there? I want to make sure I\'m helping you with what you need.',
max_silence_prompts: 3
},
interruption: {mode: 'balanced'},
voice_profile: {
language: 'en',
voice_uuid: 'ebeba3e0-89b5-4c94-9841-9555ab155dbc',
voice_name: 'Giulia'
},
call_behavior: {
audio_recording: true,
background_sound: true,
silence_timeout_seconds: 60,
max_call_duration_seconds: 1800,
max_call_duration_message: 'Thanks for the call — we\'ve reached the time limit. Goodbye!'
},
compliance: {eu_gdpr_compliance: true, hipaa_compliance: false},
normalizers: {outbound: {}, inbound: {}}
},
text: {
daily_limits: {
daily_max_messages_per_conversation: 100,
daily_conversation_limit_exceeded_message: '<string>'
},
timing_and_delay: {
base_delay: 0.5,
pause_before_reply: 1,
typing_speed_wpm_min: 40,
typing_speed_wpm_max: 60,
typing_speed_char: 0.05,
delay_jitter_min: 0.1,
delay_jitter_max: 1.5
},
typing_simulation: {
show_typing_indicator: true,
simulate_typing_breaks: true,
simulate_typos_corrections: false
},
working_hours: {
enabled: false,
start: '9 AM',
end: '5 PM',
timezone: 'America/New_York',
outside_hours_behavior: 'Auto-reply',
offline_message: '<string>',
during_hours_agent: 'ai'
},
handover: {
enabled: false,
handover_triggers: 'User request',
handover_method: 'Assign agent',
handover_message: '<string>',
assignment_strategy: 'First available',
handover_timeout: 60,
fallback_agent: 'Bot assistant'
},
confidence_controls: {min_confidence_threshold: 0.7, ask_clarifying_questions: false},
message_behavior: {
second_message_behavior: {enabled: false, chance: 0.25, delay_min: 1, delay_max: 4},
follow_up_behavior: {enabled: false, delay_min: 24, delay_max: 48}
},
personality: {
use_response_variations: true,
emoji_usage: 'None',
use_punctuation_variation: false,
use_filler_words: false,
enable_small_talk: false,
energy_level: 'Friendly',
empathy_level: 'Medium'
},
advanced: {
split_messages: true,
simulate_message_editing: false,
use_memory_based_context: false,
human_first_mode: false
}
}
},
guidelines: [
{
content: 'Always confirm vehicle VIN or license plate before creating a service appointment.',
order: 0
}
],
notes: [
{
content: 'Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.',
order: 0
}
],
procedures: [
{
name: 'Book service appointment',
description: 'Used when the customer wants to schedule a service appointment for their vehicle.',
steps: [
{
order: 1,
description: 'Ask the customer for their vehicle license plate or VIN.',
intent_uuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
}
]
}
],
training: [
{
content: 'What does Volvo\'s standard warranty cover?',
intent: 'warranty_inquiry',
response: 'Volvo\'s standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?'
}
],
appointments: {
enabled: true,
random_assignment: true,
schedule_assignments: [
{
schedule_uuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
name: 'Service Appointment',
description: 'When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.',
slot_rules: {
offer_slots_from: '3_hours',
book_slots_from: '6_hours',
max_appointments_per_day: 10,
conflict_resolution_enabled: true,
alternative_slots_count: 3,
suggestion_priority: 'nearest',
prefer_same_day: true,
prefer_same_time_slot: false,
include_same_week: true
},
rescheduling: {
policy: 'always_ask',
minor_change_hours: 2,
minor_change_same_day: true,
minor_change_same_week: false,
minor_change_same_slot: false,
min_rescheduling_notice: '2_hours'
},
cancellation: {
min_cancellation_notice: '24_hours',
ai_can_cancel: false,
require_cancellation_reason: true,
cancellation_fee_policy: 'no_fee'
},
questions: {
inherit_from_schedule: true,
custom_questions: [
{
name: 'License plate',
type: 'text',
description: 'Vehicle license plate number for the service appointment.',
required: true
}
]
},
approval: {
require_approval: true,
approval_threshold: '1_hour',
approval_for_create: false,
approval_for_reschedule: true,
approval_for_cancel: true,
approval_for_notes: false,
notify_calendar_owner: 'always',
notify_admins: 'always',
expected_response_time: '5_min'
}
}
]
},
routing_rules: [
{
detection_mode: 'intent',
trigger_keyword: 'sales',
department_name: 'Sales Department',
phrases: ['I want to talk to sales'],
ai_prompt: 'Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.',
voice_response: 'Sure, I\'ll transfer you to our sales team now. One moment please.',
voice_on_error: 'I\'m sorry, I couldn\'t reach sales right now. Please call back later or leave a message.',
voice_on_success: 'You\'ve been successfully connected. Have a great day.',
destination_type: 'extension',
destination: '101',
destination_agent_uuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
transfer_type: 'transfer_call',
transfer_config: {},
priority: 1,
is_active: true
}
],
guard_rules: [
{
name: 'Legal complaint escalation',
when_condition: 'Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.',
example_phrases: ['I\'m calling my lawyer about this'],
then_action: 'forward',
selected_channels: [],
say_before_forwarding: 'I understand this is important — let me connect you with someone who can help.',
say_before_end: 'I\'m sorry I couldn\'t help further. Please contact our team directly. Goodbye.',
destination: '<string>',
destination_agent_uuid: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
is_active: true,
is_default: false
}
]
})
};
fetch('https://{subdomain}.mihu.ai/api/v1/agents/{uuid}', 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://{subdomain}.mihu.ai/api/v1/agents/{uuid}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Volvo Cagliari Service Agent',
'description' => 'Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.',
'company_name' => 'Volvo Cagliari',
'role' => 'Inbound service appointment scheduler for a Volvo dealership in Cagliari.',
'objective' => 'Book a service appointment for the customer\'s vehicle. Capture: VIN or license plate, preferred date, type of service.',
'tone' => 'Warm, professional, slightly formal. Use the customer\'s name. Avoid jargon — explain technical terms in plain language.',
'behavior_guidelines' => 'Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.',
'company_service' => 'Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.',
'topic' => 'Service appointment booking and vehicle maintenance questions.',
'length_detail' => 'Keep replies under 25 words for voice; under 200 characters for text. One question at a time.',
'interest_of_product' => '<string>',
'negative_response' => 'If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.',
'custom_prompt' => '<string>',
'language' => 'en',
'timezone' => 'America/New_York',
'appointment_scheduling_enabled' => true,
'appointment_scheduling_randomly' => true,
'custom_llm_url' => '<string>',
'settings' => [
'voice' => [
'interaction' => [
'customer_speak_first' => false,
'inbound_first_message' => 'Hi, this is Sara from Volvo. How can I help you today?',
'outbound_first_message' => 'Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?',
'voice_mail_message' => 'Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.',
'end_call_message' => 'Thank you for calling, have a great day!',
'silence_message' => 'Are you still there? I want to make sure I\'m helping you with what you need.',
'max_silence_prompts' => 3
],
'interruption' => [
'mode' => 'balanced'
],
'voice_profile' => [
'language' => 'en',
'voice_uuid' => 'ebeba3e0-89b5-4c94-9841-9555ab155dbc',
'voice_name' => 'Giulia'
],
'call_behavior' => [
'audio_recording' => true,
'background_sound' => true,
'silence_timeout_seconds' => 60,
'max_call_duration_seconds' => 1800,
'max_call_duration_message' => 'Thanks for the call — we\'ve reached the time limit. Goodbye!'
],
'compliance' => [
'eu_gdpr_compliance' => true,
'hipaa_compliance' => false
],
'normalizers' => [
'outbound' => [
],
'inbound' => [
]
]
],
'text' => [
'daily_limits' => [
'daily_max_messages_per_conversation' => 100,
'daily_conversation_limit_exceeded_message' => '<string>'
],
'timing_and_delay' => [
'base_delay' => 0.5,
'pause_before_reply' => 1,
'typing_speed_wpm_min' => 40,
'typing_speed_wpm_max' => 60,
'typing_speed_char' => 0.05,
'delay_jitter_min' => 0.1,
'delay_jitter_max' => 1.5
],
'typing_simulation' => [
'show_typing_indicator' => true,
'simulate_typing_breaks' => true,
'simulate_typos_corrections' => false
],
'working_hours' => [
'enabled' => false,
'start' => '9 AM',
'end' => '5 PM',
'timezone' => 'America/New_York',
'outside_hours_behavior' => 'Auto-reply',
'offline_message' => '<string>',
'during_hours_agent' => 'ai'
],
'handover' => [
'enabled' => false,
'handover_triggers' => 'User request',
'handover_method' => 'Assign agent',
'handover_message' => '<string>',
'assignment_strategy' => 'First available',
'handover_timeout' => 60,
'fallback_agent' => 'Bot assistant'
],
'confidence_controls' => [
'min_confidence_threshold' => 0.7,
'ask_clarifying_questions' => false
],
'message_behavior' => [
'second_message_behavior' => [
'enabled' => false,
'chance' => 0.25,
'delay_min' => 1,
'delay_max' => 4
],
'follow_up_behavior' => [
'enabled' => false,
'delay_min' => 24,
'delay_max' => 48
]
],
'personality' => [
'use_response_variations' => true,
'emoji_usage' => 'None',
'use_punctuation_variation' => false,
'use_filler_words' => false,
'enable_small_talk' => false,
'energy_level' => 'Friendly',
'empathy_level' => 'Medium'
],
'advanced' => [
'split_messages' => true,
'simulate_message_editing' => false,
'use_memory_based_context' => false,
'human_first_mode' => false
]
]
],
'guidelines' => [
[
'content' => 'Always confirm vehicle VIN or license plate before creating a service appointment.',
'order' => 0
]
],
'notes' => [
[
'content' => 'Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.',
'order' => 0
]
],
'procedures' => [
[
'name' => 'Book service appointment',
'description' => 'Used when the customer wants to schedule a service appointment for their vehicle.',
'steps' => [
[
'order' => 1,
'description' => 'Ask the customer for their vehicle license plate or VIN.',
'intent_uuid' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]
]
],
'training' => [
[
'content' => 'What does Volvo\'s standard warranty cover?',
'intent' => 'warranty_inquiry',
'response' => 'Volvo\'s standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?'
]
],
'appointments' => [
'enabled' => true,
'random_assignment' => true,
'schedule_assignments' => [
[
'schedule_uuid' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'name' => 'Service Appointment',
'description' => 'When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.',
'slot_rules' => [
'offer_slots_from' => '3_hours',
'book_slots_from' => '6_hours',
'max_appointments_per_day' => 10,
'conflict_resolution_enabled' => true,
'alternative_slots_count' => 3,
'suggestion_priority' => 'nearest',
'prefer_same_day' => true,
'prefer_same_time_slot' => false,
'include_same_week' => true
],
'rescheduling' => [
'policy' => 'always_ask',
'minor_change_hours' => 2,
'minor_change_same_day' => true,
'minor_change_same_week' => false,
'minor_change_same_slot' => false,
'min_rescheduling_notice' => '2_hours'
],
'cancellation' => [
'min_cancellation_notice' => '24_hours',
'ai_can_cancel' => false,
'require_cancellation_reason' => true,
'cancellation_fee_policy' => 'no_fee'
],
'questions' => [
'inherit_from_schedule' => true,
'custom_questions' => [
[
'name' => 'License plate',
'type' => 'text',
'description' => 'Vehicle license plate number for the service appointment.',
'required' => true
]
]
],
'approval' => [
'require_approval' => true,
'approval_threshold' => '1_hour',
'approval_for_create' => false,
'approval_for_reschedule' => true,
'approval_for_cancel' => true,
'approval_for_notes' => false,
'notify_calendar_owner' => 'always',
'notify_admins' => 'always',
'expected_response_time' => '5_min'
]
]
]
],
'routing_rules' => [
[
'detection_mode' => 'intent',
'trigger_keyword' => 'sales',
'department_name' => 'Sales Department',
'phrases' => [
'I want to talk to sales'
],
'ai_prompt' => 'Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.',
'voice_response' => 'Sure, I\'ll transfer you to our sales team now. One moment please.',
'voice_on_error' => 'I\'m sorry, I couldn\'t reach sales right now. Please call back later or leave a message.',
'voice_on_success' => 'You\'ve been successfully connected. Have a great day.',
'destination_type' => 'extension',
'destination' => '101',
'destination_agent_uuid' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'transfer_type' => 'transfer_call',
'transfer_config' => [
],
'priority' => 1,
'is_active' => true
]
],
'guard_rules' => [
[
'name' => 'Legal complaint escalation',
'when_condition' => 'Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.',
'example_phrases' => [
'I\'m calling my lawyer about this'
],
'then_action' => 'forward',
'selected_channels' => [
],
'say_before_forwarding' => 'I understand this is important — let me connect you with someone who can help.',
'say_before_end' => 'I\'m sorry I couldn\'t help further. Please contact our team directly. Goodbye.',
'destination' => '<string>',
'destination_agent_uuid' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'is_active' => true,
'is_default' => false
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{subdomain}.mihu.ai/api/v1/agents/{uuid}"
payload := strings.NewReader("{\n \"name\": \"Volvo Cagliari Service Agent\",\n \"description\": \"Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.\",\n \"company_name\": \"Volvo Cagliari\",\n \"role\": \"Inbound service appointment scheduler for a Volvo dealership in Cagliari.\",\n \"objective\": \"Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.\",\n \"tone\": \"Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.\",\n \"behavior_guidelines\": \"Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.\",\n \"company_service\": \"Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.\",\n \"topic\": \"Service appointment booking and vehicle maintenance questions.\",\n \"length_detail\": \"Keep replies under 25 words for voice; under 200 characters for text. One question at a time.\",\n \"interest_of_product\": \"<string>\",\n \"negative_response\": \"If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.\",\n \"custom_prompt\": \"<string>\",\n \"language\": \"en\",\n \"timezone\": \"America/New_York\",\n \"appointment_scheduling_enabled\": true,\n \"appointment_scheduling_randomly\": true,\n \"custom_llm_url\": \"<string>\",\n \"settings\": {\n \"voice\": {\n \"interaction\": {\n \"customer_speak_first\": false,\n \"inbound_first_message\": \"Hi, this is Sara from Volvo. How can I help you today?\",\n \"outbound_first_message\": \"Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?\",\n \"voice_mail_message\": \"Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.\",\n \"end_call_message\": \"Thank you for calling, have a great day!\",\n \"silence_message\": \"Are you still there? I want to make sure I'm helping you with what you need.\",\n \"max_silence_prompts\": 3\n },\n \"interruption\": {\n \"mode\": \"balanced\"\n },\n \"voice_profile\": {\n \"language\": \"en\",\n \"voice_uuid\": \"ebeba3e0-89b5-4c94-9841-9555ab155dbc\",\n \"voice_name\": \"Giulia\"\n },\n \"call_behavior\": {\n \"audio_recording\": true,\n \"background_sound\": true,\n \"silence_timeout_seconds\": 60,\n \"max_call_duration_seconds\": 1800,\n \"max_call_duration_message\": \"Thanks for the call — we've reached the time limit. Goodbye!\"\n },\n \"compliance\": {\n \"eu_gdpr_compliance\": true,\n \"hipaa_compliance\": false\n },\n \"normalizers\": {\n \"outbound\": {},\n \"inbound\": {}\n }\n },\n \"text\": {\n \"daily_limits\": {\n \"daily_max_messages_per_conversation\": 100,\n \"daily_conversation_limit_exceeded_message\": \"<string>\"\n },\n \"timing_and_delay\": {\n \"base_delay\": 0.5,\n \"pause_before_reply\": 1,\n \"typing_speed_wpm_min\": 40,\n \"typing_speed_wpm_max\": 60,\n \"typing_speed_char\": 0.05,\n \"delay_jitter_min\": 0.1,\n \"delay_jitter_max\": 1.5\n },\n \"typing_simulation\": {\n \"show_typing_indicator\": true,\n \"simulate_typing_breaks\": true,\n \"simulate_typos_corrections\": false\n },\n \"working_hours\": {\n \"enabled\": false,\n \"start\": \"9 AM\",\n \"end\": \"5 PM\",\n \"timezone\": \"America/New_York\",\n \"outside_hours_behavior\": \"Auto-reply\",\n \"offline_message\": \"<string>\",\n \"during_hours_agent\": \"ai\"\n },\n \"handover\": {\n \"enabled\": false,\n \"handover_triggers\": \"User request\",\n \"handover_method\": \"Assign agent\",\n \"handover_message\": \"<string>\",\n \"assignment_strategy\": \"First available\",\n \"handover_timeout\": 60,\n \"fallback_agent\": \"Bot assistant\"\n },\n \"confidence_controls\": {\n \"min_confidence_threshold\": 0.7,\n \"ask_clarifying_questions\": false\n },\n \"message_behavior\": {\n \"second_message_behavior\": {\n \"enabled\": false,\n \"chance\": 0.25,\n \"delay_min\": 1,\n \"delay_max\": 4\n },\n \"follow_up_behavior\": {\n \"enabled\": false,\n \"delay_min\": 24,\n \"delay_max\": 48\n }\n },\n \"personality\": {\n \"use_response_variations\": true,\n \"emoji_usage\": \"None\",\n \"use_punctuation_variation\": false,\n \"use_filler_words\": false,\n \"enable_small_talk\": false,\n \"energy_level\": \"Friendly\",\n \"empathy_level\": \"Medium\"\n },\n \"advanced\": {\n \"split_messages\": true,\n \"simulate_message_editing\": false,\n \"use_memory_based_context\": false,\n \"human_first_mode\": false\n }\n }\n },\n \"guidelines\": [\n {\n \"content\": \"Always confirm vehicle VIN or license plate before creating a service appointment.\",\n \"order\": 0\n }\n ],\n \"notes\": [\n {\n \"content\": \"Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.\",\n \"order\": 0\n }\n ],\n \"procedures\": [\n {\n \"name\": \"Book service appointment\",\n \"description\": \"Used when the customer wants to schedule a service appointment for their vehicle.\",\n \"steps\": [\n {\n \"order\": 1,\n \"description\": \"Ask the customer for their vehicle license plate or VIN.\",\n \"intent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n }\n ],\n \"training\": [\n {\n \"content\": \"What does Volvo's standard warranty cover?\",\n \"intent\": \"warranty_inquiry\",\n \"response\": \"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?\"\n }\n ],\n \"appointments\": {\n \"enabled\": true,\n \"random_assignment\": true,\n \"schedule_assignments\": [\n {\n \"schedule_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"Service Appointment\",\n \"description\": \"When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.\",\n \"slot_rules\": {\n \"offer_slots_from\": \"3_hours\",\n \"book_slots_from\": \"6_hours\",\n \"max_appointments_per_day\": 10,\n \"conflict_resolution_enabled\": true,\n \"alternative_slots_count\": 3,\n \"suggestion_priority\": \"nearest\",\n \"prefer_same_day\": true,\n \"prefer_same_time_slot\": false,\n \"include_same_week\": true\n },\n \"rescheduling\": {\n \"policy\": \"always_ask\",\n \"minor_change_hours\": 2,\n \"minor_change_same_day\": true,\n \"minor_change_same_week\": false,\n \"minor_change_same_slot\": false,\n \"min_rescheduling_notice\": \"2_hours\"\n },\n \"cancellation\": {\n \"min_cancellation_notice\": \"24_hours\",\n \"ai_can_cancel\": false,\n \"require_cancellation_reason\": true,\n \"cancellation_fee_policy\": \"no_fee\"\n },\n \"questions\": {\n \"inherit_from_schedule\": true,\n \"custom_questions\": [\n {\n \"name\": \"License plate\",\n \"type\": \"text\",\n \"description\": \"Vehicle license plate number for the service appointment.\",\n \"required\": true\n }\n ]\n },\n \"approval\": {\n \"require_approval\": true,\n \"approval_threshold\": \"1_hour\",\n \"approval_for_create\": false,\n \"approval_for_reschedule\": true,\n \"approval_for_cancel\": true,\n \"approval_for_notes\": false,\n \"notify_calendar_owner\": \"always\",\n \"notify_admins\": \"always\",\n \"expected_response_time\": \"5_min\"\n }\n }\n ]\n },\n \"routing_rules\": [\n {\n \"detection_mode\": \"intent\",\n \"trigger_keyword\": \"sales\",\n \"department_name\": \"Sales Department\",\n \"phrases\": [\n \"I want to talk to sales\"\n ],\n \"ai_prompt\": \"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.\",\n \"voice_response\": \"Sure, I'll transfer you to our sales team now. One moment please.\",\n \"voice_on_error\": \"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.\",\n \"voice_on_success\": \"You've been successfully connected. Have a great day.\",\n \"destination_type\": \"extension\",\n \"destination\": \"101\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"transfer_type\": \"transfer_call\",\n \"transfer_config\": {},\n \"priority\": 1,\n \"is_active\": true\n }\n ],\n \"guard_rules\": [\n {\n \"name\": \"Legal complaint escalation\",\n \"when_condition\": \"Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.\",\n \"example_phrases\": [\n \"I'm calling my lawyer about this\"\n ],\n \"then_action\": \"forward\",\n \"selected_channels\": [],\n \"say_before_forwarding\": \"I understand this is important — let me connect you with someone who can help.\",\n \"say_before_end\": \"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.\",\n \"destination\": \"<string>\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"is_active\": true,\n \"is_default\": false\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.patch("https://{subdomain}.mihu.ai/api/v1/agents/{uuid}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Volvo Cagliari Service Agent\",\n \"description\": \"Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.\",\n \"company_name\": \"Volvo Cagliari\",\n \"role\": \"Inbound service appointment scheduler for a Volvo dealership in Cagliari.\",\n \"objective\": \"Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.\",\n \"tone\": \"Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.\",\n \"behavior_guidelines\": \"Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.\",\n \"company_service\": \"Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.\",\n \"topic\": \"Service appointment booking and vehicle maintenance questions.\",\n \"length_detail\": \"Keep replies under 25 words for voice; under 200 characters for text. One question at a time.\",\n \"interest_of_product\": \"<string>\",\n \"negative_response\": \"If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.\",\n \"custom_prompt\": \"<string>\",\n \"language\": \"en\",\n \"timezone\": \"America/New_York\",\n \"appointment_scheduling_enabled\": true,\n \"appointment_scheduling_randomly\": true,\n \"custom_llm_url\": \"<string>\",\n \"settings\": {\n \"voice\": {\n \"interaction\": {\n \"customer_speak_first\": false,\n \"inbound_first_message\": \"Hi, this is Sara from Volvo. How can I help you today?\",\n \"outbound_first_message\": \"Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?\",\n \"voice_mail_message\": \"Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.\",\n \"end_call_message\": \"Thank you for calling, have a great day!\",\n \"silence_message\": \"Are you still there? I want to make sure I'm helping you with what you need.\",\n \"max_silence_prompts\": 3\n },\n \"interruption\": {\n \"mode\": \"balanced\"\n },\n \"voice_profile\": {\n \"language\": \"en\",\n \"voice_uuid\": \"ebeba3e0-89b5-4c94-9841-9555ab155dbc\",\n \"voice_name\": \"Giulia\"\n },\n \"call_behavior\": {\n \"audio_recording\": true,\n \"background_sound\": true,\n \"silence_timeout_seconds\": 60,\n \"max_call_duration_seconds\": 1800,\n \"max_call_duration_message\": \"Thanks for the call — we've reached the time limit. Goodbye!\"\n },\n \"compliance\": {\n \"eu_gdpr_compliance\": true,\n \"hipaa_compliance\": false\n },\n \"normalizers\": {\n \"outbound\": {},\n \"inbound\": {}\n }\n },\n \"text\": {\n \"daily_limits\": {\n \"daily_max_messages_per_conversation\": 100,\n \"daily_conversation_limit_exceeded_message\": \"<string>\"\n },\n \"timing_and_delay\": {\n \"base_delay\": 0.5,\n \"pause_before_reply\": 1,\n \"typing_speed_wpm_min\": 40,\n \"typing_speed_wpm_max\": 60,\n \"typing_speed_char\": 0.05,\n \"delay_jitter_min\": 0.1,\n \"delay_jitter_max\": 1.5\n },\n \"typing_simulation\": {\n \"show_typing_indicator\": true,\n \"simulate_typing_breaks\": true,\n \"simulate_typos_corrections\": false\n },\n \"working_hours\": {\n \"enabled\": false,\n \"start\": \"9 AM\",\n \"end\": \"5 PM\",\n \"timezone\": \"America/New_York\",\n \"outside_hours_behavior\": \"Auto-reply\",\n \"offline_message\": \"<string>\",\n \"during_hours_agent\": \"ai\"\n },\n \"handover\": {\n \"enabled\": false,\n \"handover_triggers\": \"User request\",\n \"handover_method\": \"Assign agent\",\n \"handover_message\": \"<string>\",\n \"assignment_strategy\": \"First available\",\n \"handover_timeout\": 60,\n \"fallback_agent\": \"Bot assistant\"\n },\n \"confidence_controls\": {\n \"min_confidence_threshold\": 0.7,\n \"ask_clarifying_questions\": false\n },\n \"message_behavior\": {\n \"second_message_behavior\": {\n \"enabled\": false,\n \"chance\": 0.25,\n \"delay_min\": 1,\n \"delay_max\": 4\n },\n \"follow_up_behavior\": {\n \"enabled\": false,\n \"delay_min\": 24,\n \"delay_max\": 48\n }\n },\n \"personality\": {\n \"use_response_variations\": true,\n \"emoji_usage\": \"None\",\n \"use_punctuation_variation\": false,\n \"use_filler_words\": false,\n \"enable_small_talk\": false,\n \"energy_level\": \"Friendly\",\n \"empathy_level\": \"Medium\"\n },\n \"advanced\": {\n \"split_messages\": true,\n \"simulate_message_editing\": false,\n \"use_memory_based_context\": false,\n \"human_first_mode\": false\n }\n }\n },\n \"guidelines\": [\n {\n \"content\": \"Always confirm vehicle VIN or license plate before creating a service appointment.\",\n \"order\": 0\n }\n ],\n \"notes\": [\n {\n \"content\": \"Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.\",\n \"order\": 0\n }\n ],\n \"procedures\": [\n {\n \"name\": \"Book service appointment\",\n \"description\": \"Used when the customer wants to schedule a service appointment for their vehicle.\",\n \"steps\": [\n {\n \"order\": 1,\n \"description\": \"Ask the customer for their vehicle license plate or VIN.\",\n \"intent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n }\n ],\n \"training\": [\n {\n \"content\": \"What does Volvo's standard warranty cover?\",\n \"intent\": \"warranty_inquiry\",\n \"response\": \"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?\"\n }\n ],\n \"appointments\": {\n \"enabled\": true,\n \"random_assignment\": true,\n \"schedule_assignments\": [\n {\n \"schedule_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"Service Appointment\",\n \"description\": \"When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.\",\n \"slot_rules\": {\n \"offer_slots_from\": \"3_hours\",\n \"book_slots_from\": \"6_hours\",\n \"max_appointments_per_day\": 10,\n \"conflict_resolution_enabled\": true,\n \"alternative_slots_count\": 3,\n \"suggestion_priority\": \"nearest\",\n \"prefer_same_day\": true,\n \"prefer_same_time_slot\": false,\n \"include_same_week\": true\n },\n \"rescheduling\": {\n \"policy\": \"always_ask\",\n \"minor_change_hours\": 2,\n \"minor_change_same_day\": true,\n \"minor_change_same_week\": false,\n \"minor_change_same_slot\": false,\n \"min_rescheduling_notice\": \"2_hours\"\n },\n \"cancellation\": {\n \"min_cancellation_notice\": \"24_hours\",\n \"ai_can_cancel\": false,\n \"require_cancellation_reason\": true,\n \"cancellation_fee_policy\": \"no_fee\"\n },\n \"questions\": {\n \"inherit_from_schedule\": true,\n \"custom_questions\": [\n {\n \"name\": \"License plate\",\n \"type\": \"text\",\n \"description\": \"Vehicle license plate number for the service appointment.\",\n \"required\": true\n }\n ]\n },\n \"approval\": {\n \"require_approval\": true,\n \"approval_threshold\": \"1_hour\",\n \"approval_for_create\": false,\n \"approval_for_reschedule\": true,\n \"approval_for_cancel\": true,\n \"approval_for_notes\": false,\n \"notify_calendar_owner\": \"always\",\n \"notify_admins\": \"always\",\n \"expected_response_time\": \"5_min\"\n }\n }\n ]\n },\n \"routing_rules\": [\n {\n \"detection_mode\": \"intent\",\n \"trigger_keyword\": \"sales\",\n \"department_name\": \"Sales Department\",\n \"phrases\": [\n \"I want to talk to sales\"\n ],\n \"ai_prompt\": \"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.\",\n \"voice_response\": \"Sure, I'll transfer you to our sales team now. One moment please.\",\n \"voice_on_error\": \"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.\",\n \"voice_on_success\": \"You've been successfully connected. Have a great day.\",\n \"destination_type\": \"extension\",\n \"destination\": \"101\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"transfer_type\": \"transfer_call\",\n \"transfer_config\": {},\n \"priority\": 1,\n \"is_active\": true\n }\n ],\n \"guard_rules\": [\n {\n \"name\": \"Legal complaint escalation\",\n \"when_condition\": \"Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.\",\n \"example_phrases\": [\n \"I'm calling my lawyer about this\"\n ],\n \"then_action\": \"forward\",\n \"selected_channels\": [],\n \"say_before_forwarding\": \"I understand this is important — let me connect you with someone who can help.\",\n \"say_before_end\": \"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.\",\n \"destination\": \"<string>\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"is_active\": true,\n \"is_default\": false\n }\n ]\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://{subdomain}.mihu.ai/api/v1/agents/{uuid}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Volvo Cagliari Service Agent\",\n \"description\": \"Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.\",\n \"company_name\": \"Volvo Cagliari\",\n \"role\": \"Inbound service appointment scheduler for a Volvo dealership in Cagliari.\",\n \"objective\": \"Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.\",\n \"tone\": \"Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.\",\n \"behavior_guidelines\": \"Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.\",\n \"company_service\": \"Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.\",\n \"topic\": \"Service appointment booking and vehicle maintenance questions.\",\n \"length_detail\": \"Keep replies under 25 words for voice; under 200 characters for text. One question at a time.\",\n \"interest_of_product\": \"<string>\",\n \"negative_response\": \"If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.\",\n \"custom_prompt\": \"<string>\",\n \"language\": \"en\",\n \"timezone\": \"America/New_York\",\n \"appointment_scheduling_enabled\": true,\n \"appointment_scheduling_randomly\": true,\n \"custom_llm_url\": \"<string>\",\n \"settings\": {\n \"voice\": {\n \"interaction\": {\n \"customer_speak_first\": false,\n \"inbound_first_message\": \"Hi, this is Sara from Volvo. How can I help you today?\",\n \"outbound_first_message\": \"Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?\",\n \"voice_mail_message\": \"Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.\",\n \"end_call_message\": \"Thank you for calling, have a great day!\",\n \"silence_message\": \"Are you still there? I want to make sure I'm helping you with what you need.\",\n \"max_silence_prompts\": 3\n },\n \"interruption\": {\n \"mode\": \"balanced\"\n },\n \"voice_profile\": {\n \"language\": \"en\",\n \"voice_uuid\": \"ebeba3e0-89b5-4c94-9841-9555ab155dbc\",\n \"voice_name\": \"Giulia\"\n },\n \"call_behavior\": {\n \"audio_recording\": true,\n \"background_sound\": true,\n \"silence_timeout_seconds\": 60,\n \"max_call_duration_seconds\": 1800,\n \"max_call_duration_message\": \"Thanks for the call — we've reached the time limit. Goodbye!\"\n },\n \"compliance\": {\n \"eu_gdpr_compliance\": true,\n \"hipaa_compliance\": false\n },\n \"normalizers\": {\n \"outbound\": {},\n \"inbound\": {}\n }\n },\n \"text\": {\n \"daily_limits\": {\n \"daily_max_messages_per_conversation\": 100,\n \"daily_conversation_limit_exceeded_message\": \"<string>\"\n },\n \"timing_and_delay\": {\n \"base_delay\": 0.5,\n \"pause_before_reply\": 1,\n \"typing_speed_wpm_min\": 40,\n \"typing_speed_wpm_max\": 60,\n \"typing_speed_char\": 0.05,\n \"delay_jitter_min\": 0.1,\n \"delay_jitter_max\": 1.5\n },\n \"typing_simulation\": {\n \"show_typing_indicator\": true,\n \"simulate_typing_breaks\": true,\n \"simulate_typos_corrections\": false\n },\n \"working_hours\": {\n \"enabled\": false,\n \"start\": \"9 AM\",\n \"end\": \"5 PM\",\n \"timezone\": \"America/New_York\",\n \"outside_hours_behavior\": \"Auto-reply\",\n \"offline_message\": \"<string>\",\n \"during_hours_agent\": \"ai\"\n },\n \"handover\": {\n \"enabled\": false,\n \"handover_triggers\": \"User request\",\n \"handover_method\": \"Assign agent\",\n \"handover_message\": \"<string>\",\n \"assignment_strategy\": \"First available\",\n \"handover_timeout\": 60,\n \"fallback_agent\": \"Bot assistant\"\n },\n \"confidence_controls\": {\n \"min_confidence_threshold\": 0.7,\n \"ask_clarifying_questions\": false\n },\n \"message_behavior\": {\n \"second_message_behavior\": {\n \"enabled\": false,\n \"chance\": 0.25,\n \"delay_min\": 1,\n \"delay_max\": 4\n },\n \"follow_up_behavior\": {\n \"enabled\": false,\n \"delay_min\": 24,\n \"delay_max\": 48\n }\n },\n \"personality\": {\n \"use_response_variations\": true,\n \"emoji_usage\": \"None\",\n \"use_punctuation_variation\": false,\n \"use_filler_words\": false,\n \"enable_small_talk\": false,\n \"energy_level\": \"Friendly\",\n \"empathy_level\": \"Medium\"\n },\n \"advanced\": {\n \"split_messages\": true,\n \"simulate_message_editing\": false,\n \"use_memory_based_context\": false,\n \"human_first_mode\": false\n }\n }\n },\n \"guidelines\": [\n {\n \"content\": \"Always confirm vehicle VIN or license plate before creating a service appointment.\",\n \"order\": 0\n }\n ],\n \"notes\": [\n {\n \"content\": \"Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.\",\n \"order\": 0\n }\n ],\n \"procedures\": [\n {\n \"name\": \"Book service appointment\",\n \"description\": \"Used when the customer wants to schedule a service appointment for their vehicle.\",\n \"steps\": [\n {\n \"order\": 1,\n \"description\": \"Ask the customer for their vehicle license plate or VIN.\",\n \"intent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n }\n ]\n }\n ],\n \"training\": [\n {\n \"content\": \"What does Volvo's standard warranty cover?\",\n \"intent\": \"warranty_inquiry\",\n \"response\": \"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?\"\n }\n ],\n \"appointments\": {\n \"enabled\": true,\n \"random_assignment\": true,\n \"schedule_assignments\": [\n {\n \"schedule_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"Service Appointment\",\n \"description\": \"When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.\",\n \"slot_rules\": {\n \"offer_slots_from\": \"3_hours\",\n \"book_slots_from\": \"6_hours\",\n \"max_appointments_per_day\": 10,\n \"conflict_resolution_enabled\": true,\n \"alternative_slots_count\": 3,\n \"suggestion_priority\": \"nearest\",\n \"prefer_same_day\": true,\n \"prefer_same_time_slot\": false,\n \"include_same_week\": true\n },\n \"rescheduling\": {\n \"policy\": \"always_ask\",\n \"minor_change_hours\": 2,\n \"minor_change_same_day\": true,\n \"minor_change_same_week\": false,\n \"minor_change_same_slot\": false,\n \"min_rescheduling_notice\": \"2_hours\"\n },\n \"cancellation\": {\n \"min_cancellation_notice\": \"24_hours\",\n \"ai_can_cancel\": false,\n \"require_cancellation_reason\": true,\n \"cancellation_fee_policy\": \"no_fee\"\n },\n \"questions\": {\n \"inherit_from_schedule\": true,\n \"custom_questions\": [\n {\n \"name\": \"License plate\",\n \"type\": \"text\",\n \"description\": \"Vehicle license plate number for the service appointment.\",\n \"required\": true\n }\n ]\n },\n \"approval\": {\n \"require_approval\": true,\n \"approval_threshold\": \"1_hour\",\n \"approval_for_create\": false,\n \"approval_for_reschedule\": true,\n \"approval_for_cancel\": true,\n \"approval_for_notes\": false,\n \"notify_calendar_owner\": \"always\",\n \"notify_admins\": \"always\",\n \"expected_response_time\": \"5_min\"\n }\n }\n ]\n },\n \"routing_rules\": [\n {\n \"detection_mode\": \"intent\",\n \"trigger_keyword\": \"sales\",\n \"department_name\": \"Sales Department\",\n \"phrases\": [\n \"I want to talk to sales\"\n ],\n \"ai_prompt\": \"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.\",\n \"voice_response\": \"Sure, I'll transfer you to our sales team now. One moment please.\",\n \"voice_on_error\": \"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.\",\n \"voice_on_success\": \"You've been successfully connected. Have a great day.\",\n \"destination_type\": \"extension\",\n \"destination\": \"101\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"transfer_type\": \"transfer_call\",\n \"transfer_config\": {},\n \"priority\": 1,\n \"is_active\": true\n }\n ],\n \"guard_rules\": [\n {\n \"name\": \"Legal complaint escalation\",\n \"when_condition\": \"Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.\",\n \"example_phrases\": [\n \"I'm calling my lawyer about this\"\n ],\n \"then_action\": \"forward\",\n \"selected_channels\": [],\n \"say_before_forwarding\": \"I understand this is important — let me connect you with someone who can help.\",\n \"say_before_end\": \"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.\",\n \"destination\": \"<string>\",\n \"destination_agent_uuid\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"is_active\": true,\n \"is_default\": false\n }\n ]\n}"
response = http.request(request)
puts response.read_body
{ "success": true, "message": "<string>", "data": { "agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "<string>", "description": "<string>", "company_name": "<string>", "role": "<string>", "objective": "<string>", "tone": "<string>", "behavior_guidelines": "<string>", "company_service": "<string>", "topic": "<string>", "length_detail": "<string>", "interest_of_product": "<string>", "negative_response": "<string>", "status": "pending", "custom_prompt": "<string>", "language": "<string>", "speed": "<string>", "timezone": "<string>", "appointment_scheduling_enabled": true, "appointment_scheduling_randomly": true, "custom_llm_url": "<string>", "recommendations": "<string>", "settings": { "voice": {}, "text": {}, "memorize": {}, "evaluation": {} }, "guidelines": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "content": "Always confirm vehicle VIN or license plate before creating a service appointment.", "order": 0 } ], "notes": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "content": "Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.", "order": 0 } ], "procedures": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "Book service appointment", "description": "Used when the customer wants to schedule a service appointment for their vehicle.", "steps": [ { "order": 1, "description": "Ask the customer for their vehicle license plate or VIN.", "intent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a" } ] } ], "training": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "content": "What does Volvo's standard warranty cover?", "intent": "warranty_inquiry", "response": "Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?" } ], "intents": [ { "intent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "key": "<string>", "name": "<string>", "description": "<string>", "recommendation_actions": "<string>", "confidence_threshold": 123, "is_system": true, "intent_llm_handle_by_response": true, "webhook": { "url": "<string>", "auth_token": "<string>" }, "parameters": [ { "key": "email", "default": "<string>", "type": "string", "required": true } ], "created_at": "2023-11-07T05:31:56Z", "updated_at": "2023-11-07T05:31:56Z" } ], "webhooks": [ { "webhook_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "url": "<string>", "events": [ "conversation_status" ], "is_active": true, "has_secret": true, "created_at": "2023-11-07T05:31:56Z", "updated_at": "2023-11-07T05:31:56Z" } ], "appointments": {}, "routing_rules": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "detection_mode": "intent", "trigger_keyword": "sales", "department_name": "Sales Department", "phrases": [ "I want to talk to sales" ], "ai_prompt": "Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.", "voice_response": "Sure, I'll transfer you to our sales team now. One moment please.", "voice_on_error": "I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.", "voice_on_success": "You've been successfully connected. Have a great day.", "destination_type": "extension", "destination": "101", "destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "transfer_type": "transfer_call", "transfer_config": {}, "priority": 1, "is_active": true } ], "guard_rules": [ { "uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "name": "Legal complaint escalation", "when_condition": "Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.", "example_phrases": [ "I'm calling my lawyer about this" ], "then_action": "forward", "selected_channels": [ "phone" ], "say_before_forwarding": "I understand this is important — let me connect you with someone who can help.", "say_before_end": "I'm sorry I couldn't help further. Please contact our team directly. Goodbye.", "destination_type": "extension", "destination": "<string>", "destination_agent_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "is_active": true, "is_default": false } ], "phone_numbers": [ { "phone_number_uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "number": "<string>", "status": "active", "country_code": "<string>", "type": "<string>", "capabilities": { "call": true, "sms": true, "whatsapp": true, "whatsapp_call": true } } ], "channels": [ {} ], "created_at": "2023-11-07T05:31:56Z", "updated_at": "2023-11-07T05:31:56Z" }}
Full agent configuration. Fields fall into three groups: (1) identity (name, company, role) — what the agent IS; (2) behavior prompts (objective, tone, behavior_guidelines, custom_prompt, negative_response) — HOW the runtime AI thinks and talks; (3) capabilities (settings.voice, settings.text, guidelines, notes, procedures, training, appointments, routing_rules, guard_rules) — WHAT the agent can do. For an agent to actually behave well at runtime, populate at least: name, role, objective, tone, behavior_guidelines, language, plus the relevant settings.voice OR settings.text block. Skipping prompt fields produces hollow agents that respond generically.
Required. Internal label for this agent — used in dashboards, logs, and as the default inbound_first_message 'this is X' name. Customers should recognize the brand from the name.
Internal one-paragraph description of what this agent does. Helps your team understand the agent's purpose at a glance — not used by the runtime AI, but useful when AI-builder agents (via MCP) decide which existing agent to update vs create new.
Example:
"Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases."
Strong recommendation. Concrete one-sentence role definition the runtime AI reads as system prompt context. Specific roles produce focused agents — 'Inbound service scheduler for a Volvo dealership' beats 'sales agent'. Without this set, the agent has no identity and answers everything generically.
Example:
"Inbound service appointment scheduler for a Volvo dealership in Cagliari."
Strong recommendation. The single primary outcome the agent should drive every conversation toward. Should be measurable. Without an objective the agent talks but doesn't close.
Example:
"Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service."
Critical. Free-form instructions that shape how the runtime AI handles edge cases, escalations, and brand-sensitive moments. Treat this as the agent's SOP. Empty = the agent has no rules.
Example:
"Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager."
Advanced. Raw additional system-prompt text appended to whatever the runtime AI assembles from the structured fields above. Use only when the structured fields can't express what you need — most cases are better served by tightening behavior_guidelines or adding procedures.
Channel-specific behavior. Populate voice for phone agents, text for messaging agents — most agents need only one. See AgentVoiceSettings / AgentTextSettings for full field details.
Ordered list of short do's and don'ts the runtime AI follows on every turn. Use for short, atomic rules. For complex multi-step workflows use procedures instead.
Free-form context the runtime AI keeps available throughout conversations — product facts, business rules, edge cases. Use for reference knowledge that doesn't fit a guideline or procedure.
Multi-step workflows the agent can execute end-to-end (e.g. 'book a service appointment', 'process a refund'). Each procedure has ordered steps. The runtime AI walks the steps when the relevant intent is detected.
Few-shot Q&A pairs. The runtime AI uses these as examples of correct responses to common questions. Add 5-15 high-impact pairs covering frequent customer questions.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Mindhunters API Documentation","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://app.mindhunters.ai/media/whitelabels/mindhunters/logos/logo-mini-mind.png","dark":"https://app.mindhunters.ai/media/whitelabels/mindhunters/logos/logo-mini-mind.png"},"favicon":"https://mintcdn.com/mindhunters/-hOMgV808cRLYMmR/favicon.svg?fit=max\u0026auto=format\u0026n=-hOMgV808cRLYMmR\u0026q=85\u0026s=87dca659c52f5ccabd9fa81d391df230","navbar":{"links":[{"href":"mailto:support@mindhunters.ai","label":"Support"}],"primary":{"type":"button","label":"Login","href":"https://app.mindhunters.ai"}},"footer":{"socials":{"x":"https://x.com/mindhuntersai","github":"https://github.com/mindhunters-ai","linkedin":"https://www.linkedin.com/company/mindhuntersai"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Mindhunters","icon":"book-open-cover","href":"https://mindhunters.ai"},{"anchor":"Login","icon":"newspaper","href":"https://app.mindhunters.ai"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"mindhunters","hasAudioNarration":false,"actualSubdomain":"mindhunters","customDomains":["developers.mindhunters.ai"],"gitSource":{"type":"github","owner":"mindhuntersai","repo":"mindhunters-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a220140c14f95f676ebf1ae","collectionId":"2e303ed4-b917-4468-9ef0-bb72c62a71a5","schemaVersion":"v2"},"entitlements":{},"buildId":"6a220140c14f95f676ebf1ae:success","clientVersion":"0.0.3969","searchFilterCounts":[{"language":"default","tag":"API Reference","count":605},{"language":"default","tag":"Agents","count":36},{"language":"default","tag":"Phone Numbers","count":23},{"language":"default","tag":"Tables","count":18},{"language":"default","tag":"Memorize","count":14},{"language":"default","tag":"Contacts","count":12},{"language":"default","tag":"Guides","count":11},{"language":"default","tag":"Agent Channel Bindings","count":10},{"language":"default","tag":"Campaigns","count":10},{"language":"default","tag":"Evaluate","count":10}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/agents/update-an-agent","slug":"/api-reference/agents/update-an-agent","pageMetadata":{"title":"Update an agent","description":"Updates core agent fields, voice/text settings, and any included collection sections. Use PATCH for partial changes to the agent profile or settings. If a collection section such as notes, guidelines, procedures, training, routing_rules, or guard_rules is included, that section replaces the existing section.","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}","href":"/api-reference/agents/update-an-agent","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Updates core agent fields, voice/text settings, and any included collection sections. Use PATCH for partial changes to the agent profile or settings. If a collection section such as notes, guidelines, procedures, training, routing_rules, or guard_rules is included, that section replaces the existing section.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Update an agent","description":"Updates core agent fields, voice/text settings, and any included collection sections. Use PATCH for partial changes to the agent profile or settings. If a collection section such as notes, guidelines, procedures, training, routing_rules, or guard_rules is included, that section replaces the existing section.","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}","href":"/api-reference/agents/update-an-agent","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Agents"],"summary":"Update an agent","description":"Updates core agent fields, voice/text settings, and any included collection sections. Use PATCH for partial changes to the agent profile or settings. If a collection section such as notes, guidelines, procedures, training, routing_rules, or guard_rules is included, that section replaces the existing section.","operationId":"557fb0cec203e7bfc44795a3d5773284","parameters":["ae6891aa-e802-48e0-91b9-03e3a198707d"],"requestBody":"91fea9a1-9582-4297-9b90-ad1251f65137","responses":{"200":"41e7dfef-6ba6-4681-9276-2e3f837d05ea","404":"5ba75ead-2d72-424c-ac45-b51c6e79dda5","422":"4806f8ba-365a-4327-9e5d-5a259532a650"},"security":["774d9aeb-35c6-4fac-ab93-12fcf4bca7a4"],"method":"patch","type":"path","servers":["dac11e17-38e0-40a7-8cdc-35a8b49f6298","292bb900-7559-481c-b70d-31819c604d97"],"path":"/api/v1/agents/{uuid}","baseUrlOptions":["https://{subdomain}.mihu.ai","/docs"],"title":"Update an agent","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ae6891aa-e802-48e0-91b9-03e3a198707d":{"name":"uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"description":"Full agent configuration. Fields fall into three groups: (1) identity (name, company, role) — what the agent IS; (2) behavior prompts (objective, tone, behavior_guidelines, custom_prompt, negative_response) — HOW the runtime AI thinks and talks; (3) capabilities (settings.voice, settings.text, guidelines, notes, procedures, training, appointments, routing_rules, guard_rules) — WHAT the agent can do. For an agent to actually behave well at runtime, populate at least: name, role, objective, tone, behavior_guidelines, language, plus the relevant settings.voice OR settings.text block. Skipping prompt fields produces hollow agents that respond generically.","required":["name"],"properties":{"name":{"description":"Required. Internal label for this agent — used in dashboards, logs, and as the default `inbound_first_message` 'this is X' name. Customers should recognize the brand from the name.","type":"string","example":"Volvo Cagliari Service Agent","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"description":{"oneOf":[{"description":"Internal one-paragraph description of what this agent does. Helps your team understand the agent's purpose at a glance — not used by the runtime AI, but useful when AI-builder agents (via MCP) decide which existing agent to update vs create new.","type":"string","example":"Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.","uniqueKey":"description.oneOf.0","typeLabel":"string"},{"description":"Internal one-paragraph description of what this agent does. Helps your team understand the agent's purpose at a glance — not used by the runtime AI, but useful when AI-builder agents (via MCP) decide which existing agent to update vs create new.","type":"null","example":"Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.","uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"company_name":{"oneOf":[{"description":"Brand the agent represents. The runtime AI references this when introducing itself.","type":"string","example":"Volvo Cagliari","uniqueKey":"company_name.oneOf.0","typeLabel":"string"},{"description":"Brand the agent represents. The runtime AI references this when introducing itself.","type":"null","example":"Volvo Cagliari","uniqueKey":"company_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"company_name","typeLabel":"string | null"},"role":{"oneOf":[{"description":"Strong recommendation. Concrete one-sentence role definition the runtime AI reads as system prompt context. Specific roles produce focused agents — 'Inbound service scheduler for a Volvo dealership' beats 'sales agent'. Without this set, the agent has no identity and answers everything generically.","type":"string","example":"Inbound service appointment scheduler for a Volvo dealership in Cagliari.","uniqueKey":"role.oneOf.0","typeLabel":"string"},{"description":"Strong recommendation. Concrete one-sentence role definition the runtime AI reads as system prompt context. Specific roles produce focused agents — 'Inbound service scheduler for a Volvo dealership' beats 'sales agent'. Without this set, the agent has no identity and answers everything generically.","type":"null","example":"Inbound service appointment scheduler for a Volvo dealership in Cagliari.","uniqueKey":"role.oneOf.1","typeLabel":"null"}],"uniqueKey":"role","typeLabel":"string | null"},"objective":{"oneOf":[{"description":"Strong recommendation. The single primary outcome the agent should drive every conversation toward. Should be measurable. Without an objective the agent talks but doesn't close.","type":"string","example":"Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.","uniqueKey":"objective.oneOf.0","typeLabel":"string"},{"description":"Strong recommendation. The single primary outcome the agent should drive every conversation toward. Should be measurable. Without an objective the agent talks but doesn't close.","type":"null","example":"Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.","uniqueKey":"objective.oneOf.1","typeLabel":"null"}],"uniqueKey":"objective","typeLabel":"string | null"},"tone":{"oneOf":[{"description":"Strong recommendation. Voice and style guide. Determines word choice, formality, and rapport tactics.","type":"string","example":"Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.","uniqueKey":"tone.oneOf.0","typeLabel":"string"},{"description":"Strong recommendation. Voice and style guide. Determines word choice, formality, and rapport tactics.","type":"null","example":"Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.","uniqueKey":"tone.oneOf.1","typeLabel":"null"}],"uniqueKey":"tone","typeLabel":"string | null"},"behavior_guidelines":{"oneOf":[{"description":"Critical. Free-form instructions that shape how the runtime AI handles edge cases, escalations, and brand-sensitive moments. Treat this as the agent's SOP. Empty = the agent has no rules.","type":"string","example":"Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.","uniqueKey":"behavior_guidelines.oneOf.0","typeLabel":"string"},{"description":"Critical. Free-form instructions that shape how the runtime AI handles edge cases, escalations, and brand-sensitive moments. Treat this as the agent's SOP. Empty = the agent has no rules.","type":"null","example":"Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.","uniqueKey":"behavior_guidelines.oneOf.1","typeLabel":"null"}],"uniqueKey":"behavior_guidelines","typeLabel":"string | null"},"company_service":{"oneOf":[{"description":"What the company actually sells/offers. Helps the agent stay on-topic and recognize off-domain questions.","type":"string","example":"Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.","uniqueKey":"company_service.oneOf.0","typeLabel":"string"},{"description":"What the company actually sells/offers. Helps the agent stay on-topic and recognize off-domain questions.","type":"null","example":"Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.","uniqueKey":"company_service.oneOf.1","typeLabel":"null"}],"uniqueKey":"company_service","typeLabel":"string | null"},"topic":{"oneOf":[{"description":"The narrow conversational topic the agent should stay within. Anything off-topic should trigger handover or polite redirect.","type":"string","example":"Service appointment booking and vehicle maintenance questions.","uniqueKey":"topic.oneOf.0","typeLabel":"string"},{"description":"The narrow conversational topic the agent should stay within. Anything off-topic should trigger handover or polite redirect.","type":"null","example":"Service appointment booking and vehicle maintenance questions.","uniqueKey":"topic.oneOf.1","typeLabel":"null"}],"uniqueKey":"topic","typeLabel":"string | null"},"length_detail":{"oneOf":[{"description":"How long replies should be. Voice agents need short crisp turns; text agents can be longer.","type":"string","example":"Keep replies under 25 words for voice; under 200 characters for text. One question at a time.","uniqueKey":"length_detail.oneOf.0","typeLabel":"string"},{"description":"How long replies should be. Voice agents need short crisp turns; text agents can be longer.","type":"null","example":"Keep replies under 25 words for voice; under 200 characters for text. One question at a time.","uniqueKey":"length_detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"length_detail","typeLabel":"string | null"},"interest_of_product":{"oneOf":[{"description":"Product-marketing context the agent can use to answer questions about the offering. Useful for sales-oriented agents.","type":"string","uniqueKey":"interest_of_product.oneOf.0","typeLabel":"string"},{"description":"Product-marketing context the agent can use to answer questions about the offering. Useful for sales-oriented agents.","type":"null","uniqueKey":"interest_of_product.oneOf.1","typeLabel":"null"}],"uniqueKey":"interest_of_product","typeLabel":"string | null"},"negative_response":{"oneOf":[{"description":"What the agent does when the conversation goes negative. Without this set, the agent may apologize excessively or escalate inappropriately.","type":"string","example":"If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.","uniqueKey":"negative_response.oneOf.0","typeLabel":"string"},{"description":"What the agent does when the conversation goes negative. Without this set, the agent may apologize excessively or escalate inappropriately.","type":"null","example":"If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.","uniqueKey":"negative_response.oneOf.1","typeLabel":"null"}],"uniqueKey":"negative_response","typeLabel":"string | null"},"status":{"oneOf":[{"description":"Lifecycle state. `ready` = agent is live and reachable; `paused` = agent exists but won't accept new conversations.","type":"string","enum":["pending","ready","in_progress","paused","completed"],"uniqueKey":"status.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Lifecycle state. `ready` = agent is live and reachable; `paused` = agent exists but won't accept new conversations.","type":"null","enum":["pending","ready","in_progress","paused","completed"],"uniqueKey":"status.oneOf.1","typeLabel":"null"}],"uniqueKey":"status","typeLabel":"enum\u003cstring> | null"},"custom_prompt":{"oneOf":[{"description":"Advanced. Raw additional system-prompt text appended to whatever the runtime AI assembles from the structured fields above. Use only when the structured fields can't express what you need — most cases are better served by tightening `behavior_guidelines` or adding `procedures`.","type":"string","uniqueKey":"custom_prompt.oneOf.0","typeLabel":"string"},{"description":"Advanced. Raw additional system-prompt text appended to whatever the runtime AI assembles from the structured fields above. Use only when the structured fields can't express what you need — most cases are better served by tightening `behavior_guidelines` or adding `procedures`.","type":"null","uniqueKey":"custom_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"custom_prompt","typeLabel":"string | null"},"language":{"oneOf":[{"description":"ISO 639-1 code for the agent's primary language. Affects both voice (TTS/STT) and text (LLM language). Match `settings.voice.voice_profile.language`.","type":"string","example":"en","uniqueKey":"language.oneOf.0","typeLabel":"string"},{"description":"ISO 639-1 code for the agent's primary language. Affects both voice (TTS/STT) and text (LLM language). Match `settings.voice.voice_profile.language`.","type":"null","example":"en","uniqueKey":"language.oneOf.1","typeLabel":"null"}],"uniqueKey":"language","typeLabel":"string | null"},"speed":{"oneOf":[{"description":"Voice playback speed. Use `fast` for repeat customers who know the flow; default `normal`.","type":"string","enum":["normal","fast"],"uniqueKey":"speed.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Voice playback speed. Use `fast` for repeat customers who know the flow; default `normal`.","type":"null","enum":["normal","fast"],"uniqueKey":"speed.oneOf.1","typeLabel":"null"}],"uniqueKey":"speed","typeLabel":"enum\u003cstring> | null"},"timezone":{"oneOf":[{"description":"IANA timezone. Used for working hours, appointment booking, and follow-up scheduling.","type":"string","example":"America/New_York","uniqueKey":"timezone.oneOf.0","typeLabel":"string"},{"description":"IANA timezone. Used for working hours, appointment booking, and follow-up scheduling.","type":"null","example":"America/New_York","uniqueKey":"timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"timezone","typeLabel":"string | null"},"appointment_scheduling_enabled":{"oneOf":[{"description":"Master switch for appointment booking. When false, all schedule_assignments are inert.","type":"boolean","uniqueKey":"appointment_scheduling_enabled.oneOf.0","typeLabel":"boolean"},{"description":"Master switch for appointment booking. When false, all schedule_assignments are inert.","type":"null","uniqueKey":"appointment_scheduling_enabled.oneOf.1","typeLabel":"null"}],"uniqueKey":"appointment_scheduling_enabled","typeLabel":"boolean | null"},"appointment_scheduling_randomly":{"oneOf":[{"description":"When multiple primary schedule_assignments match, pick randomly instead of by priority. Use for load balancing across human staff.","type":"boolean","uniqueKey":"appointment_scheduling_randomly.oneOf.0","typeLabel":"boolean"},{"description":"When multiple primary schedule_assignments match, pick randomly instead of by priority. Use for load balancing across human staff.","type":"null","uniqueKey":"appointment_scheduling_randomly.oneOf.1","typeLabel":"null"}],"uniqueKey":"appointment_scheduling_randomly","typeLabel":"boolean | null"},"custom_llm_url":{"oneOf":[{"description":"Optional override pointing at a custom LLM endpoint instead of the default. Advanced — reach out before using.","type":"string","uniqueKey":"custom_llm_url.oneOf.0","typeLabel":"string"},{"description":"Optional override pointing at a custom LLM endpoint instead of the default. Advanced — reach out before using.","type":"null","uniqueKey":"custom_llm_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"custom_llm_url","typeLabel":"string | null"},"settings":{"description":"Channel-specific behavior. Populate `voice` for phone agents, `text` for messaging agents — most agents need only one. See AgentVoiceSettings / AgentTextSettings for full field details.","properties":{"voice":{"description":"Voice/phone behavior for the agent. The runtime AI uses these to script the start, middle, and end of every voice conversation, plus the technical voice profile (language, voice ID) and call constraints. Always populate `interaction.*` first messages and end-of-call message — without them the agent goes silent at critical moments.","properties":{"interaction":{"description":"Scripted messages and rules for live conversation flow.","properties":{"customer_speak_first":{"description":"If true, the agent waits for the customer to speak before greeting. Use for inbound where the contact called you and is expected to lead. Default false (agent greets first).","type":"boolean","example":false,"uniqueKey":"settings.voice.interaction.customer_speak_first","typeLabel":"boolean"},"inbound_first_message":{"description":"Required for inbound calls. The first words the agent speaks when picking up. Should identify the brand and offer help.","type":"string","example":"Hi, this is Sara from Volvo. How can I help you today?","uniqueKey":"settings.voice.interaction.inbound_first_message","typeLabel":"string"},"outbound_first_message":{"description":"Required for outbound calls. Should identify the brand, the reason for calling, and ask permission to continue.","type":"string","example":"Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?","uniqueKey":"settings.voice.interaction.outbound_first_message","typeLabel":"string"},"voice_mail_message":{"description":"Spoken when the call goes to voicemail (detected by silence/answering machine). Keep it short and actionable.","type":"string","example":"Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.","uniqueKey":"settings.voice.interaction.voice_mail_message","typeLabel":"string"},"end_call_message":{"description":"Required. Spoken right before the agent hangs up. Always set this — without it the call ends abruptly and feels rude.","type":"string","example":"Thank you for calling, have a great day!","uniqueKey":"settings.voice.interaction.end_call_message","typeLabel":"string"},"silence_message":{"description":"Spoken when the customer goes silent for `silence_timeout_seconds`. Helps recover from network blips and disengaged callers.","type":"string","example":"Are you still there? I want to make sure I'm helping you with what you need.","uniqueKey":"settings.voice.interaction.silence_message","typeLabel":"string"},"max_silence_prompts":{"description":"How many times the agent will ask 'are you still there?' before hanging up.","type":"integer","minimum":1,"example":3,"uniqueKey":"settings.voice.interaction.max_silence_prompts","typeLabel":"integer"}},"type":"object","uniqueKey":"settings.voice.interaction","typeLabel":"object"},"interruption":{"properties":{"mode":{"description":"Controls how the agent reacts when the customer talks over them. `sensitive` = stop instantly on any sound (best for casual chat). `balanced` = stop on full words/phrases (recommended default). `never_stop` = finish the sentence regardless (use for legally-required disclosures).","type":"string","enum":["sensitive","balanced","never_stop"],"example":"balanced","uniqueKey":"settings.voice.interruption.mode","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"settings.voice.interruption","typeLabel":"object"},"voice_profile":{"description":"Technical voice rendering settings. Required for the agent to actually sound like anything.","properties":{"language":{"description":"ISO 639-1 code for the spoken language. Determines accent, idioms, and the speech model used. Examples: 'en', 'es', 'de', 'fr', 'it'.","type":"string","example":"en","uniqueKey":"settings.voice.voice_profile.language","typeLabel":"string"},"voice_uuid":{"oneOf":[{"description":"UUID of the selected voice in /api/v1/voice_library. Used both on read and write. On update, the matching library row's provider voice id is resolved automatically. Use this UUID to call /api/v1/voice_speed/{voice_uuid}.","type":"string","format":"uuid","example":"ebeba3e0-89b5-4c94-9841-9555ab155dbc","uniqueKey":"settings.voice.voice_profile.voice_uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"description":"UUID of the selected voice in /api/v1/voice_library. Used both on read and write. On update, the matching library row's provider voice id is resolved automatically. Use this UUID to call /api/v1/voice_speed/{voice_uuid}.","type":"null","format":"uuid","example":"ebeba3e0-89b5-4c94-9841-9555ab155dbc","uniqueKey":"settings.voice.voice_profile.voice_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"settings.voice.voice_profile.voice_uuid","typeLabel":"string\u003cuuid> | null"},"voice_name":{"oneOf":[{"description":"Display name of the selected voice. Read-only on response.","type":"string","example":"Giulia","uniqueKey":"settings.voice.voice_profile.voice_name.oneOf.0","typeLabel":"string"},{"description":"Display name of the selected voice. Read-only on response.","type":"null","example":"Giulia","uniqueKey":"settings.voice.voice_profile.voice_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"settings.voice.voice_profile.voice_name","typeLabel":"string | null"}},"type":"object","uniqueKey":"settings.voice.voice_profile","typeLabel":"object"},"call_behavior":{"description":"Call-level constraints and behavior.","properties":{"audio_recording":{"description":"Records the call audio for later evaluation/coaching. Required for QA features and most compliance regimes — but check local consent laws.","type":"boolean","example":true,"uniqueKey":"settings.voice.call_behavior.audio_recording","typeLabel":"boolean"},"background_sound":{"description":"Plays a subtle office/call-center ambience. Makes the agent feel more human; some markets prefer it off.","type":"boolean","example":true,"uniqueKey":"settings.voice.call_behavior.background_sound","typeLabel":"boolean"},"silence_timeout_seconds":{"description":"Seconds of customer silence before the agent triggers `silence_message`.","type":"integer","minimum":1,"example":60,"uniqueKey":"settings.voice.call_behavior.silence_timeout_seconds","typeLabel":"integer"},"max_call_duration_seconds":{"description":"Hard limit on call length in seconds. The agent ends with `max_call_duration_message` when reached. Use to cap runaway costs.","type":"integer","minimum":60,"example":1800,"uniqueKey":"settings.voice.call_behavior.max_call_duration_seconds","typeLabel":"integer"},"max_call_duration_message":{"description":"Spoken right before the call is terminated due to max duration.","type":"string","example":"Thanks for the call — we've reached the time limit. Goodbye!","uniqueKey":"settings.voice.call_behavior.max_call_duration_message","typeLabel":"string"}},"type":"object","uniqueKey":"settings.voice.call_behavior","typeLabel":"object"},"compliance":{"description":"Regulatory toggles. Affect what the runtime AI may capture, repeat, or act on.","properties":{"eu_gdpr_compliance":{"type":"boolean","example":true,"uniqueKey":"settings.voice.compliance.eu_gdpr_compliance","typeLabel":"boolean"},"hipaa_compliance":{"type":"boolean","example":false,"uniqueKey":"settings.voice.compliance.hipaa_compliance","typeLabel":"boolean"}},"type":"object","uniqueKey":"settings.voice.compliance","typeLabel":"object"},"normalizers":{"description":"Phone-number normalization rules. Free-form objects per direction; consult provider docs for accepted keys.","properties":{"outbound":{"oneOf":[{"type":"object","uniqueKey":"settings.voice.normalizers.outbound.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"settings.voice.normalizers.outbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"settings.voice.normalizers.outbound","typeLabel":"object | null"},"inbound":{"oneOf":[{"type":"object","uniqueKey":"settings.voice.normalizers.inbound.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"settings.voice.normalizers.inbound.oneOf.1","typeLabel":"null"}],"uniqueKey":"settings.voice.normalizers.inbound","typeLabel":"object | null"}},"type":"object","uniqueKey":"settings.voice.normalizers","typeLabel":"object"}},"type":"object","uniqueKey":"settings.voice","typeLabel":"object"},"text":{"description":"Text/messaging behavior for the agent (WhatsApp, SMS, Instagram, FB Messenger, web chat). The runtime AI uses these to time replies, simulate human typing, hand over to a human when needed, and tune personality. Defaults work but tuning timing/personality is the difference between 'obvious bot' and 'feels like a real teammate'.","properties":{"daily_limits":{"properties":{"daily_max_messages_per_conversation":{"description":"Per-conversation cap on messages the agent will send in a 24h window. Protects against runaway loops and angry follow-ups.","type":"integer","minimum":1,"example":100,"uniqueKey":"settings.text.daily_limits.daily_max_messages_per_conversation","typeLabel":"integer"},"daily_conversation_limit_exceeded_message":{"oneOf":[{"description":"Sent once when the per-day cap is hit. Tell the contact when the agent will be back.","type":"string","uniqueKey":"settings.text.daily_limits.daily_conversation_limit_exceeded_message.oneOf.0","typeLabel":"string"},{"description":"Sent once when the per-day cap is hit. Tell the contact when the agent will be back.","type":"null","uniqueKey":"settings.text.daily_limits.daily_conversation_limit_exceeded_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"settings.text.daily_limits.daily_conversation_limit_exceeded_message","typeLabel":"string | null"}},"type":"object","uniqueKey":"settings.text.daily_limits","typeLabel":"object"},"timing_and_delay":{"description":"How fast the agent types and replies. Tune to match the channel — WhatsApp tolerates faster cadence than SMS.","properties":{"base_delay":{"description":"Seconds before the agent starts typing after a customer message arrives.","type":"number","example":0.5,"uniqueKey":"settings.text.timing_and_delay.base_delay","typeLabel":"number"},"pause_before_reply":{"description":"Seconds the agent appears to 'think' before its visible typing indicator starts.","type":"number","example":1,"uniqueKey":"settings.text.timing_and_delay.pause_before_reply","typeLabel":"number"},"typing_speed_wpm_min":{"description":"Minimum simulated typing speed in words per minute.","type":"integer","example":40,"uniqueKey":"settings.text.timing_and_delay.typing_speed_wpm_min","typeLabel":"integer"},"typing_speed_wpm_max":{"description":"Maximum simulated typing speed. Agent picks a value in [min,max] per message — variation makes it feel human.","type":"integer","example":60,"uniqueKey":"settings.text.timing_and_delay.typing_speed_wpm_max","typeLabel":"integer"},"typing_speed_char":{"description":"Per-character delay in seconds. Used as a finer-grained alternative to wpm.","type":"number","example":0.05,"uniqueKey":"settings.text.timing_and_delay.typing_speed_char","typeLabel":"number"},"delay_jitter_min":{"type":"number","example":0.1,"uniqueKey":"settings.text.timing_and_delay.delay_jitter_min","typeLabel":"number"},"delay_jitter_max":{"description":"Random jitter added to each reply timing within [min,max] seconds. Avoids robotic pacing.","type":"number","example":1.5,"uniqueKey":"settings.text.timing_and_delay.delay_jitter_max","typeLabel":"number"}},"type":"object","uniqueKey":"settings.text.timing_and_delay","typeLabel":"object"},"typing_simulation":{"properties":{"show_typing_indicator":{"description":"Send the channel's 'is typing…' indicator while composing. Channel-dependent — WhatsApp supports it, some SMS providers don't.","type":"boolean","example":true,"uniqueKey":"settings.text.typing_simulation.show_typing_indicator","typeLabel":"boolean"},"simulate_typing_breaks":{"description":"Insert short pauses mid-message as if the agent stopped to think.","type":"boolean","example":true,"uniqueKey":"settings.text.typing_simulation.simulate_typing_breaks","typeLabel":"boolean"},"simulate_typos_corrections":{"description":"Send a typo and correct it — extreme realism, but easy to overdo. Use sparingly.","type":"boolean","example":false,"uniqueKey":"settings.text.typing_simulation.simulate_typos_corrections","typeLabel":"boolean"}},"type":"object","uniqueKey":"settings.text.typing_simulation","typeLabel":"object"},"working_hours":{"description":"When the agent is allowed to actively reply. Outside these hours, behavior follows `outside_hours_behavior`.","properties":{"enabled":{"type":"boolean","example":false,"uniqueKey":"settings.text.working_hours.enabled","typeLabel":"boolean"},"start":{"type":"string","example":"9 AM","uniqueKey":"settings.text.working_hours.start","typeLabel":"string"},"end":{"type":"string","example":"5 PM","uniqueKey":"settings.text.working_hours.end","typeLabel":"string"},"timezone":{"type":"string","example":"America/New_York","uniqueKey":"settings.text.working_hours.timezone","typeLabel":"string"},"outside_hours_behavior":{"description":"`Auto-reply` sends a holding message; `Ignore` queues the message for the next working hour; `Escalate to AI` lets the agent answer anyway.","type":"string","enum":["Auto-reply","Ignore","Escalate to AI"],"example":"Auto-reply","uniqueKey":"settings.text.working_hours.outside_hours_behavior","typeLabel":"enum\u003cstring>"},"offline_message":{"oneOf":[{"description":"Sent during off-hours when behavior is `Auto-reply`. Should set expectations on response time.","type":"string","uniqueKey":"settings.text.working_hours.offline_message.oneOf.0","typeLabel":"string"},{"description":"Sent during off-hours when behavior is `Auto-reply`. Should set expectations on response time.","type":"null","uniqueKey":"settings.text.working_hours.offline_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"settings.text.working_hours.offline_message","typeLabel":"string | null"},"during_hours_agent":{"description":"Who handles messages during working hours: `ai` = the agent itself, `human` = forward to live staff.","type":"string","enum":["ai","human"],"example":"ai","uniqueKey":"settings.text.working_hours.during_hours_agent","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"settings.text.working_hours","typeLabel":"object"},"handover":{"description":"When and how to hand a conversation off to a human (or another agent).","properties":{"enabled":{"type":"boolean","example":false,"uniqueKey":"settings.text.handover.enabled","typeLabel":"boolean"},"handover_triggers":{"description":"What event triggers handover. `User request` = customer explicitly asks for a human; `Low confidence` = AI uncertainty above threshold; `Complex query` = topic detection; `After timeout` = no resolution within N turns.","type":"string","enum":["User request","Low confidence","Complex query","After timeout"],"example":"User request","uniqueKey":"settings.text.handover.handover_triggers","typeLabel":"enum\u003cstring>"},"handover_method":{"type":"string","enum":["Assign agent","Email notification","Queue system"],"example":"Assign agent","uniqueKey":"settings.text.handover.handover_method","typeLabel":"enum\u003cstring>"},"handover_message":{"oneOf":[{"description":"Sent to the customer at the moment of handover. Set expectations: 'A teammate will be with you shortly.'","type":"string","uniqueKey":"settings.text.handover.handover_message.oneOf.0","typeLabel":"string"},{"description":"Sent to the customer at the moment of handover. Set expectations: 'A teammate will be with you shortly.'","type":"null","uniqueKey":"settings.text.handover.handover_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"settings.text.handover.handover_message","typeLabel":"string | null"},"assignment_strategy":{"type":"string","enum":["First available","Round robin","Skill-based"],"example":"First available","uniqueKey":"settings.text.handover.assignment_strategy","typeLabel":"enum\u003cstring>"},"handover_timeout":{"description":"Seconds the AI will wait for a human to pick up before falling back to `fallback_agent`.","type":"integer","example":60,"uniqueKey":"settings.text.handover.handover_timeout","typeLabel":"integer"},"fallback_agent":{"description":"Where the conversation goes if no human is available within the timeout.","type":"string","example":"Bot assistant","uniqueKey":"settings.text.handover.fallback_agent","typeLabel":"string"}},"type":"object","uniqueKey":"settings.text.handover","typeLabel":"object"},"confidence_controls":{"properties":{"min_confidence_threshold":{"description":"Below this score the AI will trigger handover (if `Low confidence` is in handover_triggers) or ask a clarifying question.","type":"number","maximum":1,"minimum":0,"example":0.7,"uniqueKey":"settings.text.confidence_controls.min_confidence_threshold","typeLabel":"number"},"ask_clarifying_questions":{"description":"When confidence is low, ask the customer for clarification instead of guessing.","type":"boolean","example":false,"uniqueKey":"settings.text.confidence_controls.ask_clarifying_questions","typeLabel":"boolean"}},"type":"object","uniqueKey":"settings.text.confidence_controls","typeLabel":"object"},"message_behavior":{"description":"Optional 'second message' and 'follow-up' personalities — make the agent feel proactive instead of reactive.","properties":{"second_message_behavior":{"description":"Probability that the agent sends an unprompted second message right after its first reply (e.g. 'Also — let me know if you want me to send a confirmation email').","properties":{"enabled":{"type":"boolean","example":false,"uniqueKey":"settings.text.message_behavior.second_message_behavior.enabled","typeLabel":"boolean"},"chance":{"description":"0..1 probability per reply.","type":"number","maximum":1,"minimum":0,"example":0.25,"uniqueKey":"settings.text.message_behavior.second_message_behavior.chance","typeLabel":"number"},"delay_min":{"type":"number","example":1,"uniqueKey":"settings.text.message_behavior.second_message_behavior.delay_min","typeLabel":"number"},"delay_max":{"type":"number","example":4,"uniqueKey":"settings.text.message_behavior.second_message_behavior.delay_max","typeLabel":"number"}},"type":"object","uniqueKey":"settings.text.message_behavior.second_message_behavior","typeLabel":"object"},"follow_up_behavior":{"description":"Whether the agent reaches out again after a resolved conversation goes silent (in hours).","properties":{"enabled":{"type":"boolean","example":false,"uniqueKey":"settings.text.message_behavior.follow_up_behavior.enabled","typeLabel":"boolean"},"delay_min":{"type":"number","example":24,"uniqueKey":"settings.text.message_behavior.follow_up_behavior.delay_min","typeLabel":"number"},"delay_max":{"type":"number","example":48,"uniqueKey":"settings.text.message_behavior.follow_up_behavior.delay_max","typeLabel":"number"}},"type":"object","uniqueKey":"settings.text.message_behavior.follow_up_behavior","typeLabel":"object"}},"type":"object","uniqueKey":"settings.text.message_behavior","typeLabel":"object"},"personality":{"description":"Tone-of-voice knobs. Subtle changes here have outsized impact on how human the agent feels.","properties":{"use_response_variations":{"description":"Vary phrasing across replies so the agent doesn't sound canned.","type":"boolean","example":true,"uniqueKey":"settings.text.personality.use_response_variations","typeLabel":"boolean"},"emoji_usage":{"description":"How often the agent uses emoji. Match the brand and channel — High emoji on a B2B legal channel reads as unprofessional.","type":"string","enum":["None","Low","Medium","High"],"example":"None","uniqueKey":"settings.text.personality.emoji_usage","typeLabel":"enum\u003cstring>"},"use_punctuation_variation":{"type":"boolean","example":false,"uniqueKey":"settings.text.personality.use_punctuation_variation","typeLabel":"boolean"},"use_filler_words":{"description":"Sprinkle 'sure', 'okay', 'right' into replies. Adds warmth; can slow down task-focused conversations.","type":"boolean","example":false,"uniqueKey":"settings.text.personality.use_filler_words","typeLabel":"boolean"},"enable_small_talk":{"description":"Allow brief off-topic chat (weather, weekend) when the customer initiates it.","type":"boolean","example":false,"uniqueKey":"settings.text.personality.enable_small_talk","typeLabel":"boolean"},"energy_level":{"description":"Free-form label for the agent's energy. Examples: 'Friendly', 'Calm', 'Energetic', 'Professional'. The runtime AI uses this as style guidance.","type":"string","example":"Friendly","uniqueKey":"settings.text.personality.energy_level","typeLabel":"string"},"empathy_level":{"description":"How explicitly the agent acknowledges the customer's feelings. High empathy is essential for support and complaint channels.","type":"string","enum":["None","Low","Medium","High"],"example":"Medium","uniqueKey":"settings.text.personality.empathy_level","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"settings.text.personality","typeLabel":"object"},"advanced":{"properties":{"split_messages":{"description":"Break long replies into multiple shorter messages. Feels more like a real person typing thoughts as they form.","type":"boolean","example":true,"uniqueKey":"settings.text.advanced.split_messages","typeLabel":"boolean"},"simulate_message_editing":{"description":"Show 'edited' indicator on some messages — extreme realism, off by default.","type":"boolean","example":false,"uniqueKey":"settings.text.advanced.simulate_message_editing","typeLabel":"boolean"},"use_memory_based_context":{"description":"Pull from the contact's memorize settings (see /api/v1/memorize/...) when generating replies.","type":"boolean","example":false,"uniqueKey":"settings.text.advanced.use_memory_based_context","typeLabel":"boolean"},"human_first_mode":{"description":"When true, a human writes the first reply and the AI takes over from there. Use during AI rollout to build trust.","type":"boolean","example":false,"uniqueKey":"settings.text.advanced.human_first_mode","typeLabel":"boolean"}},"type":"object","uniqueKey":"settings.text.advanced","typeLabel":"object"}},"type":"object","uniqueKey":"settings.text","typeLabel":"object"}},"type":"object","uniqueKey":"settings","typeLabel":"object"},"guidelines":{"description":"Ordered list of short do's and don'ts the runtime AI follows on every turn. Use for short, atomic rules. For complex multi-step workflows use `procedures` instead.","type":"array","items":{"description":"One short do/don't rule. The runtime AI consults the full set of guidelines on every reply. Keep each one atomic and specific — 'Always confirm the booking date in YYYY-MM-DD format' beats 'Be professional'.","properties":{"content":{"description":"Required. The rule itself, in natural language. Imperative voice works best.","type":"string","example":"Always confirm vehicle VIN or license plate before creating a service appointment.","uniqueKey":"guidelines.items.[INDEX].content","typeLabel":"string"},"order":{"description":"Display/evaluation order. Lower numbers come first.","type":"integer","example":0,"uniqueKey":"guidelines.items.[INDEX].order","typeLabel":"integer"}},"type":"object","uniqueKey":"guidelines.items.[INDEX]","typeLabel":"object"},"uniqueKey":"guidelines","typeLabel":"object[]"},"notes":{"description":"Free-form context the runtime AI keeps available throughout conversations — product facts, business rules, edge cases. Use for reference knowledge that doesn't fit a guideline or procedure.","type":"array","items":{"description":"A piece of reference knowledge the runtime AI can quote when relevant — product facts, hours, policies. Notes are passive (consulted on demand) versus guidelines which are active (applied on every turn).","properties":{"content":{"description":"Required. Free-form reference text. Keep notes focused — one fact or policy per note.","type":"string","example":"Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.","uniqueKey":"notes.items.[INDEX].content","typeLabel":"string"},"order":{"type":"integer","example":0,"uniqueKey":"notes.items.[INDEX].order","typeLabel":"integer"}},"type":"object","uniqueKey":"notes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"notes","typeLabel":"object[]"},"procedures":{"description":"Multi-step workflows the agent can execute end-to-end (e.g. 'book a service appointment', 'process a refund'). Each procedure has ordered steps. The runtime AI walks the steps when the relevant intent is detected.","type":"array","items":{"description":"A multi-step workflow the agent can execute (e.g. 'book a service appointment'). The runtime AI walks the steps in order when it detects the relevant intent. Procedures are how you teach the agent to actually DO things instead of just talking.","properties":{"name":{"description":"Required. Short imperative name describing what this procedure does.","type":"string","example":"Book service appointment","uniqueKey":"procedures.items.[INDEX].name","typeLabel":"string"},"description":{"oneOf":[{"description":"When the runtime AI should invoke this procedure. Be specific about the trigger.","type":"string","example":"Used when the customer wants to schedule a service appointment for their vehicle.","uniqueKey":"procedures.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"description":"When the runtime AI should invoke this procedure. Be specific about the trigger.","type":"null","example":"Used when the customer wants to schedule a service appointment for their vehicle.","uniqueKey":"procedures.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"procedures.items.[INDEX].description","typeLabel":"string | null"},"steps":{"description":"Ordered actions the agent performs. Reference an intent_uuid on a step to trigger a tool call instead of plain conversation.","type":"array","items":{"properties":{"order":{"type":"integer","example":1,"uniqueKey":"procedures.items.[INDEX].steps.items.[INDEX].order","typeLabel":"integer"},"description":{"type":"string","example":"Ask the customer for their vehicle license plate or VIN.","uniqueKey":"procedures.items.[INDEX].steps.items.[INDEX].description","typeLabel":"string"},"intent_uuid":{"oneOf":[{"description":"Optional. UUID of an intent that, when matched, executes a tool/integration at this step (lookup, create record, send notification).","type":"string","format":"uuid","uniqueKey":"procedures.items.[INDEX].steps.items.[INDEX].intent_uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"description":"Optional. UUID of an intent that, when matched, executes a tool/integration at this step (lookup, create record, send notification).","type":"null","format":"uuid","uniqueKey":"procedures.items.[INDEX].steps.items.[INDEX].intent_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"procedures.items.[INDEX].steps.items.[INDEX].intent_uuid","typeLabel":"string\u003cuuid> | null"}},"type":"object","uniqueKey":"procedures.items.[INDEX].steps.items.[INDEX]","typeLabel":"object"},"uniqueKey":"procedures.items.[INDEX].steps","typeLabel":"object[]"}},"type":"object","uniqueKey":"procedures.items.[INDEX]","typeLabel":"object"},"uniqueKey":"procedures","typeLabel":"object[]"},"training":{"description":"Few-shot Q\u0026A pairs. The runtime AI uses these as examples of correct responses to common questions. Add 5-15 high-impact pairs covering frequent customer questions.","type":"array","items":{"description":"A single few-shot Q\u0026A example. The runtime AI uses these as templates for high-quality responses to common questions. Most useful for: brand-specific phrasing, tricky FAQs, edge cases the agent keeps getting wrong.","properties":{"content":{"description":"The customer question or scenario.","type":"string","example":"What does Volvo's standard warranty cover?","uniqueKey":"training.items.[INDEX].content","typeLabel":"string"},"intent":{"oneOf":[{"description":"Optional intent label that lets the runtime AI cluster similar questions.","type":"string","example":"warranty_inquiry","uniqueKey":"training.items.[INDEX].intent.oneOf.0","typeLabel":"string"},{"description":"Optional intent label that lets the runtime AI cluster similar questions.","type":"null","example":"warranty_inquiry","uniqueKey":"training.items.[INDEX].intent.oneOf.1","typeLabel":"null"}],"uniqueKey":"training.items.[INDEX].intent","typeLabel":"string | null"},"response":{"oneOf":[{"description":"The model answer. Match the agent's tone — what you write here is what the agent will sound like for similar questions.","type":"string","example":"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?","uniqueKey":"training.items.[INDEX].response.oneOf.0","typeLabel":"string"},{"description":"The model answer. Match the agent's tone — what you write here is what the agent will sound like for similar questions.","type":"null","example":"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?","uniqueKey":"training.items.[INDEX].response.oneOf.1","typeLabel":"null"}],"uniqueKey":"training.items.[INDEX].response","typeLabel":"string | null"}},"type":"object","uniqueKey":"training.items.[INDEX]","typeLabel":"object"},"uniqueKey":"training","typeLabel":"object[]"},"appointments":{"properties":{"enabled":{"type":"boolean","uniqueKey":"appointments.enabled","typeLabel":"boolean"},"random_assignment":{"type":"boolean","uniqueKey":"appointments.random_assignment","typeLabel":"boolean"},"schedule_assignments":{"description":"Each entry connects the agent to a schedule and tells the runtime AI when and how to use it. Always provide `name` and `description` for every assignment — without them the runtime AI cannot distinguish between schedule types when a contact asks for an appointment.","type":"array","items":{"properties":{"schedule_uuid":{"description":"UUID of the schedule from /api/v1/schedules.","type":"string","format":"uuid","uniqueKey":"appointments.schedule_assignments.items.[INDEX].schedule_uuid","typeLabel":"string\u003cuuid>"},"priority":{"description":"Used when multiple assignments match a request — primary is preferred.","type":"string","enum":["primary","secondary","backup"],"uniqueKey":"appointments.schedule_assignments.items.[INDEX].priority","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["active","inactive"],"uniqueKey":"appointments.schedule_assignments.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"name":{"description":"Required for the AI to identify this schedule. Short label the runtime agent uses when offering this appointment type to a contact. Examples: 'Service Appointment', 'Sales Consultation', 'Test Drive'. Always set this — assignments without a name are invisible to the AI's selection logic.","type":"string","example":"Service Appointment","uniqueKey":"appointments.schedule_assignments.items.[INDEX].name","typeLabel":"string"},"description":{"description":"Required for the AI to know when to use this schedule. Describes the customer intent or situation that should trigger this assignment. The runtime agent reads this as instructions when deciding which schedule to offer. Always set this — empty descriptions cause the AI to fall back to the primary assignment regardless of customer need.","type":"string","example":"When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.","uniqueKey":"appointments.schedule_assignments.items.[INDEX].description","typeLabel":"string"},"slot_rules":{"description":"Controls when slots are offered and how the AI resolves scheduling conflicts.","properties":{"offer_slots_from":{"description":"Minimum lead time before a slot becomes offerable to a contact.","type":"string","enum":["now","30_min","1_hour","2_hours","3_hours","6_hours","24_hours"],"example":"3_hours","uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.offer_slots_from","typeLabel":"enum\u003cstring>"},"book_slots_from":{"description":"Minimum lead time before a slot becomes bookable. Usually >= offer_slots_from.","type":"string","enum":["now","30_min","1_hour","2_hours","3_hours","6_hours","24_hours"],"example":"6_hours","uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.book_slots_from","typeLabel":"enum\u003cstring>"},"max_appointments_per_day":{"oneOf":[{"description":"Daily booking cap for this assignment. Null = unlimited.","type":"integer","minimum":1,"example":10,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.max_appointments_per_day.oneOf.0","typeLabel":"integer"},{"description":"Daily booking cap for this assignment. Null = unlimited.","type":"null","minimum":1,"example":10,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.max_appointments_per_day.oneOf.1","typeLabel":"null"}],"uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.max_appointments_per_day","typeLabel":"integer | null"},"conflict_resolution_enabled":{"description":"When true, the AI suggests alternative slots if the requested time is unavailable.","type":"boolean","example":true,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.conflict_resolution_enabled","typeLabel":"boolean"},"alternative_slots_count":{"description":"How many alternatives to offer when a conflict is detected.","type":"integer","minimum":1,"example":3,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.alternative_slots_count","typeLabel":"integer"},"suggestion_priority":{"description":"How alternatives are ranked: nearest in time, same calendar day, or same time slot on a different day.","type":"string","enum":["nearest","same_day","same_time"],"example":"nearest","uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.suggestion_priority","typeLabel":"enum\u003cstring>"},"prefer_same_day":{"type":"boolean","example":true,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.prefer_same_day","typeLabel":"boolean"},"prefer_same_time_slot":{"type":"boolean","example":false,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.prefer_same_time_slot","typeLabel":"boolean"},"include_same_week":{"type":"boolean","example":true,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules.include_same_week","typeLabel":"boolean"}},"type":"object","uniqueKey":"appointments.schedule_assignments.items.[INDEX].slot_rules","typeLabel":"object"},"rescheduling":{"description":"When and how the contact may reschedule an existing appointment.","properties":{"policy":{"description":"always_ask = every reschedule needs human approval; auto_minor = AI can reschedule minor changes; auto_all = AI may reschedule freely within the rules.","type":"string","enum":["always_ask","auto_minor","auto_all"],"example":"always_ask","uniqueKey":"appointments.schedule_assignments.items.[INDEX].rescheduling.policy","typeLabel":"enum\u003cstring>"},"minor_change_hours":{"description":"Maximum hour delta that counts as a 'minor' reschedule under the auto_minor policy.","type":"integer","minimum":0,"example":2,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].rescheduling.minor_change_hours","typeLabel":"integer"},"minor_change_same_day":{"type":"boolean","example":true,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].rescheduling.minor_change_same_day","typeLabel":"boolean"},"minor_change_same_week":{"type":"boolean","example":false,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].rescheduling.minor_change_same_week","typeLabel":"boolean"},"minor_change_same_slot":{"type":"boolean","example":false,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].rescheduling.minor_change_same_slot","typeLabel":"boolean"},"min_rescheduling_notice":{"description":"Minimum advance notice before the appointment that a reschedule is allowed.","type":"string","enum":["none","1_hour","2_hours","6_hours","24_hours"],"example":"2_hours","uniqueKey":"appointments.schedule_assignments.items.[INDEX].rescheduling.min_rescheduling_notice","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"appointments.schedule_assignments.items.[INDEX].rescheduling","typeLabel":"object"},"cancellation":{"description":"Cancellation notice window, fee policy, and whether the AI may cancel autonomously.","properties":{"min_cancellation_notice":{"description":"Minimum advance notice before the appointment that a cancellation is allowed.","type":"string","enum":["none","1_hour","6_hours","24_hours","48_hours"],"example":"24_hours","uniqueKey":"appointments.schedule_assignments.items.[INDEX].cancellation.min_cancellation_notice","typeLabel":"enum\u003cstring>"},"ai_can_cancel":{"description":"When true, the runtime AI may cancel an appointment on the contact's request without human approval.","type":"boolean","example":false,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].cancellation.ai_can_cancel","typeLabel":"boolean"},"require_cancellation_reason":{"description":"When true, the AI must capture a cancellation reason from the contact before confirming.","type":"boolean","example":true,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].cancellation.require_cancellation_reason","typeLabel":"boolean"},"cancellation_fee_policy":{"description":"Open-ended label describing how cancellation fees are handled (e.g. 'no_fee', 'flat_fee', 'percent_of_booking').","type":"string","example":"no_fee","uniqueKey":"appointments.schedule_assignments.items.[INDEX].cancellation.cancellation_fee_policy","typeLabel":"string"}},"type":"object","uniqueKey":"appointments.schedule_assignments.items.[INDEX].cancellation","typeLabel":"object"},"questions":{"description":"Custom intake questions the AI asks the contact when booking through this assignment.","properties":{"inherit_from_schedule":{"description":"When true, the assignment uses the parent schedule's custom_questions. Set false to override with per-assignment questions.","type":"boolean","example":true,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].questions.inherit_from_schedule","typeLabel":"boolean"},"custom_questions":{"description":"Per-assignment override list. Ignored when inherit_from_schedule is true.","type":"array","items":{"properties":{"name":{"type":"string","example":"License plate","uniqueKey":"appointments.schedule_assignments.items.[INDEX].questions.custom_questions.items.[INDEX].name","typeLabel":"string"},"type":{"type":"string","enum":["text","textarea","number","email","phone"],"example":"text","uniqueKey":"appointments.schedule_assignments.items.[INDEX].questions.custom_questions.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"description":{"type":"string","example":"Vehicle license plate number for the service appointment.","uniqueKey":"appointments.schedule_assignments.items.[INDEX].questions.custom_questions.items.[INDEX].description","typeLabel":"string"},"required":{"type":"boolean","example":true,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].questions.custom_questions.items.[INDEX].required","typeLabel":"boolean"}},"type":"object","uniqueKey":"appointments.schedule_assignments.items.[INDEX].questions.custom_questions.items.[INDEX]","typeLabel":"object"},"uniqueKey":"appointments.schedule_assignments.items.[INDEX].questions.custom_questions","typeLabel":"object[]"}},"type":"object","uniqueKey":"appointments.schedule_assignments.items.[INDEX].questions","typeLabel":"object"},"approval":{"description":"Human approval workflow for create / reschedule / cancel / notes actions.","properties":{"require_approval":{"description":"Master switch — when false, all actions are auto-approved regardless of the per-action flags.","type":"boolean","example":true,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].approval.require_approval","typeLabel":"boolean"},"approval_threshold":{"description":"Auto-approve actions if the lead time is at least this long; never = always require approval.","type":"string","enum":["never","15_min","30_min","1_hour","24_hours"],"example":"1_hour","uniqueKey":"appointments.schedule_assignments.items.[INDEX].approval.approval_threshold","typeLabel":"enum\u003cstring>"},"approval_for_create":{"type":"boolean","example":false,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].approval.approval_for_create","typeLabel":"boolean"},"approval_for_reschedule":{"type":"boolean","example":true,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].approval.approval_for_reschedule","typeLabel":"boolean"},"approval_for_cancel":{"type":"boolean","example":true,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].approval.approval_for_cancel","typeLabel":"boolean"},"approval_for_notes":{"type":"boolean","example":false,"uniqueKey":"appointments.schedule_assignments.items.[INDEX].approval.approval_for_notes","typeLabel":"boolean"},"notify_calendar_owner":{"type":"string","enum":["always","approval_only","never"],"example":"always","uniqueKey":"appointments.schedule_assignments.items.[INDEX].approval.notify_calendar_owner","typeLabel":"enum\u003cstring>"},"notify_admins":{"type":"string","enum":["always","approval_only","never"],"example":"always","uniqueKey":"appointments.schedule_assignments.items.[INDEX].approval.notify_admins","typeLabel":"enum\u003cstring>"},"expected_response_time":{"description":"Free-form label for how quickly approvers are expected to respond (e.g. '5_min', '15_min', '1_hour').","type":"string","example":"5_min","uniqueKey":"appointments.schedule_assignments.items.[INDEX].approval.expected_response_time","typeLabel":"string"}},"type":"object","uniqueKey":"appointments.schedule_assignments.items.[INDEX].approval","typeLabel":"object"}},"type":"object","uniqueKey":"appointments.schedule_assignments.items.[INDEX]","typeLabel":"object"},"uniqueKey":"appointments.schedule_assignments","typeLabel":"object[]"}},"type":"object","uniqueKey":"appointments","typeLabel":"object"},"routing_rules":{"description":"IVR-style transfer rules. The agent uses these to forward calls to extensions, phones, or other agents based on detected intent.","type":"array","items":{"description":"Routing rules tell the runtime agent when and how to transfer a call to another extension, phone number, or agent (the IVR equivalent). The runtime AI relies on `ai_prompt` and `phrases` to decide whether a customer utterance should trigger this rule — assignments without those fields will never fire.","properties":{"detection_mode":{"description":"How the AI matches customer utterances to this rule. `exact` = literal keyword (fast but narrow), `intent` = AI semantic understanding (broader, recommended), `both` = combine for max accuracy.","type":"string","enum":["exact","intent","both"],"example":"intent","uniqueKey":"routing_rules.items.[INDEX].detection_mode","typeLabel":"enum\u003cstring>"},"trigger_keyword":{"oneOf":[{"description":"Literal keyword that triggers `exact`/`both` matching. Required when detection_mode is exact or both.","type":"string","example":"sales","uniqueKey":"routing_rules.items.[INDEX].trigger_keyword.oneOf.0","typeLabel":"string"},{"description":"Literal keyword that triggers `exact`/`both` matching. Required when detection_mode is exact or both.","type":"null","example":"sales","uniqueKey":"routing_rules.items.[INDEX].trigger_keyword.oneOf.1","typeLabel":"null"}],"uniqueKey":"routing_rules.items.[INDEX].trigger_keyword","typeLabel":"string | null"},"department_name":{"oneOf":[{"description":"Human-readable label for this rule. Helps you and the AI identify what the rule is for.","type":"string","example":"Sales Department","uniqueKey":"routing_rules.items.[INDEX].department_name.oneOf.0","typeLabel":"string"},{"description":"Human-readable label for this rule. Helps you and the AI identify what the rule is for.","type":"null","example":"Sales Department","uniqueKey":"routing_rules.items.[INDEX].department_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"routing_rules.items.[INDEX].department_name","typeLabel":"string | null"},"phrases":{"description":"Example customer utterances that should trigger this rule. The runtime AI uses these as training signal when detection_mode includes intent matching. Provide 3-5 varied phrasings.","type":"array","items":{"type":"string","example":"I want to talk to sales","uniqueKey":"routing_rules.items.[INDEX].phrases.items.[INDEX]","typeLabel":"string"},"uniqueKey":"routing_rules.items.[INDEX].phrases","typeLabel":"string[]"},"ai_prompt":{"oneOf":[{"description":"Required for intent-based matching. Natural-language instructions the runtime AI uses to decide whether a customer utterance matches this rule. Without this field set, intent and both detection modes have no guidance to act on, so the rule will never trigger. Always provide concrete instructions describing what customer intent should fire this rule.","type":"string","example":"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.","uniqueKey":"routing_rules.items.[INDEX].ai_prompt.oneOf.0","typeLabel":"string"},{"description":"Required for intent-based matching. Natural-language instructions the runtime AI uses to decide whether a customer utterance matches this rule. Without this field set, intent and both detection modes have no guidance to act on, so the rule will never trigger. Always provide concrete instructions describing what customer intent should fire this rule.","type":"null","example":"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.","uniqueKey":"routing_rules.items.[INDEX].ai_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"routing_rules.items.[INDEX].ai_prompt","typeLabel":"string | null"},"voice_response":{"description":"Message the runtime agent speaks to the customer immediately before initiating the transfer. Required.","type":"string","example":"Sure, I'll transfer you to our sales team now. One moment please.","uniqueKey":"routing_rules.items.[INDEX].voice_response","typeLabel":"string"},"voice_on_error":{"oneOf":[{"description":"Spoken when the transfer fails (busy, no answer, error). Recommended.","type":"string","example":"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.","uniqueKey":"routing_rules.items.[INDEX].voice_on_error.oneOf.0","typeLabel":"string"},{"description":"Spoken when the transfer fails (busy, no answer, error). Recommended.","type":"null","example":"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.","uniqueKey":"routing_rules.items.[INDEX].voice_on_error.oneOf.1","typeLabel":"null"}],"uniqueKey":"routing_rules.items.[INDEX].voice_on_error","typeLabel":"string | null"},"voice_on_success":{"oneOf":[{"description":"Spoken when the transfer completes successfully (typically only used for warm/ping-and-transfer modes).","type":"string","example":"You've been successfully connected. Have a great day.","uniqueKey":"routing_rules.items.[INDEX].voice_on_success.oneOf.0","typeLabel":"string"},{"description":"Spoken when the transfer completes successfully (typically only used for warm/ping-and-transfer modes).","type":"null","example":"You've been successfully connected. Have a great day.","uniqueKey":"routing_rules.items.[INDEX].voice_on_success.oneOf.1","typeLabel":"null"}],"uniqueKey":"routing_rules.items.[INDEX].voice_on_success","typeLabel":"string | null"},"destination_type":{"oneOf":[{"description":"Where the call is sent. `extension` = SIP extension or URI (e.g. '101' or 'sip:101@domain.com'), `phone` = external phone number in E.164, `agent` = another mihu agent (set destination_agent_uuid).","type":"string","enum":["extension","phone","agent"],"example":"extension","uniqueKey":"routing_rules.items.[INDEX].destination_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Where the call is sent. `extension` = SIP extension or URI (e.g. '101' or 'sip:101@domain.com'), `phone` = external phone number in E.164, `agent` = another mihu agent (set destination_agent_uuid).","type":"null","enum":["extension","phone","agent"],"example":"extension","uniqueKey":"routing_rules.items.[INDEX].destination_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"routing_rules.items.[INDEX].destination_type","typeLabel":"enum\u003cstring> | null"},"destination":{"oneOf":[{"description":"The actual destination value. Format depends on destination_type: extension number, SIP URI, or E.164 phone. Ignored when destination_type=agent.","type":"string","example":"101","uniqueKey":"routing_rules.items.[INDEX].destination.oneOf.0","typeLabel":"string"},{"description":"The actual destination value. Format depends on destination_type: extension number, SIP URI, or E.164 phone. Ignored when destination_type=agent.","type":"null","example":"101","uniqueKey":"routing_rules.items.[INDEX].destination.oneOf.1","typeLabel":"null"}],"uniqueKey":"routing_rules.items.[INDEX].destination","typeLabel":"string | null"},"destination_agent_uuid":{"oneOf":[{"description":"UUID of the target agent. Required when destination_type=agent.","type":"string","format":"uuid","uniqueKey":"routing_rules.items.[INDEX].destination_agent_uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"description":"UUID of the target agent. Required when destination_type=agent.","type":"null","format":"uuid","uniqueKey":"routing_rules.items.[INDEX].destination_agent_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"routing_rules.items.[INDEX].destination_agent_uuid","typeLabel":"string\u003cuuid> | null"},"transfer_type":{"description":"Telephony transfer mechanism. `transfer_call` = default transfer (recommended for most cases). `forward_call` = simple forwarding. `warm_transfer_call` = the agent stays on the line and announces the caller before connecting. `blind_transfer_call` = hang up the moment the destination rings. `ping_and_transfer_call` = the agent briefly announces the caller, then transfers.","type":"string","enum":["transfer_call","forward_call","warm_transfer_call","blind_transfer_call","ping_and_transfer_call"],"example":"transfer_call","uniqueKey":"routing_rules.items.[INDEX].transfer_type","typeLabel":"enum\u003cstring>"},"transfer_config":{"oneOf":[{"description":"Optional telephony-provider-specific configuration. Free-form key/value map; consult provider docs for accepted keys.","type":"object","uniqueKey":"routing_rules.items.[INDEX].transfer_config.oneOf.0","typeLabel":"object"},{"description":"Optional telephony-provider-specific configuration. Free-form key/value map; consult provider docs for accepted keys.","type":"null","uniqueKey":"routing_rules.items.[INDEX].transfer_config.oneOf.1","typeLabel":"null"}],"uniqueKey":"routing_rules.items.[INDEX].transfer_config","typeLabel":"object | null"},"priority":{"description":"Match priority. Lower numbers run first when multiple rules could match the same utterance.","type":"integer","example":1,"uniqueKey":"routing_rules.items.[INDEX].priority","typeLabel":"integer"},"is_active":{"type":"boolean","example":true,"uniqueKey":"routing_rules.items.[INDEX].is_active","typeLabel":"boolean"}},"type":"object","uniqueKey":"routing_rules.items.[INDEX]","typeLabel":"object"},"uniqueKey":"routing_rules","typeLabel":"object[]"},"guard_rules":{"description":"Compliance / safety / escalation triggers. Force the agent to forward or end the conversation when defined situations arise.","type":"array","items":{"description":"Guard rules let the agent forward or end a conversation when a defined situation arises (compliance, safety, escalation). The runtime AI relies on `when_condition` and `example_phrases` to decide whether a customer utterance triggers the guard — rules without those fields filled cannot fire reliably.","properties":{"name":{"oneOf":[{"description":"Optional short name for the guard rule.","type":"string","example":"Legal complaint escalation","uniqueKey":"guard_rules.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"description":"Optional short name for the guard rule.","type":"null","example":"Legal complaint escalation","uniqueKey":"guard_rules.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"guard_rules.items.[INDEX].name","typeLabel":"string | null"},"when_condition":{"description":"Required. Natural-language description of the situation that should trigger this guard. The runtime AI uses this as instructions when classifying customer utterances. Be specific — 'customer is angry' is too vague; 'customer uses profanity or threatens to escalate' is actionable.","type":"string","example":"Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.","uniqueKey":"guard_rules.items.[INDEX].when_condition","typeLabel":"string"},"example_phrases":{"description":"Customer utterances that should trigger this guard. Provide 3-5 varied phrasings — the runtime AI uses these as positive examples when classifying.","type":"array","items":{"type":"string","example":"I'm calling my lawyer about this","uniqueKey":"guard_rules.items.[INDEX].example_phrases.items.[INDEX]","typeLabel":"string"},"uniqueKey":"guard_rules.items.[INDEX].example_phrases","typeLabel":"string[]"},"then_action":{"description":"What the runtime agent does when the guard fires. `forward` transfers to a human or another agent; `end_conversation` politely ends the call/chat.","type":"string","enum":["forward","end_conversation"],"example":"forward","uniqueKey":"guard_rules.items.[INDEX].then_action","typeLabel":"enum\u003cstring>"},"selected_channels":{"description":"Channels where this guard is active. Defaults to phone-only.","type":"array","items":{"type":"string","enum":["phone","instagram","whatsapp","facebook_messenger"],"uniqueKey":"guard_rules.items.[INDEX].selected_channels.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"guard_rules.items.[INDEX].selected_channels","typeLabel":"enum\u003cstring>[]"},"say_before_forwarding":{"oneOf":[{"description":"Message spoken before the transfer when then_action=forward.","type":"string","example":"I understand this is important — let me connect you with someone who can help.","uniqueKey":"guard_rules.items.[INDEX].say_before_forwarding.oneOf.0","typeLabel":"string"},{"description":"Message spoken before the transfer when then_action=forward.","type":"null","example":"I understand this is important — let me connect you with someone who can help.","uniqueKey":"guard_rules.items.[INDEX].say_before_forwarding.oneOf.1","typeLabel":"null"}],"uniqueKey":"guard_rules.items.[INDEX].say_before_forwarding","typeLabel":"string | null"},"say_before_end":{"oneOf":[{"description":"Message spoken before ending when then_action=end_conversation.","type":"string","example":"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.","uniqueKey":"guard_rules.items.[INDEX].say_before_end.oneOf.0","typeLabel":"string"},{"description":"Message spoken before ending when then_action=end_conversation.","type":"null","example":"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.","uniqueKey":"guard_rules.items.[INDEX].say_before_end.oneOf.1","typeLabel":"null"}],"uniqueKey":"guard_rules.items.[INDEX].say_before_end","typeLabel":"string | null"},"destination_type":{"oneOf":[{"description":"Where the call is sent when then_action=forward (same semantics as routing rules).","type":"string","enum":["extension","phone","agent"],"uniqueKey":"guard_rules.items.[INDEX].destination_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Where the call is sent when then_action=forward (same semantics as routing rules).","type":"null","enum":["extension","phone","agent"],"uniqueKey":"guard_rules.items.[INDEX].destination_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"guard_rules.items.[INDEX].destination_type","typeLabel":"enum\u003cstring> | null"},"destination":{"oneOf":[{"description":"Destination value (extension, SIP URI, or E.164 phone) when then_action=forward.","type":"string","uniqueKey":"guard_rules.items.[INDEX].destination.oneOf.0","typeLabel":"string"},{"description":"Destination value (extension, SIP URI, or E.164 phone) when then_action=forward.","type":"null","uniqueKey":"guard_rules.items.[INDEX].destination.oneOf.1","typeLabel":"null"}],"uniqueKey":"guard_rules.items.[INDEX].destination","typeLabel":"string | null"},"destination_agent_uuid":{"oneOf":[{"description":"Target agent UUID when destination_type=agent.","type":"string","format":"uuid","uniqueKey":"guard_rules.items.[INDEX].destination_agent_uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"description":"Target agent UUID when destination_type=agent.","type":"null","format":"uuid","uniqueKey":"guard_rules.items.[INDEX].destination_agent_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"guard_rules.items.[INDEX].destination_agent_uuid","typeLabel":"string\u003cuuid> | null"},"is_active":{"type":"boolean","example":true,"uniqueKey":"guard_rules.items.[INDEX].is_active","typeLabel":"boolean"},"is_default":{"description":"Marks this guard as a default that auto-applies to new agents in the workspace.","type":"boolean","example":false,"uniqueKey":"guard_rules.items.[INDEX].is_default","typeLabel":"boolean"}},"type":"object","uniqueKey":"guard_rules.items.[INDEX]","typeLabel":"object"},"uniqueKey":"guard_rules","typeLabel":"object[]"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"Volvo Cagliari Service Agent","description":"Inbound voice agent for Volvo Cagliari service appointments. Books service slots, qualifies vehicle issues, escalates warranty cases.","company_name":"Volvo Cagliari","role":"Inbound service appointment scheduler for a Volvo dealership in Cagliari.","objective":"Book a service appointment for the customer's vehicle. Capture: VIN or license plate, preferred date, type of service.","tone":"Warm, professional, slightly formal. Use the customer's name. Avoid jargon — explain technical terms in plain language.","behavior_guidelines":"Always confirm vehicle details before booking. Never quote prices for warranty repairs — escalate to a human. If the customer is upset about a previous service, acknowledge the frustration first, then offer to connect them with a manager.","company_service":"Volvo vehicle service: maintenance, repairs, warranty work, accessories, pickup/delivery.","topic":"Service appointment booking and vehicle maintenance questions.","length_detail":"Keep replies under 25 words for voice; under 200 characters for text. One question at a time.","interest_of_product":"\u003cstring>","negative_response":"If the customer becomes hostile or uses profanity, stay calm, do not escalate emotionally, and offer to transfer to a human supervisor.","custom_prompt":"\u003cstring>","language":"en","timezone":"America/New_York","appointment_scheduling_enabled":true,"appointment_scheduling_randomly":true,"custom_llm_url":"\u003cstring>","settings":{"voice":{"interaction":{"customer_speak_first":false,"inbound_first_message":"Hi, this is Sara from Volvo. How can I help you today?","outbound_first_message":"Hi, this is Sara from Volvo Cagliari calling about your service appointment. Do you have a moment to talk?","voice_mail_message":"Hi, this is Sara from Volvo Cagliari. I called about your service appointment — please call us back at your convenience.","end_call_message":"Thank you for calling, have a great day!","silence_message":"Are you still there? I want to make sure I'm helping you with what you need.","max_silence_prompts":3},"interruption":{"mode":"balanced"},"voice_profile":{"language":"en","voice_uuid":"ebeba3e0-89b5-4c94-9841-9555ab155dbc","voice_name":"Giulia"},"call_behavior":{"audio_recording":true,"background_sound":true,"silence_timeout_seconds":60,"max_call_duration_seconds":1800,"max_call_duration_message":"Thanks for the call — we've reached the time limit. Goodbye!"},"compliance":{"eu_gdpr_compliance":true,"hipaa_compliance":false},"normalizers":{"outbound":{},"inbound":{}}},"text":{"daily_limits":{"daily_max_messages_per_conversation":100,"daily_conversation_limit_exceeded_message":"\u003cstring>"},"timing_and_delay":{"base_delay":0.5,"pause_before_reply":1,"typing_speed_wpm_min":40,"typing_speed_wpm_max":60,"typing_speed_char":0.05,"delay_jitter_min":0.1,"delay_jitter_max":1.5},"typing_simulation":{"show_typing_indicator":true,"simulate_typing_breaks":true,"simulate_typos_corrections":false},"working_hours":{"enabled":false,"start":"9 AM","end":"5 PM","timezone":"America/New_York","outside_hours_behavior":"Auto-reply","offline_message":"\u003cstring>","during_hours_agent":"ai"},"handover":{"enabled":false,"handover_triggers":"User request","handover_method":"Assign agent","handover_message":"\u003cstring>","assignment_strategy":"First available","handover_timeout":60,"fallback_agent":"Bot assistant"},"confidence_controls":{"min_confidence_threshold":0.7,"ask_clarifying_questions":false},"message_behavior":{"second_message_behavior":{"enabled":false,"chance":0.25,"delay_min":1,"delay_max":4},"follow_up_behavior":{"enabled":false,"delay_min":24,"delay_max":48}},"personality":{"use_response_variations":true,"emoji_usage":"None","use_punctuation_variation":false,"use_filler_words":false,"enable_small_talk":false,"energy_level":"Friendly","empathy_level":"Medium"},"advanced":{"split_messages":true,"simulate_message_editing":false,"use_memory_based_context":false,"human_first_mode":false}}},"guidelines":[{"content":"Always confirm vehicle VIN or license plate before creating a service appointment.","order":0}],"notes":[{"content":"Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.","order":0}],"procedures":[{"name":"Book service appointment","description":"Used when the customer wants to schedule a service appointment for their vehicle.","steps":[{"order":1,"description":"Ask the customer for their vehicle license plate or VIN.","intent_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a"}]}],"training":[{"content":"What does Volvo's standard warranty cover?","intent":"warranty_inquiry","response":"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?"}],"appointments":{"enabled":true,"random_assignment":true,"schedule_assignments":[{"schedule_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"Service Appointment","description":"When the customer requires routine maintenance, oil change, or scheduled service for their vehicle.","slot_rules":{"offer_slots_from":"3_hours","book_slots_from":"6_hours","max_appointments_per_day":10,"conflict_resolution_enabled":true,"alternative_slots_count":3,"suggestion_priority":"nearest","prefer_same_day":true,"prefer_same_time_slot":false,"include_same_week":true},"rescheduling":{"policy":"always_ask","minor_change_hours":2,"minor_change_same_day":true,"minor_change_same_week":false,"minor_change_same_slot":false,"min_rescheduling_notice":"2_hours"},"cancellation":{"min_cancellation_notice":"24_hours","ai_can_cancel":false,"require_cancellation_reason":true,"cancellation_fee_policy":"no_fee"},"questions":{"inherit_from_schedule":true,"custom_questions":[{"name":"License plate","type":"text","description":"Vehicle license plate number for the service appointment.","required":true}]},"approval":{"require_approval":true,"approval_threshold":"1_hour","approval_for_create":false,"approval_for_reschedule":true,"approval_for_cancel":true,"approval_for_notes":false,"notify_calendar_owner":"always","notify_admins":"always","expected_response_time":"5_min"}}]},"routing_rules":[{"detection_mode":"intent","trigger_keyword":"sales","department_name":"Sales Department","phrases":["I want to talk to sales"],"ai_prompt":"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.","voice_response":"Sure, I'll transfer you to our sales team now. One moment please.","voice_on_error":"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.","voice_on_success":"You've been successfully connected. Have a great day.","destination_type":"extension","destination":"101","destination_agent_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","transfer_type":"transfer_call","transfer_config":{},"priority":1,"is_active":true}],"guard_rules":[{"name":"Legal complaint escalation","when_condition":"Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.","example_phrases":["I'm calling my lawyer about this"],"then_action":"forward","selected_channels":[],"say_before_forwarding":"I understand this is important — let me connect you with someone who can help.","say_before_end":"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.","destination":"\u003cstring>","destination_agent_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","is_active":true,"is_default":false}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"41e7dfef-6ba6-4681-9276-2e3f837d05ea":{"description":"Agent updated successfully","content":{"application/json":{"schema":{"properties":{"success":{"description":"Indicates whether the request completed successfully. True for successful responses; false for documented error responses.","type":"boolean","uniqueKey":"success","typeLabel":"boolean"},"message":{"description":"Human-readable response message. Safe to display in logs or simple client notifications; use structured fields for program logic.","type":"string","uniqueKey":"message","typeLabel":"string"},"data":{"properties":{"agent_uuid":{"type":"string","format":"uuid","uniqueKey":"data.agent_uuid","typeLabel":"string\u003cuuid>"},"name":{"type":"string","uniqueKey":"data.name","typeLabel":"string"},"description":{"oneOf":[{"type":"string","uniqueKey":"data.description.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.description","typeLabel":"string | null"},"company_name":{"oneOf":[{"type":"string","uniqueKey":"data.company_name.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.company_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.company_name","typeLabel":"string | null"},"role":{"oneOf":[{"type":"string","uniqueKey":"data.role.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.role.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.role","typeLabel":"string | null"},"objective":{"oneOf":[{"type":"string","uniqueKey":"data.objective.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.objective.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.objective","typeLabel":"string | null"},"tone":{"oneOf":[{"type":"string","uniqueKey":"data.tone.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.tone.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.tone","typeLabel":"string | null"},"behavior_guidelines":{"oneOf":[{"type":"string","uniqueKey":"data.behavior_guidelines.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.behavior_guidelines.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.behavior_guidelines","typeLabel":"string | null"},"company_service":{"oneOf":[{"type":"string","uniqueKey":"data.company_service.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.company_service.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.company_service","typeLabel":"string | null"},"topic":{"oneOf":[{"type":"string","uniqueKey":"data.topic.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.topic.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.topic","typeLabel":"string | null"},"length_detail":{"oneOf":[{"type":"string","uniqueKey":"data.length_detail.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.length_detail.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.length_detail","typeLabel":"string | null"},"interest_of_product":{"oneOf":[{"type":"string","uniqueKey":"data.interest_of_product.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.interest_of_product.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.interest_of_product","typeLabel":"string | null"},"negative_response":{"oneOf":[{"type":"string","uniqueKey":"data.negative_response.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.negative_response.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.negative_response","typeLabel":"string | null"},"status":{"type":"string","enum":["pending","ready","in_progress","paused","completed"],"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"custom_prompt":{"oneOf":[{"type":"string","uniqueKey":"data.custom_prompt.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.custom_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.custom_prompt","typeLabel":"string | null"},"language":{"type":"string","uniqueKey":"data.language","typeLabel":"string"},"speed":{"type":"string","uniqueKey":"data.speed","typeLabel":"string"},"timezone":{"type":"string","uniqueKey":"data.timezone","typeLabel":"string"},"appointment_scheduling_enabled":{"type":"boolean","uniqueKey":"data.appointment_scheduling_enabled","typeLabel":"boolean"},"appointment_scheduling_randomly":{"type":"boolean","uniqueKey":"data.appointment_scheduling_randomly","typeLabel":"boolean"},"custom_llm_url":{"oneOf":[{"type":"string","uniqueKey":"data.custom_llm_url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.custom_llm_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.custom_llm_url","typeLabel":"string | null"},"recommendations":{"oneOf":[{"description":"JSON string of channel recommendations populated asynchronously after creation","type":"string","uniqueKey":"data.recommendations.oneOf.0","typeLabel":"string"},{"description":"JSON string of channel recommendations populated asynchronously after creation","type":"null","uniqueKey":"data.recommendations.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.recommendations","typeLabel":"string | null"},"settings":{"properties":{"voice":{"type":"object","uniqueKey":"data.settings.voice","typeLabel":"object"},"text":{"type":"object","uniqueKey":"data.settings.text","typeLabel":"object"},"memorize":{"type":"object","uniqueKey":"data.settings.memorize","typeLabel":"object"},"evaluation":{"type":"object","uniqueKey":"data.settings.evaluation","typeLabel":"object"}},"type":"object","uniqueKey":"data.settings","typeLabel":"object"},"guidelines":{"type":"array","items":{"description":"One short do/don't rule. The runtime AI consults the full set of guidelines on every reply. Keep each one atomic and specific — 'Always confirm the booking date in YYYY-MM-DD format' beats 'Be professional'.","properties":{"uuid":{"oneOf":[{"type":"string","format":"uuid","readOnly":true,"uniqueKey":"data.guidelines.items.[INDEX].uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","readOnly":true,"uniqueKey":"data.guidelines.items.[INDEX].uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guidelines.items.[INDEX].uuid","typeLabel":"string\u003cuuid> | null"},"content":{"description":"Required. The rule itself, in natural language. Imperative voice works best.","type":"string","example":"Always confirm vehicle VIN or license plate before creating a service appointment.","uniqueKey":"data.guidelines.items.[INDEX].content","typeLabel":"string"},"order":{"description":"Display/evaluation order. Lower numbers come first.","type":"integer","example":0,"uniqueKey":"data.guidelines.items.[INDEX].order","typeLabel":"integer"}},"type":"object","uniqueKey":"data.guidelines.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.guidelines","typeLabel":"object[]"},"notes":{"type":"array","items":{"description":"A piece of reference knowledge the runtime AI can quote when relevant — product facts, hours, policies. Notes are passive (consulted on demand) versus guidelines which are active (applied on every turn).","properties":{"uuid":{"oneOf":[{"type":"string","format":"uuid","readOnly":true,"uniqueKey":"data.notes.items.[INDEX].uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","readOnly":true,"uniqueKey":"data.notes.items.[INDEX].uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.notes.items.[INDEX].uuid","typeLabel":"string\u003cuuid> | null"},"content":{"description":"Required. Free-form reference text. Keep notes focused — one fact or policy per note.","type":"string","example":"Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.","uniqueKey":"data.notes.items.[INDEX].content","typeLabel":"string"},"order":{"type":"integer","example":0,"uniqueKey":"data.notes.items.[INDEX].order","typeLabel":"integer"}},"type":"object","uniqueKey":"data.notes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.notes","typeLabel":"object[]"},"procedures":{"type":"array","items":{"description":"A multi-step workflow the agent can execute (e.g. 'book a service appointment'). The runtime AI walks the steps in order when it detects the relevant intent. Procedures are how you teach the agent to actually DO things instead of just talking.","properties":{"uuid":{"oneOf":[{"type":"string","format":"uuid","readOnly":true,"uniqueKey":"data.procedures.items.[INDEX].uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","readOnly":true,"uniqueKey":"data.procedures.items.[INDEX].uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.procedures.items.[INDEX].uuid","typeLabel":"string\u003cuuid> | null"},"name":{"description":"Required. Short imperative name describing what this procedure does.","type":"string","example":"Book service appointment","uniqueKey":"data.procedures.items.[INDEX].name","typeLabel":"string"},"description":{"oneOf":[{"description":"When the runtime AI should invoke this procedure. Be specific about the trigger.","type":"string","example":"Used when the customer wants to schedule a service appointment for their vehicle.","uniqueKey":"data.procedures.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"description":"When the runtime AI should invoke this procedure. Be specific about the trigger.","type":"null","example":"Used when the customer wants to schedule a service appointment for their vehicle.","uniqueKey":"data.procedures.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.procedures.items.[INDEX].description","typeLabel":"string | null"},"steps":{"description":"Ordered actions the agent performs. Reference an intent_uuid on a step to trigger a tool call instead of plain conversation.","type":"array","items":{"properties":{"order":{"type":"integer","example":1,"uniqueKey":"data.procedures.items.[INDEX].steps.items.[INDEX].order","typeLabel":"integer"},"description":{"type":"string","example":"Ask the customer for their vehicle license plate or VIN.","uniqueKey":"data.procedures.items.[INDEX].steps.items.[INDEX].description","typeLabel":"string"},"intent_uuid":{"oneOf":[{"description":"Optional. UUID of an intent that, when matched, executes a tool/integration at this step (lookup, create record, send notification).","type":"string","format":"uuid","uniqueKey":"data.procedures.items.[INDEX].steps.items.[INDEX].intent_uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"description":"Optional. UUID of an intent that, when matched, executes a tool/integration at this step (lookup, create record, send notification).","type":"null","format":"uuid","uniqueKey":"data.procedures.items.[INDEX].steps.items.[INDEX].intent_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.procedures.items.[INDEX].steps.items.[INDEX].intent_uuid","typeLabel":"string\u003cuuid> | null"}},"type":"object","uniqueKey":"data.procedures.items.[INDEX].steps.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.procedures.items.[INDEX].steps","typeLabel":"object[]"}},"type":"object","uniqueKey":"data.procedures.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.procedures","typeLabel":"object[]"},"training":{"type":"array","items":{"description":"A single few-shot Q\u0026A example. The runtime AI uses these as templates for high-quality responses to common questions. Most useful for: brand-specific phrasing, tricky FAQs, edge cases the agent keeps getting wrong.","properties":{"uuid":{"oneOf":[{"type":"string","format":"uuid","readOnly":true,"uniqueKey":"data.training.items.[INDEX].uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","readOnly":true,"uniqueKey":"data.training.items.[INDEX].uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.training.items.[INDEX].uuid","typeLabel":"string\u003cuuid> | null"},"content":{"description":"The customer question or scenario.","type":"string","example":"What does Volvo's standard warranty cover?","uniqueKey":"data.training.items.[INDEX].content","typeLabel":"string"},"intent":{"oneOf":[{"description":"Optional intent label that lets the runtime AI cluster similar questions.","type":"string","example":"warranty_inquiry","uniqueKey":"data.training.items.[INDEX].intent.oneOf.0","typeLabel":"string"},{"description":"Optional intent label that lets the runtime AI cluster similar questions.","type":"null","example":"warranty_inquiry","uniqueKey":"data.training.items.[INDEX].intent.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.training.items.[INDEX].intent","typeLabel":"string | null"},"response":{"oneOf":[{"description":"The model answer. Match the agent's tone — what you write here is what the agent will sound like for similar questions.","type":"string","example":"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?","uniqueKey":"data.training.items.[INDEX].response.oneOf.0","typeLabel":"string"},{"description":"The model answer. Match the agent's tone — what you write here is what the agent will sound like for similar questions.","type":"null","example":"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?","uniqueKey":"data.training.items.[INDEX].response.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.training.items.[INDEX].response","typeLabel":"string | null"}},"type":"object","uniqueKey":"data.training.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.training","typeLabel":"object[]"},"intents":{"type":"array","items":{"properties":{"intent_uuid":{"type":"string","format":"uuid","uniqueKey":"data.intents.items.[INDEX].intent_uuid","typeLabel":"string\u003cuuid>"},"key":{"type":"string","uniqueKey":"data.intents.items.[INDEX].key","typeLabel":"string"},"name":{"type":"string","uniqueKey":"data.intents.items.[INDEX].name","typeLabel":"string"},"description":{"oneOf":[{"type":"string","uniqueKey":"data.intents.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.intents.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.intents.items.[INDEX].description","typeLabel":"string | null"},"recommendation_actions":{"oneOf":[{"type":"string","uniqueKey":"data.intents.items.[INDEX].recommendation_actions.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.intents.items.[INDEX].recommendation_actions.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.intents.items.[INDEX].recommendation_actions","typeLabel":"string | null"},"confidence_threshold":{"type":"number","format":"float","uniqueKey":"data.intents.items.[INDEX].confidence_threshold","typeLabel":"number\u003cfloat>"},"is_system":{"type":"boolean","uniqueKey":"data.intents.items.[INDEX].is_system","typeLabel":"boolean"},"intent_llm_handle_by_response":{"type":"boolean","uniqueKey":"data.intents.items.[INDEX].intent_llm_handle_by_response","typeLabel":"boolean"},"webhook":{"properties":{"url":{"oneOf":[{"type":"string","uniqueKey":"data.intents.items.[INDEX].webhook.url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.intents.items.[INDEX].webhook.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.intents.items.[INDEX].webhook.url","typeLabel":"string | null"},"auth_token":{"oneOf":[{"type":"string","uniqueKey":"data.intents.items.[INDEX].webhook.auth_token.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.intents.items.[INDEX].webhook.auth_token.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.intents.items.[INDEX].webhook.auth_token","typeLabel":"string | null"}},"type":"object","uniqueKey":"data.intents.items.[INDEX].webhook","typeLabel":"object"},"parameters":{"type":"array","items":{"required":["key"],"properties":{"key":{"type":"string","example":"email","isRequired":true,"uniqueKey":"data.intents.items.[INDEX].parameters.items.[INDEX].key","typeLabel":"string"},"default":{"oneOf":[{"description":"Default value; leave empty to ask the user","type":"string","uniqueKey":"data.intents.items.[INDEX].parameters.items.[INDEX].default.oneOf.0","typeLabel":"string"},{"description":"Default value; leave empty to ask the user","type":"null","uniqueKey":"data.intents.items.[INDEX].parameters.items.[INDEX].default.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.intents.items.[INDEX].parameters.items.[INDEX].default","typeLabel":"string | null"},"type":{"description":"Parameter data type. Limited to these four primitives so it maps cleanly to OpenAI's tool-schema format.","type":"string","enum":["string","number","boolean","array"],"example":"string","uniqueKey":"data.intents.items.[INDEX].parameters.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"required":{"type":"boolean","uniqueKey":"data.intents.items.[INDEX].parameters.items.[INDEX].required","typeLabel":"boolean"}},"type":"object","uniqueKey":"data.intents.items.[INDEX].parameters.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.intents.items.[INDEX].parameters","typeLabel":"object[]"},"created_at":{"type":"string","format":"date-time","uniqueKey":"data.intents.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","uniqueKey":"data.intents.items.[INDEX].updated_at","typeLabel":"string\u003cdate-time>"}},"type":"object","uniqueKey":"data.intents.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.intents","typeLabel":"object[]"},"webhooks":{"description":"Agent-scoped webhooks, capped at 5 per agent","type":"array","items":{"properties":{"webhook_uuid":{"type":"string","format":"uuid","uniqueKey":"data.webhooks.items.[INDEX].webhook_uuid","typeLabel":"string\u003cuuid>"},"url":{"type":"string","format":"uri","uniqueKey":"data.webhooks.items.[INDEX].url","typeLabel":"string\u003curi>"},"events":{"type":"array","items":{"type":"string","enum":["conversation_status","conversation_end_report","conversation_update","voice_evaluation","text_evaluation","intent_call"],"uniqueKey":"data.webhooks.items.[INDEX].events.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"data.webhooks.items.[INDEX].events","typeLabel":"enum\u003cstring>[]"},"is_active":{"type":"boolean","uniqueKey":"data.webhooks.items.[INDEX].is_active","typeLabel":"boolean"},"has_secret":{"description":"True if a secret_key is set on this webhook. The secret itself is never returned.","type":"boolean","uniqueKey":"data.webhooks.items.[INDEX].has_secret","typeLabel":"boolean"},"created_at":{"type":"string","format":"date-time","uniqueKey":"data.webhooks.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","uniqueKey":"data.webhooks.items.[INDEX].updated_at","typeLabel":"string\u003cdate-time>"}},"type":"object","uniqueKey":"data.webhooks.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.webhooks","typeLabel":"object[]"},"appointments":{"type":"object","uniqueKey":"data.appointments","typeLabel":"object"},"routing_rules":{"type":"array","items":{"description":"Routing rules tell the runtime agent when and how to transfer a call to another extension, phone number, or agent (the IVR equivalent). The runtime AI relies on `ai_prompt` and `phrases` to decide whether a customer utterance should trigger this rule — assignments without those fields will never fire.","properties":{"uuid":{"oneOf":[{"type":"string","format":"uuid","readOnly":true,"uniqueKey":"data.routing_rules.items.[INDEX].uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","readOnly":true,"uniqueKey":"data.routing_rules.items.[INDEX].uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.routing_rules.items.[INDEX].uuid","typeLabel":"string\u003cuuid> | null"},"detection_mode":{"description":"How the AI matches customer utterances to this rule. `exact` = literal keyword (fast but narrow), `intent` = AI semantic understanding (broader, recommended), `both` = combine for max accuracy.","type":"string","enum":["exact","intent","both"],"example":"intent","uniqueKey":"data.routing_rules.items.[INDEX].detection_mode","typeLabel":"enum\u003cstring>"},"trigger_keyword":{"oneOf":[{"description":"Literal keyword that triggers `exact`/`both` matching. Required when detection_mode is exact or both.","type":"string","example":"sales","uniqueKey":"data.routing_rules.items.[INDEX].trigger_keyword.oneOf.0","typeLabel":"string"},{"description":"Literal keyword that triggers `exact`/`both` matching. Required when detection_mode is exact or both.","type":"null","example":"sales","uniqueKey":"data.routing_rules.items.[INDEX].trigger_keyword.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.routing_rules.items.[INDEX].trigger_keyword","typeLabel":"string | null"},"department_name":{"oneOf":[{"description":"Human-readable label for this rule. Helps you and the AI identify what the rule is for.","type":"string","example":"Sales Department","uniqueKey":"data.routing_rules.items.[INDEX].department_name.oneOf.0","typeLabel":"string"},{"description":"Human-readable label for this rule. Helps you and the AI identify what the rule is for.","type":"null","example":"Sales Department","uniqueKey":"data.routing_rules.items.[INDEX].department_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.routing_rules.items.[INDEX].department_name","typeLabel":"string | null"},"phrases":{"description":"Example customer utterances that should trigger this rule. The runtime AI uses these as training signal when detection_mode includes intent matching. Provide 3-5 varied phrasings.","type":"array","items":{"type":"string","example":"I want to talk to sales","uniqueKey":"data.routing_rules.items.[INDEX].phrases.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.routing_rules.items.[INDEX].phrases","typeLabel":"string[]"},"ai_prompt":{"oneOf":[{"description":"Required for intent-based matching. Natural-language instructions the runtime AI uses to decide whether a customer utterance matches this rule. Without this field set, intent and both detection modes have no guidance to act on, so the rule will never trigger. Always provide concrete instructions describing what customer intent should fire this rule.","type":"string","example":"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.","uniqueKey":"data.routing_rules.items.[INDEX].ai_prompt.oneOf.0","typeLabel":"string"},{"description":"Required for intent-based matching. Natural-language instructions the runtime AI uses to decide whether a customer utterance matches this rule. Without this field set, intent and both detection modes have no guidance to act on, so the rule will never trigger. Always provide concrete instructions describing what customer intent should fire this rule.","type":"null","example":"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.","uniqueKey":"data.routing_rules.items.[INDEX].ai_prompt.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.routing_rules.items.[INDEX].ai_prompt","typeLabel":"string | null"},"voice_response":{"description":"Message the runtime agent speaks to the customer immediately before initiating the transfer. Required.","type":"string","example":"Sure, I'll transfer you to our sales team now. One moment please.","uniqueKey":"data.routing_rules.items.[INDEX].voice_response","typeLabel":"string"},"voice_on_error":{"oneOf":[{"description":"Spoken when the transfer fails (busy, no answer, error). Recommended.","type":"string","example":"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.","uniqueKey":"data.routing_rules.items.[INDEX].voice_on_error.oneOf.0","typeLabel":"string"},{"description":"Spoken when the transfer fails (busy, no answer, error). Recommended.","type":"null","example":"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.","uniqueKey":"data.routing_rules.items.[INDEX].voice_on_error.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.routing_rules.items.[INDEX].voice_on_error","typeLabel":"string | null"},"voice_on_success":{"oneOf":[{"description":"Spoken when the transfer completes successfully (typically only used for warm/ping-and-transfer modes).","type":"string","example":"You've been successfully connected. Have a great day.","uniqueKey":"data.routing_rules.items.[INDEX].voice_on_success.oneOf.0","typeLabel":"string"},{"description":"Spoken when the transfer completes successfully (typically only used for warm/ping-and-transfer modes).","type":"null","example":"You've been successfully connected. Have a great day.","uniqueKey":"data.routing_rules.items.[INDEX].voice_on_success.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.routing_rules.items.[INDEX].voice_on_success","typeLabel":"string | null"},"destination_type":{"oneOf":[{"description":"Where the call is sent. `extension` = SIP extension or URI (e.g. '101' or 'sip:101@domain.com'), `phone` = external phone number in E.164, `agent` = another mihu agent (set destination_agent_uuid).","type":"string","enum":["extension","phone","agent"],"example":"extension","uniqueKey":"data.routing_rules.items.[INDEX].destination_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Where the call is sent. `extension` = SIP extension or URI (e.g. '101' or 'sip:101@domain.com'), `phone` = external phone number in E.164, `agent` = another mihu agent (set destination_agent_uuid).","type":"null","enum":["extension","phone","agent"],"example":"extension","uniqueKey":"data.routing_rules.items.[INDEX].destination_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.routing_rules.items.[INDEX].destination_type","typeLabel":"enum\u003cstring> | null"},"destination":{"oneOf":[{"description":"The actual destination value. Format depends on destination_type: extension number, SIP URI, or E.164 phone. Ignored when destination_type=agent.","type":"string","example":"101","uniqueKey":"data.routing_rules.items.[INDEX].destination.oneOf.0","typeLabel":"string"},{"description":"The actual destination value. Format depends on destination_type: extension number, SIP URI, or E.164 phone. Ignored when destination_type=agent.","type":"null","example":"101","uniqueKey":"data.routing_rules.items.[INDEX].destination.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.routing_rules.items.[INDEX].destination","typeLabel":"string | null"},"destination_agent_uuid":{"oneOf":[{"description":"UUID of the target agent. Required when destination_type=agent.","type":"string","format":"uuid","uniqueKey":"data.routing_rules.items.[INDEX].destination_agent_uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"description":"UUID of the target agent. Required when destination_type=agent.","type":"null","format":"uuid","uniqueKey":"data.routing_rules.items.[INDEX].destination_agent_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.routing_rules.items.[INDEX].destination_agent_uuid","typeLabel":"string\u003cuuid> | null"},"transfer_type":{"description":"Telephony transfer mechanism. `transfer_call` = default transfer (recommended for most cases). `forward_call` = simple forwarding. `warm_transfer_call` = the agent stays on the line and announces the caller before connecting. `blind_transfer_call` = hang up the moment the destination rings. `ping_and_transfer_call` = the agent briefly announces the caller, then transfers.","type":"string","enum":["transfer_call","forward_call","warm_transfer_call","blind_transfer_call","ping_and_transfer_call"],"example":"transfer_call","uniqueKey":"data.routing_rules.items.[INDEX].transfer_type","typeLabel":"enum\u003cstring>"},"transfer_config":{"oneOf":[{"description":"Optional telephony-provider-specific configuration. Free-form key/value map; consult provider docs for accepted keys.","type":"object","uniqueKey":"data.routing_rules.items.[INDEX].transfer_config.oneOf.0","typeLabel":"object"},{"description":"Optional telephony-provider-specific configuration. Free-form key/value map; consult provider docs for accepted keys.","type":"null","uniqueKey":"data.routing_rules.items.[INDEX].transfer_config.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.routing_rules.items.[INDEX].transfer_config","typeLabel":"object | null"},"priority":{"description":"Match priority. Lower numbers run first when multiple rules could match the same utterance.","type":"integer","example":1,"uniqueKey":"data.routing_rules.items.[INDEX].priority","typeLabel":"integer"},"is_active":{"type":"boolean","example":true,"uniqueKey":"data.routing_rules.items.[INDEX].is_active","typeLabel":"boolean"}},"type":"object","uniqueKey":"data.routing_rules.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.routing_rules","typeLabel":"object[]"},"guard_rules":{"type":"array","items":{"description":"Guard rules let the agent forward or end a conversation when a defined situation arises (compliance, safety, escalation). The runtime AI relies on `when_condition` and `example_phrases` to decide whether a customer utterance triggers the guard — rules without those fields filled cannot fire reliably.","properties":{"uuid":{"oneOf":[{"type":"string","format":"uuid","readOnly":true,"uniqueKey":"data.guard_rules.items.[INDEX].uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","readOnly":true,"uniqueKey":"data.guard_rules.items.[INDEX].uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guard_rules.items.[INDEX].uuid","typeLabel":"string\u003cuuid> | null"},"name":{"oneOf":[{"description":"Optional short name for the guard rule.","type":"string","example":"Legal complaint escalation","uniqueKey":"data.guard_rules.items.[INDEX].name.oneOf.0","typeLabel":"string"},{"description":"Optional short name for the guard rule.","type":"null","example":"Legal complaint escalation","uniqueKey":"data.guard_rules.items.[INDEX].name.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guard_rules.items.[INDEX].name","typeLabel":"string | null"},"when_condition":{"description":"Required. Natural-language description of the situation that should trigger this guard. The runtime AI uses this as instructions when classifying customer utterances. Be specific — 'customer is angry' is too vague; 'customer uses profanity or threatens to escalate' is actionable.","type":"string","example":"Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.","uniqueKey":"data.guard_rules.items.[INDEX].when_condition","typeLabel":"string"},"example_phrases":{"description":"Customer utterances that should trigger this guard. Provide 3-5 varied phrasings — the runtime AI uses these as positive examples when classifying.","type":"array","items":{"type":"string","example":"I'm calling my lawyer about this","uniqueKey":"data.guard_rules.items.[INDEX].example_phrases.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.guard_rules.items.[INDEX].example_phrases","typeLabel":"string[]"},"then_action":{"description":"What the runtime agent does when the guard fires. `forward` transfers to a human or another agent; `end_conversation` politely ends the call/chat.","type":"string","enum":["forward","end_conversation"],"example":"forward","uniqueKey":"data.guard_rules.items.[INDEX].then_action","typeLabel":"enum\u003cstring>"},"selected_channels":{"description":"Channels where this guard is active. Defaults to phone-only.","type":"array","items":{"type":"string","enum":["phone","instagram","whatsapp","facebook_messenger"],"uniqueKey":"data.guard_rules.items.[INDEX].selected_channels.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"data.guard_rules.items.[INDEX].selected_channels","typeLabel":"enum\u003cstring>[]"},"say_before_forwarding":{"oneOf":[{"description":"Message spoken before the transfer when then_action=forward.","type":"string","example":"I understand this is important — let me connect you with someone who can help.","uniqueKey":"data.guard_rules.items.[INDEX].say_before_forwarding.oneOf.0","typeLabel":"string"},{"description":"Message spoken before the transfer when then_action=forward.","type":"null","example":"I understand this is important — let me connect you with someone who can help.","uniqueKey":"data.guard_rules.items.[INDEX].say_before_forwarding.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guard_rules.items.[INDEX].say_before_forwarding","typeLabel":"string | null"},"say_before_end":{"oneOf":[{"description":"Message spoken before ending when then_action=end_conversation.","type":"string","example":"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.","uniqueKey":"data.guard_rules.items.[INDEX].say_before_end.oneOf.0","typeLabel":"string"},{"description":"Message spoken before ending when then_action=end_conversation.","type":"null","example":"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.","uniqueKey":"data.guard_rules.items.[INDEX].say_before_end.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guard_rules.items.[INDEX].say_before_end","typeLabel":"string | null"},"destination_type":{"oneOf":[{"description":"Where the call is sent when then_action=forward (same semantics as routing rules).","type":"string","enum":["extension","phone","agent"],"uniqueKey":"data.guard_rules.items.[INDEX].destination_type.oneOf.0","typeLabel":"enum\u003cstring>"},{"description":"Where the call is sent when then_action=forward (same semantics as routing rules).","type":"null","enum":["extension","phone","agent"],"uniqueKey":"data.guard_rules.items.[INDEX].destination_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guard_rules.items.[INDEX].destination_type","typeLabel":"enum\u003cstring> | null"},"destination":{"oneOf":[{"description":"Destination value (extension, SIP URI, or E.164 phone) when then_action=forward.","type":"string","uniqueKey":"data.guard_rules.items.[INDEX].destination.oneOf.0","typeLabel":"string"},{"description":"Destination value (extension, SIP URI, or E.164 phone) when then_action=forward.","type":"null","uniqueKey":"data.guard_rules.items.[INDEX].destination.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guard_rules.items.[INDEX].destination","typeLabel":"string | null"},"destination_agent_uuid":{"oneOf":[{"description":"Target agent UUID when destination_type=agent.","type":"string","format":"uuid","uniqueKey":"data.guard_rules.items.[INDEX].destination_agent_uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"description":"Target agent UUID when destination_type=agent.","type":"null","format":"uuid","uniqueKey":"data.guard_rules.items.[INDEX].destination_agent_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.guard_rules.items.[INDEX].destination_agent_uuid","typeLabel":"string\u003cuuid> | null"},"is_active":{"type":"boolean","example":true,"uniqueKey":"data.guard_rules.items.[INDEX].is_active","typeLabel":"boolean"},"is_default":{"description":"Marks this guard as a default that auto-applies to new agents in the workspace.","type":"boolean","example":false,"uniqueKey":"data.guard_rules.items.[INDEX].is_default","typeLabel":"boolean"}},"type":"object","uniqueKey":"data.guard_rules.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.guard_rules","typeLabel":"object[]"},"phone_numbers":{"type":"array","items":{"properties":{"phone_number_uuid":{"oneOf":[{"type":"string","format":"uuid","uniqueKey":"data.phone_numbers.items.[INDEX].phone_number_uuid.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","uniqueKey":"data.phone_numbers.items.[INDEX].phone_number_uuid.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phone_numbers.items.[INDEX].phone_number_uuid","typeLabel":"string\u003cuuid> | null"},"number":{"type":"string","uniqueKey":"data.phone_numbers.items.[INDEX].number","typeLabel":"string"},"status":{"oneOf":[{"type":"string","enum":["active","pending","inactive","deleted"],"uniqueKey":"data.phone_numbers.items.[INDEX].status.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["active","pending","inactive","deleted"],"uniqueKey":"data.phone_numbers.items.[INDEX].status.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phone_numbers.items.[INDEX].status","typeLabel":"enum\u003cstring> | null"},"country_code":{"oneOf":[{"type":"string","uniqueKey":"data.phone_numbers.items.[INDEX].country_code.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.phone_numbers.items.[INDEX].country_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phone_numbers.items.[INDEX].country_code","typeLabel":"string | null"},"type":{"oneOf":[{"type":"string","uniqueKey":"data.phone_numbers.items.[INDEX].type.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"data.phone_numbers.items.[INDEX].type.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phone_numbers.items.[INDEX].type","typeLabel":"string | null"},"capabilities":{"properties":{"call":{"oneOf":[{"type":"boolean","uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.call.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.call.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.call","typeLabel":"boolean | null"},"sms":{"oneOf":[{"type":"boolean","uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.sms.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.sms.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.sms","typeLabel":"boolean | null"},"whatsapp":{"oneOf":[{"type":"boolean","uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.whatsapp.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.whatsapp.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.whatsapp","typeLabel":"boolean | null"},"whatsapp_call":{"oneOf":[{"type":"boolean","uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.whatsapp_call.oneOf.0","typeLabel":"boolean"},{"type":"null","uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.whatsapp_call.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.phone_numbers.items.[INDEX].capabilities.whatsapp_call","typeLabel":"boolean | null"}},"type":"object","uniqueKey":"data.phone_numbers.items.[INDEX].capabilities","typeLabel":"object"}},"type":"object","uniqueKey":"data.phone_numbers.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.phone_numbers","typeLabel":"object[]"},"channels":{"type":"array","items":{"type":"object","uniqueKey":"data.channels.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data.channels","typeLabel":"object[]"},"created_at":{"type":"string","format":"date-time","uniqueKey":"data.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","uniqueKey":"data.updated_at","typeLabel":"string\u003cdate-time>"}},"type":"object","uniqueKey":"data","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"message":"\u003cstring>","data":{"agent_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"\u003cstring>","description":"\u003cstring>","company_name":"\u003cstring>","role":"\u003cstring>","objective":"\u003cstring>","tone":"\u003cstring>","behavior_guidelines":"\u003cstring>","company_service":"\u003cstring>","topic":"\u003cstring>","length_detail":"\u003cstring>","interest_of_product":"\u003cstring>","negative_response":"\u003cstring>","status":"pending","custom_prompt":"\u003cstring>","language":"\u003cstring>","speed":"\u003cstring>","timezone":"\u003cstring>","appointment_scheduling_enabled":true,"appointment_scheduling_randomly":true,"custom_llm_url":"\u003cstring>","recommendations":"\u003cstring>","settings":{"voice":{},"text":{},"memorize":{},"evaluation":{}},"guidelines":[{"uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","content":"Always confirm vehicle VIN or license plate before creating a service appointment.","order":0}],"notes":[{"uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","content":"Service appointments take 60-90 minutes for standard maintenance, 2-4 hours for warranty work. Same-day pickup is available before 4 PM.","order":0}],"procedures":[{"uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"Book service appointment","description":"Used when the customer wants to schedule a service appointment for their vehicle.","steps":[{"order":1,"description":"Ask the customer for their vehicle license plate or VIN.","intent_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a"}]}],"training":[{"uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","content":"What does Volvo's standard warranty cover?","intent":"warranty_inquiry","response":"Volvo's standard warranty covers 4 years or 100,000 km, whichever comes first, including parts and labor at any authorized service center. Would you like the details for your specific model?"}],"intents":[{"intent_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","key":"\u003cstring>","name":"\u003cstring>","description":"\u003cstring>","recommendation_actions":"\u003cstring>","confidence_threshold":123,"is_system":true,"intent_llm_handle_by_response":true,"webhook":{"url":"\u003cstring>","auth_token":"\u003cstring>"},"parameters":[{"key":"email","default":"\u003cstring>","type":"string","required":true}],"created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z"}],"webhooks":[{"webhook_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","url":"\u003cstring>","events":["conversation_status"],"is_active":true,"has_secret":true,"created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z"}],"appointments":{},"routing_rules":[{"uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","detection_mode":"intent","trigger_keyword":"sales","department_name":"Sales Department","phrases":["I want to talk to sales"],"ai_prompt":"Detect when the customer wants to speak with the sales team — they may ask about pricing, new products, quotes, or directly mention sales.","voice_response":"Sure, I'll transfer you to our sales team now. One moment please.","voice_on_error":"I'm sorry, I couldn't reach sales right now. Please call back later or leave a message.","voice_on_success":"You've been successfully connected. Have a great day.","destination_type":"extension","destination":"101","destination_agent_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","transfer_type":"transfer_call","transfer_config":{},"priority":1,"is_active":true}],"guard_rules":[{"uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","name":"Legal complaint escalation","when_condition":"Customer mentions a legal complaint, lawyer, lawsuit, or threatens to take legal action.","example_phrases":["I'm calling my lawyer about this"],"then_action":"forward","selected_channels":["phone"],"say_before_forwarding":"I understand this is important — let me connect you with someone who can help.","say_before_end":"I'm sorry I couldn't help further. Please contact our team directly. Goodbye.","destination_type":"extension","destination":"\u003cstring>","destination_agent_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","is_active":true,"is_default":false}],"phone_numbers":[{"phone_number_uuid":"3c90c3cc-0d44-4b50-8888-8dd25736052a","number":"\u003cstring>","status":"active","country_code":"\u003cstring>","type":"\u003cstring>","capabilities":{"call":true,"sms":true,"whatsapp":true,"whatsapp_call":true}}],"channels":[{}],"created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"5ba75ead-2d72-424c-ac45-b51c6e79dda5":{"description":"Agent not found","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"4806f8ba-365a-4327-9e5d-5a259532a650":{"description":"Validation error","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"774d9aeb-35c6-4fac-ab93-12fcf4bca7a4":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Use a Bearer token to access these API endpoints. Example: \"Bearer {your-token}\"","scopes":[]}}},"servers":{"dac11e17-38e0-40a7-8cdc-35a8b49f6298":{"url":"https://{subdomain}.mihu.ai","description":"Your subdomain","variables":{"subdomain":{"default":"demo","description":"Subdomain name"}}},"292bb900-7559-481c-b70d-31819c604d97":{"url":"/docs"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Use a Bearer token to access these API endpoints. Example: \"Bearer {your-token}\"","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Use a Bearer token to access these API endpoints. Example: \"Bearer {your-token}\"","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"https://app.mindhunters.ai/docs/api-docs.json"},"subdomain":"mindhunters","siteName":"Mindhunters API Documentation","title":"Update an agent - Mindhunters API Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-12T15:48:48.786Z","originalFileLocation":"api-reference/agents/update-an-agent.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Updates core agent fields, voice/text settings, and any included collection sections. Use PATCH for partial changes to the agent profile or settings. If a collection section such as notes, guidelines, procedures, training, routing_rules, or guard_rules is included, that section replaces the existing section.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Mindhunters API Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/mindhunters/UQrvKp4soZU8xRfa/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/mindhunters/UQrvKp4soZU8xRfa/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/mindhunters/UQrvKp4soZU8xRfa/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/mindhunters/UQrvKp4soZU8xRfa/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/mindhunters/UQrvKp4soZU8xRfa/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/mindhunters/UQrvKp4soZU8xRfa/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/mindhunters/UQrvKp4soZU8xRfa/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/mindhunters/UQrvKp4soZU8xRfa/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/mindhunters/UQrvKp4soZU8xRfa/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update an agent - Mindhunters API Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Updates core agent fields, voice/text settings, and any included collection sections. Use PATCH for partial changes to the agent profile or settings. If a collection section such as notes, guidelines, procedures, training, routing_rules, or guard_rules is included, that section replaces the existing section.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Mindhunters API Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.mindhunters.ai/api-reference/agents/update-an-agent\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://mindhunters.mintlify.app/_mintlify/api/og/v2?division=Agents\u0026amp;title=Update+an+agent\u0026amp;description=Updates+core+agent+fields%2C+voice%2Ftext+settings%2C+and+any+included+collection+sections.+Use+PATCH+for+partial+changes+to+the+agent+profile+or+settings.+If+a+colle\u0026amp;theme=51582ac2a6fc6d80e00519e2\u0026amp;signature=797ef56bfe441ba8466053518d3e89983ef44b3c9b0a25ce9fd544cfead811e4\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Update an agent - Mindhunters API Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Updates core agent fields, voice/text settings, and any included collection sections. Use PATCH for partial changes to the agent profile or settings. If a collection section such as notes, guidelines, procedures, training, routing_rules, or guard_rules is included, that section replaces the existing section.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://mindhunters.mintlify.app/_mintlify/api/og/v2?division=Agents\u0026amp;title=Update+an+agent\u0026amp;description=Updates+core+agent+fields%2C+voice%2Ftext+settings%2C+and+any+included+collection+sections.+Use+PATCH+for+partial+changes+to+the+agent+profile+or+settings.+If+a+colle\u0026amp;theme=51582ac2a6fc6d80e00519e2\u0026amp;signature=797ef56bfe441ba8466053518d3e89983ef44b3c9b0a25ce9fd544cfead811e4\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/mindhunters/UQrvKp4soZU8xRfa/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Mindhunters API Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.mindhunters.ai/api-reference/agents/update-an-agent\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/agents/update-an-agent.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.mindhunters.ai/#organization\",\"name\":\"Mindhunters API Documentation\",\"url\":\"https://developers.mindhunters.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://app.mindhunters.ai/media/whitelabels/mindhunters/logos/logo-mini-mind.png\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.mindhunters.ai#website\",\"name\":\"Mindhunters API Documentation\",\"url\":\"https://developers.mindhunters.ai\",\"publisher\":{\"@id\":\"https://developers.mindhunters.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.mindhunters.ai/api-reference/agents/update-an-agent#webpage\",\"url\":\"https://developers.mindhunters.ai/api-reference/agents/update-an-agent\",\"name\":\"Update an agent\",\"description\":\"Updates core agent fields, voice/text settings, and any included collection sections. Use PATCH for partial changes to the agent profile or settings. If a collection section such as notes, guidelines, procedures, training, routing_rules, or guard_rules is included, that section replaces the existing section.\",\"dateModified\":\"2026-05-12T15:48:48.786Z\",\"isPartOf\":{\"@id\":\"https://developers.mindhunters.ai#website\"},\"breadcrumb\":{\"@id\":\"https://developers.mindhunters.ai/api-reference/agents/update-an-agent#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.mindhunters.ai/api-reference/agents/update-an-agent#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://developers.mindhunters.ai/api-reference/agents/list-agents\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Agents\",\"item\":\"https://developers.mindhunters.ai/api-reference/agents/list-agents\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Update an agent\",\"item\":\"https://developers.mindhunters.ai/api-reference/agents/update-an-agent\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.mindhunters.ai/api-reference/agents/update-an-agent#apireference\",\"headline\":\"Update an agent\",\"name\":\"Update an agent\",\"description\":\"Updates core agent fields, voice/text settings, and any included collection sections. Use PATCH for partial changes to the agent profile or settings. If a collection section such as notes, guidelines, procedures, training, routing_rules, or guard_rules is included, that section replaces the existing section.\",\"url\":\"https://developers.mindhunters.ai/api-reference/agents/update-an-agent\",\"mainEntityOfPage\":{\"@id\":\"https://developers.mindhunters.ai/api-reference/agents/update-an-agent#webpage\"},\"dateModified\":\"2026-05-12T15:48:48.786Z\",\"publisher\":{\"@id\":\"https://developers.mindhunters.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.mindhunters.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Mindhunters API Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Mindhunters API Documentation","nav":{"global":{"anchors":[{"anchor":"Mindhunters","icon":"book-open-cover","href":"https://mindhunters.ai"},{"anchor":"Login","icon":"newspaper","href":"https://app.mindhunters.ai"}]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"API Documentation","pages":[{"title":"Introduction","href":"/api-reference/introduction"}]},{"group":"API Reference","pages":[{"group":"Agents","pages":[{"title":"List agents","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents","href":"/api-reference/agents/list-agents"},{"title":"Create an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents","href":"/api-reference/agents/create-an-agent"},{"title":"Get one agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents/{uuid}","href":"/api-reference/agents/get-one-agent"},{"title":"Replace/sync an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/agents/{uuid}","href":"/api-reference/agents/replacesync-an-agent"},{"title":"Soft-delete an agent","description":"Soft-deletes the agent. Child records (notes, guidelines, training, intents, etc.) remain in the database for recoverability but are no longer reachable via the API. Provider-side resources (Telnyx, WhatsApp etc.) are NOT torn down — release/unbind phone numbers separately first.","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}","href":"/api-reference/agents/soft-delete-an-agent"},{"title":"Update an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}","href":"/api-reference/agents/update-an-agent"},{"title":"Replace agent guidelines","description":"Replaces all guidelines for the agent. Guidelines are short behavioral rules that shape how the agent should respond. Use this endpoint for bulk edits or external syncs; use POST /guidelines to append one guideline without replacing the existing list.","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/agents/{uuid}/guidelines","href":"/api-reference/agents/replace-agent-guidelines"},{"title":"Add a single guideline","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/guidelines","href":"/api-reference/agents/add-a-single-guideline"},{"title":"Replace agent notes","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/agents/{uuid}/notes","href":"/api-reference/agents/replace-agent-notes"},{"title":"Add a single note","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/notes","href":"/api-reference/agents/add-a-single-note"},{"title":"Replace agent procedures","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/agents/{uuid}/procedures","href":"/api-reference/agents/replace-agent-procedures"},{"title":"Add a single procedure (with optional steps)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/procedures","href":"/api-reference/agents/add-a-single-procedure-with-optional-steps"},{"title":"Replace agent training data","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/agents/{uuid}/training","href":"/api-reference/agents/replace-agent-training-data"},{"title":"Add a single training data row","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/training","href":"/api-reference/agents/add-a-single-training-data-row"},{"title":"Replace agent appointment settings and schedule assignments","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/agents/{uuid}/appointments","href":"/api-reference/agents/replace-agent-appointment-settings-and-schedule-assignments"},{"title":"Delete a single note","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}/notes/{noteUuid}","href":"/api-reference/agents/delete-a-single-note"},{"title":"Update a single note","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}/notes/{noteUuid}","href":"/api-reference/agents/update-a-single-note"},{"title":"Delete a single guideline","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}/guidelines/{guidelineUuid}","href":"/api-reference/agents/delete-a-single-guideline"},{"title":"Update a single guideline","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}/guidelines/{guidelineUuid}","href":"/api-reference/agents/update-a-single-guideline"},{"title":"Delete a single training row","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}/training/{trainingUuid}","href":"/api-reference/agents/delete-a-single-training-row"},{"title":"Update a single training row","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}/training/{trainingUuid}","href":"/api-reference/agents/update-a-single-training-row"},{"title":"Delete a single procedure (and its steps)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}/procedures/{procedureUuid}","href":"/api-reference/agents/delete-a-single-procedure-and-its-steps"},{"title":"Update a single procedure (and replace its steps if provided)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}/procedures/{procedureUuid}","href":"/api-reference/agents/update-a-single-procedure-and-replace-its-steps-if-provided"},{"title":"Phone numbers owned by an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents/{uuid}/phone-numbers","href":"/api-reference/agents/phone-numbers-owned-by-an-agent"},{"title":"Channels and phone numbers for an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents/{uuid}/channels","href":"/api-reference/agents/channels-and-phone-numbers-for-an-agent"},{"title":"Provision call channel for an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/call/provision","href":"/api-reference/agents/provision-call-channel-for-an-agent"},{"title":"List webhooks for an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents/{uuid}/webhooks","href":"/api-reference/agents/list-webhooks-for-an-agent"},{"title":"Add a webhook to this agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/webhooks","href":"/api-reference/agents/add-a-webhook-to-this-agent"},{"title":"Get one webhook","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents/{uuid}/webhooks/{webhookUuid}","href":"/api-reference/agents/get-one-webhook"},{"title":"Delete a webhook","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}/webhooks/{webhookUuid}","href":"/api-reference/agents/delete-a-webhook"},{"title":"Update a webhook","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}/webhooks/{webhookUuid}","href":"/api-reference/agents/update-a-webhook"},{"title":"List intents for an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents/{uuid}/intents","href":"/api-reference/agents/list-intents-for-an-agent"},{"title":"Create an intent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/intents","href":"/api-reference/agents/create-an-intent"},{"title":"Get one intent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents/{uuid}/intents/{intentUuid}","href":"/api-reference/agents/get-one-intent"},{"title":"Delete an intent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}/intents/{intentUuid}","href":"/api-reference/agents/delete-an-intent"},{"title":"Update an intent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}/intents/{intentUuid}","href":"/api-reference/agents/update-an-intent"}]},{"group":"Voice IVR \u0026 Guards","pages":[{"title":"Replace ALL routing rules for an agent (destructive)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/agents/{uuid}/routing-rules","href":"/api-reference/voice-ivr-\u0026-guards/replace-all-routing-rules-for-an-agent-destructive"},{"title":"Add ONE routing rule (preserves existing rules)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/routing-rules","href":"/api-reference/voice-ivr-\u0026-guards/add-one-routing-rule-preserves-existing-rules"},{"title":"Replace ALL guard rules for an agent (destructive)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/agents/{uuid}/guard-rules","href":"/api-reference/voice-ivr-\u0026-guards/replace-all-guard-rules-for-an-agent-destructive"},{"title":"Add ONE guard rule (preserves existing rules)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/guard-rules","href":"/api-reference/voice-ivr-\u0026-guards/add-one-guard-rule-preserves-existing-rules"},{"title":"Delete ONE routing rule (other rules untouched)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}/routing-rules/{ruleUuid}","href":"/api-reference/voice-ivr-\u0026-guards/delete-one-routing-rule-other-rules-untouched"},{"title":"Partially update ONE routing rule","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}/routing-rules/{ruleUuid}","href":"/api-reference/voice-ivr-\u0026-guards/partially-update-one-routing-rule"},{"title":"Delete ONE guard rule (other guards untouched)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}/guard-rules/{ruleUuid}","href":"/api-reference/voice-ivr-\u0026-guards/delete-one-guard-rule-other-guards-untouched"},{"title":"Partially update ONE guard rule","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}/guard-rules/{ruleUuid}","href":"/api-reference/voice-ivr-\u0026-guards/partially-update-one-guard-rule"}]},{"group":"Agent Channel Bindings","pages":[{"title":"Assign an SMS phone number to an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/sms","href":"/api-reference/agent-channel-bindings/assign-an-sms-phone-number-to-an-agent"},{"title":"Unbind the SMS channel from this agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/sms/unbind","href":"/api-reference/agent-channel-bindings/unbind-the-sms-channel-from-this-agent"},{"title":"Assign a WhatsApp number to an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/whatsapp","href":"/api-reference/agent-channel-bindings/assign-a-whatsapp-number-to-an-agent"},{"title":"Assign a WhatsApp Calling number to an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/whatsapp-call","href":"/api-reference/agent-channel-bindings/assign-a-whatsapp-calling-number-to-an-agent"},{"title":"Unbind the WhatsApp channel from this agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/whatsapp/unbind","href":"/api-reference/agent-channel-bindings/unbind-the-whatsapp-channel-from-this-agent"},{"title":"Unbind WhatsApp Calling from this agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/whatsapp-call/unbind","href":"/api-reference/agent-channel-bindings/unbind-whatsapp-calling-from-this-agent"},{"title":"Assign an Instagram account to an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/instagram","href":"/api-reference/agent-channel-bindings/assign-an-instagram-account-to-an-agent"},{"title":"Unbind the Instagram channel from this agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/instagram/unbind","href":"/api-reference/agent-channel-bindings/unbind-the-instagram-channel-from-this-agent"},{"title":"Assign a Facebook page (Messenger) to an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/messenger","href":"/api-reference/agent-channel-bindings/assign-a-facebook-page-messenger-to-an-agent"},{"title":"Unbind the Messenger channel from this agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/messenger/unbind","href":"/api-reference/agent-channel-bindings/unbind-the-messenger-channel-from-this-agent"}]},{"group":"Analytics","pages":[{"title":"Appointment lifecycle metrics (event-in-period semantics)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/analytics/appointments","href":"/api-reference/analytics/appointment-lifecycle-metrics-event-in-period-semantics"},{"title":"Aggregated call metrics for a time window (authoritative call count)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/analytics/calls","href":"/api-reference/analytics/aggregated-call-metrics-for-a-time-window-authoritative-call-count"},{"title":"Per-channel conversation rollup","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/analytics/conversations","href":"/api-reference/analytics/per-channel-conversation-rollup"},{"title":"Distribution of AI evaluations across sentiment, emotion, satisfaction, outcome, escalation, and knowledge gap","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/analytics/evaluations","href":"/api-reference/analytics/distribution-of-ai-evaluations-across-sentiment-emotion-satisfaction-outcome-escalation-and-knowledge-gap"},{"title":"Intent breakdown with outcome and per-channel distribution","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/analytics/intents","href":"/api-reference/analytics/intent-breakdown-with-outcome-and-per-channel-distribution"},{"title":"Cursor-paginated raw message export","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/analytics/messages","href":"/api-reference/analytics/cursor-paginated-raw-message-export"},{"title":"Cross-channel conversation-session metrics","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/analytics/sessions","href":"/api-reference/analytics/cross-channel-conversation-session-metrics"}]},{"group":"Contact Analyzers","pages":[{"title":"List analyzer configurations","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/analyzers","href":"/api-reference/contact-analyzers/list-analyzer-configurations"},{"title":"Get a single analyzer","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/analyzers/{internal_id}","href":"/api-reference/contact-analyzers/get-a-single-analyzer"},{"title":"Update an analyzer configuration","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/analyzers/{internal_id}","href":"/api-reference/contact-analyzers/update-an-analyzer-configuration"},{"title":"Bulk update analyzers","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/analyzers/bulk","href":"/api-reference/contact-analyzers/bulk-update-analyzers"}]},{"group":"Call","pages":[{"title":"Initiate a new call","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/call","href":"/api-reference/call/initiate-a-new-call"},{"title":"Get paginated list of calls","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/calls","href":"/api-reference/call/get-paginated-list-of-calls"},{"title":"Get call details by UUID","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/calls/{uuid}","href":"/api-reference/call/get-call-details-by-uuid"}]},{"group":"WhatsApp","pages":[{"title":"Send WhatsApp template message","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/whatsapp/template","href":"/api-reference/whatsapp/send-whatsapp-template-message"}]},{"group":"SMS","pages":[{"title":"Send an SMS message","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/sms/send","href":"/api-reference/sms/send-an-sms-message"}]},{"group":"Appointments","pages":[{"title":"Get all appointments (calendar)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/appointments","href":"/api-reference/appointments/get-all-appointments-calendar"},{"title":"Create a new appointment","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/appointments","href":"/api-reference/appointments/create-a-new-appointment"},{"title":"Get a specific appointment","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/appointments/{uuid}","href":"/api-reference/appointments/get-a-specific-appointment"},{"title":"Update an appointment","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/appointments/{uuid}","href":"/api-reference/appointments/update-an-appointment"},{"title":"Delete an appointment","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/appointments/{uuid}","href":"/api-reference/appointments/delete-an-appointment"},{"title":"Update appointment status","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/appointments/{uuid}/status","href":"/api-reference/appointments/update-appointment-status"}]},{"group":"Appointment Requests","pages":[{"title":"Get list of appointment requests","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/appointment-requests","href":"/api-reference/appointment-requests/get-list-of-appointment-requests"},{"title":"Create a new appointment request","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/appointment-requests","href":"/api-reference/appointment-requests/create-a-new-appointment-request"},{"title":"Get a specific appointment request","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/appointment-requests/{uuid}","href":"/api-reference/appointment-requests/get-a-specific-appointment-request"},{"title":"Cancel an appointment request","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/appointment-requests/{uuid}/cancel","href":"/api-reference/appointment-requests/cancel-an-appointment-request"},{"title":"Get available time slots for a schedule","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/appointment-requests/available-slots","href":"/api-reference/appointment-requests/get-available-time-slots-for-a-schedule"}]},{"group":"Availability Types","pages":[{"title":"Get all availability types","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/availability-types","href":"/api-reference/availability-types/get-all-availability-types"},{"title":"Create a new availability type","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/availability-types","href":"/api-reference/availability-types/create-a-new-availability-type"},{"title":"Get a specific availability type","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/availability-types/{uuid}","href":"/api-reference/availability-types/get-a-specific-availability-type"},{"title":"Update an availability type","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/availability-types/{uuid}","href":"/api-reference/availability-types/update-an-availability-type"},{"title":"Delete an availability type","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/availability-types/{uuid}","href":"/api-reference/availability-types/delete-an-availability-type"}]},{"group":"Call Actions","pages":[{"title":"Make the agent say a message in the live call","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/calls/action/{uuid}/say","href":"/api-reference/call-actions/make-the-agent-say-a-message-in-the-live-call"},{"title":"Forward (warm-transfer) the live call to another phone number","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/calls/action/{uuid}/forward","href":"/api-reference/call-actions/forward-warm-transfer-the-live-call-to-another-phone-number"},{"title":"Hang up the live call (the agent speaks a goodbye message, then ends)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/calls/action/{uuid}/hangup","href":"/api-reference/call-actions/hang-up-the-live-call-the-agent-speaks-a-goodbye-message-then-ends"},{"title":"Mute the agent in the live call","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/calls/action/{uuid}/mute","href":"/api-reference/call-actions/mute-the-agent-in-the-live-call"},{"title":"Unmute the agent in the live call","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/calls/action/{uuid}/unmute","href":"/api-reference/call-actions/unmute-the-agent-in-the-live-call"}]},{"group":"Campaigns","pages":[{"title":"Get paginated list of campaigns","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/campaigns","href":"/api-reference/campaigns/get-paginated-list-of-campaigns"},{"title":"Create a new campaign","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/campaigns","href":"/api-reference/campaigns/create-a-new-campaign"},{"title":"Get campaign details","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/campaigns/{uuid}","href":"/api-reference/campaigns/get-campaign-details"},{"title":"Update a campaign","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/campaigns/{uuid}","href":"/api-reference/campaigns/update-a-campaign"},{"title":"Delete a campaign","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/campaigns/{uuid}","href":"/api-reference/campaigns/delete-a-campaign"},{"title":"Publish (activate) a campaign — schedule tasks and start processing","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/campaigns/{uuid}/publish","href":"/api-reference/campaigns/publish-activate-a-campaign-—-schedule-tasks-and-start-processing"},{"title":"Assign or replace the rule attached to a campaign","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/campaigns/{uuid}/rule","href":"/api-reference/campaigns/assign-or-replace-the-rule-attached-to-a-campaign"},{"title":"Detach the rule from a campaign","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/campaigns/{uuid}/rule","href":"/api-reference/campaigns/detach-the-rule-from-a-campaign"},{"title":"Attach one or more pools to a campaign","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/campaigns/{uuid}/pools","href":"/api-reference/campaigns/attach-one-or-more-pools-to-a-campaign"},{"title":"Detach a pool from a campaign","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/campaigns/{uuid}/pools/{pool_uuid}","href":"/api-reference/campaigns/detach-a-pool-from-a-campaign"}]},{"group":"Contacts","pages":[{"title":"Get paginated list of contacts","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts","href":"/api-reference/contacts/get-paginated-list-of-contacts"},{"title":"Create a new contact","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts","href":"/api-reference/contacts/create-a-new-contact"},{"title":"Get contact details","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/{uuid}","href":"/api-reference/contacts/get-contact-details"},{"title":"Update a contact","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/contacts/{uuid}","href":"/api-reference/contacts/update-a-contact"},{"title":"Delete a contact","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/contacts/{uuid}","href":"/api-reference/contacts/delete-a-contact"},{"title":"Assign (or re-assign) a tag to a contact","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/{uuid}/add-tag","href":"/api-reference/contacts/assign-or-re-assign-a-tag-to-a-contact"},{"title":"Remove a tag from a contact","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/{uuid}/remove-tag","href":"/api-reference/contacts/remove-a-tag-from-a-contact"},{"title":"Assign or change the contact's current pipeline stage","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/{uuid}/assign-stage","href":"/api-reference/contacts/assign-or-change-the-contacts-current-pipeline-stage"},{"title":"Remove the contact from the pipeline","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/{uuid}/remove-stage","href":"/api-reference/contacts/remove-the-contact-from-the-pipeline"},{"title":"Get paginated list of blacklisted contacts","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/blacklisted","href":"/api-reference/contacts/get-paginated-list-of-blacklisted-contacts"},{"title":"Add a contact to the blacklist","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/{uuid}/blacklist","href":"/api-reference/contacts/add-a-contact-to-the-blacklist"},{"title":"Remove a contact from the blacklist","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/{uuid}/unblacklist","href":"/api-reference/contacts/remove-a-contact-from-the-blacklist"}]},{"group":"Contact Approvals","pages":[{"title":"List pending contact field approvals","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/approvals","href":"/api-reference/contact-approvals/list-pending-contact-field-approvals"},{"title":"Get a single approval by uuid","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/approvals/{uuid}","href":"/api-reference/contact-approvals/get-a-single-approval-by-uuid"},{"title":"Update the suggested value of a pending approval","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/contacts/approvals/{uuid}","href":"/api-reference/contact-approvals/update-the-suggested-value-of-a-pending-approval"},{"title":"Soft-delete an approval","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/contacts/approvals/{uuid}","href":"/api-reference/contact-approvals/soft-delete-an-approval"},{"title":"Approve a pending field update","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/approvals/{uuid}/approve","href":"/api-reference/contact-approvals/approve-a-pending-field-update"},{"title":"Reject a pending field update","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/approvals/{uuid}/reject","href":"/api-reference/contact-approvals/reject-a-pending-field-update"},{"title":"Get the history of an approval","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/approvals/{uuid}/history","href":"/api-reference/contact-approvals/get-the-history-of-an-approval"}]},{"group":"Contact Fields","pages":[{"title":"List custom contact fields","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/fields","href":"/api-reference/contact-fields/list-custom-contact-fields"},{"title":"Create a new custom contact field","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/fields","href":"/api-reference/contact-fields/create-a-new-custom-contact-field"},{"title":"Get a custom contact field by key","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/fields/{key}","href":"/api-reference/contact-fields/get-a-custom-contact-field-by-key"},{"title":"Update a custom contact field (name, is_active, etc.)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/contacts/fields/{key}","href":"/api-reference/contact-fields/update-a-custom-contact-field-name-is_active-etc"},{"title":"Delete a custom contact field","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/contacts/fields/{key}","href":"/api-reference/contact-fields/delete-a-custom-contact-field"}]},{"group":"Contact Settings","pages":[{"title":"List contact settings","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/settings","href":"/api-reference/contact-settings/list-contact-settings"},{"title":"Get a contact setting by key","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/settings/{key}","href":"/api-reference/contact-settings/get-a-contact-setting-by-key"},{"title":"Enable or disable a contact setting","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/settings/{key}","href":"/api-reference/contact-settings/enable-or-disable-a-contact-setting"}]},{"group":"Conversations","pages":[{"title":"Get paginated list of conversations","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/conversations","href":"/api-reference/conversations/get-paginated-list-of-conversations"},{"title":"Get conversation details","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/conversations/{uuid}","href":"/api-reference/conversations/get-conversation-details"},{"title":"Get paginated messages of a conversation","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/conversations/{uuid}/messages","href":"/api-reference/conversations/get-paginated-messages-of-a-conversation"}]},{"group":"Sessions","pages":[{"title":"Get paginated list of conversation sessions","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/sessions","href":"/api-reference/sessions/get-paginated-list-of-conversation-sessions"},{"title":"Get session details","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/sessions/{uuid}","href":"/api-reference/sessions/get-session-details"},{"title":"Get the evaluation of a session","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/sessions/{uuid}/evaluation","href":"/api-reference/sessions/get-the-evaluation-of-a-session"},{"title":"Get paginated messages of a session","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/sessions/{uuid}/messages","href":"/api-reference/sessions/get-paginated-messages-of-a-session"},{"title":"Get paginated sessions of a conversation","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/conversations/{uuid}/sessions","href":"/api-reference/sessions/get-paginated-sessions-of-a-conversation"}]},{"group":"Tables","pages":[{"title":"Import data via copy-paste text","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/data/import/copypaste","href":"/api-reference/tables/import-data-via-copy-paste-text"},{"title":"Import data via file upload","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/data/import/file","href":"/api-reference/tables/import-data-via-file-upload"},{"title":"Import data from a website URL","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/data/import/website","href":"/api-reference/tables/import-data-from-a-website-url"},{"title":"Create an empty table with a column schema","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/data/tables","href":"/api-reference/tables/create-an-empty-table-with-a-column-schema"},{"title":"Get all imported data","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/data","href":"/api-reference/tables/get-all-imported-data"},{"title":"Get data details by UUID","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/data/{uuid}","href":"/api-reference/tables/get-data-details-by-uuid"},{"title":"Update table metadata (name and description)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/data/{uuid}","href":"/api-reference/tables/update-table-metadata-name-and-description"},{"title":"Delete imported data","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/data/{uuid}","href":"/api-reference/tables/delete-imported-data"},{"title":"Get fields (columns) for imported data","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/data/{uuid}/fields","href":"/api-reference/tables/get-fields-columns-for-imported-data"},{"title":"Add a column to a table","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/data/{uuid}/fields","href":"/api-reference/tables/add-a-column-to-a-table"},{"title":"Update a column (rename and/or change data_type)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/data/{uuid}/fields/{field_uuid}","href":"/api-reference/tables/update-a-column-rename-andor-change-data_type"},{"title":"Delete a column","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/data/{uuid}/fields/{field_uuid}","href":"/api-reference/tables/delete-a-column"},{"title":"Get records for imported data","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/data/{uuid}/records","href":"/api-reference/tables/get-records-for-imported-data"},{"title":"Create a record for imported data","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/data/{uuid}/records","href":"/api-reference/tables/create-a-record-for-imported-data"},{"title":"Update record values","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/data/{uuid}/records/{record}","href":"/api-reference/tables/update-record-values"},{"title":"Delete a record","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/data/{uuid}/records/{record}","href":"/api-reference/tables/delete-a-record"},{"title":"Assign imported data to an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/data/{uuid}/assign","href":"/api-reference/tables/assign-imported-data-to-an-agent"},{"title":"Trigger a sync for data across all associated agents","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/data/{uuid}/sync","href":"/api-reference/tables/trigger-a-sync-for-data-across-all-associated-agents"}]},{"group":"Logs","pages":[{"title":"List action executions across tasks, workflows, and intents","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/logs/actions","href":"/api-reference/logs/list-action-executions-across-tasks-workflows-and-intents"},{"title":"Get full detail for a single action execution","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/logs/actions/{type}/{uuid}","href":"/api-reference/logs/get-full-detail-for-a-single-action-execution"}]},{"group":"Evaluate","pages":[{"title":"List the 10 analyzer feature ids","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/evaluate/features","href":"/api-reference/evaluate/list-the-10-analyzer-feature-ids"},{"title":"Read the global default evaluate settings","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/evaluate/default","href":"/api-reference/evaluate/read-the-global-default-evaluate-settings"},{"title":"Update the global default evaluate settings","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/evaluate/default","href":"/api-reference/evaluate/update-the-global-default-evaluate-settings"},{"title":"Reset the global default to factory values","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/evaluate/default/reset","href":"/api-reference/evaluate/reset-the-global-default-to-factory-values"},{"title":"Read effective evaluate settings for one agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents/{uuid}/evaluate","href":"/api-reference/evaluate/read-effective-evaluate-settings-for-one-agent"},{"title":"Update an agent's evaluate settings","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/agents/{uuid}/evaluate","href":"/api-reference/evaluate/update-an-agents-evaluate-settings"},{"title":"Remove the agent's override (revert to global default)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}/evaluate","href":"/api-reference/evaluate/remove-the-agents-override-revert-to-global-default"},{"title":"Create an override for an agent (clones current default)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/evaluate/assign","href":"/api-reference/evaluate/create-an-override-for-an-agent-clones-current-default"},{"title":"Force-overwrite the agent's override with a fresh copy of the current default","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/evaluate/reassign","href":"/api-reference/evaluate/force-overwrite-the-agents-override-with-a-fresh-copy-of-the-current-default"},{"title":"Reset the agent's override to factory defaults","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/evaluate/reset","href":"/api-reference/evaluate/reset-the-agents-override-to-factory-defaults"}]},{"group":"Flow Catalog","pages":[{"title":"List tenant's agents available for Agents-app actions","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/agents","href":"/api-reference/flow-catalog/list-tenants-agents-available-for-agents-app-actions"},{"title":"List all Studio integrations (apps)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/apps","href":"/api-reference/flow-catalog/list-all-studio-integrations-apps"},{"title":"List apps eligible as a flow's trigger (step 1)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/apps/supports/triggers","href":"/api-reference/flow-catalog/list-apps-eligible-as-a-flows-trigger-step-1"},{"title":"List apps eligible as a flow's action (step 2+)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/apps/supports/actions","href":"/api-reference/flow-catalog/list-apps-eligible-as-a-flows-action-step-2+"},{"title":"Read a single app by its uid","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/apps/{uid}","href":"/api-reference/flow-catalog/read-a-single-app-by-its-uid"},{"title":"List the trigger events an app exposes","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/apps/{uid}/triggers","href":"/api-reference/flow-catalog/list-the-trigger-events-an-app-exposes"},{"title":"List the actions an app exposes","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/apps/{uid}/actions","href":"/api-reference/flow-catalog/list-the-actions-an-app-exposes"},{"title":"Flat list of every OAuth connection the tenant has, across all apps","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/connections","href":"/api-reference/flow-catalog/flat-list-of-every-oauth-connection-the-tenant-has-across-all-apps"},{"title":"List the tenant's connections (OAuth accounts) for one app","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/apps/{uid}/connections","href":"/api-reference/flow-catalog/list-the-tenants-connections-oauth-accounts-for-one-app"},{"title":"Fetch dynamic dropdown options for a step's field","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/flow/apps/{uid}/options","href":"/api-reference/flow-catalog/fetch-dynamic-dropdown-options-for-a-steps-field"}]},{"group":"Flows","pages":[{"title":"List flows (paginated, filterable)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flows","href":"/api-reference/flows/list-flows-paginated-filterable"},{"title":"Create an empty flow (draft)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/flow","href":"/api-reference/flows/create-an-empty-flow-draft"},{"title":"Read a flow with its full ordered step list","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/{uuid}","href":"/api-reference/flows/read-a-flow-with-its-full-ordered-step-list"},{"title":"Delete a flow","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/flow/{uuid}","href":"/api-reference/flows/delete-a-flow"},{"title":"Update flow name or description","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/flow/{uuid}","href":"/api-reference/flows/update-flow-name-or-description"},{"title":"Deploy a flow — flips it from draft to live","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/flow/{uuid}/deploy","href":"/api-reference/flows/deploy-a-flow-—-flips-it-from-draft-to-live"},{"title":"Undeploy — flip a deployed flow back to draft","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/flow/{uuid}/undeploy","href":"/api-reference/flows/undeploy-—-flip-a-deployed-flow-back-to-draft"}]},{"group":"Flow Executions","pages":[{"title":"List run history of a flow","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/{uuid}/executions","href":"/api-reference/flow-executions/list-run-history-of-a-flow"},{"title":"Read one execution with per-step request/response/error","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/{uuid}/executions/{exec_uuid}","href":"/api-reference/flow-executions/read-one-execution-with-per-step-requestresponseerror"}]},{"group":"Flow Steps","pages":[{"title":"Read one step","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/flow/{uuid}/steps/{step}","href":"/api-reference/flow-steps/read-one-step"},{"title":"Delete a step (and its branch children if any)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/flow/{uuid}/steps/{step}","href":"/api-reference/flow-steps/delete-a-step-and-its-branch-children-if-any"},{"title":"Update any subset of a step's fields","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/flow/{uuid}/steps/{step}","href":"/api-reference/flow-steps/update-any-subset-of-a-steps-fields"},{"title":"Add a step to a flow (trigger as step 1, actions as step 2+)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/flow/{uuid}/steps","href":"/api-reference/flow-steps/add-a-step-to-a-flow-trigger-as-step-1-actions-as-step-2+"},{"title":"Test a step — kind-aware behavior (trigger samples vs action exec)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/flow/{uuid}/steps/{step}/test","href":"/api-reference/flow-steps/test-a-step-—-kind-aware-behavior-trigger-samples-vs-action-exec"}]},{"group":"Language","pages":[{"title":"List supported languages","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/language","href":"/api-reference/language/list-supported-languages"}]},{"group":"Listings","pages":[{"title":"Get all listings (campaigns with pools)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/listings","href":"/api-reference/listings/get-all-listings-campaigns-with-pools"},{"title":"Create a new listing with rule and bulk contacts","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/listings","href":"/api-reference/listings/create-a-new-listing-with-rule-and-bulk-contacts"},{"title":"Get listing details with contacts","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/listings/{uuid}","href":"/api-reference/listings/get-listing-details-with-contacts"},{"title":"Delete a listing","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/listings/{uuid}","href":"/api-reference/listings/delete-a-listing"},{"title":"Start/resume a listing campaign","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/listings/{uuid}/run","href":"/api-reference/listings/startresume-a-listing-campaign"},{"title":"Stop/pause a running listing campaign","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/listings/{uuid}/stop","href":"/api-reference/listings/stoppause-a-running-listing-campaign"},{"title":"Add contacts to an existing listing","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/listings/{uuid}/contacts","href":"/api-reference/listings/add-contacts-to-an-existing-listing"},{"title":"Remove a contact from a listing and cancel their tasks","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/listings/{uuid}/contacts/{contact_uuid}","href":"/api-reference/listings/remove-a-contact-from-a-listing-and-cancel-their-tasks"}]},{"group":"Memorize","pages":[{"title":"List contact fields available for memorize settings","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/memorize/contact-fields","href":"/api-reference/memorize/list-contact-fields-available-for-memorize-settings"},{"title":"Catalog merged with the global default's toggle state","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/memorize/default/contact-fields","href":"/api-reference/memorize/catalog-merged-with-the-global-defaults-toggle-state"},{"title":"Catalog merged with the agent's toggles (or default if no override)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents/{uuid}/memorize/contact-fields","href":"/api-reference/memorize/catalog-merged-with-the-agents-toggles-or-default-if-no-override"},{"title":"Get the global default memorize settings","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/memorize/default","href":"/api-reference/memorize/get-the-global-default-memorize-settings"},{"title":"Update the global default memorize settings","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/memorize/default","href":"/api-reference/memorize/update-the-global-default-memorize-settings"},{"title":"Bulk-toggle contact field flags on the default settings","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/memorize/default/bulk","href":"/api-reference/memorize/bulk-toggle-contact-field-flags-on-the-default-settings"},{"title":"Bulk-toggle contact field flags for an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/agents/{uuid}/memorize/bulk","href":"/api-reference/memorize/bulk-toggle-contact-field-flags-for-an-agent"},{"title":"Reset the global default memorize settings to factory defaults","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/memorize/default/reset","href":"/api-reference/memorize/reset-the-global-default-memorize-settings-to-factory-defaults"},{"title":"Get an agent's memorize settings (falls back to default)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/agents/{uuid}/memorize","href":"/api-reference/memorize/get-an-agents-memorize-settings-falls-back-to-default"},{"title":"Update an agent's memorize settings (creates them from the global default if the agent has none yet)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/agents/{uuid}/memorize","href":"/api-reference/memorize/update-an-agents-memorize-settings-creates-them-from-the-global-default-if-the-agent-has-none-yet"},{"title":"Remove an agent's specific memorize settings (reverts to default)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/agents/{uuid}/memorize","href":"/api-reference/memorize/remove-an-agents-specific-memorize-settings-reverts-to-default"},{"title":"Create custom memorize settings for an agent, copied from the global default","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/memorize/assign","href":"/api-reference/memorize/create-custom-memorize-settings-for-an-agent-copied-from-the-global-default"},{"title":"Replace the agent's memorize settings with a fresh copy of the global default","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/memorize/reassign","href":"/api-reference/memorize/replace-the-agents-memorize-settings-with-a-fresh-copy-of-the-global-default"},{"title":"Reset an agent's memorize settings to factory defaults","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/memorize/reset","href":"/api-reference/memorize/reset-an-agents-memorize-settings-to-factory-defaults"}]},{"group":"PBX Extension Connectors","pages":[{"title":"Get the SIP connector server assigned to your account","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/pbx_extension_connectors/sip_server","href":"/api-reference/pbx-extension-connectors/get-the-sip-connector-server-assigned-to-your-account"},{"title":"Allocate a SIP connector server","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/pbx_extension_connectors/sip_server","href":"/api-reference/pbx-extension-connectors/allocate-a-sip-connector-server"},{"title":"Release the allocated SIP connector server","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/pbx_extension_connectors/sip_server","href":"/api-reference/pbx-extension-connectors/release-the-allocated-sip-connector-server"},{"title":"List PBX extension connectors","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/pbx_extension_connectors","href":"/api-reference/pbx-extension-connectors/list-pbx-extension-connectors"},{"title":"Create a PBX extension connector","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/pbx_extension_connectors","href":"/api-reference/pbx-extension-connectors/create-a-pbx-extension-connector"},{"title":"Get a single PBX extension connector","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/pbx_extension_connectors/{uuid}","href":"/api-reference/pbx-extension-connectors/get-a-single-pbx-extension-connector"},{"title":"Delete a PBX extension connector","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/pbx_extension_connectors/{uuid}","href":"/api-reference/pbx-extension-connectors/delete-a-pbx-extension-connector"}]},{"group":"Phone Numbers","pages":[{"title":"List your phone numbers","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers","href":"/api-reference/phone-numbers/list-your-phone-numbers"},{"title":"Buy a phone number","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/phone-numbers","href":"/api-reference/phone-numbers/buy-a-phone-number"},{"title":"Phone number summary","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/stats","href":"/api-reference/phone-numbers/phone-number-summary"},{"title":"Get one phone number","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/{uuid}","href":"/api-reference/phone-numbers/get-one-phone-number"},{"title":"Release a phone number","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/phone-numbers/{uuid}","href":"/api-reference/phone-numbers/release-a-phone-number"},{"title":"Update channel settings","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/phone-numbers/{uuid}","href":"/api-reference/phone-numbers/update-channel-settings"},{"title":"Channels for one phone number","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/{uuid}/channels","href":"/api-reference/phone-numbers/channels-for-one-phone-number"},{"title":"Channels for a phone number (look up by number)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/channels","href":"/api-reference/phone-numbers/channels-for-a-phone-number-look-up-by-number"},{"title":"Release a phone number","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/phone-numbers/{uuid}/release","href":"/api-reference/phone-numbers/release-a-phone-number-1"},{"title":"Assign a number to an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/phone-numbers/{uuid}/bindings/{channel}","href":"/api-reference/phone-numbers/assign-a-number-to-an-agent"},{"title":"Remove a number from an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/phone-numbers/{uuid}/bindings/{channel}","href":"/api-reference/phone-numbers/remove-a-number-from-an-agent"},{"title":"Upload a compliance document","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/phone-numbers/documents","href":"/api-reference/phone-numbers/upload-a-compliance-document"},{"title":"Search numbers available to buy","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/search","href":"/api-reference/phone-numbers/search-numbers-available-to-buy"},{"title":"Compliance requirements for a country","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/search/requirements","href":"/api-reference/phone-numbers/compliance-requirements-for-a-country"},{"title":"Outbound call rates","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/rates","href":"/api-reference/phone-numbers/outbound-call-rates"},{"title":"Which agents use which numbers","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/used-channels-and-accounts","href":"/api-reference/phone-numbers/which-agents-use-which-numbers"},{"title":"Phone numbers grouped by agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/by-agent","href":"/api-reference/phone-numbers/phone-numbers-grouped-by-agent"},{"title":"Phone numbers for one agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/by-agent/{uuid}","href":"/api-reference/phone-numbers/phone-numbers-for-one-agent"},{"title":"List external trunks (BYO numbers)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/phone-numbers/trunks","href":"/api-reference/phone-numbers/list-external-trunks-byo-numbers"},{"title":"Register an external SIP trunk / BYO number","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/phone-numbers/trunks","href":"/api-reference/phone-numbers/register-an-external-sip-trunk-byo-number"},{"title":"Delete an external trunk","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/phone-numbers/trunks","href":"/api-reference/phone-numbers/delete-an-external-trunk"},{"title":"Update an external trunk","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json patch /api/v1/phone-numbers/trunks","href":"/api-reference/phone-numbers/update-an-external-trunk"},{"title":"Assign or reassign an external trunk to an agent","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/phone-numbers/trunks/assign","href":"/api-reference/phone-numbers/assign-or-reassign-an-external-trunk-to-an-agent"}]},{"group":"Contact Pipeline","pages":[{"title":"List pipeline stages","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/pipeline","href":"/api-reference/contact-pipeline/list-pipeline-stages"},{"title":"Create a new pipeline stage","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/pipeline","href":"/api-reference/contact-pipeline/create-a-new-pipeline-stage"},{"title":"Get a pipeline stage by uuid","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/pipeline/{uuid}","href":"/api-reference/contact-pipeline/get-a-pipeline-stage-by-uuid"},{"title":"Update a pipeline stage","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/contacts/pipeline/{uuid}","href":"/api-reference/contact-pipeline/update-a-pipeline-stage"},{"title":"Delete a pipeline stage","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/contacts/pipeline/{uuid}","href":"/api-reference/contact-pipeline/delete-a-pipeline-stage"}]},{"group":"Pools","pages":[{"title":"List contact pools","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/pools","href":"/api-reference/pools/list-contact-pools"},{"title":"Create a contact pool","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/pools","href":"/api-reference/pools/create-a-contact-pool"},{"title":"Get pool details, including attached campaigns and pool item status counts","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/pools/{uuid}","href":"/api-reference/pools/get-pool-details-including-attached-campaigns-and-pool-item-status-counts"},{"title":"Update a pool","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/pools/{uuid}","href":"/api-reference/pools/update-a-pool"},{"title":"Delete a pool","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/pools/{uuid}","href":"/api-reference/pools/delete-a-pool"},{"title":"Duplicate a pool, optionally copying its contacts","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/pools/{uuid}/duplicate","href":"/api-reference/pools/duplicate-a-pool-optionally-copying-its-contacts"},{"title":"List contacts in a pool","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/pools/{uuid}/contacts","href":"/api-reference/pools/list-contacts-in-a-pool"},{"title":"Add existing contacts to a pool","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/pools/{uuid}/contacts","href":"/api-reference/pools/add-existing-contacts-to-a-pool"},{"title":"Remove a contact from a pool","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/pools/{uuid}/contacts/{contact_uuid}","href":"/api-reference/pools/remove-a-contact-from-a-pool"}]},{"group":"Rules","pages":[{"title":"List campaign contact rules","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/rules","href":"/api-reference/rules/list-campaign-contact-rules"},{"title":"Create a new campaign contact rule","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/rules","href":"/api-reference/rules/create-a-new-campaign-contact-rule"},{"title":"Get a single rule by UUID","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/rules/{uuid}","href":"/api-reference/rules/get-a-single-rule-by-uuid"},{"title":"Update an existing rule","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/rules/{uuid}","href":"/api-reference/rules/update-an-existing-rule"},{"title":"Delete a rule","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/rules/{uuid}","href":"/api-reference/rules/delete-a-rule"}]},{"group":"Schedules","pages":[{"title":"Get all schedules","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/schedules","href":"/api-reference/schedules/get-all-schedules"},{"title":"Create a new schedule","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/schedules","href":"/api-reference/schedules/create-a-new-schedule"},{"title":"Get a specific schedule","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/schedules/{uuid}","href":"/api-reference/schedules/get-a-specific-schedule"},{"title":"Update a schedule","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/schedules/{uuid}","href":"/api-reference/schedules/update-a-schedule"},{"title":"Delete a schedule","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/schedules/{uuid}","href":"/api-reference/schedules/delete-a-schedule"}]},{"group":"Evaluations","pages":[{"title":"Get paginated list of session evaluations","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/evaluations","href":"/api-reference/evaluations/get-paginated-list-of-session-evaluations"},{"title":"Get a single evaluation","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/evaluations/{uuid}","href":"/api-reference/evaluations/get-a-single-evaluation"}]},{"group":"SIP Trunk","pages":[{"title":"List all SIP trunk connections","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/channels/sip-trunk/connections","href":"/api-reference/sip-trunk/list-all-sip-trunk-connections"},{"title":"Add a new SIP trunk connection","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/channels/sip-trunk/connections","href":"/api-reference/sip-trunk/add-a-new-sip-trunk-connection"},{"title":"Delete a SIP trunk connection","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/channels/sip-trunk/connections/{uuid}","href":"/api-reference/sip-trunk/delete-a-sip-trunk-connection"},{"title":"Assign a SIP trunk connection to an agent for calls","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/agents/{uuid}/channels/call/sip-trunk","href":"/api-reference/sip-trunk/assign-a-sip-trunk-connection-to-an-agent-for-calls"}]},{"group":"Contact Tags","pages":[{"title":"List contact tags","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/tags","href":"/api-reference/contact-tags/list-contact-tags"},{"title":"Create a new contact tag","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/contacts/tags","href":"/api-reference/contact-tags/create-a-new-contact-tag"},{"title":"Get a tag by uuid","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/contacts/tags/{uuid}","href":"/api-reference/contact-tags/get-a-tag-by-uuid"},{"title":"Update a tag","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/contacts/tags/{uuid}","href":"/api-reference/contact-tags/update-a-tag"},{"title":"Delete a tag","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/contacts/tags/{uuid}","href":"/api-reference/contact-tags/delete-a-tag"}]},{"group":"Tasks","pages":[{"title":"Get paginated list of tasks","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/tasks","href":"/api-reference/tasks/get-paginated-list-of-tasks"},{"title":"Create a new task (Call or WhatsApp Template)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/tasks","href":"/api-reference/tasks/create-a-new-task-call-or-whatsapp-template"},{"title":"Get a specific task","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/tasks/{uuid}","href":"/api-reference/tasks/get-a-specific-task"},{"title":"Update a task","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json put /api/v1/tasks/{uuid}","href":"/api-reference/tasks/update-a-task"},{"title":"Delete a task","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/tasks/{uuid}","href":"/api-reference/tasks/delete-a-task"},{"title":"Queue a task for execution","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/tasks/{uuid}/queue","href":"/api-reference/tasks/queue-a-task-for-execution"},{"title":"Cancel a task","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/tasks/{uuid}/cancel","href":"/api-reference/tasks/cancel-a-task"},{"title":"Retry a failed task","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/tasks/{uuid}/retry","href":"/api-reference/tasks/retry-a-failed-task"}]},{"group":"Timezone","pages":[{"title":"List supported timezones","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/timezone","href":"/api-reference/timezone/list-supported-timezones"}]},{"group":"Transcriptions","pages":[{"title":"Create a new transcription request","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/transcriptions","href":"/api-reference/transcriptions/create-a-new-transcription-request"},{"title":"Get transcription by UUID","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/transcriptions/{uuid}","href":"/api-reference/transcriptions/get-transcription-by-uuid"},{"title":"Get full transcript with conversation messages and evaluations","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/transcriptions/{uuid}/transcript","href":"/api-reference/transcriptions/get-full-transcript-with-conversation-messages-and-evaluations"}]},{"group":"Voice Library","pages":[{"title":"List voices in the library","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/voice_library","href":"/api-reference/voice-library/list-voices-in-the-library"},{"title":"List supported speeds for a voice","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/voice_speed/{voice_uuid}","href":"/api-reference/voice-library/list-supported-speeds-for-a-voice"}]},{"group":"WhatsApp Calling","pages":[{"title":"Make a WhatsApp call","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/whatsapp/call","href":"/api-reference/whatsapp-calling/make-a-whatsapp-call"},{"title":"Send call permission request","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/whatsapp/call/send_approval","href":"/api-reference/whatsapp-calling/send-call-permission-request"}]},{"group":"WhatsApp Templates","pages":[{"title":"List WhatsApp Business Accounts linked to this tenant","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/whatsapp/wabas","href":"/api-reference/whatsapp-templates/list-whatsapp-business-accounts-linked-to-this-tenant"},{"title":"List WhatsApp message templates","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/whatsapp/templates","href":"/api-reference/whatsapp-templates/list-whatsapp-message-templates"},{"title":"Create a new WhatsApp template","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/whatsapp/templates","href":"/api-reference/whatsapp-templates/create-a-new-whatsapp-template"},{"title":"Get a single template by UUID","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json get /api/v1/whatsapp/templates/{uuid}","href":"/api-reference/whatsapp-templates/get-a-single-template-by-uuid"},{"title":"Delete a template (Meta + local)","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json delete /api/v1/whatsapp/templates/{uuid}","href":"/api-reference/whatsapp-templates/delete-a-template-meta-+-local"},{"title":"Upload a media file","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/whatsapp/templates/upload-media","href":"/api-reference/whatsapp-templates/upload-a-media-file"},{"title":"Bulk-sync templates for a WABA from Meta into local DB","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/whatsapp/templates/sync","href":"/api-reference/whatsapp-templates/bulk-sync-templates-for-a-waba-from-meta-into-local-db"},{"title":"Refresh a single template's status from Meta","deprecated":null,"version":null,"openapi":"https://app.mindhunters.ai/docs/api-docs.json post /api/v1/whatsapp/templates/{uuid}/sync","href":"/api-reference/whatsapp-templates/refresh-a-single-templates-status-from-meta"}]}]}]}]},"title":"Update an agent - Mindhunters API Documentation","buildId":"dpl_G8u2B2Ji9qJYF9umedjv293TxycS","deploymentId":"dpl_G8u2B2Ji9qJYF9umedjv293TxycS","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-S3ptrr-V.js","utils-CUxEJy9u.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DavhVrxy.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B1sOUY6E.js","snippetPresets-C-RLYOrF.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Duz18EdI.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DPsbCc6D.js","shallow-B1dlhlOw.js","getApiPlaygroundDisplay-DvOu-BhE.js","CodeSnippet-By8wd64X.js","CodeSnippets-BxVv6TjI.js","Page-BGh0lBck.js","getPastedJson-DOAt9xJn.js","icon-BYg-qtQ2.js","MethodPill-Dtah8ZSz.js","DuplicateIcon-guWfDmh1.js","createIcon-pTGhj_hk.js","DynamicMarkdown-DpsHMHVL.js","SectionHeading-BbutQCjq.js","axios-vUo_bRtp.js","Markdown-DZ-stgDu.js","clsx-Dfme4k4V.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CPNs0ebX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-3JVAA-i3.js"]}