curl --request PUT \
--url https://api.parallellabs.app/api/v0/agents/{agentId} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "<string>",
"avatarImage": "<string>",
"systemPrompt": "<string>",
"agentPrompt": "<string>",
"customColors": {},
"model": "<string>",
"channelSettings": {},
"leadFields": [
{}
],
"contactListId": "<string>",
"aiContactCaptureEnabled": true,
"isActive": true,
"knowledgeBaseEnabled": true,
"knowledgeBaseScope": "<string>",
"multiStepToolsEnabled": true,
"multiStepMaxTurns": 123
}
'import requests
url = "https://api.parallellabs.app/api/v0/agents/{agentId}"
payload = {
"name": "<string>",
"avatarImage": "<string>",
"systemPrompt": "<string>",
"agentPrompt": "<string>",
"customColors": {},
"model": "<string>",
"channelSettings": {},
"leadFields": [{}],
"contactListId": "<string>",
"aiContactCaptureEnabled": True,
"isActive": True,
"knowledgeBaseEnabled": True,
"knowledgeBaseScope": "<string>",
"multiStepToolsEnabled": True,
"multiStepMaxTurns": 123
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
avatarImage: '<string>',
systemPrompt: '<string>',
agentPrompt: '<string>',
customColors: {},
model: '<string>',
channelSettings: {},
leadFields: [{}],
contactListId: '<string>',
aiContactCaptureEnabled: true,
isActive: true,
knowledgeBaseEnabled: true,
knowledgeBaseScope: '<string>',
multiStepToolsEnabled: true,
multiStepMaxTurns: 123
})
};
fetch('https://api.parallellabs.app/api/v0/agents/{agentId}', 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.parallellabs.app/api/v0/agents/{agentId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'avatarImage' => '<string>',
'systemPrompt' => '<string>',
'agentPrompt' => '<string>',
'customColors' => [
],
'model' => '<string>',
'channelSettings' => [
],
'leadFields' => [
[
]
],
'contactListId' => '<string>',
'aiContactCaptureEnabled' => true,
'isActive' => true,
'knowledgeBaseEnabled' => true,
'knowledgeBaseScope' => '<string>',
'multiStepToolsEnabled' => true,
'multiStepMaxTurns' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.parallellabs.app/api/v0/agents/{agentId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"avatarImage\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"agentPrompt\": \"<string>\",\n \"customColors\": {},\n \"model\": \"<string>\",\n \"channelSettings\": {},\n \"leadFields\": [\n {}\n ],\n \"contactListId\": \"<string>\",\n \"aiContactCaptureEnabled\": true,\n \"isActive\": true,\n \"knowledgeBaseEnabled\": true,\n \"knowledgeBaseScope\": \"<string>\",\n \"multiStepToolsEnabled\": true,\n \"multiStepMaxTurns\": 123\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.put("https://api.parallellabs.app/api/v0/agents/{agentId}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"avatarImage\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"agentPrompt\": \"<string>\",\n \"customColors\": {},\n \"model\": \"<string>\",\n \"channelSettings\": {},\n \"leadFields\": [\n {}\n ],\n \"contactListId\": \"<string>\",\n \"aiContactCaptureEnabled\": true,\n \"isActive\": true,\n \"knowledgeBaseEnabled\": true,\n \"knowledgeBaseScope\": \"<string>\",\n \"multiStepToolsEnabled\": true,\n \"multiStepMaxTurns\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/agents/{agentId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"avatarImage\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"agentPrompt\": \"<string>\",\n \"customColors\": {},\n \"model\": \"<string>\",\n \"channelSettings\": {},\n \"leadFields\": [\n {}\n ],\n \"contactListId\": \"<string>\",\n \"aiContactCaptureEnabled\": true,\n \"isActive\": true,\n \"knowledgeBaseEnabled\": true,\n \"knowledgeBaseScope\": \"<string>\",\n \"multiStepToolsEnabled\": true,\n \"multiStepMaxTurns\": 123\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"avatarImage": "<string>",
"systemPrompt": "<string>",
"agentPrompt": "<string>",
"customColors": {},
"model": "<string>",
"channelSettings": {},
"leadFields": [
{}
],
"contactListId": "<string>",
"aiContactCaptureEnabled": true,
"isActive": true,
"knowledgeBaseEnabled": true,
"knowledgeBaseScope": "<string>",
"multiStepToolsEnabled": true,
"multiStepMaxTurns": 123,
"shortCode": "<string>",
"created": 123,
"updated": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Update an existing agent.
Updates the agent configuration. Only include fields that need to be changed - unspecified fields will retain their current values.
curl --request PUT \
--url https://api.parallellabs.app/api/v0/agents/{agentId} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "<string>",
"avatarImage": "<string>",
"systemPrompt": "<string>",
"agentPrompt": "<string>",
"customColors": {},
"model": "<string>",
"channelSettings": {},
"leadFields": [
{}
],
"contactListId": "<string>",
"aiContactCaptureEnabled": true,
"isActive": true,
"knowledgeBaseEnabled": true,
"knowledgeBaseScope": "<string>",
"multiStepToolsEnabled": true,
"multiStepMaxTurns": 123
}
'import requests
url = "https://api.parallellabs.app/api/v0/agents/{agentId}"
payload = {
"name": "<string>",
"avatarImage": "<string>",
"systemPrompt": "<string>",
"agentPrompt": "<string>",
"customColors": {},
"model": "<string>",
"channelSettings": {},
"leadFields": [{}],
"contactListId": "<string>",
"aiContactCaptureEnabled": True,
"isActive": True,
"knowledgeBaseEnabled": True,
"knowledgeBaseScope": "<string>",
"multiStepToolsEnabled": True,
"multiStepMaxTurns": 123
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
avatarImage: '<string>',
systemPrompt: '<string>',
agentPrompt: '<string>',
customColors: {},
model: '<string>',
channelSettings: {},
leadFields: [{}],
contactListId: '<string>',
aiContactCaptureEnabled: true,
isActive: true,
knowledgeBaseEnabled: true,
knowledgeBaseScope: '<string>',
multiStepToolsEnabled: true,
multiStepMaxTurns: 123
})
};
fetch('https://api.parallellabs.app/api/v0/agents/{agentId}', 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.parallellabs.app/api/v0/agents/{agentId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'avatarImage' => '<string>',
'systemPrompt' => '<string>',
'agentPrompt' => '<string>',
'customColors' => [
],
'model' => '<string>',
'channelSettings' => [
],
'leadFields' => [
[
]
],
'contactListId' => '<string>',
'aiContactCaptureEnabled' => true,
'isActive' => true,
'knowledgeBaseEnabled' => true,
'knowledgeBaseScope' => '<string>',
'multiStepToolsEnabled' => true,
'multiStepMaxTurns' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.parallellabs.app/api/v0/agents/{agentId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"avatarImage\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"agentPrompt\": \"<string>\",\n \"customColors\": {},\n \"model\": \"<string>\",\n \"channelSettings\": {},\n \"leadFields\": [\n {}\n ],\n \"contactListId\": \"<string>\",\n \"aiContactCaptureEnabled\": true,\n \"isActive\": true,\n \"knowledgeBaseEnabled\": true,\n \"knowledgeBaseScope\": \"<string>\",\n \"multiStepToolsEnabled\": true,\n \"multiStepMaxTurns\": 123\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.put("https://api.parallellabs.app/api/v0/agents/{agentId}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"avatarImage\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"agentPrompt\": \"<string>\",\n \"customColors\": {},\n \"model\": \"<string>\",\n \"channelSettings\": {},\n \"leadFields\": [\n {}\n ],\n \"contactListId\": \"<string>\",\n \"aiContactCaptureEnabled\": true,\n \"isActive\": true,\n \"knowledgeBaseEnabled\": true,\n \"knowledgeBaseScope\": \"<string>\",\n \"multiStepToolsEnabled\": true,\n \"multiStepMaxTurns\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/agents/{agentId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"avatarImage\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"agentPrompt\": \"<string>\",\n \"customColors\": {},\n \"model\": \"<string>\",\n \"channelSettings\": {},\n \"leadFields\": [\n {}\n ],\n \"contactListId\": \"<string>\",\n \"aiContactCaptureEnabled\": true,\n \"isActive\": true,\n \"knowledgeBaseEnabled\": true,\n \"knowledgeBaseScope\": \"<string>\",\n \"multiStepToolsEnabled\": true,\n \"multiStepMaxTurns\": 123\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"avatarImage": "<string>",
"systemPrompt": "<string>",
"agentPrompt": "<string>",
"customColors": {},
"model": "<string>",
"channelSettings": {},
"leadFields": [
{}
],
"contactListId": "<string>",
"aiContactCaptureEnabled": true,
"isActive": true,
"knowledgeBaseEnabled": true,
"knowledgeBaseScope": "<string>",
"multiStepToolsEnabled": true,
"multiStepMaxTurns": 123,
"shortCode": "<string>",
"created": 123,
"updated": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Path Parameters
Body
Fields to update
Request body for updating an agent (include only fields to update)
Agent name
URL or base64 avatar image
AI system instructions
Agent-specific prompt
Branding colors: {primary?: string (hex), secondary?: string (hex), background?: string (hex)}
AI model (e.g., gpt-5-nano)
Multi-channel configuration: {website?: {enabled: boolean}, email?: {enabled: boolean, address?: string}, sms?: {enabled: boolean, phoneNumber?: string}, whatsapp?: {enabled: boolean, phoneNumber?: string (Twilio WhatsApp-enabled number, E.164), integrationId?: string (Twilio integration ID), autoReply?: boolean}, voice?: {enabled: boolean}}
Lead field definitions: [{name: string, type: string (text, email, phone, number), required?: boolean}]
Smart list ID for contact collection
Whether AI passively extracts contact info from conversations
Whether agent is active
Whether the agent answers from the knowledge base
Knowledge base folder the agent is limited to (e.g. / or /shared/Support)
Whether the agent can chain multiple tool-calling turns (knowledge base search, MCP servers, integration toolsets) instead of a single round
Tool-calling turns allowed before tools are removed and the agent must answer (1-10, default 5)
Response
The updated agent
Agent object
Agent ID
Agent name
URL or base64 avatar image
AI system instructions
Agent-specific prompt
Branding colors configuration
AI model
Multi-channel configuration
Lead field definitions
Smart list ID
Whether AI passively extracts contact info from conversations
Whether agent is active
Whether the agent answers from the knowledge base
Knowledge base folder the agent is limited to (e.g. / or /shared/Support)
Whether the agent can chain multiple tool-calling turns (knowledge base search, MCP servers, integration toolsets) instead of a single round
Tool-calling turns allowed before tools are removed and the agent must answer (1-10, default 5)
Shareable URL code
Creation timestamp
Last update timestamp

