curl --request PATCH \
--url https://api.instaview.sk/agents/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Updated Senior Developer Interview",
"type": "ONLINE",
"focus": "SCREENING",
"questions": [
"What is your experience with React?"
],
"instructions": "Focus on system design and communication",
"language": "EN",
"duration": 45,
"cefrLevel": "B2",
"companyPhoneNumberId": "123e4567-e89b-12d3-a456-426614174000",
"metadata": {
"department": "Engineering"
},
"backgroundSound": "OFFICE",
"flow": {
"firstMessage": {
"type": "first_message",
"text": "Hi {{contact.firstName}}, do you have two minutes?",
"label": "Qualify budget"
},
"sections": [
{
"type": "sequential",
"prompt": "Introduce yourself and explain why you are calling.",
"label": "Qualify budget"
}
],
"lastMessage": {
"type": "last_message",
"text": "Thanks for your time — have a great day!",
"label": "Qualify budget"
}
},
"guardrails": {
"rules": [
"Never quote a price",
"Never promise a delivery date"
]
},
"contextConfig": {
"role": "an account executive for Acme",
"communicationStyle": "concise and direct",
"callToAction": "book a 30-minute demo",
"useContactContext": true
},
"analyticsConfig": {
"extractionTargets": [
{
"label": "Budget confirmed",
"type": "bool",
"key": "budget_confirmed",
"enumValues": [
"hot",
"warm",
"cold"
],
"ideal": "A confirmed budget of at least 10k",
"importance": "PREFERRED",
"weight": 40
}
],
"scoringCriteria": [
{
"label": "Handled objections",
"description": "Acknowledged the objection and answered it with a concrete example",
"key": "handled_objections",
"importance": "PREFERRED",
"weight": 40
}
],
"outcomes": [
{
"label": "Meeting booked",
"description": "The contact agreed to a specific date and time",
"key": "meeting_booked"
}
],
"outputTags": [
{
"label": "Needs follow-up",
"key": "needs_followup",
"description": "The contact asked to be called back"
}
],
"capture": {
"recording": true,
"transcript": true,
"summary": true,
"qa": true,
"evaluation": true,
"sentiment": true
}
},
"callConfig": {},
"overrides": {
"companyName": "Acme Manufacturing",
"companyDescription": "Acme makes industrial fasteners and employs 400 people across Slovakia."
}
}
'
import requests
url = "https://api.instaview.sk/agents/{id}"
payload = {
"name": "Updated Senior Developer Interview",
"type": "ONLINE",
"focus": "SCREENING",
"questions": ["What is your experience with React?"],
"instructions": "Focus on system design and communication",
"language": "EN",
"duration": 45,
"cefrLevel": "B2",
"companyPhoneNumberId": "123e4567-e89b-12d3-a456-426614174000",
"metadata": { "department": "Engineering" },
"backgroundSound": "OFFICE",
"flow": {
"firstMessage": {
"type": "first_message",
"text": "Hi {{contact.firstName}}, do you have two minutes?",
"label": "Qualify budget"
},
"sections": [
{
"type": "sequential",
"prompt": "Introduce yourself and explain why you are calling.",
"label": "Qualify budget"
}
],
"lastMessage": {
"type": "last_message",
"text": "Thanks for your time — have a great day!",
"label": "Qualify budget"
}
},
"guardrails": { "rules": ["Never quote a price", "Never promise a delivery date"] },
"contextConfig": {
"role": "an account executive for Acme",
"communicationStyle": "concise and direct",
"callToAction": "book a 30-minute demo",
"useContactContext": True
},
"analyticsConfig": {
"extractionTargets": [
{
"label": "Budget confirmed",
"type": "bool",
"key": "budget_confirmed",
"enumValues": ["hot", "warm", "cold"],
"ideal": "A confirmed budget of at least 10k",
"importance": "PREFERRED",
"weight": 40
}
],
"scoringCriteria": [
{
"label": "Handled objections",
"description": "Acknowledged the objection and answered it with a concrete example",
"key": "handled_objections",
"importance": "PREFERRED",
"weight": 40
}
],
"outcomes": [
{
"label": "Meeting booked",
"description": "The contact agreed to a specific date and time",
"key": "meeting_booked"
}
],
"outputTags": [
{
"label": "Needs follow-up",
"key": "needs_followup",
"description": "The contact asked to be called back"
}
],
"capture": {
"recording": True,
"transcript": True,
"summary": True,
"qa": True,
"evaluation": True,
"sentiment": True
}
},
"callConfig": {},
"overrides": {
"companyName": "Acme Manufacturing",
"companyDescription": "Acme makes industrial fasteners and employs 400 people across Slovakia."
}
}
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: 'Updated Senior Developer Interview',
type: 'ONLINE',
focus: 'SCREENING',
questions: ['What is your experience with React?'],
instructions: 'Focus on system design and communication',
language: 'EN',
duration: 45,
cefrLevel: 'B2',
companyPhoneNumberId: '123e4567-e89b-12d3-a456-426614174000',
metadata: {department: 'Engineering'},
backgroundSound: 'OFFICE',
flow: {
firstMessage: {
type: 'first_message',
text: 'Hi {{contact.firstName}}, do you have two minutes?',
label: 'Qualify budget'
},
sections: [
{
type: 'sequential',
prompt: 'Introduce yourself and explain why you are calling.',
label: 'Qualify budget'
}
],
lastMessage: {
type: 'last_message',
text: 'Thanks for your time — have a great day!',
label: 'Qualify budget'
}
},
guardrails: {rules: ['Never quote a price', 'Never promise a delivery date']},
contextConfig: {
role: 'an account executive for Acme',
communicationStyle: 'concise and direct',
callToAction: 'book a 30-minute demo',
useContactContext: true
},
analyticsConfig: {
extractionTargets: [
{
label: 'Budget confirmed',
type: 'bool',
key: 'budget_confirmed',
enumValues: ['hot', 'warm', 'cold'],
ideal: 'A confirmed budget of at least 10k',
importance: 'PREFERRED',
weight: 40
}
],
scoringCriteria: [
{
label: 'Handled objections',
description: 'Acknowledged the objection and answered it with a concrete example',
key: 'handled_objections',
importance: 'PREFERRED',
weight: 40
}
],
outcomes: [
{
label: 'Meeting booked',
description: 'The contact agreed to a specific date and time',
key: 'meeting_booked'
}
],
outputTags: [
{
label: 'Needs follow-up',
key: 'needs_followup',
description: 'The contact asked to be called back'
}
],
capture: {
recording: true,
transcript: true,
summary: true,
qa: true,
evaluation: true,
sentiment: true
}
},
callConfig: {},
overrides: {
companyName: 'Acme Manufacturing',
companyDescription: 'Acme makes industrial fasteners and employs 400 people across Slovakia.'
}
})
};
fetch('https://api.instaview.sk/agents/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.instaview.sk/agents/{id}",
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' => 'Updated Senior Developer Interview',
'type' => 'ONLINE',
'focus' => 'SCREENING',
'questions' => [
'What is your experience with React?'
],
'instructions' => 'Focus on system design and communication',
'language' => 'EN',
'duration' => 45,
'cefrLevel' => 'B2',
'companyPhoneNumberId' => '123e4567-e89b-12d3-a456-426614174000',
'metadata' => [
'department' => 'Engineering'
],
'backgroundSound' => 'OFFICE',
'flow' => [
'firstMessage' => [
'type' => 'first_message',
'text' => 'Hi {{contact.firstName}}, do you have two minutes?',
'label' => 'Qualify budget'
],
'sections' => [
[
'type' => 'sequential',
'prompt' => 'Introduce yourself and explain why you are calling.',
'label' => 'Qualify budget'
]
],
'lastMessage' => [
'type' => 'last_message',
'text' => 'Thanks for your time — have a great day!',
'label' => 'Qualify budget'
]
],
'guardrails' => [
'rules' => [
'Never quote a price',
'Never promise a delivery date'
]
],
'contextConfig' => [
'role' => 'an account executive for Acme',
'communicationStyle' => 'concise and direct',
'callToAction' => 'book a 30-minute demo',
'useContactContext' => true
],
'analyticsConfig' => [
'extractionTargets' => [
[
'label' => 'Budget confirmed',
'type' => 'bool',
'key' => 'budget_confirmed',
'enumValues' => [
'hot',
'warm',
'cold'
],
'ideal' => 'A confirmed budget of at least 10k',
'importance' => 'PREFERRED',
'weight' => 40
]
],
'scoringCriteria' => [
[
'label' => 'Handled objections',
'description' => 'Acknowledged the objection and answered it with a concrete example',
'key' => 'handled_objections',
'importance' => 'PREFERRED',
'weight' => 40
]
],
'outcomes' => [
[
'label' => 'Meeting booked',
'description' => 'The contact agreed to a specific date and time',
'key' => 'meeting_booked'
]
],
'outputTags' => [
[
'label' => 'Needs follow-up',
'key' => 'needs_followup',
'description' => 'The contact asked to be called back'
]
],
'capture' => [
'recording' => true,
'transcript' => true,
'summary' => true,
'qa' => true,
'evaluation' => true,
'sentiment' => true
]
],
'callConfig' => [
],
'overrides' => [
'companyName' => 'Acme Manufacturing',
'companyDescription' => 'Acme makes industrial fasteners and employs 400 people across Slovakia.'
]
]),
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://api.instaview.sk/agents/{id}"
payload := strings.NewReader("{\n \"name\": \"Updated Senior Developer Interview\",\n \"type\": \"ONLINE\",\n \"focus\": \"SCREENING\",\n \"questions\": [\n \"What is your experience with React?\"\n ],\n \"instructions\": \"Focus on system design and communication\",\n \"language\": \"EN\",\n \"duration\": 45,\n \"cefrLevel\": \"B2\",\n \"companyPhoneNumberId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"metadata\": {\n \"department\": \"Engineering\"\n },\n \"backgroundSound\": \"OFFICE\",\n \"flow\": {\n \"firstMessage\": {\n \"type\": \"first_message\",\n \"text\": \"Hi {{contact.firstName}}, do you have two minutes?\",\n \"label\": \"Qualify budget\"\n },\n \"sections\": [\n {\n \"type\": \"sequential\",\n \"prompt\": \"Introduce yourself and explain why you are calling.\",\n \"label\": \"Qualify budget\"\n }\n ],\n \"lastMessage\": {\n \"type\": \"last_message\",\n \"text\": \"Thanks for your time — have a great day!\",\n \"label\": \"Qualify budget\"\n }\n },\n \"guardrails\": {\n \"rules\": [\n \"Never quote a price\",\n \"Never promise a delivery date\"\n ]\n },\n \"contextConfig\": {\n \"role\": \"an account executive for Acme\",\n \"communicationStyle\": \"concise and direct\",\n \"callToAction\": \"book a 30-minute demo\",\n \"useContactContext\": true\n },\n \"analyticsConfig\": {\n \"extractionTargets\": [\n {\n \"label\": \"Budget confirmed\",\n \"type\": \"bool\",\n \"key\": \"budget_confirmed\",\n \"enumValues\": [\n \"hot\",\n \"warm\",\n \"cold\"\n ],\n \"ideal\": \"A confirmed budget of at least 10k\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"scoringCriteria\": [\n {\n \"label\": \"Handled objections\",\n \"description\": \"Acknowledged the objection and answered it with a concrete example\",\n \"key\": \"handled_objections\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"outcomes\": [\n {\n \"label\": \"Meeting booked\",\n \"description\": \"The contact agreed to a specific date and time\",\n \"key\": \"meeting_booked\"\n }\n ],\n \"outputTags\": [\n {\n \"label\": \"Needs follow-up\",\n \"key\": \"needs_followup\",\n \"description\": \"The contact asked to be called back\"\n }\n ],\n \"capture\": {\n \"recording\": true,\n \"transcript\": true,\n \"summary\": true,\n \"qa\": true,\n \"evaluation\": true,\n \"sentiment\": true\n }\n },\n \"callConfig\": {},\n \"overrides\": {\n \"companyName\": \"Acme Manufacturing\",\n \"companyDescription\": \"Acme makes industrial fasteners and employs 400 people across Slovakia.\"\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://api.instaview.sk/agents/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Updated Senior Developer Interview\",\n \"type\": \"ONLINE\",\n \"focus\": \"SCREENING\",\n \"questions\": [\n \"What is your experience with React?\"\n ],\n \"instructions\": \"Focus on system design and communication\",\n \"language\": \"EN\",\n \"duration\": 45,\n \"cefrLevel\": \"B2\",\n \"companyPhoneNumberId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"metadata\": {\n \"department\": \"Engineering\"\n },\n \"backgroundSound\": \"OFFICE\",\n \"flow\": {\n \"firstMessage\": {\n \"type\": \"first_message\",\n \"text\": \"Hi {{contact.firstName}}, do you have two minutes?\",\n \"label\": \"Qualify budget\"\n },\n \"sections\": [\n {\n \"type\": \"sequential\",\n \"prompt\": \"Introduce yourself and explain why you are calling.\",\n \"label\": \"Qualify budget\"\n }\n ],\n \"lastMessage\": {\n \"type\": \"last_message\",\n \"text\": \"Thanks for your time — have a great day!\",\n \"label\": \"Qualify budget\"\n }\n },\n \"guardrails\": {\n \"rules\": [\n \"Never quote a price\",\n \"Never promise a delivery date\"\n ]\n },\n \"contextConfig\": {\n \"role\": \"an account executive for Acme\",\n \"communicationStyle\": \"concise and direct\",\n \"callToAction\": \"book a 30-minute demo\",\n \"useContactContext\": true\n },\n \"analyticsConfig\": {\n \"extractionTargets\": [\n {\n \"label\": \"Budget confirmed\",\n \"type\": \"bool\",\n \"key\": \"budget_confirmed\",\n \"enumValues\": [\n \"hot\",\n \"warm\",\n \"cold\"\n ],\n \"ideal\": \"A confirmed budget of at least 10k\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"scoringCriteria\": [\n {\n \"label\": \"Handled objections\",\n \"description\": \"Acknowledged the objection and answered it with a concrete example\",\n \"key\": \"handled_objections\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"outcomes\": [\n {\n \"label\": \"Meeting booked\",\n \"description\": \"The contact agreed to a specific date and time\",\n \"key\": \"meeting_booked\"\n }\n ],\n \"outputTags\": [\n {\n \"label\": \"Needs follow-up\",\n \"key\": \"needs_followup\",\n \"description\": \"The contact asked to be called back\"\n }\n ],\n \"capture\": {\n \"recording\": true,\n \"transcript\": true,\n \"summary\": true,\n \"qa\": true,\n \"evaluation\": true,\n \"sentiment\": true\n }\n },\n \"callConfig\": {},\n \"overrides\": {\n \"companyName\": \"Acme Manufacturing\",\n \"companyDescription\": \"Acme makes industrial fasteners and employs 400 people across Slovakia.\"\n }\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.instaview.sk/agents/{id}")
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\": \"Updated Senior Developer Interview\",\n \"type\": \"ONLINE\",\n \"focus\": \"SCREENING\",\n \"questions\": [\n \"What is your experience with React?\"\n ],\n \"instructions\": \"Focus on system design and communication\",\n \"language\": \"EN\",\n \"duration\": 45,\n \"cefrLevel\": \"B2\",\n \"companyPhoneNumberId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"metadata\": {\n \"department\": \"Engineering\"\n },\n \"backgroundSound\": \"OFFICE\",\n \"flow\": {\n \"firstMessage\": {\n \"type\": \"first_message\",\n \"text\": \"Hi {{contact.firstName}}, do you have two minutes?\",\n \"label\": \"Qualify budget\"\n },\n \"sections\": [\n {\n \"type\": \"sequential\",\n \"prompt\": \"Introduce yourself and explain why you are calling.\",\n \"label\": \"Qualify budget\"\n }\n ],\n \"lastMessage\": {\n \"type\": \"last_message\",\n \"text\": \"Thanks for your time — have a great day!\",\n \"label\": \"Qualify budget\"\n }\n },\n \"guardrails\": {\n \"rules\": [\n \"Never quote a price\",\n \"Never promise a delivery date\"\n ]\n },\n \"contextConfig\": {\n \"role\": \"an account executive for Acme\",\n \"communicationStyle\": \"concise and direct\",\n \"callToAction\": \"book a 30-minute demo\",\n \"useContactContext\": true\n },\n \"analyticsConfig\": {\n \"extractionTargets\": [\n {\n \"label\": \"Budget confirmed\",\n \"type\": \"bool\",\n \"key\": \"budget_confirmed\",\n \"enumValues\": [\n \"hot\",\n \"warm\",\n \"cold\"\n ],\n \"ideal\": \"A confirmed budget of at least 10k\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"scoringCriteria\": [\n {\n \"label\": \"Handled objections\",\n \"description\": \"Acknowledged the objection and answered it with a concrete example\",\n \"key\": \"handled_objections\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"outcomes\": [\n {\n \"label\": \"Meeting booked\",\n \"description\": \"The contact agreed to a specific date and time\",\n \"key\": \"meeting_booked\"\n }\n ],\n \"outputTags\": [\n {\n \"label\": \"Needs follow-up\",\n \"key\": \"needs_followup\",\n \"description\": \"The contact asked to be called back\"\n }\n ],\n \"capture\": {\n \"recording\": true,\n \"transcript\": true,\n \"summary\": true,\n \"qa\": true,\n \"evaluation\": true,\n \"sentiment\": true\n }\n },\n \"callConfig\": {},\n \"overrides\": {\n \"companyName\": \"Acme Manufacturing\",\n \"companyDescription\": \"Acme makes industrial fasteners and employs 400 people across Slovakia.\"\n }\n}"
response = http.request(request)
puts response.read_body
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "Frontend Developer Interview",
"type": "ONLINE",
"focus": "SCREENING",
"language": "EN",
"duration": 30,
"createdAt": "2025-11-20T10:30:00Z",
"updatedAt": "2025-11-20T10:30:00Z",
"questions": [
"What is your experience with React?"
],
"instructions": "Focus on technical skills and previous project experience",
"voiceId": "ALEX",
"companyId": "123e4567-e89b-12d3-a456-426614174000",
"metadata": {
"department": "Sales"
},
"cefrLevel": "B1",
"backgroundSound": "OFFICE",
"flow": {
"firstMessage": {
"type": "first_message",
"text": "Hi {{contact.firstName}}, do you have two minutes?",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "Qualify budget"
},
"sections": [
{
"type": "sequential",
"prompt": "Introduce yourself and explain why you are calling.",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "Qualify budget"
}
],
"lastMessage": {
"type": "last_message",
"text": "Thanks for your time — have a great day!",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "Qualify budget"
},
"schemaVersion": "1.0.0"
},
"guardrails": {
"rules": [
"Never quote a price",
"Never promise a delivery date"
]
},
"contextConfig": {
"role": "an account executive for Acme",
"communicationStyle": "concise and direct",
"callToAction": "book a 30-minute demo",
"useContactContext": true
},
"analyticsConfig": {
"extractionTargets": [
{
"label": "Budget confirmed",
"type": "bool",
"key": "budget_confirmed",
"enumValues": [
"hot",
"warm",
"cold"
],
"ideal": "A confirmed budget of at least 10k",
"importance": "PREFERRED",
"weight": 40
}
],
"scoringCriteria": [
{
"label": "Handled objections",
"description": "Acknowledged the objection and answered it with a concrete example",
"key": "handled_objections",
"importance": "PREFERRED",
"weight": 40
}
],
"outcomes": [
{
"label": "Meeting booked",
"description": "The contact agreed to a specific date and time",
"key": "meeting_booked"
}
],
"outputTags": [
{
"label": "Needs follow-up",
"key": "needs_followup",
"description": "The contact asked to be called back"
}
],
"capture": {
"recording": true,
"transcript": true,
"summary": true,
"qa": true,
"evaluation": true,
"sentiment": true
}
},
"callConfig": {
"retryPolicy": {
"maxAttempts": 3
},
"callWindow": {
"mode": "custom",
"days": [
"mon",
"tue",
"wed",
"thu",
"fri"
],
"start": "09:00",
"end": "18:00",
"timezoneAnchor": {
"mode": "contact",
"timezone": "Europe/Bratislava",
"fallbackTimezone": "Europe/Bratislava"
}
}
},
"overrides": {
"companyName": "Acme Manufacturing",
"companyDescription": "Acme makes industrial fasteners and employs 400 people across Slovakia."
}
}
Agents
Update Agent
Updates an existing agent scoped to the API key’s company. Sending a flow makes the agent custom; clearing the flow of a custom agent, or changing its focus, is rejected.
PATCH
/
agents
/
{id}
Update agent
curl --request PATCH \
--url https://api.instaview.sk/agents/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Updated Senior Developer Interview",
"type": "ONLINE",
"focus": "SCREENING",
"questions": [
"What is your experience with React?"
],
"instructions": "Focus on system design and communication",
"language": "EN",
"duration": 45,
"cefrLevel": "B2",
"companyPhoneNumberId": "123e4567-e89b-12d3-a456-426614174000",
"metadata": {
"department": "Engineering"
},
"backgroundSound": "OFFICE",
"flow": {
"firstMessage": {
"type": "first_message",
"text": "Hi {{contact.firstName}}, do you have two minutes?",
"label": "Qualify budget"
},
"sections": [
{
"type": "sequential",
"prompt": "Introduce yourself and explain why you are calling.",
"label": "Qualify budget"
}
],
"lastMessage": {
"type": "last_message",
"text": "Thanks for your time — have a great day!",
"label": "Qualify budget"
}
},
"guardrails": {
"rules": [
"Never quote a price",
"Never promise a delivery date"
]
},
"contextConfig": {
"role": "an account executive for Acme",
"communicationStyle": "concise and direct",
"callToAction": "book a 30-minute demo",
"useContactContext": true
},
"analyticsConfig": {
"extractionTargets": [
{
"label": "Budget confirmed",
"type": "bool",
"key": "budget_confirmed",
"enumValues": [
"hot",
"warm",
"cold"
],
"ideal": "A confirmed budget of at least 10k",
"importance": "PREFERRED",
"weight": 40
}
],
"scoringCriteria": [
{
"label": "Handled objections",
"description": "Acknowledged the objection and answered it with a concrete example",
"key": "handled_objections",
"importance": "PREFERRED",
"weight": 40
}
],
"outcomes": [
{
"label": "Meeting booked",
"description": "The contact agreed to a specific date and time",
"key": "meeting_booked"
}
],
"outputTags": [
{
"label": "Needs follow-up",
"key": "needs_followup",
"description": "The contact asked to be called back"
}
],
"capture": {
"recording": true,
"transcript": true,
"summary": true,
"qa": true,
"evaluation": true,
"sentiment": true
}
},
"callConfig": {},
"overrides": {
"companyName": "Acme Manufacturing",
"companyDescription": "Acme makes industrial fasteners and employs 400 people across Slovakia."
}
}
'
import requests
url = "https://api.instaview.sk/agents/{id}"
payload = {
"name": "Updated Senior Developer Interview",
"type": "ONLINE",
"focus": "SCREENING",
"questions": ["What is your experience with React?"],
"instructions": "Focus on system design and communication",
"language": "EN",
"duration": 45,
"cefrLevel": "B2",
"companyPhoneNumberId": "123e4567-e89b-12d3-a456-426614174000",
"metadata": { "department": "Engineering" },
"backgroundSound": "OFFICE",
"flow": {
"firstMessage": {
"type": "first_message",
"text": "Hi {{contact.firstName}}, do you have two minutes?",
"label": "Qualify budget"
},
"sections": [
{
"type": "sequential",
"prompt": "Introduce yourself and explain why you are calling.",
"label": "Qualify budget"
}
],
"lastMessage": {
"type": "last_message",
"text": "Thanks for your time — have a great day!",
"label": "Qualify budget"
}
},
"guardrails": { "rules": ["Never quote a price", "Never promise a delivery date"] },
"contextConfig": {
"role": "an account executive for Acme",
"communicationStyle": "concise and direct",
"callToAction": "book a 30-minute demo",
"useContactContext": True
},
"analyticsConfig": {
"extractionTargets": [
{
"label": "Budget confirmed",
"type": "bool",
"key": "budget_confirmed",
"enumValues": ["hot", "warm", "cold"],
"ideal": "A confirmed budget of at least 10k",
"importance": "PREFERRED",
"weight": 40
}
],
"scoringCriteria": [
{
"label": "Handled objections",
"description": "Acknowledged the objection and answered it with a concrete example",
"key": "handled_objections",
"importance": "PREFERRED",
"weight": 40
}
],
"outcomes": [
{
"label": "Meeting booked",
"description": "The contact agreed to a specific date and time",
"key": "meeting_booked"
}
],
"outputTags": [
{
"label": "Needs follow-up",
"key": "needs_followup",
"description": "The contact asked to be called back"
}
],
"capture": {
"recording": True,
"transcript": True,
"summary": True,
"qa": True,
"evaluation": True,
"sentiment": True
}
},
"callConfig": {},
"overrides": {
"companyName": "Acme Manufacturing",
"companyDescription": "Acme makes industrial fasteners and employs 400 people across Slovakia."
}
}
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: 'Updated Senior Developer Interview',
type: 'ONLINE',
focus: 'SCREENING',
questions: ['What is your experience with React?'],
instructions: 'Focus on system design and communication',
language: 'EN',
duration: 45,
cefrLevel: 'B2',
companyPhoneNumberId: '123e4567-e89b-12d3-a456-426614174000',
metadata: {department: 'Engineering'},
backgroundSound: 'OFFICE',
flow: {
firstMessage: {
type: 'first_message',
text: 'Hi {{contact.firstName}}, do you have two minutes?',
label: 'Qualify budget'
},
sections: [
{
type: 'sequential',
prompt: 'Introduce yourself and explain why you are calling.',
label: 'Qualify budget'
}
],
lastMessage: {
type: 'last_message',
text: 'Thanks for your time — have a great day!',
label: 'Qualify budget'
}
},
guardrails: {rules: ['Never quote a price', 'Never promise a delivery date']},
contextConfig: {
role: 'an account executive for Acme',
communicationStyle: 'concise and direct',
callToAction: 'book a 30-minute demo',
useContactContext: true
},
analyticsConfig: {
extractionTargets: [
{
label: 'Budget confirmed',
type: 'bool',
key: 'budget_confirmed',
enumValues: ['hot', 'warm', 'cold'],
ideal: 'A confirmed budget of at least 10k',
importance: 'PREFERRED',
weight: 40
}
],
scoringCriteria: [
{
label: 'Handled objections',
description: 'Acknowledged the objection and answered it with a concrete example',
key: 'handled_objections',
importance: 'PREFERRED',
weight: 40
}
],
outcomes: [
{
label: 'Meeting booked',
description: 'The contact agreed to a specific date and time',
key: 'meeting_booked'
}
],
outputTags: [
{
label: 'Needs follow-up',
key: 'needs_followup',
description: 'The contact asked to be called back'
}
],
capture: {
recording: true,
transcript: true,
summary: true,
qa: true,
evaluation: true,
sentiment: true
}
},
callConfig: {},
overrides: {
companyName: 'Acme Manufacturing',
companyDescription: 'Acme makes industrial fasteners and employs 400 people across Slovakia.'
}
})
};
fetch('https://api.instaview.sk/agents/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.instaview.sk/agents/{id}",
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' => 'Updated Senior Developer Interview',
'type' => 'ONLINE',
'focus' => 'SCREENING',
'questions' => [
'What is your experience with React?'
],
'instructions' => 'Focus on system design and communication',
'language' => 'EN',
'duration' => 45,
'cefrLevel' => 'B2',
'companyPhoneNumberId' => '123e4567-e89b-12d3-a456-426614174000',
'metadata' => [
'department' => 'Engineering'
],
'backgroundSound' => 'OFFICE',
'flow' => [
'firstMessage' => [
'type' => 'first_message',
'text' => 'Hi {{contact.firstName}}, do you have two minutes?',
'label' => 'Qualify budget'
],
'sections' => [
[
'type' => 'sequential',
'prompt' => 'Introduce yourself and explain why you are calling.',
'label' => 'Qualify budget'
]
],
'lastMessage' => [
'type' => 'last_message',
'text' => 'Thanks for your time — have a great day!',
'label' => 'Qualify budget'
]
],
'guardrails' => [
'rules' => [
'Never quote a price',
'Never promise a delivery date'
]
],
'contextConfig' => [
'role' => 'an account executive for Acme',
'communicationStyle' => 'concise and direct',
'callToAction' => 'book a 30-minute demo',
'useContactContext' => true
],
'analyticsConfig' => [
'extractionTargets' => [
[
'label' => 'Budget confirmed',
'type' => 'bool',
'key' => 'budget_confirmed',
'enumValues' => [
'hot',
'warm',
'cold'
],
'ideal' => 'A confirmed budget of at least 10k',
'importance' => 'PREFERRED',
'weight' => 40
]
],
'scoringCriteria' => [
[
'label' => 'Handled objections',
'description' => 'Acknowledged the objection and answered it with a concrete example',
'key' => 'handled_objections',
'importance' => 'PREFERRED',
'weight' => 40
]
],
'outcomes' => [
[
'label' => 'Meeting booked',
'description' => 'The contact agreed to a specific date and time',
'key' => 'meeting_booked'
]
],
'outputTags' => [
[
'label' => 'Needs follow-up',
'key' => 'needs_followup',
'description' => 'The contact asked to be called back'
]
],
'capture' => [
'recording' => true,
'transcript' => true,
'summary' => true,
'qa' => true,
'evaluation' => true,
'sentiment' => true
]
],
'callConfig' => [
],
'overrides' => [
'companyName' => 'Acme Manufacturing',
'companyDescription' => 'Acme makes industrial fasteners and employs 400 people across Slovakia.'
]
]),
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://api.instaview.sk/agents/{id}"
payload := strings.NewReader("{\n \"name\": \"Updated Senior Developer Interview\",\n \"type\": \"ONLINE\",\n \"focus\": \"SCREENING\",\n \"questions\": [\n \"What is your experience with React?\"\n ],\n \"instructions\": \"Focus on system design and communication\",\n \"language\": \"EN\",\n \"duration\": 45,\n \"cefrLevel\": \"B2\",\n \"companyPhoneNumberId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"metadata\": {\n \"department\": \"Engineering\"\n },\n \"backgroundSound\": \"OFFICE\",\n \"flow\": {\n \"firstMessage\": {\n \"type\": \"first_message\",\n \"text\": \"Hi {{contact.firstName}}, do you have two minutes?\",\n \"label\": \"Qualify budget\"\n },\n \"sections\": [\n {\n \"type\": \"sequential\",\n \"prompt\": \"Introduce yourself and explain why you are calling.\",\n \"label\": \"Qualify budget\"\n }\n ],\n \"lastMessage\": {\n \"type\": \"last_message\",\n \"text\": \"Thanks for your time — have a great day!\",\n \"label\": \"Qualify budget\"\n }\n },\n \"guardrails\": {\n \"rules\": [\n \"Never quote a price\",\n \"Never promise a delivery date\"\n ]\n },\n \"contextConfig\": {\n \"role\": \"an account executive for Acme\",\n \"communicationStyle\": \"concise and direct\",\n \"callToAction\": \"book a 30-minute demo\",\n \"useContactContext\": true\n },\n \"analyticsConfig\": {\n \"extractionTargets\": [\n {\n \"label\": \"Budget confirmed\",\n \"type\": \"bool\",\n \"key\": \"budget_confirmed\",\n \"enumValues\": [\n \"hot\",\n \"warm\",\n \"cold\"\n ],\n \"ideal\": \"A confirmed budget of at least 10k\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"scoringCriteria\": [\n {\n \"label\": \"Handled objections\",\n \"description\": \"Acknowledged the objection and answered it with a concrete example\",\n \"key\": \"handled_objections\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"outcomes\": [\n {\n \"label\": \"Meeting booked\",\n \"description\": \"The contact agreed to a specific date and time\",\n \"key\": \"meeting_booked\"\n }\n ],\n \"outputTags\": [\n {\n \"label\": \"Needs follow-up\",\n \"key\": \"needs_followup\",\n \"description\": \"The contact asked to be called back\"\n }\n ],\n \"capture\": {\n \"recording\": true,\n \"transcript\": true,\n \"summary\": true,\n \"qa\": true,\n \"evaluation\": true,\n \"sentiment\": true\n }\n },\n \"callConfig\": {},\n \"overrides\": {\n \"companyName\": \"Acme Manufacturing\",\n \"companyDescription\": \"Acme makes industrial fasteners and employs 400 people across Slovakia.\"\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://api.instaview.sk/agents/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Updated Senior Developer Interview\",\n \"type\": \"ONLINE\",\n \"focus\": \"SCREENING\",\n \"questions\": [\n \"What is your experience with React?\"\n ],\n \"instructions\": \"Focus on system design and communication\",\n \"language\": \"EN\",\n \"duration\": 45,\n \"cefrLevel\": \"B2\",\n \"companyPhoneNumberId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"metadata\": {\n \"department\": \"Engineering\"\n },\n \"backgroundSound\": \"OFFICE\",\n \"flow\": {\n \"firstMessage\": {\n \"type\": \"first_message\",\n \"text\": \"Hi {{contact.firstName}}, do you have two minutes?\",\n \"label\": \"Qualify budget\"\n },\n \"sections\": [\n {\n \"type\": \"sequential\",\n \"prompt\": \"Introduce yourself and explain why you are calling.\",\n \"label\": \"Qualify budget\"\n }\n ],\n \"lastMessage\": {\n \"type\": \"last_message\",\n \"text\": \"Thanks for your time — have a great day!\",\n \"label\": \"Qualify budget\"\n }\n },\n \"guardrails\": {\n \"rules\": [\n \"Never quote a price\",\n \"Never promise a delivery date\"\n ]\n },\n \"contextConfig\": {\n \"role\": \"an account executive for Acme\",\n \"communicationStyle\": \"concise and direct\",\n \"callToAction\": \"book a 30-minute demo\",\n \"useContactContext\": true\n },\n \"analyticsConfig\": {\n \"extractionTargets\": [\n {\n \"label\": \"Budget confirmed\",\n \"type\": \"bool\",\n \"key\": \"budget_confirmed\",\n \"enumValues\": [\n \"hot\",\n \"warm\",\n \"cold\"\n ],\n \"ideal\": \"A confirmed budget of at least 10k\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"scoringCriteria\": [\n {\n \"label\": \"Handled objections\",\n \"description\": \"Acknowledged the objection and answered it with a concrete example\",\n \"key\": \"handled_objections\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"outcomes\": [\n {\n \"label\": \"Meeting booked\",\n \"description\": \"The contact agreed to a specific date and time\",\n \"key\": \"meeting_booked\"\n }\n ],\n \"outputTags\": [\n {\n \"label\": \"Needs follow-up\",\n \"key\": \"needs_followup\",\n \"description\": \"The contact asked to be called back\"\n }\n ],\n \"capture\": {\n \"recording\": true,\n \"transcript\": true,\n \"summary\": true,\n \"qa\": true,\n \"evaluation\": true,\n \"sentiment\": true\n }\n },\n \"callConfig\": {},\n \"overrides\": {\n \"companyName\": \"Acme Manufacturing\",\n \"companyDescription\": \"Acme makes industrial fasteners and employs 400 people across Slovakia.\"\n }\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.instaview.sk/agents/{id}")
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\": \"Updated Senior Developer Interview\",\n \"type\": \"ONLINE\",\n \"focus\": \"SCREENING\",\n \"questions\": [\n \"What is your experience with React?\"\n ],\n \"instructions\": \"Focus on system design and communication\",\n \"language\": \"EN\",\n \"duration\": 45,\n \"cefrLevel\": \"B2\",\n \"companyPhoneNumberId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"metadata\": {\n \"department\": \"Engineering\"\n },\n \"backgroundSound\": \"OFFICE\",\n \"flow\": {\n \"firstMessage\": {\n \"type\": \"first_message\",\n \"text\": \"Hi {{contact.firstName}}, do you have two minutes?\",\n \"label\": \"Qualify budget\"\n },\n \"sections\": [\n {\n \"type\": \"sequential\",\n \"prompt\": \"Introduce yourself and explain why you are calling.\",\n \"label\": \"Qualify budget\"\n }\n ],\n \"lastMessage\": {\n \"type\": \"last_message\",\n \"text\": \"Thanks for your time — have a great day!\",\n \"label\": \"Qualify budget\"\n }\n },\n \"guardrails\": {\n \"rules\": [\n \"Never quote a price\",\n \"Never promise a delivery date\"\n ]\n },\n \"contextConfig\": {\n \"role\": \"an account executive for Acme\",\n \"communicationStyle\": \"concise and direct\",\n \"callToAction\": \"book a 30-minute demo\",\n \"useContactContext\": true\n },\n \"analyticsConfig\": {\n \"extractionTargets\": [\n {\n \"label\": \"Budget confirmed\",\n \"type\": \"bool\",\n \"key\": \"budget_confirmed\",\n \"enumValues\": [\n \"hot\",\n \"warm\",\n \"cold\"\n ],\n \"ideal\": \"A confirmed budget of at least 10k\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"scoringCriteria\": [\n {\n \"label\": \"Handled objections\",\n \"description\": \"Acknowledged the objection and answered it with a concrete example\",\n \"key\": \"handled_objections\",\n \"importance\": \"PREFERRED\",\n \"weight\": 40\n }\n ],\n \"outcomes\": [\n {\n \"label\": \"Meeting booked\",\n \"description\": \"The contact agreed to a specific date and time\",\n \"key\": \"meeting_booked\"\n }\n ],\n \"outputTags\": [\n {\n \"label\": \"Needs follow-up\",\n \"key\": \"needs_followup\",\n \"description\": \"The contact asked to be called back\"\n }\n ],\n \"capture\": {\n \"recording\": true,\n \"transcript\": true,\n \"summary\": true,\n \"qa\": true,\n \"evaluation\": true,\n \"sentiment\": true\n }\n },\n \"callConfig\": {},\n \"overrides\": {\n \"companyName\": \"Acme Manufacturing\",\n \"companyDescription\": \"Acme makes industrial fasteners and employs 400 people across Slovakia.\"\n }\n}"
response = http.request(request)
puts response.read_body
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"name": "Frontend Developer Interview",
"type": "ONLINE",
"focus": "SCREENING",
"language": "EN",
"duration": 30,
"createdAt": "2025-11-20T10:30:00Z",
"updatedAt": "2025-11-20T10:30:00Z",
"questions": [
"What is your experience with React?"
],
"instructions": "Focus on technical skills and previous project experience",
"voiceId": "ALEX",
"companyId": "123e4567-e89b-12d3-a456-426614174000",
"metadata": {
"department": "Sales"
},
"cefrLevel": "B1",
"backgroundSound": "OFFICE",
"flow": {
"firstMessage": {
"type": "first_message",
"text": "Hi {{contact.firstName}}, do you have two minutes?",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "Qualify budget"
},
"sections": [
{
"type": "sequential",
"prompt": "Introduce yourself and explain why you are calling.",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "Qualify budget"
}
],
"lastMessage": {
"type": "last_message",
"text": "Thanks for your time — have a great day!",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "Qualify budget"
},
"schemaVersion": "1.0.0"
},
"guardrails": {
"rules": [
"Never quote a price",
"Never promise a delivery date"
]
},
"contextConfig": {
"role": "an account executive for Acme",
"communicationStyle": "concise and direct",
"callToAction": "book a 30-minute demo",
"useContactContext": true
},
"analyticsConfig": {
"extractionTargets": [
{
"label": "Budget confirmed",
"type": "bool",
"key": "budget_confirmed",
"enumValues": [
"hot",
"warm",
"cold"
],
"ideal": "A confirmed budget of at least 10k",
"importance": "PREFERRED",
"weight": 40
}
],
"scoringCriteria": [
{
"label": "Handled objections",
"description": "Acknowledged the objection and answered it with a concrete example",
"key": "handled_objections",
"importance": "PREFERRED",
"weight": 40
}
],
"outcomes": [
{
"label": "Meeting booked",
"description": "The contact agreed to a specific date and time",
"key": "meeting_booked"
}
],
"outputTags": [
{
"label": "Needs follow-up",
"key": "needs_followup",
"description": "The contact asked to be called back"
}
],
"capture": {
"recording": true,
"transcript": true,
"summary": true,
"qa": true,
"evaluation": true,
"sentiment": true
}
},
"callConfig": {
"retryPolicy": {
"maxAttempts": 3
},
"callWindow": {
"mode": "custom",
"days": [
"mon",
"tue",
"wed",
"thu",
"fri"
],
"start": "09:00",
"end": "18:00",
"timezoneAnchor": {
"mode": "contact",
"timezone": "Europe/Bratislava",
"fallbackTimezone": "Europe/Bratislava"
}
}
},
"overrides": {
"companyName": "Acme Manufacturing",
"companyDescription": "Acme makes industrial fasteners and employs 400 people across Slovakia."
}
}
Updates an existing agent. Only the fields you send are changed.
The update agent endpoint allows you to modify agent configuration without recreating it. This supports partial updates, meaning you only need to provide the fields you want to change. This is useful for refining agent questions, updating evaluation criteria, or adjusting voice settings.
Sending a flow replaces the agent’s conversation design, and makes the agent custom if it was not already. See Create Agent for the shape of a flow and the rules that come with it — in particular, block ids and schemaVersion are assigned by InstaView and must not be sent, so a flow read back from the API has to have them stripped before it is sent again.A configuration-only update like this one requires an agent that is already custom — see the third rule below:
PATCH /agents/{id}{ "guardrails": { "rules": ["Never quote a price"] }}
Three rules apply once an agent is custom:
focus cannot be changed (422). A custom agent’s prompts come from its flow; there is no template focus to move it to. Create a new agent instead.
The flow cannot be cleared (422). Sending "flow": null on a custom agent would leave it with nothing to run.
guardrails, contextConfig, analyticsConfig and callConfig apply only to custom agents (422 otherwise). Send a flow in the same request to make the agent custom.
analyticsConfig replaces the stored config outright; send null to remove it.
Replaced means replaced, one level down as well. The update is partial at the top level
— an analyticsConfig you omit is left alone — but the object itself is not merged into the
stored one. Sending analyticsConfig with only extractionTargets in it clears
scoringCriteria, outcomes, outputTags and capture, because they are absent from the
config you sent.
To change one list, send the others back unchanged. Read the agent first and edit the
analyticsConfig you get back — its keys round-trip, so resending it is safe.
What happens to per-question scoring — which lives under question ids you never see — depends on which of the two fields you send:
You send
Per-question scoring
Neither
Untouched.
analyticsConfig only
Carried forward. The flow is unchanged, so its question ids are too.
flow only
Rebuilt from the new flow’s inline importance / weight; the rest of the config is left alone.
Both
Rebuilt from the request, end to end.
Replacing a flow re-mints every question id, so scoring that referred to the old
questions cannot survive as-is. Restate importance / weight inline on the questions of
the flow you send, exactly as you would on create — otherwise the questions in the new
flow are asked but not scored.
A flow you send is validated here exactly as it is on create, and an invalid one is rejected with a 422 carrying an errors array — every problem found, each with the path of the block it is on. See Flow Validation Errors for the shape. The three rules above are 422s too, but carry a message only, so treat errors as optional.
callConfig is the one config field that behaves the opposite way to the others. It is merged, and it is not nullable.retryPolicy and callWindow are each replaced when you send them and left alone when you do not, so changing the attempt count does not mean restating the window:
A callWindow you do send is replaced whole — send days, start, end and timezoneAnchor together. Half a window is how an agent ends up dialling at an hour nobody chose.
"callConfig": null is rejected. Every agent dials on some schedule, so there is no
“no policy” state to clear to — the only thing it could mean is falling back to the legacy
business_hours preset, which is not something to end up with by accident. To widen or
narrow the schedule, send the window you want.
Sending a callWindow is also how an agent still reporting "mode": "business_hours" is moved onto a real window. See Retries and calling hours for the fields and for what the timezone anchor decides.
You can only update agents that belong to your API key’s company. Attempting to update an agent from another company will result in a 403 Forbidden error.
Use backgroundSound to change the ambient noise played during calls for this agent. Accepted values are "OFFICE" (subtle office noise, default) and "OFF" (silence).
PATCH /agents/{id}{ "backgroundSound": "OFF"}
Omitting backgroundSound keeps the existing value on the agent.
overrides changes the company the agent introduces itself as. See Create Agent for what it does and does not change.
PATCH /agents/{id}{ "overrides": { "companyName": "Acme Manufacturing", "companyDescription": "Acme makes industrial fasteners and employs 400 people across Slovakia." }}
overrides is replaced whole, not merged — the same contract as guardrails and
contextConfig. Sending only companyName drops any stored companyDescription, and the
agent falls back to your own company’s description for it. Send every field you want kept,
every time.
Send "overrides": null to clear them; the agent goes back to speaking as your own company. Omitting the field leaves the stored overrides alone.
Focus of the agent. GENERIC: job-optional, for a conversation that is not about a particular job. SCREENING: a hiring screen against a job's requirements. OUTREACH: a first call to gauge interest. LANGUAGE_TEST: language proficiency. Cannot be sent together with flow, and cannot be changed at all on an existing custom agent (422).
Additional instructions for the conversation. Compiled into the agent's prompt as its own reference section, for a CUSTOM (flow) agent as well as a template one, so this is where reference material the agent must state accurately belongs: prices, stock, lead times, opening hours, policy.
Conversation flow graph, replacing the stored one. Providing it makes the agent custom. A flow read back from this API must have its ids and schema version stripped before it is sent again. Clearing the flow of a custom agent (null) is rejected with 422.
Rules the agent must obey during the call. Replaces the stored rules; send null or an empty array to remove them all. Accepted only for an agent that is custom after this update — otherwise rejected with 422.
Who the agent is and what the call is about. Replaces the stored context; send null to clear it. Accepted only for an agent that is custom after this update — otherwise rejected with 422.
What to extract, score, decide and label after every call. Replaces the stored config; send null to remove it. Replacing the flow re-mints its question ids, so an update that sends a flow WITHOUT an analyticsConfig re-points the stored per-question scoring at the new questions and leaves the rest of the config alone.
How persistently and when the agent calls. Merged rather than replaced — retryPolicy and callWindow are each replaced when sent and kept when omitted — and not nullable, unlike guardrails, contextConfig and analyticsConfig. Sending a callWindow is also how an agent still reporting business_hours is moved onto a real window.
Who this agent says it is on a call. Replaces the stored overrides wholesale rather than merging field by field, exactly like guardrails and contextConfig — so send every field you want kept, and a field you omit reverts to the company your API key belongs to. Send null to clear them entirely.
Focus of the agent. GENERIC: job-optional, for a conversation that is not about a particular job. SCREENING: a hiring screen against a job's requirements. OUTREACH: a first call to gauge interest. LANGUAGE_TEST: language proficiency.
Additional instructions for the conversation. Compiled into the agent's prompt as its own reference section, for a CUSTOM (flow) agent as well as a template one, so this is where reference material the agent must state accurately belongs: prices, stock, lead times, opening hours, policy.
Example:
"Focus on technical skills and previous project experience"
What the agent extracts, scores, decides and labels after every call. Custom agents only — null on a template agent. Per-question scoring is folded back onto the flow's looping questions rather than returned as an id-keyed map — the same form the write accepts.
How persistently and when the agent calls. Custom agents only. An agent created before calling windows were configurable reports a callWindow.mode of business_hours.
Who this agent says it is on a call, when that is not the company your API key belongs to. Null when it speaks as your own company.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"InstaView API","colors":{"primary":"#2741F9","light":"#4D5FFF","dark":"#1D34C4"},"logo":{"light":"https://mintcdn.com/instaview/srYC_WLR3UAwt0PY/logo/light.svg?fit=max\u0026auto=format\u0026n=srYC_WLR3UAwt0PY\u0026q=85\u0026s=a941bc948e20b3503a55e49b4438bfd8","dark":"https://mintcdn.com/instaview/srYC_WLR3UAwt0PY/logo/dark.svg?fit=max\u0026auto=format\u0026n=srYC_WLR3UAwt0PY\u0026q=85\u0026s=fbf32075feea3b5f404b1aef04c449ea"},"favicon":"https://mintcdn.com/instaview/srYC_WLR3UAwt0PY/favicon.svg?fit=max\u0026auto=format\u0026n=srYC_WLR3UAwt0PY\u0026q=85\u0026s=1499b591dcea46419afceafb5b77004e","api":{"playground":{}},"navbar":{"links":[{"href":"https://support.instaview.sk","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.instaview.sk"}},"footer":{"socials":{"github":"https://github.com/StarIC-s-r-o","linkedin":"https://www.linkedin.com/company/instaviewai"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"instaview","hasAudioNarration":false,"actualSubdomain":"instaview","customDomains":["docs.instaview.sk"],"gitSource":{"type":"github","owner":"staric-s-r-o","repo":"instaview","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adb630a25769d6ebcdc21d7","collectionId":"9e3238e9-e795-4633-9eb1-2fa50fb2b100","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adb630a25769d6ebcdc21d7"},"entitlements":{},"buildId":"6adb630a25769d6ebcdc21d7","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"API Reference","count":75},{"language":"default","tag":"Documentation","count":20},{"language":"default","tag":"Changelog","count":13},{"language":"default","tag":"Runs","count":10},{"language":"default","tag":"2026","count":10},{"language":"default","tag":"Resources","count":9},{"language":"default","tag":"Agents","count":8},{"language":"default","tag":"Conversations","count":8},{"language":"default","tag":"Sourcing","count":8},{"language":"default","tag":"Webhooks","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"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-agent","slug":"/api-reference/agents/update-agent","pageMetadata":{"title":"Update Agent","openapi":"PATCH /agents/{id}","description":"Updates an existing agent scoped to the API key's company. Sending a `flow` makes the agent custom; clearing the flow of a custom agent, or changing its focus, is rejected.","href":"/api-reference/agents/update-agent"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Updates an existing agent scoped to the API key’s company. Sending a \", _jsx(_components.code, {\n children: \"flow\"\n }), \" makes the agent custom; clearing the flow of a custom agent, or changing its focus, is rejected.\"]\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,Info,Table,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Updates an existing agent. Only the fields you send are changed.`}),`\n`,_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`The update agent endpoint allows you to modify agent configuration without recreating it. This supports partial updates, meaning you only need to provide the fields you want to change. This is useful for refining agent questions, updating evaluation criteria, or adjusting voice settings.`}),`\n`,_jsx(Heading,{level:`2`,id:`use-cases`,children:`Use Cases`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Refine Questions`}),`: Change what the agent asks`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Adjust Settings`}),`: Change voice, duration or type`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Update Criteria`}),`: Modify evaluation criteria as requirements evolve`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Iterative Improvement`}),`: Continuously improve agent configurations`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`partial-updates`,children:`Partial Updates`}),`\n`,_jsx(_components.p,{children:`You can update any combination of fields:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`20`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`20`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Update only questions`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PATCH`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`agents`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"questions\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"New question 1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"New question 2\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Update multiple fields`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PATCH`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`agents`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Updated Agent Name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"focus\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"SCREENING\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"duration\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`45`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"questions\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Updated question 1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Updated question 2\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`fields-that-can-be-updated`,children:`Fields That Can Be Updated`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`name`}),`: Agent display name`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`type`}),`: Agent type (ONLINE, PHONE)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`focus`}),`: Agent focus (GENERIC, SCREENING, OUTREACH, LANGUAGE_TEST)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`language`}),`: language code for the call`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`duration`}),`: call duration in minutes (max 180)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`questions`}),`: the questions to ask`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`instructions`}),`: additional instructions for the agent`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`voiceId`}),`: the voice the agent speaks with`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`cefrLevel`}),`: CEFR level for language test agents`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`backgroundSound`}),`: Ambient background sound during calls (`,_jsx(_components.code,{children:`OFFICE`}),` or `,_jsx(_components.code,{children:`OFF`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`flow`}),`: Conversation flow graph — see `,_jsx(_components.a,{href:`#custom-agents`,children:`Custom Agents`}),` below`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`guardrails`}),`, `,_jsx(_components.code,{children:`contextConfig`}),`, `,_jsx(_components.code,{children:`analyticsConfig`}),`, `,_jsx(_components.code,{children:`callConfig`}),`: Custom agent configuration`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`overrides`}),`: The company the agent speaks as — see `,_jsx(_components.a,{href:`#speaking-for-another-company`,children:`Speaking for another company`}),` below`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`custom-agents`,children:`Custom Agents`}),`\n`,_jsxs(_components.p,{children:[`Sending a `,_jsx(_components.code,{children:`flow`}),` replaces the agent’s conversation design, and makes the agent custom if it was not already. See `,_jsx(_components.a,{href:`/api-reference/agents/create-agent#custom-agents`,children:`Create Agent`}),` for the shape of a flow and the rules that come with it — in particular, block ids and `,_jsx(_components.code,{children:`schemaVersion`}),` are assigned by InstaView and must not be sent, so a flow read back from the API has to have them stripped before it is sent again.`]}),`\n`,_jsxs(_components.p,{children:[`A configuration-only update like this one requires an agent that is `,_jsx(_components.strong,{children:`already`}),` custom — see the third rule below:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PATCH`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`agents`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"guardrails\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"rules\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Never quote a price\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Three rules apply once an agent is custom:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`focus`}),` cannot be changed`]}),` (`,_jsx(_components.code,{children:`422`}),`). A custom agent’s prompts come from its flow; there is no template focus to move it to. Create a new agent instead.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The flow cannot be cleared`}),` (`,_jsx(_components.code,{children:`422`}),`). Sending `,_jsx(_components.code,{children:`\"flow\": null`}),` on a custom agent would leave it with nothing to run.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`guardrails`}),`, `,_jsx(_components.code,{children:`contextConfig`}),`, `,_jsx(_components.code,{children:`analyticsConfig`}),` and `,_jsx(_components.code,{children:`callConfig`}),` apply only to custom agents`]}),` (`,_jsx(_components.code,{children:`422`}),` otherwise). Send a `,_jsx(_components.code,{children:`flow`}),` in the same request to make the agent custom.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`updating-analytics`,children:`Updating analytics`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`analyticsConfig`}),` replaces the stored config outright; send `,_jsx(_components.code,{children:`null`}),` to remove it.`]}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Replaced means replaced, one level down as well.`}),` The update is partial at the top level\n— an `,_jsx(_components.code,{children:`analyticsConfig`}),` you omit is left alone — but the object itself is not merged into the\nstored one. Sending `,_jsx(_components.code,{children:`analyticsConfig`}),` with only `,_jsx(_components.code,{children:`extractionTargets`}),` in it clears\n`,_jsx(_components.code,{children:`scoringCriteria`}),`, `,_jsx(_components.code,{children:`outcomes`}),`, `,_jsx(_components.code,{children:`outputTags`}),` and `,_jsx(_components.code,{children:`capture`}),`, because they are absent from the\nconfig you sent.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// stored: extractionTargets + outputTags`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PATCH`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`agents`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"analyticsConfig\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"extractionTargets\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [{ `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"label\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Budget\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"bool\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }] } }`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// stored now: extractionTargets ONLY — outputTags is gone`})}),`\n`]})})}),_jsxs(_components.p,{children:[`To change one list, send the others back unchanged. Read the agent first and edit the\n`,_jsx(_components.code,{children:`analyticsConfig`}),` you get back — its keys round-trip, so resending it is safe.`]})]}),`\n`,_jsxs(_components.p,{children:[`What happens to `,_jsx(_components.strong,{children:`per-question scoring`}),` — which lives under question ids you never see — depends on which of the two fields you send:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`You send`}),_jsx(_components.th,{children:`Per-question scoring`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Neither`}),_jsx(_components.td,{children:`Untouched.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`analyticsConfig`}),` only`]}),_jsx(_components.td,{children:`Carried forward. The flow is unchanged, so its question ids are too.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`flow`}),` only`]}),_jsxs(_components.td,{children:[`Rebuilt from the new flow’s inline `,_jsx(_components.code,{children:`importance`}),` / `,_jsx(_components.code,{children:`weight`}),`; the rest of the config is left alone.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Both`}),_jsx(_components.td,{children:`Rebuilt from the request, end to end.`})]})]})]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Replacing a `,_jsx(_components.code,{children:`flow`}),` re-mints every question id, so scoring that referred to the old\nquestions cannot survive as-is. Restate `,_jsx(_components.code,{children:`importance`}),` / `,_jsx(_components.code,{children:`weight`}),` inline on the questions of\nthe flow you send, exactly as you would on create — otherwise the questions in the new\nflow are asked but not scored.`]})}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`flow`}),` you send is validated here exactly as it is on create, and an invalid one is rejected with a `,_jsx(_components.code,{children:`422`}),` carrying an `,_jsx(_components.code,{children:`errors`}),` array — every problem found, each with the `,_jsx(_components.code,{children:`path`}),` of the block it is on. See `,_jsx(_components.a,{href:`/api-reference/agents/create-agent#flow-validation-errors`,children:`Flow Validation Errors`}),` for the shape. The three rules above are `,_jsx(_components.code,{children:`422`}),`s too, but carry a `,_jsx(_components.code,{children:`message`}),` only, so treat `,_jsx(_components.code,{children:`errors`}),` as optional.`]}),`\n`,_jsx(Heading,{level:`3`,id:`updating-retries-and-calling-hours`,children:`Updating retries and calling hours`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`callConfig`}),` is the one config field that behaves the opposite way to the others. It is `,_jsx(_components.strong,{children:`merged`}),`, and it is `,_jsx(_components.strong,{children:`not nullable`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`retryPolicy`}),` and `,_jsx(_components.code,{children:`callWindow`}),` are each replaced when you send them and left alone when you do not, so changing the attempt count does not mean restating the window:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"callConfig\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"retryPolicy\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"maxAttempts\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } } }`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`callWindow`}),` you do send is replaced whole — send `,_jsx(_components.code,{children:`days`}),`, `,_jsx(_components.code,{children:`start`}),`, `,_jsx(_components.code,{children:`end`}),` and `,_jsx(_components.code,{children:`timezoneAnchor`}),` together. Half a window is how an agent ends up dialling at an hour nobody chose.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`\"callConfig\": null`}),` is rejected.`]}),` Every agent dials on some schedule, so there is no\n“no policy” state to clear to — the only thing it could mean is falling back to the legacy\n`,_jsx(_components.code,{children:`business_hours`}),` preset, which is not something to end up with by accident. To widen or\nnarrow the schedule, send the window you want.`]})}),`\n`,_jsxs(_components.p,{children:[`Sending a `,_jsx(_components.code,{children:`callWindow`}),` is also how an agent still reporting `,_jsx(_components.code,{children:`\"mode\": \"business_hours\"`}),` is moved onto a real window. See `,_jsx(_components.a,{href:`/api-reference/agents/create-agent#retries-and-calling-hours`,children:`Retries and calling hours`}),` for the fields and for what the timezone anchor decides.`]}),`\n`,_jsx(Heading,{level:`2`,id:`company-isolation`,children:`Company Isolation`}),`\n`,_jsxs(_components.p,{children:[`You can only update agents that belong to your API key’s company. Attempting to update an agent from another company will result in a `,_jsx(_components.code,{children:`403 Forbidden`}),` error.`]}),`\n`,_jsx(Heading,{level:`2`,id:`phone-agents`,children:`Phone Agents`}),`\n`,_jsxs(_components.p,{children:[`If you update an agent’s `,_jsx(_components.code,{children:`type`}),` to `,_jsx(_components.code,{children:`PHONE`}),`, you `,_jsx(_components.strong,{children:`must`}),` also provide a `,_jsx(_components.code,{children:`companyPhoneNumberId`}),` in the same request.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PATCH`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`agents`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"PHONE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"companyPhoneNumberId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"123e4567-e89b-12d3-a456-426614174000\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`background-sound`,children:`Background Sound`}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`backgroundSound`}),` to change the ambient noise played during calls for this agent. Accepted values are `,_jsx(_components.code,{children:`\"OFFICE\"`}),` (subtle office noise, default) and `,_jsx(_components.code,{children:`\"OFF\"`}),` (silence).`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PATCH`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`agents`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"backgroundSound\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"OFF\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Omitting `,_jsx(_components.code,{children:`backgroundSound`}),` keeps the existing value on the agent.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`speaking-for-another-company`,children:`Speaking for Another Company`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`overrides`}),` changes the company the agent introduces itself as. See `,_jsx(_components.a,{href:`/api-reference/agents/create-agent#speaking-for-another-company`,children:`Create Agent`}),` for what it does and does not change.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`PATCH`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` /`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`agents`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"overrides\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"companyName\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Acme Manufacturing\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"companyDescription\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Acme makes industrial fasteners and employs 400 people across Slovakia.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`overrides`}),` is replaced whole, not merged`]}),` — the same contract as `,_jsx(_components.code,{children:`guardrails`}),` and\n`,_jsx(_components.code,{children:`contextConfig`}),`. Sending only `,_jsx(_components.code,{children:`companyName`}),` drops any stored `,_jsx(_components.code,{children:`companyDescription`}),`, and the\nagent falls back to your own company’s description for it. Send every field you want kept,\nevery time.`]})}),`\n`,_jsxs(_components.p,{children:[`Send `,_jsx(_components.code,{children:`\"overrides\": null`}),` to clear them; the agent goes back to speaking as your own company. Omitting the field leaves the stored overrides alone.`]}),`\n`,_jsx(Heading,{level:`2`,id:`impact-on-existing-conversations`,children:`Impact on Existing Conversations`}),`\n`,_jsx(Info,{children:_jsx(_components.p,{children:`Updating an agent does not affect conversations already scheduled or completed.\nOnly conversations created after the update use\nthe new configuration.`})}),`\n`,_jsx(Heading,{level:`2`,id:`error-scenarios`,children:`Error Scenarios`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`404 Not Found`}),`: Agent doesn’t exist or has been deleted`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`403 Forbidden`}),`: Agent belongs to a different company`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`400 Bad Request`}),`: Invalid field values or validation errors`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`related-resources`,children:`Related Resources`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Agents Resource Guide`,icon:`robot`,href:`/guides/resources/agents`,children:_jsx(_components.p,{children:`Learn about agent configuration best practices`})}),_jsx(Card,{title:`Get Agent`,icon:`eye`,href:`/api-reference/agents/get-agent`,children:_jsx(_components.p,{children:`Retrieve current agent configuration`})}),_jsx(Card,{title:`Create Agent`,icon:`plus`,href:`/api-reference/agents/create-agent`,children:_jsx(_components.p,{children:`Create new agents`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Update Agent","openapi":"PATCH /agents/{id}","description":"Updates an existing agent scoped to the API key's company. Sending a `flow` makes the agent custom; clearing the flow of a custom agent, or changing its focus, is rejected.","href":"/api-reference/agents/update-agent"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Use Cases","slug":"use-cases","depth":2,"children":[]},{"title":"Partial Updates","slug":"partial-updates","depth":2,"children":[]},{"title":"Fields That Can Be Updated","slug":"fields-that-can-be-updated","depth":2,"children":[]},{"title":"Custom Agents","slug":"custom-agents","depth":2,"children":[{"title":"Updating analytics","slug":"updating-analytics","depth":3,"children":[]},{"title":"Updating retries and calling hours","slug":"updating-retries-and-calling-hours","depth":3,"children":[]}]},{"title":"Company Isolation","slug":"company-isolation","depth":2,"children":[]},{"title":"Phone Agents","slug":"phone-agents","depth":2,"children":[]},{"title":"Background Sound","slug":"background-sound","depth":2,"children":[]},{"title":"Speaking for Another Company","slug":"speaking-for-another-company","depth":2,"children":[]},{"title":"Impact on Existing Conversations","slug":"impact-on-existing-conversations","depth":2,"children":[]},{"title":"Error Scenarios","slug":"error-scenarios","depth":2,"children":[]},{"title":"Related Resources","slug":"related-resources","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Updates an existing agent scoped to the API key's company. Sending a `flow` makes the agent custom; clearing the flow of a custom agent, or changing its focus, is rejected.","operationId":"PublicAgentsController_updateAgent_v1","parameters":["0ddc6ff0-414c-41da-9135-826649aea09d","9777d89a-975f-42d6-a382-798f887b183d"],"requestBody":"a62c679f-b6e6-413d-b774-1b89cee62e0e","responses":{"200":"5a137bc6-68f7-4b0b-9058-b48e4f44ec8d","404":"07459786-fe90-45b7-8e76-3042de3086da","422":"f8ec1a45-5d67-424a-8e4e-d7376d94d444"},"security":["aa6dbbd6-9123-4b70-b7be-a9b574a0c629"],"summary":"Update agent","tags":["Agents"],"method":"patch","type":"path","servers":["fefe9da2-a252-4644-8424-0eaff357a7a8"],"path":"/agents/{id}","baseUrlOptions":["https://api.instaview.sk"],"title":"Update agent","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"0ddc6ff0-414c-41da-9135-826649aea09d":{"name":"id","required":true,"in":"path","schema":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}},"9777d89a-975f-42d6-a382-798f887b183d":{"name":"companyId","required":false,"in":"query","description":"Required for ATS API keys to specify which company to access. Ignored for standard company API keys.","schema":{"type":"string","isRequired":false,"description":"Required for ATS API keys to specify which company to access. Ignored for standard company API keys.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Agent name","example":"Updated Senior Developer Interview","minLength":2,"maxLength":100,"uniqueKey":"name","typeLabel":"string"},"type":{"type":"string","description":"Type of the agent","enum":["UNDEFINED","ONLINE","PHONE"],"example":"ONLINE","uniqueKey":"type","typeLabel":"enum\u003cstring>"},"focus":{"type":"string","description":"Focus of the agent. GENERIC: job-optional, for a conversation that is not about a particular job. SCREENING: a hiring screen against a job's requirements. OUTREACH: a first call to gauge interest. LANGUAGE_TEST: language proficiency. Cannot be sent together with `flow`, and cannot be changed at all on an existing custom agent (`422`).","enum":["GENERIC","SCREENING","OUTREACH","LANGUAGE_TEST"],"example":"SCREENING","uniqueKey":"focus","typeLabel":"enum\u003cstring>"},"questions":{"description":"List of questions for the conversation","example":["What is your experience with React?"],"maxItems":50,"type":"array","items":{"type":"string","uniqueKey":"questions.items.[INDEX]","typeLabel":"string"},"uniqueKey":"questions","typeLabel":"string[]"},"instructions":{"type":"string","description":"Additional instructions for the conversation. Compiled into the agent's prompt as its own reference section, for a CUSTOM (flow) agent as well as a template one, so this is where reference material the agent must state accurately belongs: prices, stock, lead times, opening hours, policy.","example":"Focus on system design and communication","maxLength":2000,"uniqueKey":"instructions","typeLabel":"string"},"language":{"type":"string","description":"Language of the conversation","enum":["UNDEFINED","EN","JA","ZH","DE","HI","FR","KO","PT","IT","ES","ID","NL","TR","FIL","PL","SV","BG","RO","AR","CS","EL","FI","HR","MS","SK","DA","TA","UK","RU","HU","NO","VI"],"example":"EN","uniqueKey":"language","typeLabel":"enum\u003cstring>"},"duration":{"type":"number","description":"Duration of the conversation in minutes","example":45,"minimum":1,"maximum":180,"uniqueKey":"duration","typeLabel":"number"},"voiceId":{"oneOf":[{"type":"string","description":"Voice ID the agent speaks with (null clears existing voice)","enum":["ALEX","PETER","MIRIAM","SUE","VIERA","CASANDRA","SILVIA","MICHAEL","LUKE","EMMA","SARAH","EVA"],"uniqueKey":"voiceId.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Voice ID the agent speaks with (null clears existing voice)","enum":["ALEX","PETER","MIRIAM","SUE","VIERA","CASANDRA","SILVIA","MICHAEL","LUKE","EMMA","SARAH","EVA"],"uniqueKey":"voiceId.oneOf.1","typeLabel":"null"}],"uniqueKey":"voiceId","typeLabel":"enum\u003cstring> | null"},"cefrLevel":{"type":"string","description":"CEFR level for language test agents","enum":["A1","A2","B1","B2","C1","C2"],"example":"B2","uniqueKey":"cefrLevel","typeLabel":"enum\u003cstring>"},"companyPhoneNumberId":{"type":"string","description":"ID of the company phone number assignment to use for calls from this agent (CompanyPhoneNumber.id)","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","uniqueKey":"companyPhoneNumberId","typeLabel":"string\u003cuuid>"},"metadata":{"type":"object","description":"Custom metadata (merged with existing metadata, max 10KB, 5 levels deep, 50 keys)","example":{"department":"Engineering"},"uniqueKey":"metadata","typeLabel":"object"},"backgroundSound":{"oneOf":[{"type":"string","description":"Ambient background sound during calls (`OFFICE` or `OFF`). Omit to keep the existing value, set `null` to clear override.","enum":["OFF","OFFICE"],"example":"OFFICE","uniqueKey":"backgroundSound.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Ambient background sound during calls (`OFFICE` or `OFF`). Omit to keep the existing value, set `null` to clear override.","enum":["OFF","OFFICE"],"example":"OFFICE","uniqueKey":"backgroundSound.oneOf.1","typeLabel":"null"}],"uniqueKey":"backgroundSound","typeLabel":"enum\u003cstring> | null"},"flow":{"oneOf":[{"type":"object","description":"Conversation flow graph, replacing the stored one. Providing it makes the agent custom. A flow read back from this API must have its ids and schema version stripped before it is sent again. Clearing the flow of a custom agent (`null`) is rejected with `422`.","required":["firstMessage","sections","lastMessage"],"properties":{"firstMessage":{"type":"object","description":"What the agent says first. Supports `{{contact.*}}` variables, injected per call.","required":["type","text"],"properties":{"type":{"type":"string","enum":["first_message"],"isRequired":true,"uniqueKey":"flow.oneOf.0.firstMessage.type","typeLabel":"enum\u003cstring>"},"text":{"type":"string","description":"The opening line.","example":"Hi {{contact.firstName}}, do you have two minutes?","isRequired":true,"uniqueKey":"flow.oneOf.0.firstMessage.text","typeLabel":"string"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget","uniqueKey":"flow.oneOf.0.firstMessage.label","typeLabel":"string"}},"isRequired":true,"uniqueKey":"flow.oneOf.0.firstMessage","typeLabel":"object"},"sections":{"type":"array","description":"The body of the conversation, worked through in order. At least one section is required.","minItems":1,"maxItems":100,"items":{"oneOf":[{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","prompt"],"properties":{"type":{"type":"string","enum":["sequential"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"prompt":{"type":"string","description":"What the agent should cover here. Supports `{{contact.*}}` variables.","example":"Introduce yourself and explain why you are calling.","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.0.prompt","typeLabel":"string"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.0.label","typeLabel":"string"}},"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","questions"],"properties":{"type":{"type":"string","enum":["looping"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"questions":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["question"],"properties":{"question":{"type":"string","description":"The question to ask. Supports `{{contact.*}}` variables.","example":"What are you using today?","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX].question","typeLabel":"string"},"idealAnswer":{"type":"string","description":"What a good answer looks like, used when scoring the call. Optional, and it is the scoring switch: a question without one is still asked but never scored, which is how you write a question set that has no right answers (an internal survey, a satisfaction check).","example":"Names a competing tool","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX].idealAnswer","typeLabel":"string"},"weight":{"type":"number","description":"Relative importance of this question when scoring. Setting it also opts the question into the match score (as `PREFERRED` unless `importance` says otherwise).","minimum":0,"example":40,"maximum":100,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX].weight","typeLabel":"number"},"importance":{"type":"string","description":"Opts this question into the agent's match score. Set `importance` (or `weight`) to score it; a question with neither is asked but not scored. `REQUIRED` gates the score, `PREFERRED` contributes by weight.","enum":["REQUIRED","PREFERRED"],"example":"PREFERRED","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX].importance","typeLabel":"enum\u003cstring>"}},"description":"A question the agent asks, optionally with the answer it is measured against. `importance` and `weight` are how a question joins the match score — they live here rather than in `analyticsConfig` because a question is addressed by an id InstaView assigns, which a caller cannot know when writing the flow.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions","typeLabel":"object[]"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.label","typeLabel":"string"}},"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","branches"],"properties":{"type":{"type":"string","enum":["conditional"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"branches":{"type":"array","description":"Between 2 and 5 routes, evaluated in order.","minItems":2,"maxItems":5,"items":{"type":"object","description":"One route out of a `conditional`. Every entry in `branches` must be an object; anything else (a `null` left by a client that built the array by index, say) is rejected with `422` (`CONDITIONAL_BRANCH_NOT_AN_OBJECT`).","required":["label","condition","blocks"],"properties":{"label":{"type":"string","description":"What this route is — unique within the block, and how `defaultBranch` addresses it.","example":"Interested","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].label","typeLabel":"string"},"condition":{"oneOf":[{"type":"object","description":"How the route is chosen.\n\nRequired on every branch, and it must match one of the two shapes below — it is what the agent routes on. A missing or non-object condition is rejected with `422` (`CONDITIONAL_CONDITION_MISSING`), a `type` that is neither `intent` nor `expression` with `CONDITIONAL_CONDITION_TYPE_UNKNOWN`, and a condition of a known type missing the fields that type needs with `CONDITIONAL_CONDITION_INVALID`. Each carries the `path` of the offending branch, e.g. `sections[0].branches[1].condition`.\n\nThe branch nominated by `defaultBranch` is checked like any other. Its condition is not read while it is the fallthrough, but moving `defaultBranch` to a different branch later would put it back in charge of a route.","required":["type","description"],"properties":{"type":{"type":"string","enum":["intent"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.0.type","typeLabel":"enum\u003cstring>"},"description":{"type":"string","description":"The intent to match. Must be non-empty: it is the whole instruction the agent reads this route off, so a blank one is rejected with `422` (`CONDITIONAL_CONDITION_INVALID`) rather than stored as a route nothing selects. Whitespace does not count as content, which is what the pattern says and what the validator checks.","minLength":1,"pattern":"\\S","example":"wants to see a demo","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.0.description","typeLabel":"string"}},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.0","typeLabel":"object"},{"type":"object","description":"How the route is chosen.\n\nRequired on every branch, and it must match one of the two shapes below — it is what the agent routes on. A missing or non-object condition is rejected with `422` (`CONDITIONAL_CONDITION_MISSING`), a `type` that is neither `intent` nor `expression` with `CONDITIONAL_CONDITION_TYPE_UNKNOWN`, and a condition of a known type missing the fields that type needs with `CONDITIONAL_CONDITION_INVALID`. Each carries the `path` of the offending branch, e.g. `sections[0].branches[1].condition`.\n\nThe branch nominated by `defaultBranch` is checked like any other. Its condition is not read while it is the fallthrough, but moving `defaultBranch` to a different branch later would put it back in charge of a route.","required":["type","field","operator"],"properties":{"type":{"type":"string","enum":["expression"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1.type","typeLabel":"enum\u003cstring>"},"field":{"type":"string","description":"Name of the extracted field to test. Must be non-empty, whitespace excluded (`CONDITIONAL_CONDITION_INVALID`).","minLength":1,"pattern":"\\S","example":"budget","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1.field","typeLabel":"string"},"operator":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","CONTAINS","EXISTS"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1.operator","typeLabel":"enum\u003cstring>"},"value":{"description":"Value to compare against. Required for every operator except EXISTS, which ignores it — omitting it for any other operator is rejected with `422` (`CONDITIONAL_CONDITION_INVALID`), since there is then nothing to compare against. Use a number for GREATER_THAN and LESS_THAN, and a string for CONTAINS.","example":1000,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1.value","typeLabel":"any"},"logicalOperator":{"type":"string","description":"Reserved. Nothing composes conditions yet — a branch takes exactly one — so this is accepted and ignored.","enum":["AND","OR"],"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1.logicalOperator","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition","typeLabel":"object"},"blocks":{"type":"array","description":"The sections executed on this route. Conditionals may nest up to 3 levels deep.","maxItems":50,"items":{"$circularRef":"1c317405-133d-44b5-8795-2ec01022a596"},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].blocks","typeLabel":"array"}},"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches","typeLabel":"object[]"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.label","typeLabel":"string"},"defaultBranch":{"type":"string","description":"Label of the branch to fall through to when no condition matches. Branch ids are assigned by InstaView, so the fallthrough route is addressed by label; a label that matches no branch is rejected with `400`. Returned on reads as well, so a flow read back can be sent again unchanged apart from the assigned ids.","example":"Not now","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.defaultBranch","typeLabel":"string"}},"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","phoneNumber"],"properties":{"type":{"type":"string","enum":["human_handoff"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"phoneNumber":{"type":"string","description":"Where to transfer the call, in E.164 format — a leading `+`, country code, no spaces or dashes. A number that is not E.164 is rejected with `422` (`HUMAN_HANDOFF_INVALID_NUMBER`) when the agent is created, not when the transfer is attempted.","example":"+421900123456","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3.phoneNumber","typeLabel":"string"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder. Also names the destination for the agent, so a label saying who answers the number is worth setting.","example":"Sales","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3.label","typeLabel":"string"},"message":{"type":"string","description":"The line the caller hears as the call is transferred to this number. Optional — omitted, InstaView supplies a neutral line in the call's language, which promises nothing about who answers because the block does not know. **Keep it true on every transfer to this number:** a caller who asks for a person before the flow reaches this step can be transferred here and hear it too, so describe the transfer, not what came before it. Anything true only at this point of the flow belongs in the step before the handoff, which the agent says in a turn of its own and then transfers once the caller has responded. Blocks that share a `phoneNumber` share one line, taken from the first block that names the number (top to bottom): a later block's `message` is never heard, and if the first block has none the neutral line is used. Supports `{{contact.*}}` and `{{system.*}}` variables; a line that resolves to nothing on a call (only variables, none with a value) falls back to the neutral line rather than a silent transfer. An empty string is rejected (`HUMAN_HANDOFF_MESSAGE_EMPTY`) rather than read as absent, so clearing the field cannot silently restore the default.","example":"I'll put you through to Martin on our sales team now, one moment.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3.message","typeLabel":"string"}},"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3","typeLabel":"object"}],"uniqueKey":"flow.oneOf.0.sections.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections","typeLabel":"object[]"},"lastMessage":{"type":"object","description":"What the agent says before hanging up.","required":["type","text"],"properties":{"type":{"type":"string","enum":["last_message"],"isRequired":true,"uniqueKey":"flow.oneOf.0.lastMessage.type","typeLabel":"enum\u003cstring>"},"text":{"type":"string","description":"The closing line.","example":"Thanks for your time — have a great day!","isRequired":true,"uniqueKey":"flow.oneOf.0.lastMessage.text","typeLabel":"string"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget","uniqueKey":"flow.oneOf.0.lastMessage.label","typeLabel":"string"}},"isRequired":true,"uniqueKey":"flow.oneOf.0.lastMessage","typeLabel":"object"}},"uniqueKey":"flow.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"flow.oneOf.1","typeLabel":"null"}],"uniqueKey":"flow","typeLabel":"object | null"},"guardrails":{"oneOf":[{"type":"object","description":"Rules the agent must obey during the call. Replaces the stored rules; send null or an empty array to remove them all. Accepted only for an agent that is custom after this update — otherwise rejected with `422`.","required":["rules"],"properties":{"rules":{"type":"array","description":"Stated to the agent verbatim as instructions. Replaces the stored rules; an empty array removes them all.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"guardrails.oneOf.0.rules.items.[INDEX]","typeLabel":"string"},"example":["Never quote a price","Never promise a delivery date"],"isRequired":true,"uniqueKey":"guardrails.oneOf.0.rules","typeLabel":"string[]"}},"uniqueKey":"guardrails.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"guardrails.oneOf.1","typeLabel":"null"}],"uniqueKey":"guardrails","typeLabel":"object | null"},"contextConfig":{"oneOf":[{"type":"object","description":"Who the agent is and what the call is about. Replaces the stored context; send null to clear it. Accepted only for an agent that is custom after this update — otherwise rejected with `422`.","properties":{"role":{"type":"string","description":"Who the agent should present itself as.","maxLength":500,"example":"an account executive for Acme","uniqueKey":"contextConfig.oneOf.0.role","typeLabel":"string"},"communicationStyle":{"type":"string","description":"How the agent speaks. The same list the visual builder offers, so an agent created over the API stays editable there.","enum":["professional","friendly","warm and empathetic","assertive","concise and direct","enthusiastic","casual"],"example":"concise and direct","uniqueKey":"contextConfig.oneOf.0.communicationStyle","typeLabel":"enum\u003cstring>"},"callToAction":{"type":"string","description":"What the call is trying to achieve.","maxLength":500,"example":"book a 30-minute demo","uniqueKey":"contextConfig.oneOf.0.callToAction","typeLabel":"string"},"useContactContext":{"type":"boolean","description":"Give the agent what is known about the person it is calling. A short platform-decided set of fields goes into its prompt; everything else the contact has a value for, plus their documents, becomes a knowledge base it can query mid-call. The agent may refer to any of it, must not volunteer where it came from, and is told not to read a document out word for word. Off unless set. Fields marked `isPii` are excluded from both halves unless `allowPiiInContext` is set on that field, or the field is one the platform lists in `inEssentialPromptSet` — see `GET /contact-fields`.","default":false,"example":true,"uniqueKey":"contextConfig.oneOf.0.useContactContext","typeLabel":"boolean"}},"uniqueKey":"contextConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"contextConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"contextConfig","typeLabel":"object | null"},"analyticsConfig":{"oneOf":[{"type":"object","description":"What to extract, score, decide and label after every call. Replaces the stored config; send `null` to remove it. Replacing the `flow` re-mints its question ids, so an update that sends a `flow` WITHOUT an `analyticsConfig` re-points the stored per-question scoring at the new questions and leaves the rest of the config alone.","properties":{"extractionTargets":{"type":"array","description":"The values to pull out of every call. A target with an `ideal` also counts toward the match score.","maxItems":50,"items":{"type":"object","description":"One value to pull out of every call.","required":["label","type"],"properties":{"label":{"type":"string","description":"What to extract, in your own words. Also the default source of `key`.","maxLength":200,"example":"Budget confirmed","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].label","typeLabel":"string"},"type":{"type":"string","description":"The value's type. The extracted value is coerced to it, or returned as `null`.","enum":["string","number","bool","enum"],"example":"bool","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"key":{"type":"string","description":"Stable name this item's results come back under. Optional — omit it and InstaView derives a slug of `label` (`Budget confirmed` → `budget_confirmed`). Set it when your integration reads the results by name: a key you choose survives a later `label` change, a derived one does not. If two derived keys collide, the later one gets a numeric suffix (`budget`, `budget_2`). Must be unique within its list — a duplicate you sent is rejected with `400`, never renamed. Reserved names (`__proto__`, `constructor`, `prototype`) are rejected. Editing the agent in the visual builder re-derives the key from the label.","maxLength":64,"pattern":"^[A-Za-z0-9_]{1,64}$","example":"budget_confirmed","uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].key","typeLabel":"string"},"enumValues":{"type":"array","description":"The allowed values. Required when `type` is `enum`.","maxItems":50,"items":{"type":"string","uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].enumValues.items.[INDEX]","typeLabel":"string"},"example":["hot","warm","cold"],"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].enumValues","typeLabel":"string[]"},"ideal":{"type":"string","description":"What a good value looks like. Its PRESENCE is what makes this field count toward the match score — a field with no `ideal` is extracted but not scored.","maxLength":500,"example":"A confirmed budget of at least 10k","uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].ideal","typeLabel":"string"},"importance":{"type":"string","description":"How much a miss matters. `REQUIRED` gates the score; `PREFERRED` contributes by weight.","enum":["REQUIRED","PREFERRED"],"example":"PREFERRED","uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].importance","typeLabel":"enum\u003cstring>"},"weight":{"type":"number","description":"Relative contribution to the match score. Weights are relative to each other, not a budget that must total 100.","minimum":0,"maximum":100,"example":40,"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].weight","typeLabel":"number"}},"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX]","typeLabel":"object"},"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets","typeLabel":"object[]"},"scoringCriteria":{"type":"array","description":"Holistic judgements over the whole call that are not a single field or question, e.g. “handled objections”.","maxItems":25,"items":{"type":"object","description":"A holistic judgement over the whole call.","required":["label","description"],"properties":{"label":{"type":"string","description":"Name of the judgement.","maxLength":200,"example":"Handled objections","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX].label","typeLabel":"string"},"description":{"type":"string","description":"What a good call looks like for this criterion — what the score is judged against.","maxLength":1000,"example":"Acknowledged the objection and answered it with a concrete example","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX].description","typeLabel":"string"},"key":{"type":"string","description":"Stable name this item's results come back under. Optional — omit it and InstaView derives a slug of `label` (`Budget confirmed` → `budget_confirmed`). Set it when your integration reads the results by name: a key you choose survives a later `label` change, a derived one does not. If two derived keys collide, the later one gets a numeric suffix (`budget`, `budget_2`). Must be unique within its list — a duplicate you sent is rejected with `400`, never renamed. Reserved names (`__proto__`, `constructor`, `prototype`) are rejected. Editing the agent in the visual builder re-derives the key from the label.","maxLength":64,"pattern":"^[A-Za-z0-9_]{1,64}$","example":"handled_objections","uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX].key","typeLabel":"string"},"importance":{"type":"string","description":"How much a miss matters. `REQUIRED` gates the score; `PREFERRED` contributes by weight.","enum":["REQUIRED","PREFERRED"],"example":"PREFERRED","uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX].importance","typeLabel":"enum\u003cstring>"},"weight":{"type":"number","description":"Relative contribution to the match score. Weights are relative to each other, not a budget that must total 100.","minimum":0,"maximum":100,"example":40,"uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX].weight","typeLabel":"number"}},"uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX]","typeLabel":"object"},"uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria","typeLabel":"object[]"},"outcomes":{"type":"array","description":"Did the call achieve what it was for? Each outcome is decided met / not met per call.","maxItems":25,"items":{"type":"object","description":"Something the call was for, decided met / not met afterwards.","required":["label","description"],"properties":{"label":{"type":"string","description":"Name of the outcome.","maxLength":200,"example":"Meeting booked","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.outcomes.items.[INDEX].label","typeLabel":"string"},"description":{"type":"string","description":"When this counts as achieved, in plain language.","maxLength":1000,"example":"The contact agreed to a specific date and time","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.outcomes.items.[INDEX].description","typeLabel":"string"},"key":{"type":"string","description":"Stable name this item's results come back under. Optional — omit it and InstaView derives a slug of `label` (`Budget confirmed` → `budget_confirmed`). Set it when your integration reads the results by name: a key you choose survives a later `label` change, a derived one does not. If two derived keys collide, the later one gets a numeric suffix (`budget`, `budget_2`). Must be unique within its list — a duplicate you sent is rejected with `400`, never renamed. Reserved names (`__proto__`, `constructor`, `prototype`) are rejected. Editing the agent in the visual builder re-derives the key from the label.","maxLength":64,"pattern":"^[A-Za-z0-9_]{1,64}$","example":"meeting_booked","uniqueKey":"analyticsConfig.oneOf.0.outcomes.items.[INDEX].key","typeLabel":"string"}},"uniqueKey":"analyticsConfig.oneOf.0.outcomes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"analyticsConfig.oneOf.0.outcomes","typeLabel":"object[]"},"outputTags":{"type":"array","description":"Labels the AI may assign to a call.","maxItems":25,"items":{"type":"object","description":"A label the AI may assign to a call.","required":["label"],"properties":{"label":{"type":"string","description":"The tag itself.","maxLength":200,"example":"Needs follow-up","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.outputTags.items.[INDEX].label","typeLabel":"string"},"key":{"type":"string","description":"Stable name this item's results come back under. Optional — omit it and InstaView derives a slug of `label` (`Budget confirmed` → `budget_confirmed`). Set it when your integration reads the results by name: a key you choose survives a later `label` change, a derived one does not. If two derived keys collide, the later one gets a numeric suffix (`budget`, `budget_2`). Must be unique within its list — a duplicate you sent is rejected with `400`, never renamed. Reserved names (`__proto__`, `constructor`, `prototype`) are rejected. Editing the agent in the visual builder re-derives the key from the label.","maxLength":64,"pattern":"^[A-Za-z0-9_]{1,64}$","example":"needs_followup","uniqueKey":"analyticsConfig.oneOf.0.outputTags.items.[INDEX].key","typeLabel":"string"},"description":{"type":"string","description":"When to apply it.","maxLength":1000,"example":"The contact asked to be called back","uniqueKey":"analyticsConfig.oneOf.0.outputTags.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"analyticsConfig.oneOf.0.outputTags.items.[INDEX]","typeLabel":"object"},"uniqueKey":"analyticsConfig.oneOf.0.outputTags","typeLabel":"object[]"},"capture":{"type":"object","description":"Which qualitative artefacts to produce. Every flag defaults to `true`, so an omitted `capture` is not “capture nothing”.","properties":{"recording":{"type":"boolean","default":true,"description":"Keep the call recording.","uniqueKey":"analyticsConfig.oneOf.0.capture.recording","typeLabel":"boolean"},"transcript":{"type":"boolean","default":true,"description":"Keep the transcript.","uniqueKey":"analyticsConfig.oneOf.0.capture.transcript","typeLabel":"boolean"},"summary":{"type":"boolean","default":true,"description":"Produce a call summary.","uniqueKey":"analyticsConfig.oneOf.0.capture.summary","typeLabel":"boolean"},"qa":{"type":"boolean","default":true,"description":"Answer the flow's looping questions from the transcript.","uniqueKey":"analyticsConfig.oneOf.0.capture.qa","typeLabel":"boolean"},"evaluation":{"type":"boolean","default":true,"description":"Produce the strengths / concerns evaluation.","uniqueKey":"analyticsConfig.oneOf.0.capture.evaluation","typeLabel":"boolean"},"sentiment":{"type":"boolean","default":true,"description":"Produce a sentiment read.","uniqueKey":"analyticsConfig.oneOf.0.capture.sentiment","typeLabel":"boolean"}},"uniqueKey":"analyticsConfig.oneOf.0.capture","typeLabel":"object"}},"uniqueKey":"analyticsConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"analyticsConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"analyticsConfig","typeLabel":"object | null"},"callConfig":{"type":"object","description":"How persistently and when the agent calls. Merged rather than replaced — `retryPolicy` and `callWindow` are each replaced when sent and kept when omitted — and **not nullable**, unlike `guardrails`, `contextConfig` and `analyticsConfig`. Sending a `callWindow` is also how an agent still reporting `business_hours` is moved onto a real window.","properties":{"retryPolicy":{"type":"object","description":"How many times a contact who does not answer is called. Replaced when sent, kept when omitted.","required":["maxAttempts"],"properties":{"maxAttempts":{"type":"number","description":"Attempts per contact, counting the first. Reschedules the contact asks for come out of this budget; a transient network failure that never reached them does not.","minimum":1,"maximum":5,"example":3,"isRequired":true,"uniqueKey":"callConfig.retryPolicy.maxAttempts","typeLabel":"number"}},"uniqueKey":"callConfig.retryPolicy","typeLabel":"object"},"callWindow":{"type":"object","description":"The days, local hours and timezone the agent may dial in. Replaced whole when sent, kept when omitted.","required":["days","start","end","timezoneAnchor"],"properties":{"days":{"type":"array","description":"Days the agent may call on.","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"],"uniqueKey":"callConfig.callWindow.days.items.[INDEX]","typeLabel":"enum\u003cstring>"},"example":["mon","tue","wed","thu","fri"],"isRequired":true,"uniqueKey":"callConfig.callWindow.days","typeLabel":"enum\u003cstring>[]"},"start":{"type":"string","description":"Earliest local time the agent may call, `\"HH:mm\"` on a 24-hour clock.","example":"09:00","isRequired":true,"uniqueKey":"callConfig.callWindow.start","typeLabel":"string"},"end":{"type":"string","description":"Local time the window closes, `\"HH:mm\"` on a 24-hour clock, exclusive. Must be later in the day than `start`; a window that wraps past midnight is rejected rather than reinterpreted.","example":"18:00","isRequired":true,"uniqueKey":"callConfig.callWindow.end","typeLabel":"string"},"timezoneAnchor":{"type":"object","description":"Whose clock `start` and `end` are on.","required":["mode"],"properties":{"mode":{"type":"string","enum":["contact","fixed"],"description":"`contact` detects the contact's timezone from their phone number, down to the area code: on one list a `+1 212` number is called at 09:00 in New York and a `+1 310` number at 09:00 in Los Angeles. Where a prefix covers more than one zone (an Australian `+61 8` number could be Adelaide or Perth) the window is narrowed to the part valid in every contact's zone, so nobody is called too early. `fixed` puts every contact on one named zone instead. Because every candidate zone has to allow the time, a narrow window over a wide prefix can have no valid moment at all (`09:00`–`10:00` is never true in both Adelaide and Perth at once); such a contact is called anyway rather than left uncalled, and the call is recorded as having gone out outside the window.","example":"contact","isRequired":true,"uniqueKey":"callConfig.callWindow.timezoneAnchor.mode","typeLabel":"enum\u003cstring>"},"timezone":{"type":"string","description":"IANA timezone. Required when `mode` is `fixed`, ignored otherwise. Validated against the runtime's own timezone database, so a nonexistent zone is a `422` here rather than a schedule that never fires.","example":"Europe/Bratislava","uniqueKey":"callConfig.callWindow.timezoneAnchor.timezone","typeLabel":"string"},"fallbackTimezone":{"type":"string","description":"IANA timezone used when `mode` is `contact` and the contact's number cannot be resolved to one. Defaults to `Europe/Bratislava`.","example":"Europe/Bratislava","uniqueKey":"callConfig.callWindow.timezoneAnchor.fallbackTimezone","typeLabel":"string"}},"isRequired":true,"uniqueKey":"callConfig.callWindow.timezoneAnchor","typeLabel":"object"}},"uniqueKey":"callConfig.callWindow","typeLabel":"object"}},"uniqueKey":"callConfig","typeLabel":"object"},"overrides":{"oneOf":[{"type":"object","description":"Who this agent says it is on a call. Replaces the stored overrides wholesale rather than merging field by field, exactly like `guardrails` and `contextConfig` — so send every field you want kept, and a field you omit reverts to the company your API key belongs to. Send `null` to clear them entirely.","properties":{"companyName":{"type":"string","description":"Company name the agent introduces itself with. Omit to use your own company's name.","minLength":1,"maxLength":100,"example":"Acme Manufacturing","uniqueKey":"overrides.oneOf.0.companyName","typeLabel":"string"},"companyDescription":{"type":"string","description":"Company description the agent may draw on. Falls back to your own company's description independently of `companyName`, so send it alongside a name override — otherwise the agent introduces itself as one company and describes another.","minLength":1,"maxLength":1000,"example":"Acme makes industrial fasteners and employs 400 people across Slovakia.","uniqueKey":"overrides.oneOf.0.companyDescription","typeLabel":"string"}},"uniqueKey":"overrides.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"overrides.oneOf.1","typeLabel":"null"}],"uniqueKey":"overrides","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"Updated Senior Developer Interview","type":"ONLINE","focus":"SCREENING","questions":["What is your experience with React?"],"instructions":"Focus on system design and communication","language":"EN","duration":45,"cefrLevel":"B2","companyPhoneNumberId":"123e4567-e89b-12d3-a456-426614174000","metadata":{"department":"Engineering"},"backgroundSound":"OFFICE","flow":{"firstMessage":{"type":"first_message","text":"Hi {{contact.firstName}}, do you have two minutes?","label":"Qualify budget"},"sections":[{"type":"sequential","prompt":"Introduce yourself and explain why you are calling.","label":"Qualify budget"}],"lastMessage":{"type":"last_message","text":"Thanks for your time — have a great day!","label":"Qualify budget"}},"guardrails":{"rules":["Never quote a price","Never promise a delivery date"]},"contextConfig":{"role":"an account executive for Acme","communicationStyle":"concise and direct","callToAction":"book a 30-minute demo","useContactContext":true},"analyticsConfig":{"extractionTargets":[{"label":"Budget confirmed","type":"bool","key":"budget_confirmed","enumValues":["hot","warm","cold"],"ideal":"A confirmed budget of at least 10k","importance":"PREFERRED","weight":40}],"scoringCriteria":[{"label":"Handled objections","description":"Acknowledged the objection and answered it with a concrete example","key":"handled_objections","importance":"PREFERRED","weight":40}],"outcomes":[{"label":"Meeting booked","description":"The contact agreed to a specific date and time","key":"meeting_booked"}],"outputTags":[{"label":"Needs follow-up","key":"needs_followup","description":"The contact asked to be called back"}],"capture":{"recording":true,"transcript":true,"summary":true,"qa":true,"evaluation":true,"sentiment":true}},"callConfig":{},"overrides":{"companyName":"Acme Manufacturing","companyDescription":"Acme makes industrial fasteners and employs 400 people across Slovakia."}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"5a137bc6-68f7-4b0b-9058-b48e4f44ec8d":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Agent ID","format":"uuid","example":"123e4567-e89b-12d3-a456-426614174000","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"name":{"type":"string","description":"Agent name","example":"Frontend Developer Interview","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"type":{"type":"string","description":"Type of the agent","enum":["UNDEFINED","ONLINE","PHONE"],"example":"ONLINE","isRequired":true,"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"focus":{"type":"string","description":"Focus of the agent. GENERIC: job-optional, for a conversation that is not about a particular job. SCREENING: a hiring screen against a job's requirements. OUTREACH: a first call to gauge interest. LANGUAGE_TEST: language proficiency.","enum":["GENERIC","SCREENING","OUTREACH","LANGUAGE_TEST"],"example":"SCREENING","isRequired":true,"uniqueKey":"focus","typeLabel":"enum\u003cstring>"},"language":{"type":"string","description":"Language of the conversation","enum":["UNDEFINED","EN","JA","ZH","DE","HI","FR","KO","PT","IT","ES","ID","NL","TR","FIL","PL","SV","BG","RO","AR","CS","EL","FI","HR","MS","SK","DA","TA","UK","RU","HU","NO","VI"],"example":"EN","isRequired":true,"uniqueKey":"language","typeLabel":"enum\u003cstring>"},"duration":{"type":"number","description":"Duration of the conversation in minutes","example":30,"isRequired":true,"uniqueKey":"duration","typeLabel":"number"},"createdAt":{"type":"string","description":"Agent creation timestamp (UTC)","example":"2025-11-20T10:30:00Z","format":"date-time","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","description":"Agent last update timestamp (UTC)","example":"2025-11-20T10:30:00Z","format":"date-time","isRequired":true,"uniqueKey":"updatedAt","typeLabel":"string\u003cdate-time>"},"questions":{"description":"List of questions for the conversation","example":["What is your experience with React?"],"type":"array","items":{"type":"string","uniqueKey":"questions.items.[INDEX]","typeLabel":"string"},"uniqueKey":"questions","typeLabel":"string[]"},"instructions":{"type":"string","description":"Additional instructions for the conversation. Compiled into the agent's prompt as its own reference section, for a CUSTOM (flow) agent as well as a template one, so this is where reference material the agent must state accurately belongs: prices, stock, lead times, opening hours, policy.","example":"Focus on technical skills and previous project experience","uniqueKey":"instructions","typeLabel":"string"},"voiceId":{"type":"string","description":"Voice ID the agent speaks with","enum":["ALEX","PETER","MIRIAM","SUE","VIERA","CASANDRA","SILVIA","MICHAEL","LUKE","EMMA","SARAH","EVA"],"uniqueKey":"voiceId","typeLabel":"enum\u003cstring>"},"companyId":{"type":"string","format":"uuid","description":"Company ID that owns the agent","example":"123e4567-e89b-12d3-a456-426614174000","uniqueKey":"companyId","typeLabel":"string\u003cuuid>"},"metadata":{"type":"object","description":"Custom metadata","example":{"department":"Sales"},"uniqueKey":"metadata","typeLabel":"object"},"cefrLevel":{"type":"string","description":"CEFR level for language test agents","enum":["A1","A2","B1","B2","C1","C2"],"example":"B1","uniqueKey":"cefrLevel","typeLabel":"enum\u003cstring>"},"backgroundSound":{"oneOf":[{"type":"string","description":"Ambient background sound during calls (`OFFICE` or `OFF`). Null means no override is set and the default applies.","enum":["OFF","OFFICE"],"example":"OFFICE","uniqueKey":"backgroundSound.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Ambient background sound during calls (`OFFICE` or `OFF`). Null means no override is set and the default applies.","enum":["OFF","OFFICE"],"example":"OFFICE","uniqueKey":"backgroundSound.oneOf.1","typeLabel":"null"}],"uniqueKey":"backgroundSound","typeLabel":"enum\u003cstring> | null"},"flow":{"oneOf":[{"type":"object","description":"Conversation flow graph, as designed. Null on a template agent.","required":["firstMessage","sections","lastMessage"],"properties":{"firstMessage":{"type":"object","description":"What the agent says first. Supports `{{contact.*}}` variables, injected per call.","required":["type","text"],"properties":{"type":{"type":"string","enum":["first_message"],"isRequired":true,"uniqueKey":"flow.oneOf.0.firstMessage.type","typeLabel":"enum\u003cstring>"},"text":{"type":"string","description":"The opening line.","example":"Hi {{contact.firstName}}, do you have two minutes?","isRequired":true,"uniqueKey":"flow.oneOf.0.firstMessage.text","typeLabel":"string"},"id":{"type":"string","format":"uuid","readOnly":true,"description":"Assigned by InstaView. Returned on reads; sending one anywhere in the flow is rejected with `400`.","uniqueKey":"flow.oneOf.0.firstMessage.id","typeLabel":"string\u003cuuid>"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget","uniqueKey":"flow.oneOf.0.firstMessage.label","typeLabel":"string"}},"isRequired":true,"uniqueKey":"flow.oneOf.0.firstMessage","typeLabel":"object"},"sections":{"type":"array","description":"The body of the conversation, worked through in order. At least one section is required.","minItems":1,"maxItems":100,"items":{"oneOf":[{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","prompt"],"properties":{"type":{"type":"string","enum":["sequential"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"prompt":{"type":"string","description":"What the agent should cover here. Supports `{{contact.*}}` variables.","example":"Introduce yourself and explain why you are calling.","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.0.prompt","typeLabel":"string"},"id":{"type":"string","format":"uuid","readOnly":true,"description":"Assigned by InstaView. Returned on reads; sending one anywhere in the flow is rejected with `400`.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.0.id","typeLabel":"string\u003cuuid>"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.0.label","typeLabel":"string"}},"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","questions"],"properties":{"type":{"type":"string","enum":["looping"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"questions":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["question"],"properties":{"question":{"type":"string","description":"The question to ask. Supports `{{contact.*}}` variables.","example":"What are you using today?","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX].question","typeLabel":"string"},"id":{"type":"string","format":"uuid","readOnly":true,"description":"Assigned by InstaView. Returned on reads; sending one anywhere in the flow is rejected with `400`.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"idealAnswer":{"type":"string","description":"What a good answer looks like, used when scoring the call. Optional, and it is the scoring switch: a question without one is still asked but never scored, which is how you write a question set that has no right answers (an internal survey, a satisfaction check).","example":"Names a competing tool","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX].idealAnswer","typeLabel":"string"},"weight":{"type":"number","description":"Relative importance of this question when scoring. Setting it also opts the question into the match score (as `PREFERRED` unless `importance` says otherwise).","minimum":0,"example":40,"maximum":100,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX].weight","typeLabel":"number"},"importance":{"type":"string","description":"Opts this question into the agent's match score. Set `importance` (or `weight`) to score it; a question with neither is asked but not scored. `REQUIRED` gates the score, `PREFERRED` contributes by weight.","enum":["REQUIRED","PREFERRED"],"example":"PREFERRED","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX].importance","typeLabel":"enum\u003cstring>"}},"description":"A question the agent asks, optionally with the answer it is measured against. `importance` and `weight` are how a question joins the match score — they live here rather than in `analyticsConfig` because a question is addressed by an id InstaView assigns, which a caller cannot know when writing the flow.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.questions","typeLabel":"object[]"},"id":{"type":"string","format":"uuid","readOnly":true,"description":"Assigned by InstaView. Returned on reads; sending one anywhere in the flow is rejected with `400`.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.id","typeLabel":"string\u003cuuid>"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1.label","typeLabel":"string"}},"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","branches"],"properties":{"type":{"type":"string","enum":["conditional"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"branches":{"type":"array","description":"Between 2 and 5 routes, evaluated in order.","minItems":2,"maxItems":5,"items":{"type":"object","description":"One route out of a `conditional`. Every entry in `branches` must be an object; anything else (a `null` left by a client that built the array by index, say) is rejected with `422` (`CONDITIONAL_BRANCH_NOT_AN_OBJECT`).","required":["label","condition","blocks"],"properties":{"label":{"type":"string","description":"What this route is — unique within the block, and how `defaultBranch` addresses it.","example":"Interested","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].label","typeLabel":"string"},"condition":{"oneOf":[{"type":"object","description":"How the route is chosen.\n\nRequired on every branch, and it must match one of the two shapes below — it is what the agent routes on. A missing or non-object condition is rejected with `422` (`CONDITIONAL_CONDITION_MISSING`), a `type` that is neither `intent` nor `expression` with `CONDITIONAL_CONDITION_TYPE_UNKNOWN`, and a condition of a known type missing the fields that type needs with `CONDITIONAL_CONDITION_INVALID`. Each carries the `path` of the offending branch, e.g. `sections[0].branches[1].condition`.\n\nThe branch nominated by `defaultBranch` is checked like any other. Its condition is not read while it is the fallthrough, but moving `defaultBranch` to a different branch later would put it back in charge of a route.","required":["type","description"],"properties":{"type":{"type":"string","enum":["intent"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.0.type","typeLabel":"enum\u003cstring>"},"description":{"type":"string","description":"The intent to match. Must be non-empty: it is the whole instruction the agent reads this route off, so a blank one is rejected with `422` (`CONDITIONAL_CONDITION_INVALID`) rather than stored as a route nothing selects. Whitespace does not count as content, which is what the pattern says and what the validator checks.","minLength":1,"pattern":"\\S","example":"wants to see a demo","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.0.description","typeLabel":"string"}},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.0","typeLabel":"object"},{"type":"object","description":"How the route is chosen.\n\nRequired on every branch, and it must match one of the two shapes below — it is what the agent routes on. A missing or non-object condition is rejected with `422` (`CONDITIONAL_CONDITION_MISSING`), a `type` that is neither `intent` nor `expression` with `CONDITIONAL_CONDITION_TYPE_UNKNOWN`, and a condition of a known type missing the fields that type needs with `CONDITIONAL_CONDITION_INVALID`. Each carries the `path` of the offending branch, e.g. `sections[0].branches[1].condition`.\n\nThe branch nominated by `defaultBranch` is checked like any other. Its condition is not read while it is the fallthrough, but moving `defaultBranch` to a different branch later would put it back in charge of a route.","required":["type","field","operator"],"properties":{"type":{"type":"string","enum":["expression"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1.type","typeLabel":"enum\u003cstring>"},"field":{"type":"string","description":"Name of the extracted field to test. Must be non-empty, whitespace excluded (`CONDITIONAL_CONDITION_INVALID`).","minLength":1,"pattern":"\\S","example":"budget","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1.field","typeLabel":"string"},"operator":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","CONTAINS","EXISTS"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1.operator","typeLabel":"enum\u003cstring>"},"value":{"description":"Value to compare against. Required for every operator except EXISTS, which ignores it — omitting it for any other operator is rejected with `422` (`CONDITIONAL_CONDITION_INVALID`), since there is then nothing to compare against. Use a number for GREATER_THAN and LESS_THAN, and a string for CONTAINS.","example":1000,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1.value","typeLabel":"any"},"logicalOperator":{"type":"string","description":"Reserved. Nothing composes conditions yet — a branch takes exactly one — so this is accepted and ignored.","enum":["AND","OR"],"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1.logicalOperator","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].condition","typeLabel":"object"},"blocks":{"type":"array","description":"The sections executed on this route. Conditionals may nest up to 3 levels deep.","maxItems":50,"items":{"$circularRef":"1c317405-133d-44b5-8795-2ec01022a596"},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].blocks","typeLabel":"array"},"id":{"type":"string","format":"uuid","readOnly":true,"description":"Assigned by InstaView. Returned on reads; sending one anywhere in the flow is rejected with `400`.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX].id","typeLabel":"string\u003cuuid>"}},"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.branches","typeLabel":"object[]"},"id":{"type":"string","format":"uuid","readOnly":true,"description":"Assigned by InstaView. Returned on reads; sending one anywhere in the flow is rejected with `400`.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.id","typeLabel":"string\u003cuuid>"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.label","typeLabel":"string"},"defaultBranch":{"type":"string","description":"Label of the branch to fall through to when no condition matches. Branch ids are assigned by InstaView, so the fallthrough route is addressed by label; a label that matches no branch is rejected with `400`. Returned on reads as well, so a flow read back can be sent again unchanged apart from the assigned ids.","example":"Not now","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.defaultBranch","typeLabel":"string"},"defaultBranchId":{"type":"string","format":"uuid","readOnly":true,"description":"The resolved id of the fallthrough branch, assigned by InstaView. Read-only: strip it along with the other ids before re-sending a flow, and set `defaultBranch` to change the route.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2.defaultBranchId","typeLabel":"string\u003cuuid>"}},"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","phoneNumber"],"properties":{"type":{"type":"string","enum":["human_handoff"],"isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"phoneNumber":{"type":"string","description":"Where to transfer the call, in E.164 format — a leading `+`, country code, no spaces or dashes. A number that is not E.164 is rejected with `422` (`HUMAN_HANDOFF_INVALID_NUMBER`) when the agent is created, not when the transfer is attempted.","example":"+421900123456","isRequired":true,"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3.phoneNumber","typeLabel":"string"},"id":{"type":"string","format":"uuid","readOnly":true,"description":"Assigned by InstaView. Returned on reads; sending one anywhere in the flow is rejected with `400`.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3.id","typeLabel":"string\u003cuuid>"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder. Also names the destination for the agent, so a label saying who answers the number is worth setting.","example":"Sales","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3.label","typeLabel":"string"},"message":{"type":"string","description":"The line the caller hears as the call is transferred to this number. Optional — omitted, InstaView supplies a neutral line in the call's language, which promises nothing about who answers because the block does not know. **Keep it true on every transfer to this number:** a caller who asks for a person before the flow reaches this step can be transferred here and hear it too, so describe the transfer, not what came before it. Anything true only at this point of the flow belongs in the step before the handoff, which the agent says in a turn of its own and then transfers once the caller has responded. Blocks that share a `phoneNumber` share one line, taken from the first block that names the number (top to bottom): a later block's `message` is never heard, and if the first block has none the neutral line is used. Supports `{{contact.*}}` and `{{system.*}}` variables; a line that resolves to nothing on a call (only variables, none with a value) falls back to the neutral line rather than a silent transfer. An empty string is rejected (`HUMAN_HANDOFF_MESSAGE_EMPTY`) rather than read as absent, so clearing the field cannot silently restore the default.","example":"I'll put you through to Martin on our sales team now, one moment.","uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3.message","typeLabel":"string"}},"uniqueKey":"flow.oneOf.0.sections.items.[INDEX].oneOf.3","typeLabel":"object"}],"uniqueKey":"flow.oneOf.0.sections.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"flow.oneOf.0.sections","typeLabel":"object[]"},"lastMessage":{"type":"object","description":"What the agent says before hanging up.","required":["type","text"],"properties":{"type":{"type":"string","enum":["last_message"],"isRequired":true,"uniqueKey":"flow.oneOf.0.lastMessage.type","typeLabel":"enum\u003cstring>"},"text":{"type":"string","description":"The closing line.","example":"Thanks for your time — have a great day!","isRequired":true,"uniqueKey":"flow.oneOf.0.lastMessage.text","typeLabel":"string"},"id":{"type":"string","format":"uuid","readOnly":true,"description":"Assigned by InstaView. Returned on reads; sending one anywhere in the flow is rejected with `400`.","uniqueKey":"flow.oneOf.0.lastMessage.id","typeLabel":"string\u003cuuid>"},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget","uniqueKey":"flow.oneOf.0.lastMessage.label","typeLabel":"string"}},"isRequired":true,"uniqueKey":"flow.oneOf.0.lastMessage","typeLabel":"object"},"schemaVersion":{"type":"string","readOnly":true,"description":"The flow schema this document is expressed in. Assigned by InstaView — sending it is rejected with 400, so an integration written today keeps working when the schema moves.","example":"1.0.0","uniqueKey":"flow.oneOf.0.schemaVersion","typeLabel":"string"}},"uniqueKey":"flow.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"flow.oneOf.1","typeLabel":"null"}],"uniqueKey":"flow","typeLabel":"object | null"},"guardrails":{"oneOf":[{"type":"object","description":"Rules the agent must obey during the call. Custom agents only; null on a template agent.","required":["rules"],"properties":{"rules":{"type":"array","description":"Stated to the agent verbatim as instructions. Replaces the stored rules; an empty array removes them all.","maxItems":50,"items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"guardrails.oneOf.0.rules.items.[INDEX]","typeLabel":"string"},"example":["Never quote a price","Never promise a delivery date"],"isRequired":true,"uniqueKey":"guardrails.oneOf.0.rules","typeLabel":"string[]"}},"uniqueKey":"guardrails.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"guardrails.oneOf.1","typeLabel":"null"}],"uniqueKey":"guardrails","typeLabel":"object | null"},"contextConfig":{"oneOf":[{"type":"object","description":"Who the agent is and what the call is about. Custom agents only; null on a template agent.","properties":{"role":{"type":"string","description":"Who the agent should present itself as.","maxLength":500,"example":"an account executive for Acme","uniqueKey":"contextConfig.oneOf.0.role","typeLabel":"string"},"communicationStyle":{"type":"string","description":"How the agent speaks. The same list the visual builder offers, so an agent created over the API stays editable there.","enum":["professional","friendly","warm and empathetic","assertive","concise and direct","enthusiastic","casual"],"example":"concise and direct","uniqueKey":"contextConfig.oneOf.0.communicationStyle","typeLabel":"enum\u003cstring>"},"callToAction":{"type":"string","description":"What the call is trying to achieve.","maxLength":500,"example":"book a 30-minute demo","uniqueKey":"contextConfig.oneOf.0.callToAction","typeLabel":"string"},"useContactContext":{"type":"boolean","description":"Give the agent what is known about the person it is calling. A short platform-decided set of fields goes into its prompt; everything else the contact has a value for, plus their documents, becomes a knowledge base it can query mid-call. The agent may refer to any of it, must not volunteer where it came from, and is told not to read a document out word for word. Off unless set. Fields marked `isPii` are excluded from both halves unless `allowPiiInContext` is set on that field, or the field is one the platform lists in `inEssentialPromptSet` — see `GET /contact-fields`.","default":false,"example":true,"uniqueKey":"contextConfig.oneOf.0.useContactContext","typeLabel":"boolean"}},"uniqueKey":"contextConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"contextConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"contextConfig","typeLabel":"object | null"},"analyticsConfig":{"oneOf":[{"type":"object","description":"What the agent extracts, scores, decides and labels after every call. Custom agents only — null on a template agent. Per-question scoring is folded back onto the flow's looping questions rather than returned as an id-keyed map — the same form the write accepts.","properties":{"extractionTargets":{"type":"array","description":"The values to pull out of every call. A target with an `ideal` also counts toward the match score.","maxItems":50,"items":{"type":"object","description":"One value to pull out of every call.","required":["label","type"],"properties":{"label":{"type":"string","description":"What to extract, in your own words. Also the default source of `key`.","maxLength":200,"example":"Budget confirmed","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].label","typeLabel":"string"},"type":{"type":"string","description":"The value's type. The extracted value is coerced to it, or returned as `null`.","enum":["string","number","bool","enum"],"example":"bool","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"key":{"type":"string","description":"Stable name this item's results come back under. Optional — omit it and InstaView derives a slug of `label` (`Budget confirmed` → `budget_confirmed`). Set it when your integration reads the results by name: a key you choose survives a later `label` change, a derived one does not. If two derived keys collide, the later one gets a numeric suffix (`budget`, `budget_2`). Must be unique within its list — a duplicate you sent is rejected with `400`, never renamed. Reserved names (`__proto__`, `constructor`, `prototype`) are rejected. Editing the agent in the visual builder re-derives the key from the label.","maxLength":64,"pattern":"^[A-Za-z0-9_]{1,64}$","example":"budget_confirmed","uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].key","typeLabel":"string"},"enumValues":{"type":"array","description":"The allowed values. Required when `type` is `enum`.","maxItems":50,"items":{"type":"string","uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].enumValues.items.[INDEX]","typeLabel":"string"},"example":["hot","warm","cold"],"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].enumValues","typeLabel":"string[]"},"ideal":{"type":"string","description":"What a good value looks like. Its PRESENCE is what makes this field count toward the match score — a field with no `ideal` is extracted but not scored.","maxLength":500,"example":"A confirmed budget of at least 10k","uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].ideal","typeLabel":"string"},"importance":{"type":"string","description":"How much a miss matters. `REQUIRED` gates the score; `PREFERRED` contributes by weight.","enum":["REQUIRED","PREFERRED"],"example":"PREFERRED","uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].importance","typeLabel":"enum\u003cstring>"},"weight":{"type":"number","description":"Relative contribution to the match score. Weights are relative to each other, not a budget that must total 100.","minimum":0,"maximum":100,"example":40,"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX].weight","typeLabel":"number"}},"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets.items.[INDEX]","typeLabel":"object"},"uniqueKey":"analyticsConfig.oneOf.0.extractionTargets","typeLabel":"object[]"},"scoringCriteria":{"type":"array","description":"Holistic judgements over the whole call that are not a single field or question, e.g. “handled objections”.","maxItems":25,"items":{"type":"object","description":"A holistic judgement over the whole call.","required":["label","description"],"properties":{"label":{"type":"string","description":"Name of the judgement.","maxLength":200,"example":"Handled objections","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX].label","typeLabel":"string"},"description":{"type":"string","description":"What a good call looks like for this criterion — what the score is judged against.","maxLength":1000,"example":"Acknowledged the objection and answered it with a concrete example","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX].description","typeLabel":"string"},"key":{"type":"string","description":"Stable name this item's results come back under. Optional — omit it and InstaView derives a slug of `label` (`Budget confirmed` → `budget_confirmed`). Set it when your integration reads the results by name: a key you choose survives a later `label` change, a derived one does not. If two derived keys collide, the later one gets a numeric suffix (`budget`, `budget_2`). Must be unique within its list — a duplicate you sent is rejected with `400`, never renamed. Reserved names (`__proto__`, `constructor`, `prototype`) are rejected. Editing the agent in the visual builder re-derives the key from the label.","maxLength":64,"pattern":"^[A-Za-z0-9_]{1,64}$","example":"handled_objections","uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX].key","typeLabel":"string"},"importance":{"type":"string","description":"How much a miss matters. `REQUIRED` gates the score; `PREFERRED` contributes by weight.","enum":["REQUIRED","PREFERRED"],"example":"PREFERRED","uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX].importance","typeLabel":"enum\u003cstring>"},"weight":{"type":"number","description":"Relative contribution to the match score. Weights are relative to each other, not a budget that must total 100.","minimum":0,"maximum":100,"example":40,"uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX].weight","typeLabel":"number"}},"uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria.items.[INDEX]","typeLabel":"object"},"uniqueKey":"analyticsConfig.oneOf.0.scoringCriteria","typeLabel":"object[]"},"outcomes":{"type":"array","description":"Did the call achieve what it was for? Each outcome is decided met / not met per call.","maxItems":25,"items":{"type":"object","description":"Something the call was for, decided met / not met afterwards.","required":["label","description"],"properties":{"label":{"type":"string","description":"Name of the outcome.","maxLength":200,"example":"Meeting booked","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.outcomes.items.[INDEX].label","typeLabel":"string"},"description":{"type":"string","description":"When this counts as achieved, in plain language.","maxLength":1000,"example":"The contact agreed to a specific date and time","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.outcomes.items.[INDEX].description","typeLabel":"string"},"key":{"type":"string","description":"Stable name this item's results come back under. Optional — omit it and InstaView derives a slug of `label` (`Budget confirmed` → `budget_confirmed`). Set it when your integration reads the results by name: a key you choose survives a later `label` change, a derived one does not. If two derived keys collide, the later one gets a numeric suffix (`budget`, `budget_2`). Must be unique within its list — a duplicate you sent is rejected with `400`, never renamed. Reserved names (`__proto__`, `constructor`, `prototype`) are rejected. Editing the agent in the visual builder re-derives the key from the label.","maxLength":64,"pattern":"^[A-Za-z0-9_]{1,64}$","example":"meeting_booked","uniqueKey":"analyticsConfig.oneOf.0.outcomes.items.[INDEX].key","typeLabel":"string"}},"uniqueKey":"analyticsConfig.oneOf.0.outcomes.items.[INDEX]","typeLabel":"object"},"uniqueKey":"analyticsConfig.oneOf.0.outcomes","typeLabel":"object[]"},"outputTags":{"type":"array","description":"Labels the AI may assign to a call.","maxItems":25,"items":{"type":"object","description":"A label the AI may assign to a call.","required":["label"],"properties":{"label":{"type":"string","description":"The tag itself.","maxLength":200,"example":"Needs follow-up","isRequired":true,"uniqueKey":"analyticsConfig.oneOf.0.outputTags.items.[INDEX].label","typeLabel":"string"},"key":{"type":"string","description":"Stable name this item's results come back under. Optional — omit it and InstaView derives a slug of `label` (`Budget confirmed` → `budget_confirmed`). Set it when your integration reads the results by name: a key you choose survives a later `label` change, a derived one does not. If two derived keys collide, the later one gets a numeric suffix (`budget`, `budget_2`). Must be unique within its list — a duplicate you sent is rejected with `400`, never renamed. Reserved names (`__proto__`, `constructor`, `prototype`) are rejected. Editing the agent in the visual builder re-derives the key from the label.","maxLength":64,"pattern":"^[A-Za-z0-9_]{1,64}$","example":"needs_followup","uniqueKey":"analyticsConfig.oneOf.0.outputTags.items.[INDEX].key","typeLabel":"string"},"description":{"type":"string","description":"When to apply it.","maxLength":1000,"example":"The contact asked to be called back","uniqueKey":"analyticsConfig.oneOf.0.outputTags.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"analyticsConfig.oneOf.0.outputTags.items.[INDEX]","typeLabel":"object"},"uniqueKey":"analyticsConfig.oneOf.0.outputTags","typeLabel":"object[]"},"capture":{"type":"object","description":"Which qualitative artefacts to produce. Every flag defaults to `true`, so an omitted `capture` is not “capture nothing”.","properties":{"recording":{"type":"boolean","default":true,"description":"Keep the call recording.","uniqueKey":"analyticsConfig.oneOf.0.capture.recording","typeLabel":"boolean"},"transcript":{"type":"boolean","default":true,"description":"Keep the transcript.","uniqueKey":"analyticsConfig.oneOf.0.capture.transcript","typeLabel":"boolean"},"summary":{"type":"boolean","default":true,"description":"Produce a call summary.","uniqueKey":"analyticsConfig.oneOf.0.capture.summary","typeLabel":"boolean"},"qa":{"type":"boolean","default":true,"description":"Answer the flow's looping questions from the transcript.","uniqueKey":"analyticsConfig.oneOf.0.capture.qa","typeLabel":"boolean"},"evaluation":{"type":"boolean","default":true,"description":"Produce the strengths / concerns evaluation.","uniqueKey":"analyticsConfig.oneOf.0.capture.evaluation","typeLabel":"boolean"},"sentiment":{"type":"boolean","default":true,"description":"Produce a sentiment read.","uniqueKey":"analyticsConfig.oneOf.0.capture.sentiment","typeLabel":"boolean"}},"uniqueKey":"analyticsConfig.oneOf.0.capture","typeLabel":"object"}},"uniqueKey":"analyticsConfig.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"analyticsConfig.oneOf.1","typeLabel":"null"}],"uniqueKey":"analyticsConfig","typeLabel":"object | null"},"callConfig":{"type":"object","description":"How persistently and when the agent calls. Custom agents only. An agent created before calling windows were configurable reports a `callWindow.mode` of `business_hours`.","required":["retryPolicy","callWindow"],"properties":{"retryPolicy":{"type":"object","description":"How persistently an unanswered contact is called.","required":["maxAttempts"],"properties":{"maxAttempts":{"type":"number","description":"Attempts per contact, counting the first. Reschedules the contact asks for come out of this budget; a transient network failure that never reached them does not.","minimum":1,"maximum":5,"example":3,"isRequired":true,"uniqueKey":"callConfig.retryPolicy.maxAttempts","typeLabel":"number"}},"isRequired":true,"uniqueKey":"callConfig.retryPolicy","typeLabel":"object"},"callWindow":{"type":"object","description":"The calling window as read back. Carries `mode`, which the write form does not, because agents created before calling windows were configurable have to be describable.","required":["mode"],"properties":{"mode":{"type":"string","enum":["custom","business_hours"],"description":"`custom` is a configured window, described by the fields below. `business_hours` is a legacy preset — Mon–Fri 08:00–20:00 in the contact's own timezone — carried by agents created before calling windows were configurable. It cannot be set, and such an agent reports no other window fields.","example":"custom","isRequired":true,"uniqueKey":"callConfig.callWindow.mode","typeLabel":"enum\u003cstring>"},"days":{"type":"array","description":"Days the agent may call on. Absent on `business_hours`.","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"],"uniqueKey":"callConfig.callWindow.days.items.[INDEX]","typeLabel":"enum\u003cstring>"},"example":["mon","tue","wed","thu","fri"],"uniqueKey":"callConfig.callWindow.days","typeLabel":"enum\u003cstring>[]"},"start":{"type":"string","description":"Earliest local time, `\"HH:mm\"`. Absent on `business_hours`.","example":"09:00","uniqueKey":"callConfig.callWindow.start","typeLabel":"string"},"end":{"type":"string","description":"Local closing time, `\"HH:mm\"`, exclusive. Absent on `business_hours`.","example":"18:00","uniqueKey":"callConfig.callWindow.end","typeLabel":"string"},"timezoneAnchor":{"type":"object","description":"Whose clock the hours are on. Absent on `business_hours`.","required":["mode"],"properties":{"mode":{"type":"string","enum":["contact","fixed"],"description":"`contact` detects the contact's timezone from their phone number, down to the area code: on one list a `+1 212` number is called at 09:00 in New York and a `+1 310` number at 09:00 in Los Angeles. Where a prefix covers more than one zone (an Australian `+61 8` number could be Adelaide or Perth) the window is narrowed to the part valid in every contact's zone, so nobody is called too early. `fixed` puts every contact on one named zone instead. Because every candidate zone has to allow the time, a narrow window over a wide prefix can have no valid moment at all (`09:00`–`10:00` is never true in both Adelaide and Perth at once); such a contact is called anyway rather than left uncalled, and the call is recorded as having gone out outside the window.","example":"contact","isRequired":true,"uniqueKey":"callConfig.callWindow.timezoneAnchor.mode","typeLabel":"enum\u003cstring>"},"timezone":{"type":"string","description":"IANA timezone. Required when `mode` is `fixed`, ignored otherwise. Validated against the runtime's own timezone database, so a nonexistent zone is a `422` here rather than a schedule that never fires.","example":"Europe/Bratislava","uniqueKey":"callConfig.callWindow.timezoneAnchor.timezone","typeLabel":"string"},"fallbackTimezone":{"type":"string","description":"IANA timezone used when `mode` is `contact` and the contact's number cannot be resolved to one. Defaults to `Europe/Bratislava`.","example":"Europe/Bratislava","uniqueKey":"callConfig.callWindow.timezoneAnchor.fallbackTimezone","typeLabel":"string"}},"uniqueKey":"callConfig.callWindow.timezoneAnchor","typeLabel":"object"}},"isRequired":true,"uniqueKey":"callConfig.callWindow","typeLabel":"object"}},"uniqueKey":"callConfig","typeLabel":"object"},"overrides":{"oneOf":[{"type":"object","description":"Who this agent says it is on a call, when that is not the company your API key belongs to. Null when it speaks as your own company.","properties":{"companyName":{"type":"string","description":"Company name the agent introduces itself with. Omit to use your own company's name.","minLength":1,"maxLength":100,"example":"Acme Manufacturing","uniqueKey":"overrides.oneOf.0.companyName","typeLabel":"string"},"companyDescription":{"type":"string","description":"Company description the agent may draw on. Falls back to your own company's description independently of `companyName`, so send it alongside a name override — otherwise the agent introduces itself as one company and describes another.","minLength":1,"maxLength":1000,"example":"Acme makes industrial fasteners and employs 400 people across Slovakia.","uniqueKey":"overrides.oneOf.0.companyDescription","typeLabel":"string"}},"uniqueKey":"overrides.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"overrides.oneOf.1","typeLabel":"null"}],"uniqueKey":"overrides","typeLabel":"object | null"}},"required":["id","name","type","focus","language","duration","createdAt","updatedAt"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"123e4567-e89b-12d3-a456-426614174000","name":"Frontend Developer Interview","type":"ONLINE","focus":"SCREENING","language":"EN","duration":30,"createdAt":"2025-11-20T10:30:00Z","updatedAt":"2025-11-20T10:30:00Z","questions":["What is your experience with React?"],"instructions":"Focus on technical skills and previous project experience","voiceId":"ALEX","companyId":"123e4567-e89b-12d3-a456-426614174000","metadata":{"department":"Sales"},"cefrLevel":"B1","backgroundSound":"OFFICE","flow":{"firstMessage":{"type":"first_message","text":"Hi {{contact.firstName}}, do you have two minutes?","id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","label":"Qualify budget"},"sections":[{"type":"sequential","prompt":"Introduce yourself and explain why you are calling.","id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","label":"Qualify budget"}],"lastMessage":{"type":"last_message","text":"Thanks for your time — have a great day!","id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","label":"Qualify budget"},"schemaVersion":"1.0.0"},"guardrails":{"rules":["Never quote a price","Never promise a delivery date"]},"contextConfig":{"role":"an account executive for Acme","communicationStyle":"concise and direct","callToAction":"book a 30-minute demo","useContactContext":true},"analyticsConfig":{"extractionTargets":[{"label":"Budget confirmed","type":"bool","key":"budget_confirmed","enumValues":["hot","warm","cold"],"ideal":"A confirmed budget of at least 10k","importance":"PREFERRED","weight":40}],"scoringCriteria":[{"label":"Handled objections","description":"Acknowledged the objection and answered it with a concrete example","key":"handled_objections","importance":"PREFERRED","weight":40}],"outcomes":[{"label":"Meeting booked","description":"The contact agreed to a specific date and time","key":"meeting_booked"}],"outputTags":[{"label":"Needs follow-up","key":"needs_followup","description":"The contact asked to be called back"}],"capture":{"recording":true,"transcript":true,"summary":true,"qa":true,"evaluation":true,"sentiment":true}},"callConfig":{"retryPolicy":{"maxAttempts":3},"callWindow":{"mode":"custom","days":["mon","tue","wed","thu","fri"],"start":"09:00","end":"18:00","timezoneAnchor":{"mode":"contact","timezone":"Europe/Bratislava","fallbackTimezone":"Europe/Bratislava"}}},"overrides":{"companyName":"Acme Manufacturing","companyDescription":"Acme makes industrial fasteners and employs 400 people across Slovakia."}}}},"exampleType":"generated"}},"exampleType":"generated"},"07459786-fe90-45b7-8e76-3042de3086da":{"description":"No agent with that id belongs to the API key's company. An id that exists nowhere and an id that belongs to another company answer identically — same status, same body — on purpose, so the response cannot be used to tell them apart.","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"f8ec1a45-5d67-424a-8e4e-d7376d94d444":{"description":"The conversation flow is structurally invalid. `errors` lists every problem found, each with the path of the block it is on. Other 422s on this route (changing a custom agent's focus, clearing its flow) carry a message but no `errors`.","content":{"application/json":{"schema":{"type":"object","description":"A 422 from a route that accepts a conversation flow. `errors` is present when the flow itself failed structural validation, and lists EVERY problem found — fixing a flow should not take one request per fault. It is absent on the other 422s these routes can return, which carry a `message` only.","properties":{"statusCode":{"type":"integer","example":422,"isRequired":true,"uniqueKey":"statusCode","typeLabel":"integer"},"message":{"type":"string","example":"Invalid conversation flow.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"errors":{"type":"array","description":"Every problem found in the flow, one entry per problem.","items":{"type":"object","description":"One problem found in a submitted conversation flow.","properties":{"code":{"type":"string","description":"Machine-readable code identifying what is wrong. Match on the codes you handle and fall back on `message` for the rest — the set grows as the flow schema does, and a code is added without a major version.","example":"UNKNOWN_BLOCK_TYPE","isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation of this single problem.","example":"Unknown block type: teleport.","isRequired":true,"uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"},"path":{"type":"string","description":"Path to the offending node in the flow document you sent. This is what to show a user, and what to anchor an editor to.","example":"sections[2].branches[0].blocks[1]","uniqueKey":"errors.items.[INDEX].path","typeLabel":"string"}},"required":["code","message"],"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"traceId":{"type":"string","description":"Trace identifier for this request. Quote it when contacting support.","example":"6a707aee000000000c1e285eefed9980","uniqueKey":"traceId","typeLabel":"string"}},"required":["statusCode","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"invalidFlow":{"title":"invalidFlow","value":{"statusCode":422,"message":"Invalid conversation flow.","errors":[{"code":"CONDITIONAL_BRANCH_LABEL_DUPLICATE","message":"Duplicate branch label: Interested.","path":"sections[1]"}],"traceId":"6a707aee000000000c1e285eefed9980"}},"focusChange":{"title":"focusChange","value":{"statusCode":422,"message":"The focus of a custom agent cannot be changed. Create a new agent instead.","traceId":"6a707aee000000000c1e285eefed9980"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"aa6dbbd6-9123-4b70-b7be-a9b574a0c629":{"bearer":{"type":"http","scheme":"bearer","description":"API key for authentication using Bearer scheme","scopes":[],"schemeName":"bearer"}}},"servers":{"fefe9da2-a252-4644-8424-0eaff357a7a8":{"url":"https://api.instaview.sk","description":"Production API Gateway"}},"schemas":{"1c317405-133d-44b5-8795-2ec01022a596":{"oneOf":[{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","prompt"],"properties":{"type":{"type":"string","enum":["sequential"],"isRequired":true},"prompt":{"type":"string","description":"What the agent should cover here. Supports `{{contact.*}}` variables.","example":"Introduce yourself and explain why you are calling.","isRequired":true},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget"}}},{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","questions"],"properties":{"type":{"type":"string","enum":["looping"],"isRequired":true},"questions":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["question"],"properties":{"question":{"type":"string","description":"The question to ask. Supports `{{contact.*}}` variables.","example":"What are you using today?","isRequired":true},"idealAnswer":{"type":"string","description":"What a good answer looks like, used when scoring the call. Optional, and it is the scoring switch: a question without one is still asked but never scored, which is how you write a question set that has no right answers (an internal survey, a satisfaction check).","example":"Names a competing tool"},"weight":{"type":"number","description":"Relative importance of this question when scoring. Setting it also opts the question into the match score (as `PREFERRED` unless `importance` says otherwise).","minimum":0,"example":40,"maximum":100},"importance":{"type":"string","description":"Opts this question into the agent's match score. Set `importance` (or `weight`) to score it; a question with neither is asked but not scored. `REQUIRED` gates the score, `PREFERRED` contributes by weight.","enum":["REQUIRED","PREFERRED"],"example":"PREFERRED"}},"description":"A question the agent asks, optionally with the answer it is measured against. `importance` and `weight` are how a question joins the match score — they live here rather than in `analyticsConfig` because a question is addressed by an id InstaView assigns, which a caller cannot know when writing the flow."},"isRequired":true},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget"}}},{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","branches"],"properties":{"type":{"type":"string","enum":["conditional"],"isRequired":true},"branches":{"type":"array","description":"Between 2 and 5 routes, evaluated in order.","minItems":2,"maxItems":5,"items":{"type":"object","description":"One route out of a `conditional`. Every entry in `branches` must be an object; anything else (a `null` left by a client that built the array by index, say) is rejected with `422` (`CONDITIONAL_BRANCH_NOT_AN_OBJECT`).","required":["label","condition","blocks"],"properties":{"label":{"type":"string","description":"What this route is — unique within the block, and how `defaultBranch` addresses it.","example":"Interested","isRequired":true},"condition":{"oneOf":[{"type":"object","description":"How the route is chosen.\n\nRequired on every branch, and it must match one of the two shapes below — it is what the agent routes on. A missing or non-object condition is rejected with `422` (`CONDITIONAL_CONDITION_MISSING`), a `type` that is neither `intent` nor `expression` with `CONDITIONAL_CONDITION_TYPE_UNKNOWN`, and a condition of a known type missing the fields that type needs with `CONDITIONAL_CONDITION_INVALID`. Each carries the `path` of the offending branch, e.g. `sections[0].branches[1].condition`.\n\nThe branch nominated by `defaultBranch` is checked like any other. Its condition is not read while it is the fallthrough, but moving `defaultBranch` to a different branch later would put it back in charge of a route.","required":["type","description"],"properties":{"type":{"type":"string","enum":["intent"],"isRequired":true},"description":{"type":"string","description":"The intent to match. Must be non-empty: it is the whole instruction the agent reads this route off, so a blank one is rejected with `422` (`CONDITIONAL_CONDITION_INVALID`) rather than stored as a route nothing selects. Whitespace does not count as content, which is what the pattern says and what the validator checks.","minLength":1,"pattern":"\\S","example":"wants to see a demo","isRequired":true}},"isRequired":true},{"type":"object","description":"How the route is chosen.\n\nRequired on every branch, and it must match one of the two shapes below — it is what the agent routes on. A missing or non-object condition is rejected with `422` (`CONDITIONAL_CONDITION_MISSING`), a `type` that is neither `intent` nor `expression` with `CONDITIONAL_CONDITION_TYPE_UNKNOWN`, and a condition of a known type missing the fields that type needs with `CONDITIONAL_CONDITION_INVALID`. Each carries the `path` of the offending branch, e.g. `sections[0].branches[1].condition`.\n\nThe branch nominated by `defaultBranch` is checked like any other. Its condition is not read while it is the fallthrough, but moving `defaultBranch` to a different branch later would put it back in charge of a route.","required":["type","field","operator"],"properties":{"type":{"type":"string","enum":["expression"],"isRequired":true},"field":{"type":"string","description":"Name of the extracted field to test. Must be non-empty, whitespace excluded (`CONDITIONAL_CONDITION_INVALID`).","minLength":1,"pattern":"\\S","example":"budget","isRequired":true},"operator":{"type":"string","enum":["EQUALS","NOT_EQUALS","GREATER_THAN","LESS_THAN","CONTAINS","EXISTS"],"isRequired":true},"value":{"description":"Value to compare against. Required for every operator except EXISTS, which ignores it — omitting it for any other operator is rejected with `422` (`CONDITIONAL_CONDITION_INVALID`), since there is then nothing to compare against. Use a number for GREATER_THAN and LESS_THAN, and a string for CONTAINS.","example":1000},"logicalOperator":{"type":"string","description":"Reserved. Nothing composes conditions yet — a branch takes exactly one — so this is accepted and ignored.","enum":["AND","OR"]}},"isRequired":true}],"isRequired":true},"blocks":{"type":"array","description":"The sections executed on this route. Conditionals may nest up to 3 levels deep.","maxItems":50,"items":{"$circularRef":"1c317405-133d-44b5-8795-2ec01022a596"},"isRequired":true}}},"isRequired":true},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder.","example":"Qualify budget"},"defaultBranch":{"type":"string","description":"Label of the branch to fall through to when no condition matches. Branch ids are assigned by InstaView, so the fallthrough route is addressed by label; a label that matches no branch is rejected with `400`. Returned on reads as well, so a flow read back can be sent again unchanged apart from the assigned ids.","example":"Not now"}}},{"type":"object","description":"One section of the conversation. `type` selects the shape.","required":["type","phoneNumber"],"properties":{"type":{"type":"string","enum":["human_handoff"],"isRequired":true},"phoneNumber":{"type":"string","description":"Where to transfer the call, in E.164 format — a leading `+`, country code, no spaces or dashes. A number that is not E.164 is rejected with `422` (`HUMAN_HANDOFF_INVALID_NUMBER`) when the agent is created, not when the transfer is attempted.","example":"+421900123456","isRequired":true},"label":{"type":"string","description":"Optional name for this block, shown in the visual builder. Also names the destination for the agent, so a label saying who answers the number is worth setting.","example":"Sales"},"message":{"type":"string","description":"The line the caller hears as the call is transferred to this number. Optional — omitted, InstaView supplies a neutral line in the call's language, which promises nothing about who answers because the block does not know. **Keep it true on every transfer to this number:** a caller who asks for a person before the flow reaches this step can be transferred here and hear it too, so describe the transfer, not what came before it. Anything true only at this point of the flow belongs in the step before the handoff, which the agent says in a turn of its own and then transfers once the caller has responded. Blocks that share a `phoneNumber` share one line, taken from the first block that names the number (top to bottom): a later block's `message` is never heard, and if the first block has none the neutral line is used. Supports `{{contact.*}}` and `{{system.*}}` variables; a line that resolves to nothing on a call (only variables, none with a value) falls back to the neutral line rather than a silent transfer. An empty string is rejected (`HUMAN_HANDOFF_MESSAGE_EMPTY`) rather than read as absent, so clearing the field cannot silently restore the default.","example":"I'll put you through to Martin on our sales team now, one moment."}}}]}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key for authentication using Bearer scheme","scopes":[],"schemeName":"bearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key for authentication using Bearer scheme","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearer","name":"Authorization"}],"title":"bearer"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"instaview","siteName":"InstaView API","title":"Update Agent - InstaView API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-28T12:28:33.866Z","originalFileLocation":"api-reference/agents/update-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 an existing agent scoped to the API key\u0026#x27;s company. Sending a flow makes the agent custom; clearing the flow of a custom agent, or changing its focus, is rejected.\">\u003cmeta data-mint-head name=\"application-name\" content=\"InstaView API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/instaview/FzS1-dDCztzdlzmX/_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/instaview/FzS1-dDCztzdlzmX/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/instaview/FzS1-dDCztzdlzmX/_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/instaview/FzS1-dDCztzdlzmX/_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/instaview/FzS1-dDCztzdlzmX/_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/instaview/FzS1-dDCztzdlzmX/_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/instaview/FzS1-dDCztzdlzmX/_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/instaview/FzS1-dDCztzdlzmX/_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/instaview/FzS1-dDCztzdlzmX/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update Agent - InstaView API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Updates an existing agent scoped to the API key\u0026#x27;s company. Sending a flow makes the agent custom; clearing the flow of a custom agent, or changing its focus, is rejected.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"InstaView API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.instaview.sk/api-reference/agents/update-agent\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://instaview.mintlify.app/_mintlify/api/og/v2?division=Agents\u0026amp;title=Update+Agent\u0026amp;description=Updates+an+existing+agent+scoped+to+the+API+key%27s+company.+Sending+a+%60flow%60+makes+the+agent+custom%3B+clearing+the+flow+of+a+custom+agent%2C+or+changing+its+focus%2C+\u0026amp;theme=1444b1b95306a409923bc3c0\u0026amp;signature=2784d9d0f538cf43ca923280499f4228698d47d30ef3a5abbfdce149a14b6588\">\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 Agent - InstaView API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Updates an existing agent scoped to the API key\u0026#x27;s company. Sending a flow makes the agent custom; clearing the flow of a custom agent, or changing its focus, is rejected.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://instaview.mintlify.app/_mintlify/api/og/v2?division=Agents\u0026amp;title=Update+Agent\u0026amp;description=Updates+an+existing+agent+scoped+to+the+API+key%27s+company.+Sending+a+%60flow%60+makes+the+agent+custom%3B+clearing+the+flow+of+a+custom+agent%2C+or+changing+its+focus%2C+\u0026amp;theme=1444b1b95306a409923bc3c0\u0026amp;signature=2784d9d0f538cf43ca923280499f4228698d47d30ef3a5abbfdce149a14b6588\">\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/instaview/FzS1-dDCztzdlzmX/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"InstaView API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2741F9\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.instaview.sk/api-reference/agents/update-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-agent.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.instaview.sk/#organization\",\"name\":\"InstaView API\",\"url\":\"https://docs.instaview.sk\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/instaview/srYC_WLR3UAwt0PY/logo/light.svg?fit=max\u0026auto=format\u0026n=srYC_WLR3UAwt0PY\u0026q=85\u0026s=a941bc948e20b3503a55e49b4438bfd8\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.instaview.sk#website\",\"name\":\"InstaView API\",\"url\":\"https://docs.instaview.sk\",\"publisher\":{\"@id\":\"https://docs.instaview.sk/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.instaview.sk/api-reference/agents/update-agent#webpage\",\"url\":\"https://docs.instaview.sk/api-reference/agents/update-agent\",\"name\":\"Update Agent\",\"description\":\"Updates an existing agent scoped to the API key's company. Sending a flow makes the agent custom; clearing the flow of a custom agent, or changing its focus, is rejected.\",\"dateModified\":\"2026-08-28T12:28:33.866Z\",\"isPartOf\":{\"@id\":\"https://docs.instaview.sk#website\"},\"breadcrumb\":{\"@id\":\"https://docs.instaview.sk/api-reference/agents/update-agent#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.instaview.sk/api-reference/agents/update-agent#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Agents\",\"item\":\"https://docs.instaview.sk/api-reference/agents/list-agents\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Update Agent\",\"item\":\"https://docs.instaview.sk/api-reference/agents/update-agent\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.instaview.sk/api-reference/agents/update-agent#apireference\",\"headline\":\"Update Agent\",\"name\":\"Update Agent\",\"description\":\"Updates an existing agent scoped to the API key's company. Sending a flow makes the agent custom; clearing the flow of a custom agent, or changing its focus, is rejected.\",\"url\":\"https://docs.instaview.sk/api-reference/agents/update-agent\",\"mainEntityOfPage\":{\"@id\":\"https://docs.instaview.sk/api-reference/agents/update-agent#webpage\"},\"dateModified\":\"2026-08-28T12:28:33.866Z\",\"publisher\":{\"@id\":\"https://docs.instaview.sk/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.instaview.sk#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"InstaView API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"InstaView API","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","icon":"code","groups":[{"group":"Overview","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"group":"Agents","pages":[{"title":"List Agents","openapi":"GET /agents","href":"/api-reference/agents/list-agents"},{"title":"Design an Agent","openapi":"POST /agents/composer","href":"/api-reference/agents/compose-agent"},{"title":"Refine a Composed Agent","openapi":"POST /agents/composer/{sessionId}/messages","href":"/api-reference/agents/refine-agent"},{"title":"Poll a Composer Session","openapi":"GET /agents/composer/{sessionId}","href":"/api-reference/agents/get-composer-session"},{"title":"Create Agent","openapi":"POST /agents","href":"/api-reference/agents/create-agent"},{"title":"Get Agent","openapi":"GET /agents/{id}","description":"Returns a single agent, ensuring it belongs to the API key's company.","href":"/api-reference/agents/get-agent"},{"title":"Update Agent","openapi":"PATCH /agents/{id}","href":"/api-reference/agents/update-agent"},{"title":"Delete Agent","openapi":"DELETE /agents/{id}","description":"Permanently deletes an agent that belongs to the API key's company. This action cannot be undone, and the delete cascades to every conversation the agent ran.","href":"/api-reference/agents/delete-agent"}]},{"group":"Agent Knowledge Base","pages":[{"title":"List Knowledge Documents","openapi":"GET /agents/{id}/knowledge","href":"/api-reference/agents/knowledge/list-knowledge"},{"title":"Start Knowledge Upload","openapi":"POST /agents/{id}/knowledge","href":"/api-reference/agents/knowledge/start-upload"},{"title":"Complete Knowledge Upload","openapi":"POST /agents/{id}/knowledge/{documentId}/complete","href":"/api-reference/agents/knowledge/complete-upload"},{"title":"Update Knowledge Document","openapi":"PATCH /agents/{id}/knowledge/{documentId}","href":"/api-reference/agents/knowledge/update-knowledge"},{"title":"Delete Knowledge Document","openapi":"DELETE /agents/{id}/knowledge/{documentId}","href":"/api-reference/agents/knowledge/delete-knowledge"}]},{"group":"Jobs","pages":[{"title":"List Jobs","openapi":"GET /jobs","href":"/api-reference/jobs/list-jobs"},{"title":"Create Job","openapi":"POST /jobs","href":"/api-reference/jobs/create-job"},{"title":"Create Job from URL","openapi":"POST /jobs/url","href":"/api-reference/jobs/create-job-from-url"},{"title":"Get Job","openapi":"GET /jobs/{id}","href":"/api-reference/jobs/get-job"},{"title":"Update Job","openapi":"PATCH /jobs/{id}","href":"/api-reference/jobs/update-job"},{"title":"Delete Job","openapi":"DELETE /jobs/{id}","href":"/api-reference/jobs/delete-job"}]},{"group":"Contacts","pages":[{"title":"List Contacts","openapi":"GET /contacts","href":"/api-reference/contacts/list-contacts"},{"title":"Create Contact","openapi":"POST /contacts","href":"/api-reference/contacts/create-contact"},{"title":"Get Contact","openapi":"GET /contacts/{id}","href":"/api-reference/contacts/get-contact"},{"title":"Update Contact","openapi":"PATCH /contacts/{id}","href":"/api-reference/contacts/update-contact"},{"title":"Delete Contact","openapi":"DELETE /contacts/{id}","href":"/api-reference/contacts/delete-contact"}]},{"group":"Contact Documents","pages":[{"title":"List Contact Documents","openapi":"GET /contacts/{id}/documents","href":"/api-reference/contacts/documents/list-documents"},{"title":"Start Contact Document Upload","openapi":"POST /contacts/{id}/documents/uploads","href":"/api-reference/contacts/documents/start-upload"},{"title":"Complete Contact Document Upload","openapi":"POST /contacts/{id}/documents/{documentId}/complete","href":"/api-reference/contacts/documents/complete-upload"},{"title":"Update Contact Document","openapi":"PATCH /contacts/{id}/documents/{documentId}","href":"/api-reference/contacts/documents/update-document"},{"title":"Delete Contact Document","openapi":"DELETE /contacts/{id}/documents/{documentId}","href":"/api-reference/contacts/documents/delete-document"}]},{"group":"Contact Fields","pages":[{"title":"List Contact Fields","openapi":"GET /contact-fields","href":"/api-reference/contact-fields/list-contact-fields"},{"title":"Create Contact Field","openapi":"POST /contact-fields","href":"/api-reference/contact-fields/create-contact-field"},{"title":"Update Contact Field","openapi":"PATCH /contact-fields/{id}","href":"/api-reference/contact-fields/update-contact-field"},{"title":"Delete Contact Field","openapi":"DELETE /contact-fields/{id}","href":"/api-reference/contact-fields/delete-contact-field"}]},{"group":"Companies","pages":[{"title":"List Companies","openapi":"GET /company","href":"/api-reference/companies/list-companies"},{"title":"Create Company","openapi":"POST /company","href":"/api-reference/companies/create-company"},{"title":"Get Company","openapi":"GET /company/{id}","href":"/api-reference/companies/get-company"},{"title":"Update Company","openapi":"PATCH /company/{id}","href":"/api-reference/companies/update-company"},{"title":"Delete Company","openapi":"DELETE /company/{id}","href":"/api-reference/companies/delete-company"}]},{"group":"Conversations","pages":[{"title":"List Conversations","openapi":"GET /conversations","href":"/api-reference/conversations/list-conversations"},{"title":"Create Conversation","openapi":"POST /conversations","href":"/api-reference/conversations/create-conversation"},{"title":"Get Conversation","openapi":"GET /conversations/{id}","href":"/api-reference/conversations/get-conversation"},{"title":"Get Conversation Analysis PDF","openapi":"GET /conversations/{id}/analysis-pdf","href":"/api-reference/conversations/get-conversation-analysis-pdf"},{"title":"Invoke New Call Attempt","openapi":"POST /conversations/{id}/call-attempts","href":"/api-reference/conversations/invoke-call-attempt"},{"title":"Reschedule Call Attempt","openapi":"PATCH /conversations/{id}/call-attempts/{attemptId}","href":"/api-reference/conversations/reschedule-call-attempt"},{"title":"Delete Call Attempt","openapi":"DELETE /conversations/{id}/call-attempts/{attemptId}","href":"/api-reference/conversations/delete-call-attempt"},{"title":"Delete Conversation","openapi":"DELETE /conversations/{id}","href":"/api-reference/conversations/delete-conversation"}]},{"group":"Runs","pages":[{"title":"Create Run","openapi":"POST /runs","href":"/api-reference/runs/create-run"},{"title":"Get Run","openapi":"GET /runs/{id}","href":"/api-reference/runs/get-run"},{"title":"List Run Conversations","openapi":"GET /runs/{id}/conversations","href":"/api-reference/runs/list-run-conversations"},{"title":"Attach Contacts","openapi":"POST /runs/{id}/contacts","href":"/api-reference/runs/attach-run-contacts"},{"title":"Detach Contact","openapi":"DELETE /runs/{id}/contacts/{contactId}","href":"/api-reference/runs/detach-run-contact"},{"title":"Launch Run","openapi":"POST /runs/{id}/launch","href":"/api-reference/runs/launch-run"},{"title":"Pause Run","openapi":"POST /runs/{id}/pause","href":"/api-reference/runs/pause-run"},{"title":"Resume Run","openapi":"POST /runs/{id}/resume","href":"/api-reference/runs/resume-run"},{"title":"Cancel Run","openapi":"POST /runs/{id}/cancel","href":"/api-reference/runs/cancel-run"},{"title":"Delete Run","openapi":"DELETE /runs/{id}","href":"/api-reference/runs/delete-run"}]},{"group":"Billing","pages":[{"title":"Get Usage Statistics","openapi":"GET /billing/usage","href":"/api-reference/billing/get-usage"}]},{"group":"Voice","pages":[{"title":"Generate Audio","openapi":"POST /voice","href":"/api-reference/voice/generate-audio"}]},{"group":"Webhooks","pages":[{"title":"List Webhooks","api":"GET /webhooks","href":"/api-reference/webhooks/list-webhooks"},{"title":"Create Webhook","api":"POST /webhooks","href":"/api-reference/webhooks/create-webhook"},{"title":"Get Webhook","api":"GET /webhooks/{id}","href":"/api-reference/webhooks/get-webhook"},{"title":"Update Webhook","api":"PATCH /webhooks/{id}","href":"/api-reference/webhooks/update-webhook"},{"title":"Delete Webhook","api":"DELETE /webhooks/{id}","href":"/api-reference/webhooks/delete-webhook"},{"title":"Test Webhook","api":"POST /webhooks/{id}/test","href":"/api-reference/webhooks/test-webhook"},{"title":"Reset Circuit Breaker","api":"POST /webhooks/{id}/reset-circuit","href":"/api-reference/webhooks/reset-circuit"}]},{"group":"Sourcing","pages":[{"title":"Initiate Sourcing Run","openapi":"POST /sourcing","href":"/api-reference/sourcing/initiate-sourcing"},{"title":"Initiate Sourcing Preview Run","openapi":"POST /sourcing/preview","href":"/api-reference/sourcing/initiate-sourcing-preview"},{"title":"Get Sourcing Preview Results","openapi":"GET /sourcing/preview/{id}/results","href":"/api-reference/sourcing/get-sourcing-preview-results"},{"title":"Patch Sourcing Run","openapi":"PATCH /sourcing/{id}","href":"/api-reference/sourcing/patch-sourcing"},{"title":"Get Sourcing Results","openapi":"GET /sourcing/{id}/results","href":"/api-reference/sourcing/get-sourcing-results"},{"title":"Initiate Enrichment Run","openapi":"POST /sourcing/enrich","href":"/api-reference/sourcing/initiate-enrichment"},{"title":"Get Enrichment Results","openapi":"GET /sourcing/enrich/{id}/results","href":"/api-reference/sourcing/get-enrich-results"},{"title":"Render HTML Candidate Cards","openapi":"POST /sourcing/render-html","href":"/api-reference/sourcing/render-html"}]},{"group":"Phone Numbers","pages":[{"title":"List Phone Numbers","openapi":"GET /phone-numbers","href":"/api-reference/phone-numbers/list-phone-numbers"}]}]},{"tab":"Changelog","icon":"clock","pages":[{"title":"Changelog","href":"/changelog/introduction"}]}]},"title":"Update Agent - InstaView API","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Bbp7I60D.js","utils-C3RIvJha.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DqD-vLt8.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B31Loprg.js","snippetPresets-DKpk-b8t.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Cj65AhOR.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BXtn5gcC.js","shallow-RY2b03Cp.js","getApiPlaygroundDisplay-B0jeiPk3.js","CodeSnippet-CYgBjjwn.js","CodeSnippets-DOngDrYB.js","Page-n7I5XbKb.js","getPastedJson-DRQbJx-T.js","icon-CQiQCicY.js","MethodPill-BKTLdNtu.js","DuplicateIcon-B9jpAdat.js","createIcon-DCddRrXv.js","DynamicMarkdown-a8hUKrw6.js","SectionHeading-eECVV2eH.js","axios-vUo_bRtp.js","Markdown--GF7ZIpf.js","clsx-DZLdJUrt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-2LoAhjKH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Zwc0ZncM.js"]}