POST /dispositions/bulk
Creates multiple dispositions and links them all to the specified agent in a single atomic transaction. Either all dispositions are created and linked, or none are — partial results are not possible.
Use bulk create when setting up a new agent with a complete set of dispositions, or when importing a disposition configuration from another source.
Request Body
| Field | Type | Required | Description |
|---|
agent_id | string | Yes | The agent all dispositions will be linked to |
dispositions | array | Yes | Non-empty array of disposition objects to create |
Each item in dispositions accepts:
| Field | Type | Required | Description |
|---|
name | string | Yes | Display name |
question | string | Yes | LLM evaluation prompt |
category | string | No | Grouping label (default: "General") |
system_prompt | string | No | Optional LLM system context |
model | string | No | LLM model (default: "gpt-4.1-mini") |
is_subjective | bool | No | Enable free-text response (default: false) |
is_objective | bool | No | Enable pre-defined value selection (default: false) |
objective_options | array | Conditional | Required when is_objective is true |
Response
201 Created
{
"message": "Dispositions created successfully",
"ids": [
"3fa85f64-5717-4562-b3fc-2c963f66afa6",
"7cb91a23-1234-4321-b2fc-1c963f11bde4"
]
}
The ids array preserves the same order as the input dispositions array.
Example
curl --request POST \
--url 'https://api.bolna.dev/dispositions/bulk' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json' \
--data '{
"agent_id": "{agent_id}",
"dispositions": [
{
"name": "Agent Handover Needed",
"question": "Did the customer explicitly ask to speak with a human agent?",
"category": "Escalation",
"is_objective": true,
"objective_options": [
{ "value": "Yes", "condition": "Customer asked to speak with a human or live agent" },
{ "value": "No", "condition": "Customer did not request a human handover" }
]
},
{
"name": "Customer Sentiment",
"question": "Describe the customer'\''s overall tone and satisfaction level during the call.",
"category": "Quality",
"is_subjective": true
},
{
"name": "Disclaimer Acknowledged",
"question": "Did the agent read the required disclaimer and did the customer acknowledge it?",
"category": "Compliance",
"is_objective": true,
"objective_options": [
{ "value": "Yes", "condition": "Disclaimer was read and customer confirmed or did not object" },
{ "value": "No", "condition": "Disclaimer was not read or customer explicitly refused" }
]
}
]
}'
Error Responses
| Status | Description |
|---|
403 | Access denied — agent_id does not belong to your account |
422 | Validation error — empty dispositions array or is_objective without objective_options |
500 | Failed to create dispositions — transaction rolled back, no dispositions were created |