curl --request PATCH \
--url https://api.callrounded.com/v1/agents/{agent_id} \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data @- <<EOF
{
"name": "<string>",
"language": "en",
"initial_message": "<string>",
"initial_message_delay": 123,
"max_call_duration": 123,
"presence_check_phrases": [
"<string>"
],
"presence_check_idle_threshold": 123,
"presence_check_max_times": 123,
"base_prompt": "<string>",
"voice": {
"name": "Alloy",
"provider": "openai",
"instructions": "Warm, empathetic, friendly",
"speed": 1
},
"states": [
{
"name": "<string>",
"prompt": "<string>",
"llm": {
"model": "gpt-3.5-turbo",
"temperature": 0.5,
"provider": "azure_openai"
},
"tools": [
{
"description": "Wait for 2 seconds",
"type": "wait"
},
{
"description": "Hang up the call",
"filler_sentence": "Goodbye!",
"type": "hang_up"
},
{
"description": "Transfer the call to the next available assistant",
"filler_sentence": "I'm transferring you to the next available assistant...",
"type": "transfer_call"
},
{
"description": "Leave a voicemail message",
"filler_sentence": "I tried to call you but you didn't answer. Please call me back at 1234567890",
"type": "leave_voicemail_message"
},
{
"content_type": "url_params",
"description": "Get the availability of the requested assistant by using its name",
"filler_sentence": "I'm checking the availability of the requested assistant...",
"headers": [
{
"description": "The API key to use to call the custom function",
"name": "Authorization",
"value": "Bearer 123"
}
],
"method": "GET",
"parameters": [
{
"description": "The name of the assistant to check the availability of",
"name": "assistant_name",
"type": "string"
}
],
"response_mapping": [
{
"destination_variable": "assistant_availability",
"json_path_to_data": "$.availability"
}
],
"type": "custom_function",
"url": "https://api.example.com/availability"
}
],
"transitions": [
{
"condition": "User provides valid input",
"destination_state_name": "next_state_name",
"filler_sentence": "I'm sorry, I didn't catch that. Can you please repeat?"
}
],
"variables": [
{
"description": "The variable's description",
"extraction_instructions": "The instructions for the variable extraction",
"name": "variable_name",
"type": "string"
}
],
"x_position": -401.1747211895911,
"y_position": 264.2527881040892,
"features": {
"entity_detection": true
}
}
],
"initial_state_name": "<string>",
"llm": {
"model": "gpt-3.5-turbo",
"temperature": 0.5,
"provider": "azure_openai"
},
"transcriber": {
"provider": "azure"
},
"secure_recording_urls": true,
"interruptions": true,
"interruptions_sensitivity": "high",
"webhook_url": "<string>",
"webhook_subscriptions": [
"event_variable_value_updated"
],
"custom_vocabulary": [
"<string>"
]
}
EOF{
"data": {
"name": "<string>",
"language": "en",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"initial_message": "Hello, how can I help you today?",
"initial_message_delay": 0,
"max_call_duration": 300,
"presence_check_phrases": [
"Allo, vous êtes là ?",
"Pouvez-vous répéter s'il vous plaît ?"
],
"presence_check_idle_threshold": 10,
"presence_check_max_times": 1,
"base_prompt": "You are a helpful assistant",
"voice": {
"name": "Alloy",
"provider": "openai",
"instructions": "Warm, empathetic, friendly",
"speed": 1
},
"states": [
{
"name": "<string>",
"prompt": "<string>",
"llm": {
"model": "gpt-3.5-turbo",
"temperature": 0.5,
"provider": "azure_openai"
},
"tools": [
{
"description": "Wait for 2 seconds",
"type": "wait"
},
{
"description": "Hang up the call",
"filler_sentence": "Goodbye!",
"type": "hang_up"
},
{
"description": "Transfer the call to the next available assistant",
"filler_sentence": "I'm transferring you to the next available assistant...",
"type": "transfer_call"
},
{
"description": "Leave a voicemail message",
"filler_sentence": "I tried to call you but you didn't answer. Please call me back at 1234567890",
"type": "leave_voicemail_message"
},
{
"content_type": "url_params",
"description": "Get the availability of the requested assistant by using its name",
"filler_sentence": "I'm checking the availability of the requested assistant...",
"headers": [
{
"description": "The API key to use to call the custom function",
"name": "Authorization",
"value": "Bearer 123"
}
],
"method": "GET",
"parameters": [
{
"description": "The name of the assistant to check the availability of",
"name": "assistant_name",
"type": "string"
}
],
"response_mapping": [
{
"destination_variable": "assistant_availability",
"json_path_to_data": "$.availability"
}
],
"type": "custom_function",
"url": "https://api.example.com/availability"
}
],
"transitions": [
{
"condition": "User provides valid input",
"destination_state_name": "next_state_name",
"filler_sentence": "I'm sorry, I didn't catch that. Can you please repeat?"
}
],
"variables": [
{
"description": "The variable's description",
"extraction_instructions": "The instructions for the variable extraction",
"name": "variable_name",
"type": "string"
}
],
"x_position": -401.1747211895911,
"y_position": 264.2527881040892,
"features": {
"entity_detection": true
}
}
],
"initial_state_name": "<string>",
"llm": {
"model": "gpt-3.5-turbo",
"temperature": 0.5,
"provider": "azure_openai"
},
"transcriber": {
"provider": "azure"
},
"secure_recording_urls": true,
"interruptions": true,
"interruptions_sensitivity": "high",
"webhook_url": "https://webhook.site/123e4567-e89b-12d3-a456-426614174000",
"webhook_subscriptions": [
"event_variable_value_updated",
"event_all_variables_resolved"
],
"custom_vocabulary": [
"super",
"basta",
"bravo",
"gmail.com"
],
"version": 1,
"variables": [
{
"name": "<string>",
"type": "<string>",
"description": "The name of the customer",
"extraction_instructions": "Extract the name of the customer"
}
]
},
"message": "Agent updated successfully",
"error": {
"details": [
{
"field": "email",
"message": "Invalid email format"
}
],
"message": "An error occurred while processing your request",
"status": 400,
"type": "generic_error"
},
"status": 200
}Update an existing agent with a new configuration. You can update any of the agent’s properties including name, language, voice settings, and states. The update will generate a new version of the latest draft configuration of the agent. The response includes headers about rate limiting.
curl --request PATCH \
--url https://api.callrounded.com/v1/agents/{agent_id} \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data @- <<EOF
{
"name": "<string>",
"language": "en",
"initial_message": "<string>",
"initial_message_delay": 123,
"max_call_duration": 123,
"presence_check_phrases": [
"<string>"
],
"presence_check_idle_threshold": 123,
"presence_check_max_times": 123,
"base_prompt": "<string>",
"voice": {
"name": "Alloy",
"provider": "openai",
"instructions": "Warm, empathetic, friendly",
"speed": 1
},
"states": [
{
"name": "<string>",
"prompt": "<string>",
"llm": {
"model": "gpt-3.5-turbo",
"temperature": 0.5,
"provider": "azure_openai"
},
"tools": [
{
"description": "Wait for 2 seconds",
"type": "wait"
},
{
"description": "Hang up the call",
"filler_sentence": "Goodbye!",
"type": "hang_up"
},
{
"description": "Transfer the call to the next available assistant",
"filler_sentence": "I'm transferring you to the next available assistant...",
"type": "transfer_call"
},
{
"description": "Leave a voicemail message",
"filler_sentence": "I tried to call you but you didn't answer. Please call me back at 1234567890",
"type": "leave_voicemail_message"
},
{
"content_type": "url_params",
"description": "Get the availability of the requested assistant by using its name",
"filler_sentence": "I'm checking the availability of the requested assistant...",
"headers": [
{
"description": "The API key to use to call the custom function",
"name": "Authorization",
"value": "Bearer 123"
}
],
"method": "GET",
"parameters": [
{
"description": "The name of the assistant to check the availability of",
"name": "assistant_name",
"type": "string"
}
],
"response_mapping": [
{
"destination_variable": "assistant_availability",
"json_path_to_data": "$.availability"
}
],
"type": "custom_function",
"url": "https://api.example.com/availability"
}
],
"transitions": [
{
"condition": "User provides valid input",
"destination_state_name": "next_state_name",
"filler_sentence": "I'm sorry, I didn't catch that. Can you please repeat?"
}
],
"variables": [
{
"description": "The variable's description",
"extraction_instructions": "The instructions for the variable extraction",
"name": "variable_name",
"type": "string"
}
],
"x_position": -401.1747211895911,
"y_position": 264.2527881040892,
"features": {
"entity_detection": true
}
}
],
"initial_state_name": "<string>",
"llm": {
"model": "gpt-3.5-turbo",
"temperature": 0.5,
"provider": "azure_openai"
},
"transcriber": {
"provider": "azure"
},
"secure_recording_urls": true,
"interruptions": true,
"interruptions_sensitivity": "high",
"webhook_url": "<string>",
"webhook_subscriptions": [
"event_variable_value_updated"
],
"custom_vocabulary": [
"<string>"
]
}
EOF{
"data": {
"name": "<string>",
"language": "en",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"initial_message": "Hello, how can I help you today?",
"initial_message_delay": 0,
"max_call_duration": 300,
"presence_check_phrases": [
"Allo, vous êtes là ?",
"Pouvez-vous répéter s'il vous plaît ?"
],
"presence_check_idle_threshold": 10,
"presence_check_max_times": 1,
"base_prompt": "You are a helpful assistant",
"voice": {
"name": "Alloy",
"provider": "openai",
"instructions": "Warm, empathetic, friendly",
"speed": 1
},
"states": [
{
"name": "<string>",
"prompt": "<string>",
"llm": {
"model": "gpt-3.5-turbo",
"temperature": 0.5,
"provider": "azure_openai"
},
"tools": [
{
"description": "Wait for 2 seconds",
"type": "wait"
},
{
"description": "Hang up the call",
"filler_sentence": "Goodbye!",
"type": "hang_up"
},
{
"description": "Transfer the call to the next available assistant",
"filler_sentence": "I'm transferring you to the next available assistant...",
"type": "transfer_call"
},
{
"description": "Leave a voicemail message",
"filler_sentence": "I tried to call you but you didn't answer. Please call me back at 1234567890",
"type": "leave_voicemail_message"
},
{
"content_type": "url_params",
"description": "Get the availability of the requested assistant by using its name",
"filler_sentence": "I'm checking the availability of the requested assistant...",
"headers": [
{
"description": "The API key to use to call the custom function",
"name": "Authorization",
"value": "Bearer 123"
}
],
"method": "GET",
"parameters": [
{
"description": "The name of the assistant to check the availability of",
"name": "assistant_name",
"type": "string"
}
],
"response_mapping": [
{
"destination_variable": "assistant_availability",
"json_path_to_data": "$.availability"
}
],
"type": "custom_function",
"url": "https://api.example.com/availability"
}
],
"transitions": [
{
"condition": "User provides valid input",
"destination_state_name": "next_state_name",
"filler_sentence": "I'm sorry, I didn't catch that. Can you please repeat?"
}
],
"variables": [
{
"description": "The variable's description",
"extraction_instructions": "The instructions for the variable extraction",
"name": "variable_name",
"type": "string"
}
],
"x_position": -401.1747211895911,
"y_position": 264.2527881040892,
"features": {
"entity_detection": true
}
}
],
"initial_state_name": "<string>",
"llm": {
"model": "gpt-3.5-turbo",
"temperature": 0.5,
"provider": "azure_openai"
},
"transcriber": {
"provider": "azure"
},
"secure_recording_urls": true,
"interruptions": true,
"interruptions_sensitivity": "high",
"webhook_url": "https://webhook.site/123e4567-e89b-12d3-a456-426614174000",
"webhook_subscriptions": [
"event_variable_value_updated",
"event_all_variables_resolved"
],
"custom_vocabulary": [
"super",
"basta",
"bravo",
"gmail.com"
],
"version": 1,
"variables": [
{
"name": "<string>",
"type": "<string>",
"description": "The name of the customer",
"extraction_instructions": "Extract the name of the customer"
}
]
},
"message": "Agent updated successfully",
"error": {
"details": [
{
"field": "email",
"message": "Invalid email format"
}
],
"message": "An error occurred while processing your request",
"status": 400,
"type": "generic_error"
},
"status": 200
}The API Key created in Rounded Studio.
The ID of the agent to update.
The agent data to update and generate a new configuration version. Some properties updates won't generate a new version as they are global settings and have immediate effect without requiring a deployment. These properties are:
namewebhook_urlwebhook_subscriptionssecure_recording_urlsFor other properties, a new version will be created and available to be deployed. Properties definitions are the same as the agent create request, see POST /v1/agents for the complete schema definition. The response includes headers about rate limiting.
en, fr, fr-FR, fr-BE, fr-CA, es, de, it, nl, pl, ar, pt, el, hr, zh Show child attributes
The voice of the agent
Alloy, Ash, Ballad, Coral, Echo, Fable, Onyx, Nova, Sage, Shimmer, Verse, Custom elevenlabs, azure, cartesia, openai The instructions for the voice
"Warm, empathetic, friendly"
The speed of the voice
0 <= x <= 4Show child attributes
The name of the state, it should be unique within the agent, it will be used to identify the state in the conversation flow and to be referenced in the transitions array of other origin states.
1 - 100The prompt that will be sent to the LLM when the conversation flow reaches this state. This should contain instructions about what the agent should say and how it should behave in this particular state of the conversation. This can include references to variables (using the variable name) defined in any of the other states in their variables section.This can include references to the tools (using the tool name) that this state can use, listed in its tools array
100000The configuration of the LLM that will be used to generate the prompt for this state. Don't modify it for now.
Show child attributes
The model of the LLM
gpt-3.5-turbo, gpt-4, gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, gpt-5, gpt-5-mini, gpt-5-nano, gemini-1.5-flash, gemini-2.0-flash, gemini-2.0-flash-lite, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.5-pro, mistral-large-latest, mistral-small-latest The temperature of the LLM
0 <= x <= 10.5
The provider of the LLM
openai, azure_openai, mistral, deepseek, google, meta, anthropic "azure_openai"
The tools that this state can use to perform actions, available tools are: - wait: Wait for a specified amount of time- hang_up: Hang up the call- transfer_call: Transfer the call to a specified phone number- leave_voicemail_message: Leave a voicemail message- custom_function: Call a custom function
Show child attributes
The name of the wait tool, this will be used to be referenced in the state prompt.
The filler sentence to be spoken while waiting
1000"Please hold while I connect you to the next available agent"
Description of what the wait tool does, this will be used by the LLM to understand what the wait tool does.
The type of tool - must be 'wait'
"wait"[
{
"description": "Wait for 2 seconds",
"type": "wait"
},
{
"description": "Hang up the call",
"filler_sentence": "Goodbye!",
"type": "hang_up"
},
{
"description": "Transfer the call to the next available assistant",
"filler_sentence": "I'm transferring you to the next available assistant...",
"type": "transfer_call"
},
{
"description": "Leave a voicemail message",
"filler_sentence": "I tried to call you but you didn't answer. Please call me back at 1234567890",
"type": "leave_voicemail_message"
},
{
"content_type": "url_params",
"description": "Get the availability of the requested assistant by using its name",
"filler_sentence": "I'm checking the availability of the requested assistant...",
"headers": [
{
"description": "The API key to use to call the custom function",
"name": "Authorization",
"value": "Bearer 123"
}
],
"method": "GET",
"parameters": [
{
"description": "The name of the assistant to check the availability of",
"name": "assistant_name",
"type": "string"
}
],
"response_mapping": [
{
"destination_variable": "assistant_availability",
"json_path_to_data": "$.availability"
}
],
"type": "custom_function",
"url": "https://api.example.com/availability"
}
]The transitions to which this state can transition to, shaping the conversation flow
Show child attributes
The condition of the transition
100000"The caller is happy"
The filler sentence of the transition
1000""
[
{
"condition": "User provides valid input",
"destination_state_name": "next_state_name",
"filler_sentence": "I'm sorry, I didn't catch that. Can you please repeat?"
}
]The variables that this state will extract from its conversation, they will be available to the next states
Show child attributes
The name of the variable
1 - 100The type of the variable
string, boolean, number, datetime The instructions for the variable extraction
1000"Extract the name of the customer"
[
{
"description": "The variable's description",
"extraction_instructions": "The instructions for the variable extraction",
"name": "variable_name",
"type": "string"
}
]The x position of the state in the conversation flow
-401.1747211895911
The y position of the state in the conversation flow
264.2527881040892
The features of the state
{ "entity_detection": true }Show child attributes
The model of the LLM
gpt-3.5-turbo, gpt-4, gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, gpt-5, gpt-5-mini, gpt-5-nano, gemini-1.5-flash, gemini-2.0-flash, gemini-2.0-flash-lite, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.5-pro, mistral-large-latest, mistral-small-latest The temperature of the LLM
0 <= x <= 10.5
The provider of the LLM
openai, azure_openai, mistral, deepseek, google, meta, anthropic "azure_openai"
high, medium, low event_variable_value_updated, event_all_variables_resolved, event_call_status_updated, event_call_recording_status_updated, event_call_answer_type_updated, event_task_transition, event_transcript, event_transcript_complete, event_phone_call_connected, event_phone_call_ended, event_phone_call_did_not_connect, event_web_call_connected, event_web_call_ended, event_recording, event_action, event_synthesizer_consumption, event_post_call, event_pipedream_connection Successfully updated agent
The agent data retrieved after the update.
Show child attributes
The name of the agent
1 - 100The language of the agent, expressed as a BCP 47 language tag by using its ISO 639-1 code (e.g. 'en', 'fr', 'es'). For French, regional variants using a region code from ISO 3166-1 are also supported (e.g. 'fr-BE').
en, fr, fr-FR, fr-BE, fr-CA, es, de, it, nl, pl, ar, pt, el, hr, zh The initial message of the agent
1 - 1000"Hello, how can I help you today?"
The delay of the initial message in seconds
0 <= x <= 50
The maximum duration of the call in seconds
300
A series of phrases that the agent will say to re-engage the interlocutor after a period of silence. The phrases should be in the same language as the agent.
[
"Allo, vous êtes là ?",
"Pouvez-vous répéter s'il vous plaît ?"
]The number of seconds of silence after which the agent will say the presence check phrases
3 <= x <= 12010
The maximum number of times the agent will say the presence check phrases
1 <= x <= 1001
The base prompt of the agent
100000"You are a helpful assistant"
The voice of the agent
Show child attributes
The voice of the agent
Alloy, Ash, Ballad, Coral, Echo, Fable, Onyx, Nova, Sage, Shimmer, Verse, Custom elevenlabs, azure, cartesia, openai The instructions for the voice
"Warm, empathetic, friendly"
The speed of the voice
0 <= x <= 4Show child attributes
The name of the state, it should be unique within the agent, it will be used to identify the state in the conversation flow and to be referenced in the transitions array of other origin states.
1 - 100The prompt that will be sent to the LLM when the conversation flow reaches this state. This should contain instructions about what the agent should say and how it should behave in this particular state of the conversation. This can include references to variables (using the variable name) defined in any of the other states in their variables section.This can include references to the tools (using the tool name) that this state can use, listed in its tools array
100000The configuration of the LLM that will be used to generate the prompt for this state. Don't modify it for now.
Show child attributes
The model of the LLM
gpt-3.5-turbo, gpt-4, gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, gpt-5, gpt-5-mini, gpt-5-nano, gemini-1.5-flash, gemini-2.0-flash, gemini-2.0-flash-lite, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.5-pro, mistral-large-latest, mistral-small-latest The temperature of the LLM
0 <= x <= 10.5
The provider of the LLM
openai, azure_openai, mistral, deepseek, google, meta, anthropic "azure_openai"
The tools that this state can use to perform actions, available tools are: - wait: Wait for a specified amount of time- hang_up: Hang up the call- transfer_call: Transfer the call to a specified phone number- leave_voicemail_message: Leave a voicemail message- custom_function: Call a custom function
Show child attributes
The name of the wait tool, this will be used to be referenced in the state prompt.
The filler sentence to be spoken while waiting
1000"Please hold while I connect you to the next available agent"
Description of what the wait tool does, this will be used by the LLM to understand what the wait tool does.
The type of tool - must be 'wait'
"wait"[
{
"description": "Wait for 2 seconds",
"type": "wait"
},
{
"description": "Hang up the call",
"filler_sentence": "Goodbye!",
"type": "hang_up"
},
{
"description": "Transfer the call to the next available assistant",
"filler_sentence": "I'm transferring you to the next available assistant...",
"type": "transfer_call"
},
{
"description": "Leave a voicemail message",
"filler_sentence": "I tried to call you but you didn't answer. Please call me back at 1234567890",
"type": "leave_voicemail_message"
},
{
"content_type": "url_params",
"description": "Get the availability of the requested assistant by using its name",
"filler_sentence": "I'm checking the availability of the requested assistant...",
"headers": [
{
"description": "The API key to use to call the custom function",
"name": "Authorization",
"value": "Bearer 123"
}
],
"method": "GET",
"parameters": [
{
"description": "The name of the assistant to check the availability of",
"name": "assistant_name",
"type": "string"
}
],
"response_mapping": [
{
"destination_variable": "assistant_availability",
"json_path_to_data": "$.availability"
}
],
"type": "custom_function",
"url": "https://api.example.com/availability"
}
]The transitions to which this state can transition to, shaping the conversation flow
Show child attributes
The condition of the transition
100000"The caller is happy"
The filler sentence of the transition
1000""
[
{
"condition": "User provides valid input",
"destination_state_name": "next_state_name",
"filler_sentence": "I'm sorry, I didn't catch that. Can you please repeat?"
}
]The variables that this state will extract from its conversation, they will be available to the next states
Show child attributes
The name of the variable
1 - 100The type of the variable
string, boolean, number, datetime The instructions for the variable extraction
1000"Extract the name of the customer"
[
{
"description": "The variable's description",
"extraction_instructions": "The instructions for the variable extraction",
"name": "variable_name",
"type": "string"
}
]The x position of the state in the conversation flow
-401.1747211895911
The y position of the state in the conversation flow
264.2527881040892
The features of the state
{ "entity_detection": true }Show child attributes
The model of the LLM
gpt-3.5-turbo, gpt-4, gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, gpt-5, gpt-5-mini, gpt-5-nano, gemini-1.5-flash, gemini-2.0-flash, gemini-2.0-flash-lite, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.5-pro, mistral-large-latest, mistral-small-latest The temperature of the LLM
0 <= x <= 10.5
The provider of the LLM
openai, azure_openai, mistral, deepseek, google, meta, anthropic "azure_openai"
Whether to secure the recording URLs
true
Whether to allow interruptions
true
The sensitivity of the interruptions
high, medium, low "high"
The webhook URL of the agent
"https://webhook.site/123e4567-e89b-12d3-a456-426614174000"
The webhook subscriptions of the agent
event_variable_value_updated, event_all_variables_resolved, event_call_status_updated, event_call_recording_status_updated, event_call_answer_type_updated, event_task_transition, event_transcript, event_transcript_complete, event_phone_call_connected, event_phone_call_ended, event_phone_call_did_not_connect, event_web_call_connected, event_web_call_ended, event_recording, event_action, event_synthesizer_consumption, event_post_call, event_pipedream_connection [
"event_variable_value_updated",
"event_all_variables_resolved"
]The custom vocabulary of the agent, used mainly to improve transcription accuracy.
["super", "basta", "bravo", "gmail.com"]Show child attributes
The name of the variable
1 - 100The type of the variable
1 - 100The description of the variable
1000"The name of the customer"
The extraction instructions of the variable
1000"Extract the name of the customer"
Response message indicating the result of the operation. It will be different depending on the update type (when a new version is created or not).
{
"details": [
{
"field": "email",
"message": "Invalid email format"
}
],
"message": "An error occurred while processing your request",
"status": 400,
"type": "generic_error"
}HTTP status code of the response.