Update Custom Analysis Category
curl --request PUT \
--url https://api.vocily.ai/v1/custom-analysis/groups/{group_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Lead QA (v2)"
}
'import requests
url = "https://api.vocily.ai/v1/custom-analysis/groups/{group_id}"
payload = { "name": "Lead QA (v2)" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Lead QA (v2)'})
};
fetch('https://api.vocily.ai/v1/custom-analysis/groups/{group_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.vocily.ai/v1/custom-analysis/groups/{group_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Lead QA (v2)'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.vocily.ai/v1/custom-analysis/groups/{group_id}"
payload := strings.NewReader("{\n \"name\": \"Lead QA (v2)\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.put("https://api.vocily.ai/v1/custom-analysis/groups/{group_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Lead QA (v2)\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vocily.ai/v1/custom-analysis/groups/{group_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Lead QA (v2)\"\n}"
response = http.request(request)
puts response.read_body{
"name": "Lead quality (v2)",
"description": "What we ask the model to pull out of every call.",
"model": null,
"temperature": null,
"max_tokens": null,
"conditions": {},
"id": "0000000f-0000-4000-8000-00000000000f",
"items": [
{
"name": "Lead Temperature",
"description": "How ready the caller is to buy, judged from what they said — not from tone.",
"extraction_method": "ai",
"result_format": "string",
"required": false,
"constraints": {
"enum": [
"hot",
"warm"
]
},
"fields": [],
"enabled": true,
"id": "00000010-0000-4000-8000-000000000010",
"category_id": "0000000f-0000-4000-8000-00000000000f",
"is_system": false,
"created_at": "2026-09-16T19:38:04.238748Z",
"updated_at": "2026-09-16T19:38:04.251020Z"
}
],
"is_default": false,
"created_at": "2026-09-16T19:38:04.226829Z",
"updated_at": "2026-09-16T19:38:04.260569Z"
}{
"detail": "Invalid API key",
"code": "UNAUTHORIZED"
}{
"detail": {
"code": "validation_error",
"message": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"type": "<string>"
}
]
},
"code": "VALIDATION_ERROR"
}{
"code": "rate_limited"
}Custom Analysis
Rename a group
Change an analysis group’s name.
Update Custom Analysis Category
curl --request PUT \
--url https://api.vocily.ai/v1/custom-analysis/groups/{group_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Lead QA (v2)"
}
'import requests
url = "https://api.vocily.ai/v1/custom-analysis/groups/{group_id}"
payload = { "name": "Lead QA (v2)" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Lead QA (v2)'})
};
fetch('https://api.vocily.ai/v1/custom-analysis/groups/{group_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.vocily.ai/v1/custom-analysis/groups/{group_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Lead QA (v2)'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.vocily.ai/v1/custom-analysis/groups/{group_id}"
payload := strings.NewReader("{\n \"name\": \"Lead QA (v2)\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.put("https://api.vocily.ai/v1/custom-analysis/groups/{group_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Lead QA (v2)\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vocily.ai/v1/custom-analysis/groups/{group_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Lead QA (v2)\"\n}"
response = http.request(request)
puts response.read_body{
"name": "Lead quality (v2)",
"description": "What we ask the model to pull out of every call.",
"model": null,
"temperature": null,
"max_tokens": null,
"conditions": {},
"id": "0000000f-0000-4000-8000-00000000000f",
"items": [
{
"name": "Lead Temperature",
"description": "How ready the caller is to buy, judged from what they said — not from tone.",
"extraction_method": "ai",
"result_format": "string",
"required": false,
"constraints": {
"enum": [
"hot",
"warm"
]
},
"fields": [],
"enabled": true,
"id": "00000010-0000-4000-8000-000000000010",
"category_id": "0000000f-0000-4000-8000-00000000000f",
"is_system": false,
"created_at": "2026-09-16T19:38:04.238748Z",
"updated_at": "2026-09-16T19:38:04.251020Z"
}
],
"is_default": false,
"created_at": "2026-09-16T19:38:04.226829Z",
"updated_at": "2026-09-16T19:38:04.260569Z"
}{
"detail": "Invalid API key",
"code": "UNAUTHORIZED"
}{
"detail": {
"code": "validation_error",
"message": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"type": "<string>"
}
]
},
"code": "VALIDATION_ERROR"
}{
"code": "rate_limited"
}{ "name": "Lead QA (v2)" }
The group name is part of the key extracted values arrive under. Values land as
custom_analysis["Lead QA"]["Lead Temperature"], so renaming a group changes the shape of every
future call payload while leaving past calls under the old name.If anything downstream reads that key — a warehouse column, a CRM mapping, a dashboard — rename
on both sides together, or create a new group instead.Vocily’s built-in “Default Analysis” group cannot be renamed or deleted —
409. Its name is
an address other readers depend on, and its model deliberately follows the agent’s own. What you
can do is edit each value’s extraction description, switch values off, add your own values to
it, or detach the whole group from an agent.Authorizations
Your API key as a Bearer token, e.g. Authorization: Bearer vk_….
Path Parameters
The analysis group's id, from GET /v1/custom-analysis.
Body
application/json
What to call this group. Renaming changes the key values arrive under on every future call, while past calls keep the old name.
Required string length:
1 - 255Your own note about what the group is for.
Which LLM runs the extraction.
Required string length:
1 - 128Randomness for the extraction.
Required range:
0 <= x <= 2Cap on the extraction response.
Required range:
50 <= x <= 10000When this group runs at all.
Show child attributes
Show child attributes
Was this page helpful?
⌘I