---
title: "Update Agent"
method: POST
path: "/v1/update-agent"
tags: ["Agents"]
---

# Update Agent

`POST /v1/update-agent`

Update an existing agent in the system.

## Headers

- `X-API-Key` string, required

## Request body

- AgentUpdateRequest
  - `bluejay_as_code_id` string, uuid, nullable — Stable code-addressable identifier
  - `agent_id` string, nullable, required — ID of the agent to be updated
  - `external_agent_id` string, nullable — External agent ID for the agent
  - `name` string, nullable — Name of the agent
  - `system_prompt` string, nullable — System prompt for the agent
  - `phone_number` string, nullable — Phone number associated with the agent
  - `goals` string[], nullable — List of goals for the agent
  - `type` 'INBOUND' | 'OUTBOUND' — Enum representing the type of agent
  - `connection_type` 'SMS' | 'HTTP_WEBHOOK' | 'PHONE' | 'SIP' | 'WEBSOCKET' | 'LIVEKIT' | 'PIPECAT' | 'ELEVEN_LABS' | 'RETELL' | 'VAPI' | 'KORE' | 'AMELIA_CHAT' | 'AMELIA_VOICE' | 'GOOGLE_CES_CHAT' | 'GOOGLE_CES_VOICE' | 'GOOGLE_DFCX_VOICE' | 'GOOGLE_DFCX_CHAT' | 'BLAND_PHONE' | 'BLAND_VOICE' | 'BLAND_CHAT' — Enum representing the connection type of the agent
  - `mode` 'VOICE' | 'TEXT' — Enum representing the mode of agent
  - `keyterms` string[], nullable — List of keyterms for the agent
  - `follow_up_sms_sender_numbers` string[], nullable — E.164 campaign numbers authorized to send this agent's follow-up SMS
  - `folder` string, nullable — Name of the folder to put the agent in
  - `websocket_url` string, nullable — WebSocket URL for real-time communication
  - `websocket_username` string, nullable — Username for WebSocket authentication
  - `websocket_password` string, nullable — Password for WebSocket authentication
  - `sip_uri` string, nullable — SIP URI for VoIP calls
  - `sip_username` string, nullable — Username for SIP authentication
  - `sip_password` string, nullable — Password for SIP authentication
  - `custom_sip_headers` object, nullable — Custom headers for SIP requests (Do not include `X-` prefix for the headers, these get added automatically)
  - `dynamic_sip_webhook_url` string, nullable — Per-call SIP endpoint webhook. When set (SIP connection), each call fetches its destination SIP URI from this URL at dial time.
  - `outbound_trigger_webhook_url` string, nullable — Customer-dialed sims: Bluejay POSTs a rendered payload to this URL at dispatch so the customer's own flow dials their agent into the receiving digital human.
  - `outbound_trigger_payload_template` object, nullable — JSON template for the outbound trigger webhook body; {{tokens}} like {{digital_human.phone_number}} are filled per call.
  - `redact_pii` boolean, nullable — Enable/disable PII redaction
  - `livekit_agent_name` string, nullable — LiveKit agent name
  - `livekit_metadata` object, nullable — LiveKit metadata
  - `livekit_customer_tool_topic` string, nullable — LiveKit customer tool topic
  - `livekit_token_webhook_url` string, nullable — Webhook URL Bluejay calls per simulated call to fetch a LiveKit room token; alternative to storing the org's LiveKit API key/secret. Empty string clears the field.
  - `pipecat_agent_name` string, nullable — Pipecat agent name
  - `pipecat_agent_configuration` object, nullable — Pipecat agent configuration
  - `pipecat_room_properties` object, nullable — Pipecat room properties
  - `http_webhook` string, nullable — HTTP webhook URL for text agent communication
  - `voice_provider` string, nullable — Voice provider for the agent
  - `provider_id` string, nullable — Provider ID for the agent
  - `eleven_labs_agent_id` string, nullable — ElevenLabs Convai agent_id (for ELEVEN_LABS connection type; the xi-api-key lives in the org's integrations row)
  - `retell_agent_id` string, nullable — Retell agent_id (for RETELL connection type; the retell_key lives in the org's integrations row)
  - `vapi_assistant_id` string, nullable — Vapi assistant_id (for VAPI connection type; the vapi_private_key lives in the org's integrations row)
  - `ces_app_id` string, nullable — Google CES app id (for GOOGLE_CES_VOICE / GOOGLE_CES_CHAT; the WIF JSON lives in the org's integrations row)
  - `ces_deployment_id` string, nullable — Google CES deployment id (deployment is bound to a specific app version)
  - `dfcx_project_id` string, nullable — Google Dialogflow CX GCP project ID (for GOOGLE_DFCX_VOICE / GOOGLE_DFCX_CHAT; the WIF JSON lives in the org's integrations row)
  - `dfcx_location` string, nullable — Google Dialogflow CX location (e.g. us-central1, global)
  - `dfcx_agent_id` string, nullable — Google Dialogflow CX agent UUID (from the DFCX agent resource)
  - `amelia_base_url` string, nullable — Amelia deployment base URL including context root (e.g. https://tenant.amelia.com/Amelia)
  - `amelia_domain_code` string, nullable — Amelia domain code the conversation opens against (from /api/init -> domains[].code)
  - `amelia_flow_name` string, nullable — Which conversation flow in the Amelia domain this agent tracks (required for workflow sync)
  - `amelia_agent_name` string, nullable — Which cognitive agent in the Amelia domain this agent tracks (takes precedence over amelia_flow_name for workflow sync)
  - `kore_host` string, nullable — Kore.ai platform host (e.g. https://kb.est.k8s.qa.kore.aws.spctrm.net)
  - `kore_bot_id` string, nullable — Kore.ai bot ID (e.g. st-d536681d-...)
  - `kore_client_id` string, nullable — Kore.ai webhook app Client ID (cs-...)
  - `kore_client_secret` string, nullable — Kore.ai webhook app Client Secret (HS256); stored encrypted
  - `bland_pathway_id` string, nullable — Bland pathway id the agent runs (for BLAND_VOICE / BLAND_CHAT; the bland_api_key lives in the org's integrations row)
  - `bland_agent_id` string, nullable — Bland web agent id bound to the pathway (required for BLAND_VOICE: a pathway itself cannot be dialled)
  - `enable_outbound_call_auto_start` boolean, nullable — Automatically initiate an outbound call when a test result reaches READY state
  - `simulations_disabled` boolean, nullable — Enable/disable simulations for this agent
  - `workflow` object, nullable — Provider-specific workflow definition (e.g. full ElevenLabs Get Agent response). Parsing depends on `provider`.
  - `provider` 'CUSTOM' | 'ELEVENLABS' | 'VAPI' | 'RETELL' | 'GOOGLE_CES_VOICE' | 'GOOGLE_CES_CHAT' | 'GOOGLE_DFCX_VOICE' | 'GOOGLE_DFCX_CHAT' | 'AMELIA' | 'BLAND' — Source platform the agent's definition (system prompt, workflow) comes from. Distinct from `voice_provider` (TTS/STT vendor) and `provider_id` (handle on that vendor) — this identifies where the agent's *behavior* (prompt, multi-agent graph) is authored.

## Response `200`

Successful Response

- AgentUpdateResponse
  - `agent` AgentUpdateRequest, required
    - `bluejay_as_code_id` string, uuid, nullable — Stable code-addressable identifier
    - `agent_id` string, nullable, required — ID of the agent to be updated
    - `external_agent_id` string, nullable — External agent ID for the agent
    - `name` string, nullable — Name of the agent
    - `system_prompt` string, nullable — System prompt for the agent
    - `phone_number` string, nullable — Phone number associated with the agent
    - `goals` string[], nullable — List of goals for the agent
    - `type` 'INBOUND' | 'OUTBOUND' — Enum representing the type of agent
    - `connection_type` 'SMS' | 'HTTP_WEBHOOK' | 'PHONE' | 'SIP' | 'WEBSOCKET' | 'LIVEKIT' | 'PIPECAT' | 'ELEVEN_LABS' | 'RETELL' | 'VAPI' | 'KORE' | 'AMELIA_CHAT' | 'AMELIA_VOICE' | 'GOOGLE_CES_CHAT' | 'GOOGLE_CES_VOICE' | 'GOOGLE_DFCX_VOICE' | 'GOOGLE_DFCX_CHAT' | 'BLAND_PHONE' | 'BLAND_VOICE' | 'BLAND_CHAT' — Enum representing the connection type of the agent
    - `mode` 'VOICE' | 'TEXT' — Enum representing the mode of agent
    - `keyterms` string[], nullable — List of keyterms for the agent
    - `follow_up_sms_sender_numbers` string[], nullable — E.164 campaign numbers authorized to send this agent's follow-up SMS
    - `folder` string, nullable — Name of the folder to put the agent in
    - `websocket_url` string, nullable — WebSocket URL for real-time communication
    - `websocket_username` string, nullable — Username for WebSocket authentication
    - `websocket_password` string, nullable — Password for WebSocket authentication
    - `sip_uri` string, nullable — SIP URI for VoIP calls
    - `sip_username` string, nullable — Username for SIP authentication
    - `sip_password` string, nullable — Password for SIP authentication
    - `custom_sip_headers` object, nullable — Custom headers for SIP requests (Do not include `X-` prefix for the headers, these get added automatically)
    - `dynamic_sip_webhook_url` string, nullable — Per-call SIP endpoint webhook. When set (SIP connection), each call fetches its destination SIP URI from this URL at dial time.
    - `outbound_trigger_webhook_url` string, nullable — Customer-dialed sims: Bluejay POSTs a rendered payload to this URL at dispatch so the customer's own flow dials their agent into the receiving digital human.
    - `outbound_trigger_payload_template` object, nullable — JSON template for the outbound trigger webhook body; {{tokens}} like {{digital_human.phone_number}} are filled per call.
    - `redact_pii` boolean, nullable — Enable/disable PII redaction
    - `livekit_agent_name` string, nullable — LiveKit agent name
    - `livekit_metadata` object, nullable — LiveKit metadata
    - `livekit_customer_tool_topic` string, nullable — LiveKit customer tool topic
    - `livekit_token_webhook_url` string, nullable — Webhook URL Bluejay calls per simulated call to fetch a LiveKit room token; alternative to storing the org's LiveKit API key/secret. Empty string clears the field.
    - `pipecat_agent_name` string, nullable — Pipecat agent name
    - `pipecat_agent_configuration` object, nullable — Pipecat agent configuration
    - `pipecat_room_properties` object, nullable — Pipecat room properties
    - `http_webhook` string, nullable — HTTP webhook URL for text agent communication
    - `voice_provider` string, nullable — Voice provider for the agent
    - `provider_id` string, nullable — Provider ID for the agent
    - `eleven_labs_agent_id` string, nullable — ElevenLabs Convai agent_id (for ELEVEN_LABS connection type; the xi-api-key lives in the org's integrations row)
    - `retell_agent_id` string, nullable — Retell agent_id (for RETELL connection type; the retell_key lives in the org's integrations row)
    - `vapi_assistant_id` string, nullable — Vapi assistant_id (for VAPI connection type; the vapi_private_key lives in the org's integrations row)
    - `ces_app_id` string, nullable — Google CES app id (for GOOGLE_CES_VOICE / GOOGLE_CES_CHAT; the WIF JSON lives in the org's integrations row)
    - `ces_deployment_id` string, nullable — Google CES deployment id (deployment is bound to a specific app version)
    - `dfcx_project_id` string, nullable — Google Dialogflow CX GCP project ID (for GOOGLE_DFCX_VOICE / GOOGLE_DFCX_CHAT; the WIF JSON lives in the org's integrations row)
    - `dfcx_location` string, nullable — Google Dialogflow CX location (e.g. us-central1, global)
    - `dfcx_agent_id` string, nullable — Google Dialogflow CX agent UUID (from the DFCX agent resource)
    - `amelia_base_url` string, nullable — Amelia deployment base URL including context root (e.g. https://tenant.amelia.com/Amelia)
    - `amelia_domain_code` string, nullable — Amelia domain code the conversation opens against (from /api/init -> domains[].code)
    - `amelia_flow_name` string, nullable — Which conversation flow in the Amelia domain this agent tracks (required for workflow sync)
    - `amelia_agent_name` string, nullable — Which cognitive agent in the Amelia domain this agent tracks (takes precedence over amelia_flow_name for workflow sync)
    - `kore_host` string, nullable — Kore.ai platform host (e.g. https://kb.est.k8s.qa.kore.aws.spctrm.net)
    - `kore_bot_id` string, nullable — Kore.ai bot ID (e.g. st-d536681d-...)
    - `kore_client_id` string, nullable — Kore.ai webhook app Client ID (cs-...)
    - `kore_client_secret` string, nullable — Kore.ai webhook app Client Secret (HS256); stored encrypted
    - `bland_pathway_id` string, nullable — Bland pathway id the agent runs (for BLAND_VOICE / BLAND_CHAT; the bland_api_key lives in the org's integrations row)
    - `bland_agent_id` string, nullable — Bland web agent id bound to the pathway (required for BLAND_VOICE: a pathway itself cannot be dialled)
    - `enable_outbound_call_auto_start` boolean, nullable — Automatically initiate an outbound call when a test result reaches READY state
    - `simulations_disabled` boolean, nullable — Enable/disable simulations for this agent
    - `workflow` object, nullable — Provider-specific workflow definition (e.g. full ElevenLabs Get Agent response). Parsing depends on `provider`.
    - `provider` 'CUSTOM' | 'ELEVENLABS' | 'VAPI' | 'RETELL' | 'GOOGLE_CES_VOICE' | 'GOOGLE_CES_CHAT' | 'GOOGLE_DFCX_VOICE' | 'GOOGLE_DFCX_CHAT' | 'AMELIA' | 'BLAND' — Source platform the agent's definition (system prompt, workflow) comes from. Distinct from `voice_provider` (TTS/STT vendor) and `provider_id` (handle on that vendor) — this identifies where the agent's *behavior* (prompt, multi-agent graph) is authored.
  - `status` string — Status of the response
  - `http_webhook_key` string, nullable — Signing key for HTTP webhook (only provided if http_webhook was set)

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/getbluejay/apis/bluejay-api.md) · [All operations](https://skmtc.net/getbluejay/apis/bluejay-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/getbluejay/bluejay-api/revisions/f48cef80963f/schema)
