Dynamic variables

Pass runtime values to personalize your agent’s behavior.

Dynamic variables allow you to inject runtime values into your agent’s messages, system prompts, and tools. This enables you to personalize each conversation with user-specific data without creating multiple agents.

Overview

Dynamic variables can be integrated into multiple aspects of your agent:

  • System prompts to customize behavior and context
  • First messages to personalize greetings
  • Tool parameters to pass user-specific data

Here are a few examples where dynamic variables are useful:

  • Personalizing greetings with user names
  • Including account details in responses
  • Passing data to tool calls
  • Customizing behavior based on subscription tiers
  • Accessing system information like conversation ID or call duration

Dynamic variables are ideal for injecting user-specific data that shouldn’t be hardcoded into your agent’s configuration.

System dynamic variables

Your agent has access to these automatically available system variables:

  • system__agent_id - Unique agent identifier
  • system__caller_id - Caller’s phone number (voice calls only)
  • system__called_number - Destination phone number (voice calls only)
  • system__call_duration_secs - Call duration in seconds
  • system__time_utc - Current UTC time (ISO format)
  • system__conversation_id - Unique conversation identifier

System variables:

  • Are available without runtime configuration
  • Are prefixed with system__ (reserved prefix)
  • In system prompts: Set once at conversation start (value remains static)
  • In tool calls: Updated at execution time (value reflects current state)
Custom dynamic variables cannot use the reserved system__ prefix.

Guide

Prerequisites

1

Define dynamic variables in prompts

Add variables using double curly braces {{variable_name}} in your:

  • System prompts
  • First messages
  • Tool parameters

Dynamic variables in messages

Dynamic variables in messages

2

Define dynamic variables in tools

You can also define dynamic variables in the tool configuration. To create a new dynamic variable, set the value type to Dynamic variable and click the + button.

Setting placeholders

Setting placeholders

3

Set placeholders

Configure default values in the web interface for testing:

Setting placeholders

4

Pass variables at runtime

When starting a conversation, provide the dynamic variables in your code:

Ensure you have the latest SDK installed.

1import os
2import signal
3from elevenlabs.client import ElevenLabs
4from elevenlabs.conversational_ai.conversation import Conversation, ConversationConfig
5from elevenlabs.conversational_ai.default_audio_interface import DefaultAudioInterface
6
7agent_id = os.getenv("AGENT_ID")
8api_key = os.getenv("ELEVENLABS_API_KEY")
9client = ElevenLabs(api_key=api_key)
10
11dynamic_vars = {
12 "user_name": "Angelo",
13}
14
15config = ConversationConfig(
16 dynamic_variables=dynamic_vars
17)
18
19conversation = Conversation(
20 client,
21 agent_id,
22 config=config,
23 # Assume auth is required when API_KEY is set.
24 requires_auth=bool(api_key),
25 # Use the default audio interface.
26 audio_interface=DefaultAudioInterface(),
27 # Simple callbacks that print the conversation to the console.
28 callback_agent_response=lambda response: print(f"Agent: {response}"),
29 callback_agent_response_correction=lambda original, corrected: print(f"Agent: {original} -> {corrected}"),
30 callback_user_transcript=lambda transcript: print(f"User: {transcript}"),
31 # Uncomment the below if you want to see latency measurements.
32 # callback_latency_measurement=lambda latency: print(f"Latency: {latency}ms"),
33)
34
35conversation.start_session()
36
37signal.signal(signal.SIGINT, lambda sig, frame: conversation.end_session())

Supported Types

Dynamic variables support these value types:

String
Text values
Number
Numeric values
Boolean
True/false values

Troubleshooting

Verify that:

  • Variable names match exactly (case-sensitive)
  • Variables use double curly braces: {{ variable_name }}
  • Variables are included in your dynamic_variables object

Ensure that:

  • Variable values match the expected type
  • Values are strings, numbers, or booleans only