Update shared identity
curl --request PUT \
--url https://api.getnexor.ai/api/public/master-workflows/{id}/router/identity \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "Sofia",
"voice_id": "voice-id-from-voices",
"language": "es-CL",
"identity_prompt": "You are Sofia, the first contact for new leads. Be brief and warm.",
"channel_prompts": {
"whatsapp": "Keep replies under three short lines."
},
"confirm": true
}
'import requests
url = "https://api.getnexor.ai/api/public/master-workflows/{id}/router/identity"
payload = {
"name": "Sofia",
"voice_id": "voice-id-from-voices",
"language": "es-CL",
"identity_prompt": "You are Sofia, the first contact for new leads. Be brief and warm.",
"channel_prompts": { "whatsapp": "Keep replies under three short lines." },
"confirm": True
}
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: 'Sofia',
voice_id: 'voice-id-from-voices',
language: 'es-CL',
identity_prompt: 'You are Sofia, the first contact for new leads. Be brief and warm.',
channel_prompts: {whatsapp: 'Keep replies under three short lines.'},
confirm: true
})
};
fetch('https://api.getnexor.ai/api/public/master-workflows/{id}/router/identity', 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.getnexor.ai/api/public/master-workflows/{id}/router/identity",
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' => 'Sofia',
'voice_id' => 'voice-id-from-voices',
'language' => 'es-CL',
'identity_prompt' => 'You are Sofia, the first contact for new leads. Be brief and warm.',
'channel_prompts' => [
'whatsapp' => 'Keep replies under three short lines.'
],
'confirm' => true
]),
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.getnexor.ai/api/public/master-workflows/{id}/router/identity"
payload := strings.NewReader("{\n \"name\": \"Sofia\",\n \"voice_id\": \"voice-id-from-voices\",\n \"language\": \"es-CL\",\n \"identity_prompt\": \"You are Sofia, the first contact for new leads. Be brief and warm.\",\n \"channel_prompts\": {\n \"whatsapp\": \"Keep replies under three short lines.\"\n },\n \"confirm\": true\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.getnexor.ai/api/public/master-workflows/{id}/router/identity")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sofia\",\n \"voice_id\": \"voice-id-from-voices\",\n \"language\": \"es-CL\",\n \"identity_prompt\": \"You are Sofia, the first contact for new leads. Be brief and warm.\",\n \"channel_prompts\": {\n \"whatsapp\": \"Keep replies under three short lines.\"\n },\n \"confirm\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getnexor.ai/api/public/master-workflows/{id}/router/identity")
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\": \"Sofia\",\n \"voice_id\": \"voice-id-from-voices\",\n \"language\": \"es-CL\",\n \"identity_prompt\": \"You are Sofia, the first contact for new leads. Be brief and warm.\",\n \"channel_prompts\": {\n \"whatsapp\": \"Keep replies under three short lines.\"\n },\n \"confirm\": true\n}"
response = http.request(request)
puts response.read_body{
"agent_group_id": "11111111-1111-4111-8111-111111111111",
"identity": {
"name": "Sofia",
"voice_id": "voice-id-from-voices",
"language": "es-CL",
"identity_prompt": "You are Sofia, the first contact for new leads. Be brief and warm.",
"channel_prompts": {
"whatsapp": "Keep replies under three short lines."
}
}
}{
"error": "invalid_language"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "inbound_router_not_enabled"
}{
"error": "agent_group_not_found"
}{
"error": "internal_error"
}Update shared identity
Replace the name, voice, language, and instructions all tasks of an agent speak with. Requires confirm: true.
PUT
/
master-workflows
/
{id}
/
router
/
identity
Update shared identity
curl --request PUT \
--url https://api.getnexor.ai/api/public/master-workflows/{id}/router/identity \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "Sofia",
"voice_id": "voice-id-from-voices",
"language": "es-CL",
"identity_prompt": "You are Sofia, the first contact for new leads. Be brief and warm.",
"channel_prompts": {
"whatsapp": "Keep replies under three short lines."
},
"confirm": true
}
'import requests
url = "https://api.getnexor.ai/api/public/master-workflows/{id}/router/identity"
payload = {
"name": "Sofia",
"voice_id": "voice-id-from-voices",
"language": "es-CL",
"identity_prompt": "You are Sofia, the first contact for new leads. Be brief and warm.",
"channel_prompts": { "whatsapp": "Keep replies under three short lines." },
"confirm": True
}
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: 'Sofia',
voice_id: 'voice-id-from-voices',
language: 'es-CL',
identity_prompt: 'You are Sofia, the first contact for new leads. Be brief and warm.',
channel_prompts: {whatsapp: 'Keep replies under three short lines.'},
confirm: true
})
};
fetch('https://api.getnexor.ai/api/public/master-workflows/{id}/router/identity', 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.getnexor.ai/api/public/master-workflows/{id}/router/identity",
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' => 'Sofia',
'voice_id' => 'voice-id-from-voices',
'language' => 'es-CL',
'identity_prompt' => 'You are Sofia, the first contact for new leads. Be brief and warm.',
'channel_prompts' => [
'whatsapp' => 'Keep replies under three short lines.'
],
'confirm' => true
]),
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.getnexor.ai/api/public/master-workflows/{id}/router/identity"
payload := strings.NewReader("{\n \"name\": \"Sofia\",\n \"voice_id\": \"voice-id-from-voices\",\n \"language\": \"es-CL\",\n \"identity_prompt\": \"You are Sofia, the first contact for new leads. Be brief and warm.\",\n \"channel_prompts\": {\n \"whatsapp\": \"Keep replies under three short lines.\"\n },\n \"confirm\": true\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.getnexor.ai/api/public/master-workflows/{id}/router/identity")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Sofia\",\n \"voice_id\": \"voice-id-from-voices\",\n \"language\": \"es-CL\",\n \"identity_prompt\": \"You are Sofia, the first contact for new leads. Be brief and warm.\",\n \"channel_prompts\": {\n \"whatsapp\": \"Keep replies under three short lines.\"\n },\n \"confirm\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getnexor.ai/api/public/master-workflows/{id}/router/identity")
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\": \"Sofia\",\n \"voice_id\": \"voice-id-from-voices\",\n \"language\": \"es-CL\",\n \"identity_prompt\": \"You are Sofia, the first contact for new leads. Be brief and warm.\",\n \"channel_prompts\": {\n \"whatsapp\": \"Keep replies under three short lines.\"\n },\n \"confirm\": true\n}"
response = http.request(request)
puts response.read_body{
"agent_group_id": "11111111-1111-4111-8111-111111111111",
"identity": {
"name": "Sofia",
"voice_id": "voice-id-from-voices",
"language": "es-CL",
"identity_prompt": "You are Sofia, the first contact for new leads. Be brief and warm.",
"channel_prompts": {
"whatsapp": "Keep replies under three short lines."
}
}
}{
"error": "invalid_language"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "inbound_router_not_enabled"
}{
"error": "agent_group_not_found"
}{
"error": "internal_error"
}The shared identity is the agent’s persona. All of its tasks speak with this name, voice, language, and instructions, including while the agent works out which task should answer.
- A task that has its own language keeps it.
- In
channel_prompts, the agent’s instructions for a channel come first, and a task’s instructions for the same channel are added after them. - This is a full replacement, so send every field. To change only one, read the current values with Get settings first.
| Field | Rules |
|---|---|
name | 1 to 120 characters. |
voice_id | A voice from List voices. |
language | es-CL, es-MX, es-PE, es-CO, es-AR, es-US, en-US, en-AU, ko-KR, pt-BR, or fr-FR. |
identity_prompt | 1 to 8,000 characters. |
channel_prompts | Keys whatsapp, sms, imessage, unsupervised-whatsapp (personal WhatsApp line), email, webchat, instagram, messenger, and retell for phone calls. Up to 8,000 characters each. Empty values are dropped. Send an empty object for none. |
Authorizations
API key for authentication. Keys are prefixed with nxr_live_.
Path Parameters
Agent ID (master_workflow in the API). A malformed ID returns 400 invalid_group_id.
Body
application/json
Required string length:
1 - 120Required string length:
1 - 255Available options:
es-CL, es-MX, es-PE, es-CO, es-AR, es-US, en-US, en-AU, ko-KR, pt-BR, fr-FR Required string length:
1 - 8000Extra instructions per channel, up to 8,000 characters each. Send {} for none.
Show child attributes
Show child attributes
Must be true.
Available options:
true Response
Saved identity.
The agent's shared identity: the name, voice, language, and instructions all of its tasks speak with, including while the agent works out which task should answer. When the agent has no complete identity of its own, the values shown come from the default task.
Show child attributes
Show child attributes
Last modified on September 28, 2026
⌘I