Skip to main content
PUT
/
api
/
v1
/
agents
/
{agent_id}
Update agent
curl --request PUT \
  --url https://api.kupe.in/api/v1/agents/{agent_id} \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "agent": {
    "name": "Renamed Agent",
    "first_response_message": "Hi, thanks for calling Acme. How can I help today?"
  },
  "agent_model_config": {
    "model_name": "gpt-4.1-mini",
    "system_prompt": "Updated prompt."
  },
  "agent_specific_config": {
    "auto_terminate_call": true,
    "end_of_speech_timeout": 1.2,
    "inbound_transfer_routes": [
      {
        "route_id": "billing",
        "display_name": "Billing desk",
        "enabled": true,
        "condition_when_to_transfer": "Caller asks for a human or billing specialist.",
        "phone_number": "+919876543210"
      }
    ]
  }
}
'
{
  "agent": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "name": "<string>",
    "user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "is_active": true
  },
  "configurations": {},
  "validation_status": "valid"
}

Authorizations

x-api-key
string
header
default:YOUR_KUPE_API_KEY
required

Kupe dashboard API key for your user.

Path Parameters

agent_id
string<uuid>
required

Query Parameters

force_update
boolean
default:false

Body

application/json

Body for PUT /api/v1/agents/{agent_id} (partial update). Send only the sections you want to change; omitted top-level keys are left unchanged. agent_specific_config is deep-merged onto the stored configuration (omitted fields keep their current values). Active agents may require ?force_update=true. See AgentSpecificConfigInput for all behavior keys.

agent
object
agent_model_config
object

model_name: LLM catalog code or row UUID. Requests may also send the legacy property model_provider_id with the same meaning (OpenAPI lists one field to avoid duplicate inputs).

tts_config
object

tts_model_name selects the TTS row (catalog code or UUID). Optional language sets voice_parameters.language (e.g. en, hi-IN). Legacy body key tts_provider_id is accepted as an alias for tts_model_name only (not listed as a second field).

transcriber_config
object

transcriber_model_name selects the STT row (catalog code or UUID, e.g. saarika:2.5). language is a locale string (e.g. hi-IN); a single-element array ["hi-IN"] is coerced to that string. The pipeline STT model id is derived from the catalog row only — it is not sent in this object. Legacy provider_id is an alias for transcriber_model_name.

vad_config
object
agent_specific_config
object

Per-agent behavior stored in agent_specific_configs.configuration. On create (POST /api/v1/agents) and update (PUT /api/v1/agents/{agent_id}), send under agent_specific_config; omitted keys keep platform or existing values (partial PUT merges). Returned on GET /api/v1/agents/{agent_id} under configurations.agent_specific_config. Dashboard may use camelCase aliases (e.g. autoTerminateauto_terminate_call).

Response

Updated agent returned

Complete agent response (abridged).

agent
object
configurations
object
validation_status
string
Example:

"valid"