Update Workbench Setup Version
curl --request PATCH \
--url https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id} \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"name": "<string>",
"description": {},
"attached_agents": [
{}
],
"pass_threshold_pct": {},
"run_mode": "<string>",
"default_test_config_id": {},
"default_call_ids": {}
}
'import requests
url = "https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}"
payload = {
"name": "<string>",
"description": {},
"attached_agents": [{}],
"pass_threshold_pct": {},
"run_mode": "<string>",
"default_test_config_id": {},
"default_call_ids": {}
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: {},
attached_agents: [{}],
pass_threshold_pct: {},
run_mode: '<string>',
default_test_config_id: {},
default_call_ids: {}
})
};
fetch('https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => [
],
'attached_agents' => [
[
]
],
'pass_threshold_pct' => [
],
'run_mode' => '<string>',
'default_test_config_id' => [
],
'default_call_ids' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": {},\n \"attached_agents\": [\n {}\n ],\n \"pass_threshold_pct\": {},\n \"run_mode\": \"<string>\",\n \"default_test_config_id\": {},\n \"default_call_ids\": {}\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("authorization", "<authorization>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": {},\n \"attached_agents\": [\n {}\n ],\n \"pass_threshold_pct\": {},\n \"run_mode\": \"<string>\",\n \"default_test_config_id\": {},\n \"default_call_ids\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": {},\n \"attached_agents\": [\n {}\n ],\n \"pass_threshold_pct\": {},\n \"run_mode\": \"<string>\",\n \"default_test_config_id\": {},\n \"default_call_ids\": {}\n}"
response = http.request(request)
puts response.read_body{
"errors": null,
"data": {
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"org_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"workbench_setup_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"version_number": 4,
"name": "Onboarding Quality Check",
"description": "Updated to include empathy grading.",
"state": "editable",
"attached_agents": [
{
"eval_agent_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"eval_agent_version_id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"weight": 40,
"target_level_keys": ["good", "excellent"]
},
{
"eval_agent_id": "a0b1c2d3-e4f5-6789-abcd-ef0123456789",
"eval_agent_version_id": "b1c2d3e4-f5a6-7890-bcde-f01234567890",
"weight": 60,
"target_level_keys": ["acceptable", "good"]
}
],
"pass_threshold_pct": 80,
"run_mode": "full",
"default_test_config_id": null,
"default_call_ids": [
"call_abc123",
"call_def456",
"call_ghi789"
],
"created_from_version_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"created_by": "9a8b7c6d-5e4f-3210-9876-543210fedcba",
"created_at": "2026-05-20T14:00:00.000Z",
"updated_at": "2026-05-27T12:00:00.000Z"
}
}
Versions
Update Workbench Setup Version
Edit a draft version’s attached agents, threshold, run mode, or default calls.
PATCH
/
v1
/
evals
/
workbench-setups
/
{setup_id}
/
versions
/
{version_id}
Update Workbench Setup Version
curl --request PATCH \
--url https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id} \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"name": "<string>",
"description": {},
"attached_agents": [
{}
],
"pass_threshold_pct": {},
"run_mode": "<string>",
"default_test_config_id": {},
"default_call_ids": {}
}
'import requests
url = "https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}"
payload = {
"name": "<string>",
"description": {},
"attached_agents": [{}],
"pass_threshold_pct": {},
"run_mode": "<string>",
"default_test_config_id": {},
"default_call_ids": {}
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: {},
attached_agents: [{}],
pass_threshold_pct: {},
run_mode: '<string>',
default_test_config_id: {},
default_call_ids: {}
})
};
fetch('https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'description' => [
],
'attached_agents' => [
[
]
],
'pass_threshold_pct' => [
],
'run_mode' => '<string>',
'default_test_config_id' => [
],
'default_call_ids' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": {},\n \"attached_agents\": [\n {}\n ],\n \"pass_threshold_pct\": {},\n \"run_mode\": \"<string>\",\n \"default_test_config_id\": {},\n \"default_call_ids\": {}\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("authorization", "<authorization>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": {},\n \"attached_agents\": [\n {}\n ],\n \"pass_threshold_pct\": {},\n \"run_mode\": \"<string>\",\n \"default_test_config_id\": {},\n \"default_call_ids\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/evals/workbench-setups/{setup_id}/versions/{version_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": {},\n \"attached_agents\": [\n {}\n ],\n \"pass_threshold_pct\": {},\n \"run_mode\": \"<string>\",\n \"default_test_config_id\": {},\n \"default_call_ids\": {}\n}"
response = http.request(request)
puts response.read_body{
"errors": null,
"data": {
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"org_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"workbench_setup_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"version_number": 4,
"name": "Onboarding Quality Check",
"description": "Updated to include empathy grading.",
"state": "editable",
"attached_agents": [
{
"eval_agent_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"eval_agent_version_id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"weight": 40,
"target_level_keys": ["good", "excellent"]
},
{
"eval_agent_id": "a0b1c2d3-e4f5-6789-abcd-ef0123456789",
"eval_agent_version_id": "b1c2d3e4-f5a6-7890-bcde-f01234567890",
"weight": 60,
"target_level_keys": ["acceptable", "good"]
}
],
"pass_threshold_pct": 80,
"run_mode": "full",
"default_test_config_id": null,
"default_call_ids": [
"call_abc123",
"call_def456",
"call_ghi789"
],
"created_from_version_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"created_by": "9a8b7c6d-5e4f-3210-9876-543210fedcba",
"created_at": "2026-05-20T14:00:00.000Z",
"updated_at": "2026-05-27T12:00:00.000Z"
}
}
Only versions in the
editable state can be updated. To make changes to a published (archived) version, fork a new draft from it first using the Create Workbench Setup Version endpoint.Headers
string
required
Your API key for authentication.
Path Parameters
string
required
The ID of the workbench setup.
string
required
The ID of the draft version to update.
Body Parameters
All fields are optional. Only include fields you want to update.string
Updated display name for the version. Between 1 and 200 characters.
string | null
Updated description, or
null to clear it.array
Replaces the full list of attached eval agents. Up to 20 agents. Each item requires:
eval_agent_id(string, required) - ID of the eval agent to attach.eval_agent_version_id(string, required) - Version of the eval agent to use.weight(number, required) - Relative weight for this agent in scoring (0-100).target_level_keys(array of strings, required) - One or more target level keys this agent evaluates against.
integer | null
Percentage of calls that must pass for a run to be considered passing. Between 0 and 100, or
null to clear.string
How calls are evaluated. One of
text, audio, or full.string | null
ID of the default test configuration to use for runs, or
null to clear.array of strings
Default call IDs to evaluate against when no explicit call list is provided at run time. Replaces the existing list. Up to 5000 entries.
Response
object
The full updated version object.
Show version fields
Show version fields
string
Unique identifier for this version.
string
ID of the organization that owns this version.
string
ID of the parent workbench setup.
integer
Monotonically increasing version number.
string
Display name of this version.
string | null
Description of this version, or
null if not set.string
"editable" for a draft, "archived" for a published snapshot.array
Updated list of eval agents. Each item contains
eval_agent_id, eval_agent_version_id, weight (0-100), and target_level_keys (array of strings).integer | null
Updated pass threshold percentage (0-100), or
null if not set.string
Updated run mode. One of
text, audio, or full.string | null
Updated default test configuration ID, or
null if not set.array of strings
Updated default call IDs. Up to 5000 entries.
string | null
ID of the version this was forked from, or
null if it is the first version.string | null
Identifier of the user who created this version, or
null.string
ISO 8601 timestamp for when this version was created.
string
ISO 8601 timestamp for when this version was last updated.
null
null on success.{
"errors": null,
"data": {
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"org_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"workbench_setup_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"version_number": 4,
"name": "Onboarding Quality Check",
"description": "Updated to include empathy grading.",
"state": "editable",
"attached_agents": [
{
"eval_agent_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"eval_agent_version_id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"weight": 40,
"target_level_keys": ["good", "excellent"]
},
{
"eval_agent_id": "a0b1c2d3-e4f5-6789-abcd-ef0123456789",
"eval_agent_version_id": "b1c2d3e4-f5a6-7890-bcde-f01234567890",
"weight": 60,
"target_level_keys": ["acceptable", "good"]
}
],
"pass_threshold_pct": 80,
"run_mode": "full",
"default_test_config_id": null,
"default_call_ids": [
"call_abc123",
"call_def456",
"call_ghi789"
],
"created_from_version_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"created_by": "9a8b7c6d-5e4f-3210-9876-543210fedcba",
"created_at": "2026-05-20T14:00:00.000Z",
"updated_at": "2026-05-27T12:00:00.000Z"
}
}
Was this page helpful?
⌘I