Skip to main content
PUT
Update Digital Human
Integration Prompt for AI Agents
This endpoint allows you to update an existing Digital Human. Effective tag (body vs stored) can affect validation; see the OpenAPI schema and response codes on this page for update constraints.

Headers

X-Organization-Id
string
X-API-Key
string
required

API key required to authenticate requests.

Path Parameters

digital_human_id
integer
required

Body

application/json

Request model for updating a digital human — only provided fields are changed.

Every field must default to None: a non-None default gets filled in by Pydantic on partial payloads and silently overwrites the stored value on every update (MCP, bluejay-as-code, and FE bulk edits all send partial payloads).

intent
string | null

The scenario the digital human enacts, in ONE OR TWO SENTENCES: what this caller wants, not how to behave. It fills one slot in a prompt that ALREADY renders traits, verbosity, fluency, a not-the-agent guardrail and end-of-call instructions, so restating those here is duplicate prompt. Anything shaped like 'if the agent says X, do Y' does not belong here — prose makes it non-deterministic. Move it: case facts the agent may ask for (member ID, DOB, order number) to traits; lines that must be said verbatim, a keypad entry, or a deliberate pause to scripted_responses; who opens the call to speaks_first_config; voice and call conditions to their own fields; and lower creativity for repeatability. If you reach for 'correctly', 'appropriately' or 'successfully' you are describing what the AGENT should do — that goes in success_criteria.

success_criteria
string | null

The pass/fail condition for this one test, in ONE OR TWO observable outcomes the transcript can settle. Not a rubric: a scored checklist, a per-dimension score, or anything you want graded on every call in the suite belongs in a custom metric (create_custom_metrics), not in this string. Describe the AGENT's outcome, never the digital human's own actions — those are intent.

name
string | null

Name of the digital human

tag
string | null

Tag for categorizing the digital human

language
enum<string> | null

Language the digital human speaks

Available options:
en,
es,
pt,
ja,
tr,
hi,
ar,
he,
ru,
zh,
ml,
fr,
yue,
vi,
de,
ko,
ur,
te,
ta,
mal,
kn,
mr,
gu,
tl,
el,
ad
accent
enum<string> | null

Accent of the digital human

Available options:
multilingual,
american,
american2,
mature,
southern,
italian,
indian,
british,
australian,
scottish,
irish,
welsh,
mexican,
spanish,
portuguese,
french,
turkish,
japanese,
hindi,
arabic,
egyptian,
levantine,
hebrew,
russian,
chinese,
german,
korean,
urdu,
telugu,
tamil,
malayalam,
kannada,
marathi,
gujarati,
vietnamese,
cantonese,
tagalog,
greek,
autodetect,
watson,
watsonbritish,
watsonaustralian,
watsoncanadian
gender
enum<string> | null

Gender of the digital human

Available options:
male,
female
custom_voice_id
string | null

ElevenLabs voice_id of a cloned voice. Send empty string or null to clear and revert to the stock accent voice.

background_noise
enum<string> | null

Type of background noise

Available options:
none,
office,
talking,
traffic,
cafe,
park,
tv,
noisy_restaurant,
hospital,
airport,
street,
subway_station,
supermarket,
construction,
rain,
wind,
quiet_home,
driving,
factory,
school,
custom
custom_background_noise_url
string | null

Bucket-relative path of the uploaded custom background noise audio; required when background_noise is 'custom'

voice_speed
enum<string> | null

Speed of the digital human's voice

Available options:
slowest,
slow,
normal,
fast,
fastest
audio_quality
enum<string> | null

Audio quality of the digital human's voice

Available options:
high,
medium,
low,
horrible
connection_quality
enum<string> | null

How often the caller's line drops out: none, low, medium or high

Available options:
none,
low,
medium,
high
fluency
enum<string> | null

Fluency level of the digital human's speech

Available options:
beginner,
intermediate,
native
verbosity
enum<string> | null

Verbosity level of the digital human's responses

Available options:
low,
medium,
high
phone_number
string | null

Phone number for the digital human

extension
string | null

Extension dialed as DTMF after connecting when this DH calls an inbound agent. Send null or an empty string to clear it.

outbound_text_number
string | null

Outbound text number

follow_up_sms_success_criteria
string | null

Criteria the captured follow-up SMS is graded against

background_noise_volume
number | null

Volume of background noise

Required range: 0 <= x <= 1
expected_tool_calls
ExpectedToolCall · object[] | null

Expected tool call outputs

allow_end_call_tool
boolean | null

