curl --request PUT \
--url https://api.anam.ai/v1/personas/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"systemPrompt": "You are a helpful assistant who speaks concisely."
}
'import requests
url = "https://api.anam.ai/v1/personas/{id}"
payload = { "systemPrompt": "You are a helpful assistant who speaks concisely." }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({systemPrompt: 'You are a helpful assistant who speaks concisely.'})
};
fetch('https://api.anam.ai/v1/personas/{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.anam.ai/v1/personas/{id}",
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([
'systemPrompt' => 'You are a helpful assistant who speaks concisely.'
]),
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.anam.ai/v1/personas/{id}"
payload := strings.NewReader("{\n \"systemPrompt\": \"You are a helpful assistant who speaks concisely.\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.anam.ai/v1/personas/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"systemPrompt\": \"You are a helpful assistant who speaks concisely.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.anam.ai/v1/personas/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"systemPrompt\": \"You are a helpful assistant who speaks concisely.\"\n}"
response = http.request(request)
puts response.read_body{
"id": "00000000-0000-0000-0000-000000000000",
"name": "Cara",
"description": "A helpful assistant",
"personaPreset": "",
"avatar": {
"id": "071b0286-4cce-4808-bee2-e642f1062de3",
"displayName": "Liv",
"variantName": "home",
"imageUrl": "https://lab.anam.ai/persona_thumbnails/liv_home.png",
"videoUrl": "https://example.com/avatar-preview.mp4?X-Amz-Signature=...",
"createdAt": "2026-04-20T10:00:00.000Z",
"updatedAt": "2026-04-20T10:00:00.000Z",
"createdByOrganizationId": null,
"availableVersions": [
"cara-3"
],
"activeVersion": "cara-3",
"description": "A friendly professional in a modern office setting, warm expression, business casual attire.",
"displayTags": [
"professional",
"friendly",
"office"
],
"renderStyle": "realistic"
},
"avatarModel": "cara-3",
"voice": {
"id": "de23e340-1416-4dd8-977d-065a7ca11697",
"displayName": "Lucy - Fresh & Casual",
"provider": "ELEVENLABS",
"providerVoiceId": "lcMyyd2HUfFzxdCaC4Ta",
"providerModelId": "eleven_flash_v2_5",
"sampleUrl": "https://newgxnc1uqs0jnqm.public.blob.vercel-storage.com/voice-samples/de23e340-1416-4dd8-977d-065a7ca11697/1760617899390.mp3",
"previewSampleUrl": "https://newgxnc1uqs0jnqm.public.blob.vercel-storage.com/voice-samples/de23e340-1416-4dd8-977d-065a7ca11697/1760617899390.mp3",
"gender": "FEMALE",
"country": "GB",
"description": "Energetic and youthful British voice, perfect for narrations and conversational agents.",
"displayTags": [
"fast"
],
"isZdr": true,
"createdByOrganizationId": null,
"createdAt": "2026-04-20T10:00:00.000Z",
"updatedAt": "2026-04-20T10:00:00.000Z"
},
"voiceSpeed": 1,
"llmId": "a7cf662c-2ace-4de1-a21e-ef0fbf144bb7",
"brain": {
"personality": null,
"systemPrompt": "You are a helpful assistant."
},
"tools": [],
"knowledge": [],
"shareLinks": null,
"primaryShareLink": null,
"enableAudioPassthrough": false,
"skipGreeting": false,
"zeroDataRetention": false,
"voiceDetectionOptions": null,
"voiceGenerationOptions": null,
"widgetConfig": {},
"createdAt": "2026-04-20T10:00:00.000Z",
"updatedAt": "2026-04-20T10:00:00.000Z"
}update persona
Update a persona by id
curl --request PUT \
--url https://api.anam.ai/v1/personas/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"systemPrompt": "You are a helpful assistant who speaks concisely."
}
'import requests
url = "https://api.anam.ai/v1/personas/{id}"
payload = { "systemPrompt": "You are a helpful assistant who speaks concisely." }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({systemPrompt: 'You are a helpful assistant who speaks concisely.'})
};
fetch('https://api.anam.ai/v1/personas/{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.anam.ai/v1/personas/{id}",
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([
'systemPrompt' => 'You are a helpful assistant who speaks concisely.'
]),
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.anam.ai/v1/personas/{id}"
payload := strings.NewReader("{\n \"systemPrompt\": \"You are a helpful assistant who speaks concisely.\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.anam.ai/v1/personas/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"systemPrompt\": \"You are a helpful assistant who speaks concisely.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.anam.ai/v1/personas/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"systemPrompt\": \"You are a helpful assistant who speaks concisely.\"\n}"
response = http.request(request)
puts response.read_body{
"id": "00000000-0000-0000-0000-000000000000",
"name": "Cara",
"description": "A helpful assistant",
"personaPreset": "",
"avatar": {
"id": "071b0286-4cce-4808-bee2-e642f1062de3",
"displayName": "Liv",
"variantName": "home",
"imageUrl": "https://lab.anam.ai/persona_thumbnails/liv_home.png",
"videoUrl": "https://example.com/avatar-preview.mp4?X-Amz-Signature=...",
"createdAt": "2026-04-20T10:00:00.000Z",
"updatedAt": "2026-04-20T10:00:00.000Z",
"createdByOrganizationId": null,
"availableVersions": [
"cara-3"
],
"activeVersion": "cara-3",
"description": "A friendly professional in a modern office setting, warm expression, business casual attire.",
"displayTags": [
"professional",
"friendly",
"office"
],
"renderStyle": "realistic"
},
"avatarModel": "cara-3",
"voice": {
"id": "de23e340-1416-4dd8-977d-065a7ca11697",
"displayName": "Lucy - Fresh & Casual",
"provider": "ELEVENLABS",
"providerVoiceId": "lcMyyd2HUfFzxdCaC4Ta",
"providerModelId": "eleven_flash_v2_5",
"sampleUrl": "https://newgxnc1uqs0jnqm.public.blob.vercel-storage.com/voice-samples/de23e340-1416-4dd8-977d-065a7ca11697/1760617899390.mp3",
"previewSampleUrl": "https://newgxnc1uqs0jnqm.public.blob.vercel-storage.com/voice-samples/de23e340-1416-4dd8-977d-065a7ca11697/1760617899390.mp3",
"gender": "FEMALE",
"country": "GB",
"description": "Energetic and youthful British voice, perfect for narrations and conversational agents.",
"displayTags": [
"fast"
],
"isZdr": true,
"createdByOrganizationId": null,
"createdAt": "2026-04-20T10:00:00.000Z",
"updatedAt": "2026-04-20T10:00:00.000Z"
},
"voiceSpeed": 1,
"llmId": "a7cf662c-2ace-4de1-a21e-ef0fbf144bb7",
"brain": {
"personality": null,
"systemPrompt": "You are a helpful assistant."
},
"tools": [],
"knowledge": [],
"shareLinks": null,
"primaryShareLink": null,
"enableAudioPassthrough": false,
"skipGreeting": false,
"zeroDataRetention": false,
"voiceDetectionOptions": null,
"voiceGenerationOptions": null,
"widgetConfig": {},
"createdAt": "2026-04-20T10:00:00.000Z",
"updatedAt": "2026-04-20T10:00:00.000Z"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Persona id
Body
Partial persona update. Only the fields you include are changed; omit a field to leave it unchanged. Changing avatarId may reset avatarModel if the new avatar doesn't support the previous model; changing voiceId resets any existing voiceGenerationOptions unless new ones are supplied.
Name of the persona
"Cara"
Description of the persona, for example "A helpful assistant". Does not affect the persona's behavior.
The avatar to use.
"071b0286-4cce-4808-bee2-e642f1062de3"
Avatar model version. cara-3 and cara-4 are generally available; models with the '-latest' suffix are invite only and require organization-level access.
cara-3, cara-4, cara-4-latest "cara-4"
The voice to use.
"de23e340-1416-4dd8-977d-065a7ca11697"
The LLM to use. To disable the LLM, use 'CUSTOMER_CLIENT_V1'.
"a7cf662c-2ace-4de1-a21e-ef0fbf144bb7"
System prompt for the LLM
"You are a helpful assistant"
Whether to skip the greeting message when starting a session with this persona.
false
When true, the greeting message cannot be interrupted by the user.
false
Custom first message the persona speaks to open the conversation. If empty or not provided, the persona generates its own greeting.
"Hi there! I'm excited to chat with you today."
When true, session data is not stored after the conversation ends
false
Options for voice activity detection during user speech input.
Show child attributes
Show child attributes
ISO 639-1 formatted language code override for transcription, replaces organisation level settings and multilingual (default) mode.
"en"
Configuration options for voice generation.
- ElevenLabs V1
- ElevenLabs V2
- Cartesia Sonic-3
- Fish Audio
Show child attributes
Show child attributes
Array of tool IDs to attach to the persona. Replaces any existing tool associations.
["tool-id-1", "tool-id-2"]
Widget configuration overrides. Provided fields are merged into the existing widget configuration; omitted fields are left unchanged.
Show child attributes
Show child attributes
Response
Successfully updated persona
Full persona shape returned by the create, get, and update endpoints.
Unique identifier for the persona.
Human-readable name of the persona.
Free-form description of the persona.
Name of the preset the persona was cloned from, if any.
Avatar currently attached to the persona.
Show child attributes
Show child attributes
Public model version (e.g. cara-3, cara-4) used when rendering the avatar.
Voice currently attached to the persona.
Show child attributes
Show child attributes
Speech rate multiplier applied to the voice.
ID of the LLM the persona uses, or null for presets that don't run an LLM.
Persona behaviour configuration applied on top of the raw LLM.
Show child attributes
Show child attributes
Tool configurations currently attached to the persona.
Knowledge group attachments currently active on the persona.
All share links ever issued for this persona.
Show child attributes
Show child attributes
The primary share link attached to the persona, if one has been created.
Show child attributes
Show child attributes
Whether audio is passed through from the client instead of being generated server-side.
Whether the persona skips the greeting message at the start of a session.
Whether session data is discarded instead of stored after the conversation ends.
Voice activity detection tuning for user speech.
Show child attributes
Show child attributes
Provider-specific voice generation tuning.
- ElevenLabs V1
- ElevenLabs V2
- Cartesia Sonic-3
- Fish Audio
Show child attributes
Show child attributes
Widget rendering overrides (e.g. removing the watermark).
Timestamp when the persona was created.
Timestamp when the persona was last updated.
Was this page helpful?

