Skip to main content

PUT /dispositions/{disposition_id}

Updates an existing disposition. All fields in the request body are optional — only fields you include are changed. This endpoint has two distinct behaviors depending on whether agent_id is included in the request body.

Path Parameters

ParameterTypeRequiredDescription
disposition_idUUIDYesThe ID of the disposition to update

Request Body

All fields are optional:
FieldTypeDescription
agent_idstringIf provided, enables scoped (copy-on-write) mode
namestringNew display name
questionstringUpdated LLM evaluation prompt
categorystringNew category label
system_promptstringUpdated LLM system context
modelstringUpdated LLM model
is_subjectiveboolEnable/disable free-text response
is_objectiveboolEnable/disable pre-defined value selection
objective_optionsarrayUpdated list of pre-defined options

Scoped vs. Unscoped Mode

The API checks whether the disposition is exclusive to the specified agent (i.e., not shared with other agents): Case 1: Disposition is exclusive to this agent → Edit in place Returns 200 OK:
{
  "message": "Disposition updated successfully",
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
Case 2: Disposition is shared → Copy-on-write A new private copy is created for this agent, and the agent is re-linked to the copy. The original disposition is unchanged. Returns 201 Created:
{
  "message": "Disposition copy created and linked to agent",
  "id": "9ab12c34-5678-4321-b3fc-7d852f33caf1"
}
A 201 response means a new disposition ID was created. If you’re storing the disposition ID (e.g., in your own database), update your reference to the new ID returned in the response. The original disposition_id now belongs to other agents; your agent uses the new copy.

Unscoped mode — no agent_id

  • Admins can update any disposition in place.
  • Non-admin users can only update dispositions they own.

Examples

curl --request PUT \
  --url 'https://api.bolna.dev/dispositions/{disposition_id}' \
  --header 'Authorization: Bearer {api_key}' \
  --header 'Content-Type: application/json' \
  --data '{
    "agent_id": "{agent_id}",
    "question": "What was the final outcome? Did the customer agree to a demo or a follow-up call?",
    "objective_options": [
      { "value": "demo", "condition": "Customer agreed to a product demo" },
      { "value": "follow_up", "condition": "Customer agreed to a follow-up call" },
      { "value": "declined", "condition": "Customer declined both options" }
    ]
  }'

Error Responses

StatusDescription
400No valid fields provided to update
403Access denied
404Disposition not found
422Validation error
500Internal server error