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_bodyUpdate 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.
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_bodyOverview
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.Use Cases
- Refine Questions: Change what the agent asks
- Adjust Settings: Change voice, duration or type
- Update Criteria: Modify evaluation criteria as requirements evolve
- Iterative Improvement: Continuously improve agent configurations
Partial Updates
You can update any combination of fields:// Update only questions
PATCH /agents/{id}
{
"questions": [
"New question 1",
"New question 2"
]
}
// Update multiple fields
PATCH /agents/{id}
{
"name": "Updated Agent Name",
"focus": "SCREENING",
"duration": 45,
"questions": [
"Updated question 1",
"Updated question 2"
]
}
Fields That Can Be Updated
name: Agent display nametype: Agent type (ONLINE, PHONE)focus: Agent focus (GENERIC, SCREENING, OUTREACH, LANGUAGE_TEST)language: language code for the callduration: call duration in minutes (max 180)questions: the questions to askinstructions: additional instructions for the agentvoiceId: the voice the agent speaks withcefrLevel: CEFR level for language test agentsbackgroundSound: Ambient background sound during calls (OFFICEorOFF)flow: Conversation flow graph — see Custom Agents belowguardrails,contextConfig,analyticsConfig,callConfig: Custom agent configurationoverrides: The company the agent speaks as — see Speaking for another company below
Custom Agents
Sending aflow 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"] }
}
focuscannot 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": nullon a custom agent would leave it with nothing to run. guardrails,contextConfig,analyticsConfigandcallConfigapply only to custom agents (422otherwise). Send aflowin the same request to make the agent custom.
Updating analytics
analyticsConfig replaces the stored config outright; send null to remove it.
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.// stored: extractionTargets + outputTags
PATCH /agents/{id}
{ "analyticsConfig": { "extractionTargets": [{ "label": "Budget", "type": "bool" }] } }
// stored now: extractionTargets ONLY — outputTags is gone
analyticsConfig you get back — its keys round-trip, so resending it is safe.| 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. |
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.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.
Updating retries and calling hours
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:
{ "callConfig": { "retryPolicy": { "maxAttempts": 5 } } }
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.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.
Company Isolation
You can only update agents that belong to your API key’s company. Attempting to update an agent from another company will result in a403 Forbidden error.
Phone Agents
If you update an agent’stype to PHONE, you must also provide a companyPhoneNumberId in the same request.
PATCH /agents/{id}
{
"type": "PHONE",
"companyPhoneNumberId": "123e4567-e89b-12d3-a456-426614174000"
}
Background Sound
UsebackgroundSound 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"
}
backgroundSound keeps the existing value on the agent.Speaking for Another Company
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."overrides": null to clear them; the agent goes back to speaking as your own company. Omitting the field leaves the stored overrides alone.
Impact on Existing Conversations
Error Scenarios
- 404 Not Found: Agent doesn’t exist or has been deleted
- 403 Forbidden: Agent belongs to a different company
- 400 Bad Request: Invalid field values or validation errors
Related Resources
Agents Resource Guide
Get Agent
Create Agent
Authorizations
API key for authentication using Bearer scheme
Path Parameters
Query Parameters
Required for ATS API keys to specify which company to access. Ignored for standard company API keys.
Body
Agent name
2 - 100"Updated Senior Developer Interview"
Type of the agent
UNDEFINED, ONLINE, PHONE "ONLINE"
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).
GENERIC, SCREENING, OUTREACH, LANGUAGE_TEST "SCREENING"
List of questions for the conversation
50["What is your experience with React?"]
Additional instructions for the conversation
2000"Focus on system design and communication"
Language of the conversation
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 "EN"
Duration of the conversation in minutes
1 <= x <= 18045
Voice ID the agent speaks with (null clears existing voice)
ALEX, PETER, MIRIAM, SUE, VIERA, CASANDRA, SILVIA, MICHAEL, LUKE, EMMA, SARAH, EVA CEFR level for language test agents
A1, A2, B1, B2, C1, C2 "B2"
ID of the company phone number assignment to use for calls from this agent (CompanyPhoneNumber.id)
"123e4567-e89b-12d3-a456-426614174000"
Custom metadata (merged with existing metadata, max 10KB, 5 levels deep, 50 keys)
{ "department": "Engineering" }
Ambient background sound during calls (OFFICE or OFF). Omit to keep the existing value, set null to clear override.
OFF, OFFICE "OFFICE"
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
Response
Agent ID
"123e4567-e89b-12d3-a456-426614174000"
Agent name
"Frontend Developer Interview"
Type of the agent
UNDEFINED, ONLINE, PHONE "ONLINE"
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.
GENERIC, SCREENING, OUTREACH, LANGUAGE_TEST "SCREENING"
Language of the conversation
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 "EN"
Duration of the conversation in minutes
30
Agent creation timestamp (UTC)
"2025-11-20T10:30:00Z"
Agent last update timestamp (UTC)
"2025-11-20T10:30:00Z"
List of questions for the conversation
["What is your experience with React?"]
Additional instructions for the conversation
"Focus on technical skills and previous project experience"
Voice ID the agent speaks with
ALEX, PETER, MIRIAM, SUE, VIERA, CASANDRA, SILVIA, MICHAEL, LUKE, EMMA, SARAH, EVA Company ID that owns the agent
"123e4567-e89b-12d3-a456-426614174000"
Custom metadata
{ "department": "Sales" }
CEFR level for language test agents
A1, A2, B1, B2, C1, C2 "B1"
Ambient background sound during calls (OFFICE or OFF). Null means no override is set and the default applies.
OFF, OFFICE "OFFICE"
Conversation flow graph, as designed. Null on a template agent.
Show child attributes
Show child attributes
Rules the agent must obey during the call. Custom agents only; null on a template agent.
Show child attributes
Show child attributes
Who the agent is and what the call is about. Custom agents only; null on a template agent.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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
Show child attributes