Update Workbench Setup
curl --request PATCH \
--url https://api.bland.ai/v1/evals/workbench-setups/{setup_id} \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"name": "<string>",
"description": {},
"active_version_id": {},
"metadata": {}
}
'import requests
url = "https://api.bland.ai/v1/evals/workbench-setups/{setup_id}"
payload = {
"name": "<string>",
"description": {},
"active_version_id": {},
"metadata": {}
}
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: {}, active_version_id: {}, metadata: {}})
};
fetch('https://api.bland.ai/v1/evals/workbench-setups/{setup_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}",
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' => [
],
'active_version_id' => [
],
'metadata' => [
]
]),
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}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": {},\n \"active_version_id\": {},\n \"metadata\": {}\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}")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": {},\n \"active_version_id\": {},\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/evals/workbench-setups/{setup_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 \"active_version_id\": {},\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"errors": null,
"data": {
"setup": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"org_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"key": "onboarding-quality-check",
"name": "Onboarding Quality Check v2",
"description": "Updated evaluation suite for Q2 onboarding calls.",
"current_version_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"active_version_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"metadata": {
"team": "cx"
},
"created_at": "2026-03-15T08:00:00.000Z",
"updated_at": "2026-05-27T11:30:00.000Z",
"deleted_at": null
},
"current_version": {
"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 v2",
"description": "Updated evaluation suite for Q2 onboarding calls.",
"state": "editable",
"attached_agents": [
{
"eval_agent_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"eval_agent_version_id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"weight": 50,
"target_level_keys": ["good", "excellent"]
}
],
"pass_threshold_pct": 80,
"run_mode": "audio",
"default_test_config_id": null,
"default_call_ids": [],
"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-27T11:30:00.000Z"
}
}
}
Workbench Setups
Update Workbench Setup
Update a workbench setup’s metadata or repoint its active version.
PATCH
/
v1
/
evals
/
workbench-setups
/
{setup_id}
Update Workbench Setup
curl --request PATCH \
--url https://api.bland.ai/v1/evals/workbench-setups/{setup_id} \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"name": "<string>",
"description": {},
"active_version_id": {},
"metadata": {}
}
'import requests
url = "https://api.bland.ai/v1/evals/workbench-setups/{setup_id}"
payload = {
"name": "<string>",
"description": {},
"active_version_id": {},
"metadata": {}
}
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: {}, active_version_id: {}, metadata: {}})
};
fetch('https://api.bland.ai/v1/evals/workbench-setups/{setup_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}",
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' => [
],
'active_version_id' => [
],
'metadata' => [
]
]),
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}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": {},\n \"active_version_id\": {},\n \"metadata\": {}\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}")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": {},\n \"active_version_id\": {},\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/evals/workbench-setups/{setup_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 \"active_version_id\": {},\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"errors": null,
"data": {
"setup": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"org_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"key": "onboarding-quality-check",
"name": "Onboarding Quality Check v2",
"description": "Updated evaluation suite for Q2 onboarding calls.",
"current_version_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"active_version_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"metadata": {
"team": "cx"
},
"created_at": "2026-03-15T08:00:00.000Z",
"updated_at": "2026-05-27T11:30:00.000Z",
"deleted_at": null
},
"current_version": {
"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 v2",
"description": "Updated evaluation suite for Q2 onboarding calls.",
"state": "editable",
"attached_agents": [
{
"eval_agent_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"eval_agent_version_id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"weight": 50,
"target_level_keys": ["good", "excellent"]
}
],
"pass_threshold_pct": 80,
"run_mode": "audio",
"default_test_config_id": null,
"default_call_ids": [],
"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-27T11:30:00.000Z"
}
}
}
This endpoint updates setup-level fields only. To edit attached agents, the pass threshold, or run mode, update the setup’s draft version using the Update Workbench Setup Version endpoint.
Headers
string
required
Your API key for authentication.
Path Parameters
string
required
The ID of the workbench setup to update.
Body Parameters
All fields are optional. Only include fields you want to update.string
Updated display name for the setup. Between 1 and 200 characters.
string | null
Updated description, or
null to clear it.string | null
Repoint the published version to a different archived version ID. Set to
null to unpublish the setup.object
Key-value metadata to associate with the setup. Values must be strings.
Response
object
An object containing the updated setup and its current draft version.
Show setup
Show setup
string
Unique identifier for the workbench setup.
string
ID of the organization that owns this setup.
string
Stable slug key for the setup.
string
Display name of the setup.
string | null
Description of the setup, or
null if not set.string
ID of the current editable draft version.
string | null
ID of the published version, or
null if unpublished.object
Key-value metadata. Values are strings.
string
ISO 8601 timestamp for when the setup was created.
string
ISO 8601 timestamp for when the setup was last updated.
string | null
ISO 8601 timestamp for when the setup was deleted, or
null if not deleted.Show current_version
Show current_version
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
Eval agents attached to this version. Each item contains
eval_agent_id, eval_agent_version_id, weight (0-100), and target_level_keys (array of strings).integer | null
Percentage of calls that must pass for a run to be considered passing (0-100), or
null if not set.string
How calls are evaluated. One of
text, audio, or full.string | null
ID of the default test configuration, or
null if not set.array of strings
Default call IDs to evaluate against. 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": {
"setup": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"org_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"key": "onboarding-quality-check",
"name": "Onboarding Quality Check v2",
"description": "Updated evaluation suite for Q2 onboarding calls.",
"current_version_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"active_version_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"metadata": {
"team": "cx"
},
"created_at": "2026-03-15T08:00:00.000Z",
"updated_at": "2026-05-27T11:30:00.000Z",
"deleted_at": null
},
"current_version": {
"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 v2",
"description": "Updated evaluation suite for Q2 onboarding calls.",
"state": "editable",
"attached_agents": [
{
"eval_agent_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"eval_agent_version_id": "f6a7b8c9-d0e1-2345-fabc-456789012345",
"weight": 50,
"target_level_keys": ["good", "excellent"]
}
],
"pass_threshold_pct": 80,
"run_mode": "audio",
"default_test_config_id": null,
"default_call_ids": [],
"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-27T11:30:00.000Z"
}
}
}
Was this page helpful?
⌘I