Allow the digital human to end the tool call

allow_silence_tool
boolean | null

Allow the digital human to use the silence tool

allow_dtmf_tool
boolean | null

Allow the digital human to use the DTMF tool

default_dtmf_or_voiced
enum<string> | null

Controls whether the agent submits numerical values via DTMF or voice. 'voiced' = speak numbers (default), 'dtmf' = use DTMF tones for eligible numerical inputs

Available options:
voiced,
dtmf
silence_tool_instructions
string | null

Tool instructions; set to "default" for built-in behavior or custom text

endpointing_delay
number | null

Seconds the digital human waits before it replies. Named patience in the UI, and accepted under either name.

creativity
number | null

Model temperature for the digital human's own speech. Lower it (0.0-0.3) when you want the same call twice — regression tests and anything compared run over run. Keep near the 0.7 default for exploratory or red-team cases.

Required range: 0 <= x <= 2
hangup_phrases
string[] | null

Phrases that trigger hangup

hangup_instructions
string | null

Freeform instructions for how/when to hang up. Omit the field to leave the stored value alone; send the literal string "default" to reset to the tuned built-in end-of-call behavior, which already handles ordinary goodbyes. Any other string REPLACES it, so write one only for a condition the default would miss.

silence_timeout
integer | null

Silence timeout in seconds

Required range: x >= 15
simulation_ids
integer[] | null

Array of simulation IDs to associate with this digital human. If provided, completely replaces existing associations.

traits
Trait · object[] | null

Case facts THIS CALLER holds and can recite when the agent asks — member ID, DOB, order number, policy number, zip. Traits are the determinism lever: any case-specific value written into intent prose should be a trait instead. NOT a place for internal or agent-side information (what the CRM holds, what the agent should say or look up, expected tool arguments, grader notes) — a caller cannot know those, and the schema has no notion of an internal trait. If provided, completely replaces existing traits.

interruptions
Default · object

Simple interruption configuration with predefined levels.

scripted_responses
ScriptedResponse · object[] | null

The 'if the agent says X, the caller does Y' rules for this test, as data instead of prose — a verbatim line, a keypad entry (DTMF), or a deliberate silence. Writing the same rule into intent makes it advisory; putting it here makes it deterministic. If provided, completely replaces existing scripted responses.

scripted_responses_ordered
boolean | null

When true, scripted_responses run as a script in list order: only the next unfired one is armed, each fires once, and a blank match_phrase fires on the digital human's next turn. When false any scripted response fires whenever its match_phrase comes up.

role_description
string | null

Who this caller is, in one short line. Identity and disposition only: what they are calling about is intent, the facts they can recite are traits, how they sound is language/accent/fluency/verbosity. Never internal or agent-side information — the digital human only knows what a real caller would know.

speaks_first_config
SpeaksFirstConfig · object | null

Who opens the call, and the caller's opening line when it must be fixed — owns the opener so intent does not have to describe it. Read the dynamic field before setting a custom message: on an agent that greets callers, a dynamic custom opener is discarded. If provided, completely replaces existing speaks first config.

original_transcript
string | null

Original transcript text. If changed from the current value, utterances are re-extracted and the intent is regenerated.

formatted_transcript
Formatted Transcript · object[] | null

Pre-computed structured transcript as [{role, utterance}]. When provided alongside original_transcript, skips the LLM formatting call.

enriched_playback
Enriched Playback · object[] | null

Optional enriched playback stored as JSONB: a list of turn objects

num_runs
integer | null

Number of times this digital human is run per simulation run (run count).

Required range: x >= 1
livekit_metadata
Livekit Metadata · object | null

LiveKit-specific configuration and metadata for this digital human. If provided, completely replaces existing metadata.

always_on_mode
boolean | null

Whether always-on mode is enabled for this digital human

always_on_active
boolean | null

When true, this DH actively receives calls on phone_number; when false, number is assigned but inactive

test_name
string | null

User-facing label for this digital human

journey_steps
JourneyStep · object[] | null

Ordered journey steps. If provided, completely replaces existing journey steps.

override_conflict
boolean | null
default:false

When true, allows activation to replace an existing always-on active DH using the same phone number.

Response

Successful Response

Response model for digital human operations with clear separation of digital human data and simulation context.

digital_human
DigitalHumanResponseData · object
required

The digital human data

simulation_ids
integer[] | null

List of simulation IDs associated with this digital human

simulation_id
integer | null
deprecated

ID of the associated simulation. Use simulation_ids instead.