curl --request PATCH \ --url https://voice-api.onclarity.com/v1/projects/{projectId}/tools/{id} \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data @- <<EOF{ "description": "Look up an order by its number or the caller's email.", "hold_message": "Let me pull that order up."}EOF
import requests
url = "https://voice-api.onclarity.com/v1/projects/{projectId}/tools/{id}"
payload = {
"description": "Look up an order by its number or the caller's email.",
"hold_message": "Let me pull that order up."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: 'Look up an order by its number or the caller\'s email.',
hold_message: 'Let me pull that order up.'
})
};
fetch('https://voice-api.onclarity.com/v1/projects/{projectId}/tools/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
{ "id": "6e2a4c8d-1b3f-4a5c-9d7e-0f1a2b3c4d5e", "project_id": "3f6c1a52-8d0e-4b8f-9a51-2c7d4e0b9f13", "agent_id": null, "name": "lookup_order", "description": "Look up an order by its number or the caller's email.", "type": "http", "configs": { "url": "https://api.example.com/orders", "method": "GET", "query_params": [ { "name": "number", "value": "{{order_number}}" } ] }, "parameters": { "type": "object", "required": [ "order_number" ], "properties": { "order_number": { "type": "string" } } }, "parameter_mapping": null, "hold_message": "Let me pull that order up.", "hold_messages": null, "async_config": null, "session": null, "updated_at": 1794397200000, "library_tool_id": null, "library_revision": null, "library_channels": null}
{
"error": "For type code, configs.code must be a non-empty string defining an execute(args) function",
"path": "configs"
}
Changes the fields you send and keeps the others. The top-level keys of configs are merged into the stored configuration (a messaging, handoff or ticket configuration is replaced whole), and the result is checked against the tool’s type; when you also send type, send the complete configs. The edit reaches the drafts of every agent that uses the tool; live calls keep the published copy until each agent is published again or you push the tool to live agents. A request that changes nothing writes nothing.
PATCH
/
v1
/
projects
/
{projectId}
/
tools
/
{id}
Update a tool
curl --request PATCH \ --url https://voice-api.onclarity.com/v1/projects/{projectId}/tools/{id} \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data @- <<EOF{ "description": "Look up an order by its number or the caller's email.", "hold_message": "Let me pull that order up."}EOF
import requests
url = "https://voice-api.onclarity.com/v1/projects/{projectId}/tools/{id}"
payload = {
"description": "Look up an order by its number or the caller's email.",
"hold_message": "Let me pull that order up."
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: 'Look up an order by its number or the caller\'s email.',
hold_message: 'Let me pull that order up.'
})
};
fetch('https://voice-api.onclarity.com/v1/projects/{projectId}/tools/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
{ "id": "6e2a4c8d-1b3f-4a5c-9d7e-0f1a2b3c4d5e", "project_id": "3f6c1a52-8d0e-4b8f-9a51-2c7d4e0b9f13", "agent_id": null, "name": "lookup_order", "description": "Look up an order by its number or the caller's email.", "type": "http", "configs": { "url": "https://api.example.com/orders", "method": "GET", "query_params": [ { "name": "number", "value": "{{order_number}}" } ] }, "parameters": { "type": "object", "required": [ "order_number" ], "properties": { "order_number": { "type": "string" } } }, "parameter_mapping": null, "hold_message": "Let me pull that order up.", "hold_messages": null, "async_config": null, "session": null, "updated_at": 1794397200000, "library_tool_id": null, "library_revision": null, "library_channels": null}
{
"error": "For type code, configs.code must be a non-empty string defining an execute(args) function",
"path": "configs"
}
Your organization API key (it starts with anek_org_). The same key works on the Voice API and the Support API. See Authentication.
Path Parameters
projectId
string
required
Project id
id
string
required
Tool id
Body
application/json
Send the fields to change; the others keep their value. Fields not listed here are ignored. On hold_message, hold_messages, async_config, session and parameter_mapping, null clears the stored value.
name
string
Minimum string length: 1
Pattern: ^[a-zA-Z][a-zA-Z0-9_]*$
description
string
agent_id
string | null
Move the tool to this agent's private tools, or null to make it project-wide. Refused while other agents use the tool.
type
enum<string>
Available options:
http,
knowledgebase,
code,
builtin,
workflow,
messaging,
handoff,
ticket
configs
http · object
The tool's configuration. Its shape depends on the tool's type, and it is checked against that type; on update without type, against the stored type. builtin takes one of three shapes, by action.
http
knowledgebase
code
builtin get_dtmf
builtin connect_to_human
builtin (other)
workflow
WhatsApp
Email
WhatsApp
Email
ticket
Show child attributes
parameters
object | null
JSON Schema of the arguments the model passes.
parameter_mapping
object | null
Show child attributes
hold_message
string | null
hold_messages
object | null
Show child attributes
async_config
object | null
Lets the conversation go on while the tool runs instead of waiting for the result. Not allowed on builtin tools. null turns it off.
Show child attributes
session
object | null
The tool's part in the call-scoped caller authentication session. Null means the tool takes no part. A non-null verification makes it a verification tool and carries the verification policy; caller authentication is on for an agent exactly when an attached tool verifies the caller or requires a verified caller. On PATCH, an absent key keeps the stored value and an explicit null clears it.
Show child attributes
channels
enum<string>[]
For a tool from the organization tool library, which kinds of agents can use it.
Required array length: 1 - 2 elements
Available options:
chat,
voice
Response
The tool, updated.
A tool an agent can call during a conversation. Project-wide tools (agent_id: null) can be attached to any agent of the project; a private tool belongs to one agent.
id
string
required
Tool id.
project_id
string
required
agent_id
string | null
required
The agent the tool is private to, or null for a project-wide tool.
name
string
required
The name the model calls the tool by.
description
string
required
What the tool does and when to use it, as the model reads it.
type
string
required
What the tool does, which decides the shape of configs: http, knowledgebase, code, builtin, workflow, messaging, handoff or ticket.
configs
object
required
The tool's configuration, in the shape of its type (see configs in Create a tool). It can also carry values Clarity fills in on save, such as a workflow's url or a knowledge base's search target.
parameters
object
required
JSON Schema of the arguments the model passes when it calls the tool.
parameter_mapping
object | null
required
Renames arguments before the request is built, {argument: request_field}. null when none.
Show child attributes
hold_message
string | null
required
What the agent says while the tool runs, or null for nothing.
hold_messages
object | null
required
The hold message per language of a multilingual agent, keyed by language label.
Show child attributes
async_config
object | null
required
Settings that let the conversation go on while the tool runs, in the shape of async_config in Create a tool. null means the agent waits for the result.
session
object | null
required
The tool's part in the call-scoped caller authentication session. Null means the tool takes no part. A non-null verification makes it a verification tool and carries the verification policy; caller authentication is on for an agent exactly when an attached tool verifies the caller or requires a verified caller. On PATCH, an absent key keeps the stored value and an explicit null clears it.
Show child attributes
updated_at
integer<int64> | null
required
When the tool was last changed, in milliseconds since the Unix epoch. null for a tool not changed since this field was added.
library_tool_id
string | null
The organization tool library entry this tool comes from, or null for a tool that belongs to this project only.
library_revision
integer | null
The library entry's revision this tool holds, or null.
library_channels
string[] | null
Which kinds of agents (chat, voice) can use the library entry, or null.
used_by_count
integer
How many agents of the project have the tool attached. A published agent keeps calling the tool it was published with until it is published again, whatever this count says. Present on reads and lists.
used_by_agents
object[]
The agents the tool is attached to. Returned when you get one tool, not in lists.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Clarity Support Docs","description":"Guides, SDKs, and API reference for Clarity's AI support platform: agents, chat, tickets, and the knowledge base.","colors":{"primary":"#0aa68a","light":"#24d8b8","dark":"#0aa68a"},"logo":{"light":"https://mintcdn.com/on-clarity/wANpiWtgQORdXhk3/logo/light.svg?fit=max\u0026auto=format\u0026n=wANpiWtgQORdXhk3\u0026q=85\u0026s=a67bcf8cb635c40e2371c3f86424d4a0","dark":"https://mintcdn.com/on-clarity/wANpiWtgQORdXhk3/logo/dark.svg?fit=max\u0026auto=format\u0026n=wANpiWtgQORdXhk3\u0026q=85\u0026s=577dc99ab10bac95f81c97fcc3e50097","href":"https://support.onclarity.com"},"favicon":"https://mintcdn.com/on-clarity/wANpiWtgQORdXhk3/favicon.png?fit=max\u0026auto=format\u0026n=wANpiWtgQORdXhk3\u0026q=85\u0026s=54c44b3a75b63a1416d10cc8096b97e6","api":{"playground":{"display":"interactive"},"examples":{"languages":["curl","python","javascript"]}},"appearance":{"default":"system"},"navbar":{"links":[{"href":"mailto:hello@onclarity.com","label":"Support"}],"primary":{"type":"button","label":"Open Clarity","href":"https://support.onclarity.com"}},"footer":{"socials":{"website":"https://www.onclarity.com","linkedin":"https://www.linkedin.com/company/onclarity"},"links":[{"header":"Product","items":[{"label":"Open Clarity","href":"https://support.onclarity.com"}]},{"header":"Legal","items":[{"label":"Terms of service","href":"https://www.onclarity.com/legal-pages/terms-of-service"},{"label":"Privacy policy","href":"https://www.onclarity.com/legal-pages/privacy-policy"}]}]},"seo":{"indexing":"all"},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Open Clarity","icon":"arrow-up-right-from-square","href":"https://support.onclarity.com"},{"anchor":"Support","icon":"envelope","href":"mailto:hello@onclarity.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"on-clarity","hasAudioNarration":false,"actualSubdomain":"on-clarity","customDomains":["docs.support.onclarity.com"],"gitSource":{"type":"github","owner":"anecdote-ai","repo":"anecdote-monorepo","deployBranch":"develop","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":"","_id":"6adb3a2646b60ddf4f03b4cf"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6af83d74f1de041cd0119a62","clientVersion":"0.0.4142","searchFilterCounts":[{"language":"default","tag":"API Reference","count":130},{"language":"default","tag":"Voice API","count":88},{"language":"default","tag":"Support API","count":40},{"language":"default","tag":"Evals","count":32},{"language":"default","tag":"Documentation","count":23},{"language":"default","tag":"Runs","count":16},{"language":"default","tag":"Telephony","count":16},{"language":"default","tag":"Campaigns","count":12},{"language":"default","tag":"Tickets","count":11},{"language":"default","tag":"Agents","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/voice/tools/update-a-tool","slug":"/api-reference/voice/tools/update-a-tool","pageMetadata":{"openapi":"api-reference/voice-openapi.json PATCH /v1/projects/{projectId}/tools/{id}","title":"Update a tool","icon":"wrench","description":"Changes the fields you send and keeps the others. The top-level keys of `configs` are merged into the stored configuration (a `messaging`, `handoff` or `ticket` configuration is replaced whole), and the result is checked against the tool's `type`; when you also send `type`, send the complete `configs`. The edit reaches the drafts of every agent that uses the tool; live calls keep the published copy until each agent is published again or you push the tool to live agents. A request that changes nothing writes nothing.","href":"/api-reference/voice/tools/update-a-tool"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Changes the fields you send and keeps the others. The top-level keys of \", _jsx(_components.code, {\n children: \"configs\"\n }), \" are merged into the stored configuration (a \", _jsx(_components.code, {\n children: \"messaging\"\n }), \", \", _jsx(_components.code, {\n children: \"handoff\"\n }), \" or \", _jsx(_components.code, {\n children: \"ticket\"\n }), \" configuration is replaced whole), and the result is checked against the tool’s \", _jsx(_components.code, {\n children: \"type\"\n }), \"; when you also send \", _jsx(_components.code, {\n children: \"type\"\n }), \", send the complete \", _jsx(_components.code, {\n children: \"configs\"\n }), \". The edit reaches the drafts of every agent that uses the tool; live calls keep the published copy until each agent is published again or you push the tool to live agents. A request that changes nothing writes nothing.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"openapi":"api-reference/voice-openapi.json PATCH /v1/projects/{projectId}/tools/{id}","title":"Update a tool","icon":"wrench","description":"Changes the fields you send and keeps the others. The top-level keys of `configs` are merged into the stored configuration (a `messaging`, `handoff` or `ticket` configuration is replaced whole), and the result is checked against the tool's `type`; when you also send `type`, send the complete `configs`. The edit reaches the drafts of every agent that uses the tool; live calls keep the published copy until each agent is published again or you push the tool to live agents. A request that changes nothing writes nothing.","href":"/api-reference/voice/tools/update-a-tool"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Tools"],"summary":"Update a tool","description":"Changes the fields you send and keeps the others. The top-level keys of `configs` are merged into the stored configuration (a `messaging`, `handoff` or `ticket` configuration is replaced whole), and the result is checked against the tool's `type`; when you also send `type`, send the complete `configs`. The edit reaches the drafts of every agent that uses the tool; live calls keep the published copy until each agent is published again or you push the tool to live agents. A request that changes nothing writes nothing.","operationId":"updateTool","requestBody":"4a254fd7-a7b6-4495-8226-5e0b7da03f20","responses":{"200":"9377208f-7992-4656-82a2-35f0551ca816","400":"f5f2b237-d14b-4e04-9ad4-7b469070277d","401":"c70a187f-55a1-4a31-9001-89f20eb7f08c","403":"7fc1ec4f-8350-4c11-902b-5d8bf443d1b0","404":"7086115e-2f6d-45b4-94c9-fd1c1795b4cc","409":"768b1529-1862-4eb1-8d07-e9312cff9938","422":"1bff1e0f-2300-4aae-bf7d-db61d327c464","502":"567bcc84-6d12-4fe0-ba24-75d95502e4ed"},"method":"patch","type":"path","servers":["c1b5bfaf-ca83-44db-afe9-8385e654f187"],"security":["79258329-9c11-41e2-825c-e7e86baa03e6"],"path":"/v1/projects/{projectId}/tools/{id}","baseUrlOptions":["https://voice-api.onclarity.com"],"title":"Update a tool","codeSamples":[],"requestExampleLanguages":["bash","python","javascript"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"86a34511-d071-41a4-8316-42010a3f06eb":{"name":"projectId","in":"path","required":true,"schema":{"type":"string","isRequired":true,"description":"Project id","uniqueKey":"","typeLabel":"string"},"description":"Project id"},"7714a678-cf8b-48a7-8d06-5338fd0332b2":{"name":"id","in":"path","required":true,"schema":{"type":"string","isRequired":true,"description":"Tool id","uniqueKey":"","typeLabel":"string"},"description":"Tool id"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Send the fields to change; the others keep their value. Fields not listed here are ignored. On `hold_message`, `hold_messages`, `async_config`, `session` and `parameter_mapping`, `null` clears the stored value.","properties":{"name":{"type":"string","minLength":1,"pattern":"^[a-zA-Z][a-zA-Z0-9_]*$","uniqueKey":"name","typeLabel":"string"},"description":{"type":"string","uniqueKey":"description","typeLabel":"string"},"agent_id":{"oneOf":[{"type":"string","description":"Move the tool to this agent's private tools, or `null` to make it project-wide. Refused while other agents use the tool.","uniqueKey":"agent_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Move the tool to this agent's private tools, or `null` to make it project-wide. Refused while other agents use the tool.","uniqueKey":"agent_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"agent_id","typeLabel":"string | null"},"type":{"type":"string","enum":["http","knowledgebase","code","builtin","workflow","messaging","handoff","ticket"],"uniqueKey":"type","typeLabel":"enum\u003cstring>"},"configs":{"oneOf":[{"type":"object","title":"http","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["url"],"properties":{"url":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"configs.oneOf.0.url","typeLabel":"string"},"method":{"type":"string","description":"The HTTP method, such as `GET` or `POST`.","uniqueKey":"configs.oneOf.0.method","typeLabel":"string"},"authentication":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string","enum":["none","bearer","api_key","oauth2"],"uniqueKey":"configs.oneOf.0.authentication.type","typeLabel":"enum\u003cstring>"},"token":{"type":"string","description":"`bearer`: the token, or `vault:\u003csecret name>`.","uniqueKey":"configs.oneOf.0.authentication.token","typeLabel":"string"},"key":{"type":"string","description":"`api_key`: the key, or `vault:\u003csecret name>`.","uniqueKey":"configs.oneOf.0.authentication.key","typeLabel":"string"},"header":{"type":"string","description":"`api_key`: the header that carries the key.","uniqueKey":"configs.oneOf.0.authentication.header","typeLabel":"string"},"credential":{"type":"string","minLength":1,"description":"`oauth2` (required): the name of an OAuth credential of the project. Clarity gets a token for each call.","uniqueKey":"configs.oneOf.0.authentication.credential","typeLabel":"string"},"scopes":{"type":"array","items":{"type":"string","uniqueKey":"configs.oneOf.0.authentication.scopes.items.[INDEX]","typeLabel":"string"},"description":"`oauth2`: scopes to ask for, a subset of the credential's.","uniqueKey":"configs.oneOf.0.authentication.scopes","typeLabel":"string[]"}},"uniqueKey":"configs.oneOf.0.authentication","typeLabel":"object"},"header_list":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","value"],"properties":{"name":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"configs.oneOf.0.header_list.items.[INDEX].name","typeLabel":"string"},"value":{"type":"string","description":"May include `{{argument}}` and call variables, filled in when the tool runs.","isRequired":true,"uniqueKey":"configs.oneOf.0.header_list.items.[INDEX].value","typeLabel":"string"}},"uniqueKey":"configs.oneOf.0.header_list.items.[INDEX]","typeLabel":"object"},"description":"Request headers, in order.","uniqueKey":"configs.oneOf.0.header_list","typeLabel":"object[]"},"query_params":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","value"],"properties":{"name":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"configs.oneOf.0.query_params.items.[INDEX].name","typeLabel":"string"},"value":{"type":"string","description":"May include `{{argument}}` and call variables, filled in when the tool runs.","isRequired":true,"uniqueKey":"configs.oneOf.0.query_params.items.[INDEX].value","typeLabel":"string"}},"uniqueKey":"configs.oneOf.0.query_params.items.[INDEX]","typeLabel":"object"},"description":"Query-string parameters, in order.","uniqueKey":"configs.oneOf.0.query_params","typeLabel":"object[]"},"body_type":{"type":"string","enum":["none","form_data","json","raw"],"description":"How the body is built. Without it the arguments are placed by `request_placement`.","uniqueKey":"configs.oneOf.0.body_type","typeLabel":"enum\u003cstring>"},"body_form":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","value"],"properties":{"name":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"configs.oneOf.0.body_form.items.[INDEX].name","typeLabel":"string"},"value":{"type":"string","description":"May include `{{argument}}` and call variables, filled in when the tool runs.","isRequired":true,"uniqueKey":"configs.oneOf.0.body_form.items.[INDEX].value","typeLabel":"string"}},"uniqueKey":"configs.oneOf.0.body_form.items.[INDEX]","typeLabel":"object"},"description":"`body_type: form_data`: the form fields.","uniqueKey":"configs.oneOf.0.body_form","typeLabel":"object[]"},"body_json":{"type":"string","description":"`body_type: json`: the JSON body as text.","uniqueKey":"configs.oneOf.0.body_json","typeLabel":"string"},"body_raw":{"type":"string","description":"`body_type: raw`: the body text.","uniqueKey":"configs.oneOf.0.body_raw","typeLabel":"string"},"body_content_type":{"type":"string","description":"`body_type: raw`: its content type. Default `text/plain`.","uniqueKey":"configs.oneOf.0.body_content_type","typeLabel":"string"},"headers":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"configs.oneOf.0.headers.additionalProperties","typeLabel":"string"},"description":"Older form of `header_list`, a map of header to value.","uniqueKey":"configs.oneOf.0.headers","typeLabel":"object"},"request_placement":{"type":"string","enum":["body","query","path"],"description":"Older form. Where arguments go when `parameter_placement` does not say.","uniqueKey":"configs.oneOf.0.request_placement","typeLabel":"enum\u003cstring>"},"parameter_placement":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"configs.oneOf.0.parameter_placement.additionalProperties","typeLabel":"string"},"description":"Older form. Where each argument goes (`body`, `query` or `path`), by request field.","uniqueKey":"configs.oneOf.0.parameter_placement","typeLabel":"object"},"timeout_ms":{"type":"integer","minimum":1,"description":"Request timeout in milliseconds.","uniqueKey":"configs.oneOf.0.timeout_ms","typeLabel":"integer"},"unresolved":{"type":"boolean","description":"Set by Clarity when the OAuth credential cannot be found. Leave it out.","uniqueKey":"configs.oneOf.0.unresolved","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.0","typeLabel":"http · object"},{"type":"object","title":"knowledgebase","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["source","all_articles"],"properties":{"source":{"type":"string","enum":["support_org"],"isRequired":true,"uniqueKey":"configs.oneOf.1.source","typeLabel":"enum\u003cstring>"},"all_articles":{"type":"boolean","description":"Search every article. `collection_ids` and `article_ids` must then be empty.","isRequired":true,"uniqueKey":"configs.oneOf.1.all_articles","typeLabel":"boolean"},"collection_ids":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"uniqueKey":"configs.oneOf.1.collection_ids.items.[INDEX]","typeLabel":"string"},"description":"Search only these collections.","uniqueKey":"configs.oneOf.1.collection_ids","typeLabel":"string[]"},"article_ids":{"type":"array","uniqueItems":true,"items":{"minimum":1,"type":"integer","uniqueKey":"configs.oneOf.1.article_ids.items.[INDEX]","typeLabel":"integer"},"description":"Search only these articles.","uniqueKey":"configs.oneOf.1.article_ids","typeLabel":"integer[]"},"article_titles":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"configs.oneOf.1.article_titles.additionalProperties","typeLabel":"string"},"description":"Article titles by id, for display.","uniqueKey":"configs.oneOf.1.article_titles","typeLabel":"object"},"max_articles":{"type":"integer","minimum":1,"maximum":20,"description":"The most articles a search returns. Default 5.","uniqueKey":"configs.oneOf.1.max_articles","typeLabel":"integer"},"embedding_config":{"oneOf":[{"type":"object","additionalProperties":true,"description":"How queries are embedded, when your articles were indexed with a non-default setup. `null` clears it.","uniqueKey":"configs.oneOf.1.embedding_config.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"How queries are embedded, when your articles were indexed with a non-default setup. `null` clears it.","uniqueKey":"configs.oneOf.1.embedding_config.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.1.embedding_config","typeLabel":"object | null"},"proxy_url":{"type":"string","description":"Filled in by Clarity on save. Leave it out.","uniqueKey":"configs.oneOf.1.proxy_url","typeLabel":"string"},"server_url":{"type":"string","description":"Filled in by Clarity on save. Leave it out.","uniqueKey":"configs.oneOf.1.server_url","typeLabel":"string"},"collection_id":{"type":"string","description":"Filled in by Clarity on save. Leave it out.","uniqueKey":"configs.oneOf.1.collection_id","typeLabel":"string"},"api_key":{"type":"string","description":"Filled in by Clarity on save. Leave it out.","uniqueKey":"configs.oneOf.1.api_key","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.1","typeLabel":"knowledgebase · object"},{"type":"object","title":"code","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["code"],"properties":{"code":{"type":"string","minLength":1,"description":"Python source defining `execute(args)`. Its return value is the tool result.","isRequired":true,"uniqueKey":"configs.oneOf.2.code","typeLabel":"string"},"timeout_ms":{"type":"integer","minimum":1000,"maximum":120000,"description":"How long the code may run, in milliseconds. Default 30000.","uniqueKey":"configs.oneOf.2.timeout_ms","typeLabel":"integer"},"secrets":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"configs.oneOf.2.secrets.additionalProperties","typeLabel":"string"},"description":"Values passed to the code with the arguments but never shown to the model, by name. A value can be `vault:\u003csecret name>`.","uniqueKey":"configs.oneOf.2.secrets","typeLabel":"object"},"session_inputs":{"type":"array","maxItems":20,"items":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","uniqueKey":"configs.oneOf.2.session_inputs.items.[INDEX]","typeLabel":"string"},"description":"Call-session values passed to the code as arguments, by name. Another attached tool must store each one.","uniqueKey":"configs.oneOf.2.session_inputs","typeLabel":"string[]"},"sheet_refs":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"configs.oneOf.2.sheet_refs.additionalProperties","typeLabel":"string"},"description":"Accepted and not stored. Set `sheet_refs` on the agent instead.","uniqueKey":"configs.oneOf.2.sheet_refs","typeLabel":"object"},"executor_url":{"type":"string","description":"Reserved. Leave it out.","uniqueKey":"configs.oneOf.2.executor_url","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.2","typeLabel":"code · object"},{"type":"object","title":"builtin get_dtmf","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["action","num_digits"],"properties":{"action":{"type":"string","enum":["get_dtmf"],"isRequired":true,"uniqueKey":"configs.oneOf.3.action","typeLabel":"enum\u003cstring>"},"num_digits":{"type":"integer","minimum":1,"maximum":32,"description":"How many digits to collect.","isRequired":true,"uniqueKey":"configs.oneOf.3.num_digits","typeLabel":"integer"},"ask_for_confirmation":{"type":"boolean","description":"Read the digits back and ask the caller to confirm them.","uniqueKey":"configs.oneOf.3.ask_for_confirmation","typeLabel":"boolean"},"extra_instructions":{"type":"string","maxLength":500,"uniqueKey":"configs.oneOf.3.extra_instructions","typeLabel":"string"},"dtmf_input_timeout":{"type":"number","minimum":0.5,"maximum":30,"description":"Seconds to wait for the next digit.","uniqueKey":"configs.oneOf.3.dtmf_input_timeout","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.3","typeLabel":"builtin get_dtmf · object"},{"type":"object","title":"builtin connect_to_human","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["action"],"properties":{"action":{"type":"string","enum":["connect_to_human"],"isRequired":true,"uniqueKey":"configs.oneOf.4.action","typeLabel":"enum\u003cstring>"},"routing":{"type":"string","enum":["number","team"],"uniqueKey":"configs.oneOf.4.routing","typeLabel":"enum\u003cstring>"},"destination_number":{"type":"string","description":"Where to transfer: an international number (`+966501234567`), a short number or extension of 2 to 10 digits, a `sip:` URI or a `tel:` URI.","uniqueKey":"configs.oneOf.4.destination_number","typeLabel":"string"},"transfer_mode":{"type":"string","enum":["cold","warm"],"description":"`cold` hands the call over directly; `warm` briefs the person who answers first.","uniqueKey":"configs.oneOf.4.transfer_mode","typeLabel":"enum\u003cstring>"},"share_conversation_history":{"type":"boolean","description":"Only with `transfer_mode: warm`. Share the conversation in the briefing.","uniqueKey":"configs.oneOf.4.share_conversation_history","typeLabel":"boolean"},"ringing_timeout_sec":{"type":"number","minimum":5,"maximum":120,"description":"How long to ring before giving up.","uniqueKey":"configs.oneOf.4.ringing_timeout_sec","typeLabel":"number"},"teams":{"type":"array","minItems":1,"maxItems":10,"description":"Only with `routing: team`. The destinations the model chooses from.","items":{"oneOf":[{"type":"object","description":"A transfer destination that is a phone number.","required":["name","description","destination_number"],"properties":{"name":{"type":"string","minLength":1,"maxLength":40,"description":"Unique in the list, case-insensitive. No double quote.","isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.0.name","typeLabel":"string"},"description":{"type":"string","minLength":1,"maxLength":500,"description":"When to route callers here. The model reads it.","isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.0.description","typeLabel":"string"},"destination_number":{"type":"string","description":"An international number, a 2 to 10 digit extension, a `sip:` URI or a `tel:` URI.","isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.0.destination_number","typeLabel":"string"},"type":{"type":"string","enum":["number"],"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"transfer_mode":{"type":"string","enum":["cold","warm"],"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.0.transfer_mode","typeLabel":"enum\u003cstring>"},"share_conversation_history":{"type":"boolean","description":"Only with `transfer_mode: warm`.","uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.0.share_conversation_history","typeLabel":"boolean"},"ringing_timeout_sec":{"type":"number","minimum":5,"maximum":120,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.0.ringing_timeout_sec","typeLabel":"number"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"A transfer destination that is your agents, through the queue of a Voice Assist agent. `name` and `description` are required when the list has two or more destinations, and refused when it has one.","required":["type","target","assist_agent_id","text_context","voice_context"],"properties":{"type":{"type":"string","enum":["agents"],"isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"target":{"oneOf":[{"type":"object","description":"Who can take the call.","required":["kind"],"properties":{"kind":{"type":"string","enum":["any_agent"],"isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.target.oneOf.0.kind","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.target.oneOf.0","typeLabel":"object"},{"type":"object","description":"Who can take the call.","required":["kind","team_id"],"properties":{"kind":{"type":"string","enum":["team"],"isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.target.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"team_id":{"type":"string","pattern":"^\\d{1,20}$","description":"Your support platform team id, as a decimal string.","isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.target.oneOf.1.team_id","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.target.oneOf.1","typeLabel":"object"},{"type":"object","description":"Who can take the call.","required":["kind","user_id"],"properties":{"kind":{"type":"string","enum":["user"],"isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.target.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"user_id":{"type":"string","pattern":"^\\d{1,20}$","description":"Your support platform user id, as a decimal string.","isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.target.oneOf.2.user_id","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.target.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.target","typeLabel":"object"},"assist_agent_id":{"type":"string","format":"uuid","description":"The Voice Assist agent whose queue the call waits in.","isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.assist_agent_id","typeLabel":"string\u003cuuid>"},"text_context":{"type":"boolean","description":"The agent who takes the call gets a written summary.","isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.text_context","typeLabel":"boolean"},"voice_context":{"type":"boolean","description":"The agent who takes the call gets a spoken briefing first.","isRequired":true,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.voice_context","typeLabel":"boolean"},"name":{"type":"string","minLength":1,"maxLength":40,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.name","typeLabel":"string"},"description":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.description","typeLabel":"string"},"full_conversation":{"type":"boolean","description":"Only with `text_context`. Also show the whole conversation with the AI agent.","uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1.full_conversation","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.4.teams.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"configs.oneOf.4.teams.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configs.oneOf.4.teams","typeLabel":"object[]"},"default_team":{"type":"string","description":"Only with `routing: team` and two or more destinations. The `name` of the destination to use when the model cannot tell.","uniqueKey":"configs.oneOf.4.default_team","typeLabel":"string"},"ask_when_unclear":{"type":"boolean","description":"Only with `routing: team` and two or more destinations. Ask the caller when the right destination is unclear.","uniqueKey":"configs.oneOf.4.ask_when_unclear","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.4","typeLabel":"builtin connect_to_human · object"},{"type":"object","title":"builtin (other)","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","properties":{"action":{"type":"string","example":"end_call","uniqueKey":"configs.oneOf.5.action","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"configs.oneOf.5","typeLabel":"builtin (other) · object"},{"type":"object","title":"workflow","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["workflow_id"],"properties":{"workflow_id":{"type":"string","minLength":1,"description":"The workflow's id.","isRequired":true,"uniqueKey":"configs.oneOf.6.workflow_id","typeLabel":"string"},"expect_response":{"type":"boolean","description":"Wait for the workflow to finish and give its response to the model, instead of only starting it.","uniqueKey":"configs.oneOf.6.expect_response","typeLabel":"boolean"}},"additionalProperties":true,"uniqueKey":"configs.oneOf.6","typeLabel":"workflow · object"},{"type":"object","title":"WhatsApp","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["channel","wa_channel_id","messages"],"properties":{"channel":{"type":"string","enum":["whatsapp"],"isRequired":true,"uniqueKey":"configs.oneOf.7.channel","typeLabel":"enum\u003cstring>"},"wa_channel_id":{"type":"integer","minimum":1,"description":"Your WhatsApp channel in the support platform.","isRequired":true,"uniqueKey":"configs.oneOf.7.wa_channel_id","typeLabel":"integer"},"messages":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["id","description","kind"],"description":"One message the agent may send. `template` needs `template_id`; `text` and `buttons` need `text` (and `buttons` 1 to 3 buttons); `document` needs `attachment_ids` or `allow_document_url`.","properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","description":"Unique in the tool. The model picks the message by it.","isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].id","typeLabel":"string"},"description":{"type":"string","minLength":1,"description":"When to send it. The model reads it.","isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].description","typeLabel":"string"},"kind":{"type":"string","enum":["template","text","document","buttons"],"isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"template_id":{"type":"string","minLength":1,"description":"`template`: an approved WhatsApp template.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].template_id","typeLabel":"string"},"variables":{"type":"array","items":{"oneOf":[{"type":"object","description":"A value Clarity fills in.","required":["key","mode","value"],"properties":{"key":{"type":"string","minLength":1,"maxLength":64,"isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].variables.items.[INDEX].oneOf.0.key","typeLabel":"string"},"mode":{"type":"string","enum":["fixed"],"isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].variables.items.[INDEX].oneOf.0.mode","typeLabel":"enum\u003cstring>"},"value":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].variables.items.[INDEX].oneOf.0.value","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].variables.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"A value the model fills in.","required":["key","mode","description"],"properties":{"key":{"type":"string","minLength":1,"maxLength":64,"isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].variables.items.[INDEX].oneOf.1.key","typeLabel":"string"},"mode":{"type":"string","enum":["agent"],"isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].variables.items.[INDEX].oneOf.1.mode","typeLabel":"enum\u003cstring>"},"description":{"type":"string","minLength":1,"description":"What the model should put there.","isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].variables.items.[INDEX].oneOf.1.description","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].variables.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].variables.items.[INDEX]","typeLabel":"object"},"description":"`template`: its variables.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].variables","typeLabel":"object[]"},"buttons_wait_s":{"oneOf":[{"type":"integer","minimum":10,"maximum":1800,"description":"`buttons`, or a template with quick replies: seconds to wait for a tap.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].buttons_wait_s.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":10,"maximum":1800,"description":"`buttons`, or a template with quick replies: seconds to wait for a tap.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].buttons_wait_s.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].buttons_wait_s","typeLabel":"integer | null"},"text":{"type":"string","description":"`text` and `buttons`: the message. Each `{{key}}` needs a placeholder.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].text","typeLabel":"string"},"placeholders":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["key","description"],"description":"A `{{key}}` in the text that the model fills in.","properties":{"key":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,63}$","isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].placeholders.items.[INDEX].key","typeLabel":"string"},"description":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].placeholders.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].placeholders.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].placeholders","typeLabel":"object[]"},"buttons":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["id","label"],"properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].buttons.items.[INDEX].id","typeLabel":"string"},"label":{"type":"string","minLength":1,"maxLength":20,"isRequired":true,"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].buttons.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].buttons.items.[INDEX]","typeLabel":"object"},"description":"`buttons`: 1 to 3 reply buttons. Not on a Twilio channel.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].buttons","typeLabel":"object[]"},"attachment_ids":{"type":"array","maxItems":5,"items":{"minimum":1,"type":"integer","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].attachment_ids.items.[INDEX]","typeLabel":"integer"},"description":"`document`: files from your support platform to send.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].attachment_ids","typeLabel":"integer[]"},"allow_document_url":{"type":"boolean","description":"`document`: the model may send a document by link.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].allow_document_url","typeLabel":"boolean"},"caption":{"type":"string","description":"`document`: the caption.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].caption","typeLabel":"string"},"expects_image":{"type":"boolean","description":"`text` or `template`: the caller is expected to answer with a photo.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].expects_image","typeLabel":"boolean"},"image_wait_s":{"oneOf":[{"type":"integer","minimum":10,"maximum":1800,"description":"Only with `expects_image`. Seconds to wait for the photo. Default 120.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].image_wait_s.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":10,"maximum":1800,"description":"Only with `expects_image`. Seconds to wait for the photo. Default 120.","uniqueKey":"configs.oneOf.7.messages.items.[INDEX].image_wait_s.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.7.messages.items.[INDEX].image_wait_s","typeLabel":"integer | null"}},"uniqueKey":"configs.oneOf.7.messages.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"configs.oneOf.7.messages","typeLabel":"object[]"},"wa_provider":{"type":"string","enum":["meta","twilio"],"description":"Filled in by Clarity on save.","uniqueKey":"configs.oneOf.7.wa_provider","typeLabel":"enum\u003cstring>"},"allow_spoken_number":{"type":"boolean","description":"Send to a number the caller says, not only to the number they call from.","uniqueKey":"configs.oneOf.7.allow_spoken_number","typeLabel":"boolean"},"notify_text_replies":{"type":"boolean","description":"Tell the agent when the caller replies in writing.","uniqueKey":"configs.oneOf.7.notify_text_replies","typeLabel":"boolean"},"max_sends_per_call":{"type":"integer","minimum":1,"maximum":20,"description":"Default 5.","uniqueKey":"configs.oneOf.7.max_sends_per_call","typeLabel":"integer"},"allow_resend":{"type":"boolean","uniqueKey":"configs.oneOf.7.allow_resend","typeLabel":"boolean"},"test_recipient":{"oneOf":[{"type":"string","minLength":1,"description":"The only recipient during test and demo calls, as an E.164 number with `+`.","uniqueKey":"configs.oneOf.7.test_recipient.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"The only recipient during test and demo calls, as an E.164 number with `+`.","uniqueKey":"configs.oneOf.7.test_recipient.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.7.test_recipient","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.7","typeLabel":"WhatsApp · object"},{"type":"object","title":"Email","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["channel","email_channel_id","subject","body"],"properties":{"channel":{"type":"string","enum":["email"],"isRequired":true,"uniqueKey":"configs.oneOf.8.channel","typeLabel":"enum\u003cstring>"},"email_channel_id":{"type":"integer","minimum":1,"description":"Your email channel in the support platform.","isRequired":true,"uniqueKey":"configs.oneOf.8.email_channel_id","typeLabel":"integer"},"subject":{"type":"string","minLength":1,"maxLength":255,"isRequired":true,"uniqueKey":"configs.oneOf.8.subject","typeLabel":"string"},"body":{"type":"string","minLength":1,"maxLength":10000,"description":"Each `{{key}}` needs a placeholder.","isRequired":true,"uniqueKey":"configs.oneOf.8.body","typeLabel":"string"},"placeholders":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["key","description"],"description":"A `{{key}}` in the text that the model fills in.","properties":{"key":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,63}$","isRequired":true,"uniqueKey":"configs.oneOf.8.placeholders.items.[INDEX].key","typeLabel":"string"},"description":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"configs.oneOf.8.placeholders.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"configs.oneOf.8.placeholders.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configs.oneOf.8.placeholders","typeLabel":"object[]"},"attachment_ids":{"type":"array","maxItems":5,"items":{"minimum":1,"type":"integer","uniqueKey":"configs.oneOf.8.attachment_ids.items.[INDEX]","typeLabel":"integer"},"uniqueKey":"configs.oneOf.8.attachment_ids","typeLabel":"integer[]"},"allow_document_url":{"type":"boolean","uniqueKey":"configs.oneOf.8.allow_document_url","typeLabel":"boolean"},"code":{"type":"object","additionalProperties":false,"required":["recipient_session"],"description":"Makes the email a one-time code that verifies the caller. The body must contain `{{code}}` exactly once, and may use `{{code_minutes}}`; no other placeholders, attachments or links.","properties":{"recipient_session":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","description":"The call-session value that holds the address to send to.","isRequired":true,"uniqueKey":"configs.oneOf.8.code.recipient_session","typeLabel":"string"},"length":{"type":"integer","minimum":4,"maximum":8,"description":"Default 6.","uniqueKey":"configs.oneOf.8.code.length","typeLabel":"integer"},"ttl_s":{"type":"integer","minimum":60,"maximum":1800,"description":"Seconds the code is valid. Default 600.","uniqueKey":"configs.oneOf.8.code.ttl_s","typeLabel":"integer"},"entry":{"type":"string","enum":["spoken","keypad","either"],"description":"How the caller gives the code back. Default `either`.","uniqueKey":"configs.oneOf.8.code.entry","typeLabel":"enum\u003cstring>"}},"uniqueKey":"configs.oneOf.8.code","typeLabel":"object"},"notify_text_replies":{"type":"boolean","uniqueKey":"configs.oneOf.8.notify_text_replies","typeLabel":"boolean"},"max_sends_per_call":{"type":"integer","minimum":1,"maximum":20,"description":"Default 5, or 3 with `code`.","uniqueKey":"configs.oneOf.8.max_sends_per_call","typeLabel":"integer"},"allow_resend":{"type":"boolean","uniqueKey":"configs.oneOf.8.allow_resend","typeLabel":"boolean"},"test_recipient":{"oneOf":[{"type":"string","minLength":1,"description":"The only recipient during test and demo calls, as an email address.","uniqueKey":"configs.oneOf.8.test_recipient.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"The only recipient during test and demo calls, as an email address.","uniqueKey":"configs.oneOf.8.test_recipient.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.8.test_recipient","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.8","typeLabel":"Email · object"},{"type":"object","title":"WhatsApp","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["channel","chat_agent_id","wa_channel_id","opener"],"properties":{"channel":{"type":"string","enum":["whatsapp"],"isRequired":true,"uniqueKey":"configs.oneOf.9.channel","typeLabel":"enum\u003cstring>"},"chat_agent_id":{"type":"string","minLength":1,"maxLength":100,"description":"The chat agent that continues the conversation.","isRequired":true,"uniqueKey":"configs.oneOf.9.chat_agent_id","typeLabel":"string"},"wa_channel_id":{"minimum":1,"type":"integer","isRequired":true,"uniqueKey":"configs.oneOf.9.wa_channel_id","typeLabel":"integer"},"opener":{"oneOf":[{"type":"object","description":"The first message, an approved template or (inside WhatsApp's 24-hour window) a text.","required":["kind","template_id"],"properties":{"kind":{"type":"string","enum":["template"],"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"template_id":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.0.template_id","typeLabel":"string"},"variables":{"type":"array","items":{"oneOf":[{"type":"object","description":"A value Clarity fills in.","required":["key","mode","value"],"properties":{"key":{"type":"string","minLength":1,"maxLength":64,"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.0.variables.items.[INDEX].oneOf.0.key","typeLabel":"string"},"mode":{"type":"string","enum":["fixed"],"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.0.variables.items.[INDEX].oneOf.0.mode","typeLabel":"enum\u003cstring>"},"value":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.0.variables.items.[INDEX].oneOf.0.value","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.9.opener.oneOf.0.variables.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","description":"A value the model fills in.","required":["key","mode","description"],"properties":{"key":{"type":"string","minLength":1,"maxLength":64,"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.0.variables.items.[INDEX].oneOf.1.key","typeLabel":"string"},"mode":{"type":"string","enum":["agent"],"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.0.variables.items.[INDEX].oneOf.1.mode","typeLabel":"enum\u003cstring>"},"description":{"type":"string","minLength":1,"description":"What the model should put there.","isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.0.variables.items.[INDEX].oneOf.1.description","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.9.opener.oneOf.0.variables.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"configs.oneOf.9.opener.oneOf.0.variables.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configs.oneOf.9.opener.oneOf.0.variables","typeLabel":"object[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.0","typeLabel":"object"},{"type":"object","description":"The first message, an approved template or (inside WhatsApp's 24-hour window) a text.","required":["kind","text"],"properties":{"kind":{"type":"string","enum":["text"],"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"text":{"type":"string","minLength":1,"maxLength":4096,"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.1.text","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"configs.oneOf.9.opener.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"configs.oneOf.9.opener","typeLabel":"object"},"chat_agent_name":{"oneOf":[{"type":"string","maxLength":200,"description":"Filled in by Clarity on save.","uniqueKey":"configs.oneOf.9.chat_agent_name.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":200,"description":"Filled in by Clarity on save.","uniqueKey":"configs.oneOf.9.chat_agent_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.9.chat_agent_name","typeLabel":"string | null"},"wa_provider":{"type":"string","enum":["meta","twilio"],"description":"Filled in by Clarity on save.","uniqueKey":"configs.oneOf.9.wa_provider","typeLabel":"enum\u003cstring>"},"allow_spoken_number":{"type":"boolean","uniqueKey":"configs.oneOf.9.allow_spoken_number","typeLabel":"boolean"},"end_call_after":{"type":"boolean","description":"End the call after a successful handoff. Default true.","uniqueKey":"configs.oneOf.9.end_call_after","typeLabel":"boolean"},"test_recipient":{"oneOf":[{"type":"string","minLength":1,"uniqueKey":"configs.oneOf.9.test_recipient.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"uniqueKey":"configs.oneOf.9.test_recipient.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.9.test_recipient","typeLabel":"string | null"},"max_handoffs_per_day":{"oneOf":[{"type":"integer","minimum":1,"maximum":50,"description":"The most handoffs per customer per day. Default 3.","uniqueKey":"configs.oneOf.9.max_handoffs_per_day.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":50,"description":"The most handoffs per customer per day. Default 3.","uniqueKey":"configs.oneOf.9.max_handoffs_per_day.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.9.max_handoffs_per_day","typeLabel":"integer | null"},"tool_id":{"type":"string","maxLength":100,"description":"Ignored.","uniqueKey":"configs.oneOf.9.tool_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.9","typeLabel":"WhatsApp · object"},{"type":"object","title":"Email","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["channel","chat_agent_id","email_channel_id","opener"],"properties":{"channel":{"type":"string","enum":["email"],"isRequired":true,"uniqueKey":"configs.oneOf.10.channel","typeLabel":"enum\u003cstring>"},"chat_agent_id":{"type":"string","minLength":1,"maxLength":100,"isRequired":true,"uniqueKey":"configs.oneOf.10.chat_agent_id","typeLabel":"string"},"email_channel_id":{"minimum":1,"type":"integer","isRequired":true,"uniqueKey":"configs.oneOf.10.email_channel_id","typeLabel":"integer"},"opener":{"type":"object","additionalProperties":false,"required":["subject","text"],"properties":{"subject":{"type":"string","minLength":1,"maxLength":255,"isRequired":true,"uniqueKey":"configs.oneOf.10.opener.subject","typeLabel":"string"},"text":{"type":"string","minLength":1,"maxLength":10000,"isRequired":true,"uniqueKey":"configs.oneOf.10.opener.text","typeLabel":"string"},"kind":{"type":"string","enum":["email"],"uniqueKey":"configs.oneOf.10.opener.kind","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"configs.oneOf.10.opener","typeLabel":"object"},"chat_agent_name":{"oneOf":[{"type":"string","maxLength":200,"description":"Filled in by Clarity on save.","uniqueKey":"configs.oneOf.10.chat_agent_name.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":200,"description":"Filled in by Clarity on save.","uniqueKey":"configs.oneOf.10.chat_agent_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.10.chat_agent_name","typeLabel":"string | null"},"end_call_after":{"type":"boolean","description":"Default true.","uniqueKey":"configs.oneOf.10.end_call_after","typeLabel":"boolean"},"test_recipient":{"oneOf":[{"type":"string","minLength":1,"uniqueKey":"configs.oneOf.10.test_recipient.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"uniqueKey":"configs.oneOf.10.test_recipient.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.10.test_recipient","typeLabel":"string | null"},"max_handoffs_per_day":{"oneOf":[{"type":"integer","minimum":1,"maximum":50,"uniqueKey":"configs.oneOf.10.max_handoffs_per_day.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":50,"uniqueKey":"configs.oneOf.10.max_handoffs_per_day.oneOf.1","typeLabel":"null"}],"uniqueKey":"configs.oneOf.10.max_handoffs_per_day","typeLabel":"integer | null"},"tool_id":{"type":"string","maxLength":100,"description":"Ignored.","uniqueKey":"configs.oneOf.10.tool_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.10","typeLabel":"Email · object"},{"type":"object","title":"ticket","description":"The tool's configuration. Its shape depends on the tool's `type`, and it is checked against that type; on update without `type`, against the stored type. `builtin` takes one of three shapes, by `action`.","required":["actions"],"properties":{"actions":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["message","screen","note","update","instruct_chat_ai"],"uniqueKey":"configs.oneOf.11.actions.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"What the agent may do.","isRequired":true,"uniqueKey":"configs.oneOf.11.actions","typeLabel":"enum\u003cstring>[]"},"allowed_screens":{"type":"array","maxItems":50,"uniqueItems":true,"items":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,100}$","uniqueKey":"configs.oneOf.11.allowed_screens.items.[INDEX]","typeLabel":"string"},"description":"The screen template keys the agent may show. Required (at least one) with the `screen` action, and only with it.","uniqueKey":"configs.oneOf.11.allowed_screens","typeLabel":"string[]"},"allowed_changes":{"type":"object","additionalProperties":false,"required":["fields"],"description":"What an update may change. Required with the `update` action, and only with it.","properties":{"fields":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["status","category","team","custom_attributes"],"uniqueKey":"configs.oneOf.11.allowed_changes.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"configs.oneOf.11.allowed_changes.fields","typeLabel":"enum\u003cstring>[]"},"custom_attribute_keys":{"type":"array","minItems":1,"maxItems":20,"uniqueItems":true,"items":{"type":"string","pattern":"^[A-Za-z0-9_.:-]{1,100}$","uniqueKey":"configs.oneOf.11.allowed_changes.custom_attribute_keys.items.[INDEX]","typeLabel":"string"},"description":"Only when `custom_attributes` is in `fields`.","uniqueKey":"configs.oneOf.11.allowed_changes.custom_attribute_keys","typeLabel":"string[]"},"status_options":{"type":"array","minItems":1,"maxItems":100,"description":"The values an update may set this field to, with labels the agent reads. Ids must not repeat. Only when the field is in `fields`; without it, any value is allowed.","items":{"type":"object","additionalProperties":false,"required":["id","label"],"properties":{"id":{"minimum":1,"type":"integer","isRequired":true,"uniqueKey":"configs.oneOf.11.allowed_changes.status_options.items.[INDEX].id","typeLabel":"integer"},"label":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"configs.oneOf.11.allowed_changes.status_options.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"configs.oneOf.11.allowed_changes.status_options.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configs.oneOf.11.allowed_changes.status_options","typeLabel":"object[]"},"category_options":{"type":"array","minItems":1,"maxItems":100,"description":"The values an update may set this field to, with labels the agent reads. Ids must not repeat. Only when the field is in `fields`; without it, any value is allowed.","items":{"type":"object","additionalProperties":false,"required":["id","label"],"properties":{"id":{"minimum":1,"type":"integer","isRequired":true,"uniqueKey":"configs.oneOf.11.allowed_changes.category_options.items.[INDEX].id","typeLabel":"integer"},"label":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"configs.oneOf.11.allowed_changes.category_options.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"configs.oneOf.11.allowed_changes.category_options.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configs.oneOf.11.allowed_changes.category_options","typeLabel":"object[]"},"team_options":{"type":"array","minItems":1,"maxItems":100,"description":"The values an update may set this field to, with labels the agent reads. Ids must not repeat. Only when the field is in `fields`; without it, any value is allowed.","items":{"type":"object","additionalProperties":false,"required":["id","label"],"properties":{"id":{"minimum":1,"type":"integer","isRequired":true,"uniqueKey":"configs.oneOf.11.allowed_changes.team_options.items.[INDEX].id","typeLabel":"integer"},"label":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"configs.oneOf.11.allowed_changes.team_options.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"configs.oneOf.11.allowed_changes.team_options.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configs.oneOf.11.allowed_changes.team_options","typeLabel":"object[]"}},"uniqueKey":"configs.oneOf.11.allowed_changes","typeLabel":"object"},"files":{"type":"array","maxItems":10,"description":"Files the agent may send by key, with the `message` action only. Keys must not repeat.","items":{"type":"object","additionalProperties":false,"required":["key","attachment_id","description"],"properties":{"key":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","isRequired":true,"uniqueKey":"configs.oneOf.11.files.items.[INDEX].key","typeLabel":"string"},"attachment_id":{"type":"integer","minimum":1,"description":"The file in your Clarity support workspace. The agent never sees it.","isRequired":true,"uniqueKey":"configs.oneOf.11.files.items.[INDEX].attachment_id","typeLabel":"integer"},"description":{"type":"string","minLength":1,"maxLength":500,"description":"What the file is, as the agent reads it.","isRequired":true,"uniqueKey":"configs.oneOf.11.files.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"configs.oneOf.11.files.items.[INDEX]","typeLabel":"object"},"uniqueKey":"configs.oneOf.11.files","typeLabel":"object[]"},"allow_document_url":{"type":"boolean","description":"Lets the agent send a document by link, with the `message` action only.","uniqueKey":"configs.oneOf.11.allow_document_url","typeLabel":"boolean"},"max_actions_per_call":{"type":"integer","minimum":1,"maximum":20,"description":"The most actions of this tool in one call. Default 5.","uniqueKey":"configs.oneOf.11.max_actions_per_call","typeLabel":"integer"},"tool_id":{"type":"string","maxLength":100,"description":"Ignored.","uniqueKey":"configs.oneOf.11.tool_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"configs.oneOf.11","typeLabel":"ticket · object"}],"uniqueKey":"configs","typeLabel":"http · object · knowledgebase · object · code · object · builtin get_dtmf · object · builtin connect_to_human · object · builtin (other) · object · workflow · object · WhatsApp · object · Email · object · WhatsApp · object · Email · object · ticket · object"},"parameters":{"oneOf":[{"type":"object","additionalProperties":true,"description":"JSON Schema of the arguments the model passes.","uniqueKey":"parameters.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"JSON Schema of the arguments the model passes.","uniqueKey":"parameters.oneOf.1","typeLabel":"null"}],"uniqueKey":"parameters","typeLabel":"object | null"},"parameter_mapping":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"parameter_mapping.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"parameter_mapping.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"parameter_mapping.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"parameter_mapping.oneOf.1","typeLabel":"null"}],"uniqueKey":"parameter_mapping","typeLabel":"object | null"},"hold_message":{"oneOf":[{"type":"string","uniqueKey":"hold_message.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"hold_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"hold_message","typeLabel":"string | null"},"hold_messages":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"hold_messages.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"hold_messages.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"hold_messages.oneOf.1.additionalProperties","typeLabel":"string"},"uniqueKey":"hold_messages.oneOf.1","typeLabel":"null"}],"uniqueKey":"hold_messages","typeLabel":"object | null"},"async_config":{"oneOf":[{"type":"object","additionalProperties":false,"required":["enabled"],"description":"Lets the conversation go on while the tool runs instead of waiting for the result. Not allowed on `builtin` tools. `null` turns it off.","properties":{"enabled":{"type":"boolean","description":"Turns the other settings on.","isRequired":true,"uniqueKey":"async_config.oneOf.0.enabled","typeLabel":"boolean"},"ack_message":{"oneOf":[{"type":"string","description":"What the agent says when the tool starts. `null` falls back to `hold_message`.","uniqueKey":"async_config.oneOf.0.ack_message.oneOf.0","typeLabel":"string"},{"type":"null","description":"What the agent says when the tool starts. `null` falls back to `hold_message`.","uniqueKey":"async_config.oneOf.0.ack_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"async_config.oneOf.0.ack_message","typeLabel":"string | null"},"ack_messages":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"async_config.oneOf.0.ack_messages.oneOf.0.additionalProperties","typeLabel":"string"},"description":"`ack_message` per language label.","uniqueKey":"async_config.oneOf.0.ack_messages.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"async_config.oneOf.0.ack_messages.oneOf.1.additionalProperties","typeLabel":"string"},"description":"`ack_message` per language label.","uniqueKey":"async_config.oneOf.0.ack_messages.oneOf.1","typeLabel":"null"}],"uniqueKey":"async_config.oneOf.0.ack_messages","typeLabel":"object | null"},"filler_phrases":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"async_config.oneOf.0.filler_phrases.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Phrases the agent picks from while it waits.","uniqueKey":"async_config.oneOf.0.filler_phrases.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Phrases the agent picks from while it waits.","uniqueKey":"async_config.oneOf.0.filler_phrases.oneOf.1","typeLabel":"null"}],"uniqueKey":"async_config.oneOf.0.filler_phrases","typeLabel":"string[] | null"},"filler_phrases_by_language":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"async_config.oneOf.0.filler_phrases_by_language.oneOf.0.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"async_config.oneOf.0.filler_phrases_by_language.oneOf.0.additionalProperties","typeLabel":"string[]"},"description":"`filler_phrases` per language label.","uniqueKey":"async_config.oneOf.0.filler_phrases_by_language.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"async_config.oneOf.0.filler_phrases_by_language.oneOf.1.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"async_config.oneOf.0.filler_phrases_by_language.oneOf.1.additionalProperties","typeLabel":"string[]"},"description":"`filler_phrases` per language label.","uniqueKey":"async_config.oneOf.0.filler_phrases_by_language.oneOf.1","typeLabel":"null"}],"uniqueKey":"async_config.oneOf.0.filler_phrases_by_language","typeLabel":"object | null"},"filler_delay_ms":{"type":"integer","minimum":0,"description":"Accepted for compatibility and ignored. Use `filler_interval_ms`.","uniqueKey":"async_config.oneOf.0.filler_delay_ms","typeLabel":"integer"},"filler_interval_ms":{"oneOf":[{"type":"integer","minimum":1,"description":"Milliseconds of silence before a filler phrase, and between two of them. `null` plays none.","uniqueKey":"async_config.oneOf.0.filler_interval_ms.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"Milliseconds of silence before a filler phrase, and between two of them. `null` plays none.","uniqueKey":"async_config.oneOf.0.filler_interval_ms.oneOf.1","typeLabel":"null"}],"uniqueKey":"async_config.oneOf.0.filler_interval_ms","typeLabel":"integer | null"},"filler_max_plays":{"oneOf":[{"type":"integer","minimum":1,"description":"The most filler phrases per run. Needs `filler_interval_ms`.","uniqueKey":"async_config.oneOf.0.filler_max_plays.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"The most filler phrases per run. Needs `filler_interval_ms`.","uniqueKey":"async_config.oneOf.0.filler_max_plays.oneOf.1","typeLabel":"null"}],"uniqueKey":"async_config.oneOf.0.filler_max_plays","typeLabel":"integer | null"},"on_duplicate":{"type":"string","enum":["allow","reject"],"description":"What happens when the model calls the tool again while it is running. Default `reject`.","uniqueKey":"async_config.oneOf.0.on_duplicate","typeLabel":"enum\u003cstring>"},"cancellable":{"type":"boolean","description":"The caller may cancel a run in progress. Default false.","uniqueKey":"async_config.oneOf.0.cancellable","typeLabel":"boolean"},"max_lifetime_ms":{"type":"integer","minimum":1000,"maximum":900000,"description":"How long a run may take before it is given up, in milliseconds.","uniqueKey":"async_config.oneOf.0.max_lifetime_ms","typeLabel":"integer"}},"uniqueKey":"async_config.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":false,"required":["enabled"],"description":"Lets the conversation go on while the tool runs instead of waiting for the result. Not allowed on `builtin` tools. `null` turns it off.","properties":{"enabled":{"type":"boolean","description":"Turns the other settings on."},"ack_message":{"oneOf":[{"type":"string","description":"What the agent says when the tool starts. `null` falls back to `hold_message`."},{"type":"null","description":"What the agent says when the tool starts. `null` falls back to `hold_message`."}]},"ack_messages":{"oneOf":[{"type":"object","additionalProperties":{"type":"string"},"description":"`ack_message` per language label."},{"type":"null","additionalProperties":{"type":"string"},"description":"`ack_message` per language label."}]},"filler_phrases":{"oneOf":[{"type":"array","items":{"type":"string"},"description":"Phrases the agent picks from while it waits."},{"type":"null","items":{"type":"string"},"description":"Phrases the agent picks from while it waits."}]},"filler_phrases_by_language":{"oneOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"`filler_phrases` per language label."},{"type":"null","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"`filler_phrases` per language label."}]},"filler_delay_ms":{"type":"integer","minimum":0,"description":"Accepted for compatibility and ignored. Use `filler_interval_ms`."},"filler_interval_ms":{"oneOf":[{"type":"integer","minimum":1,"description":"Milliseconds of silence before a filler phrase, and between two of them. `null` plays none."},{"type":"null","minimum":1,"description":"Milliseconds of silence before a filler phrase, and between two of them. `null` plays none."}]},"filler_max_plays":{"oneOf":[{"type":"integer","minimum":1,"description":"The most filler phrases per run. Needs `filler_interval_ms`."},{"type":"null","minimum":1,"description":"The most filler phrases per run. Needs `filler_interval_ms`."}]},"on_duplicate":{"type":"string","enum":["allow","reject"],"description":"What happens when the model calls the tool again while it is running. Default `reject`."},"cancellable":{"type":"boolean","description":"The caller may cancel a run in progress. Default false."},"max_lifetime_ms":{"type":"integer","minimum":1000,"maximum":900000,"description":"How long a run may take before it is given up, in milliseconds."}},"uniqueKey":"async_config.oneOf.1","typeLabel":"null"}],"uniqueKey":"async_config","typeLabel":"object | null"},"session":{"oneOf":[{"type":"object","additionalProperties":false,"description":"The tool's part in the call-scoped caller authentication session. Null means the tool takes no part. A non-null `verification` makes it a verification tool and carries the verification policy; caller authentication is on for an agent exactly when an attached tool verifies the caller or requires a verified caller. On PATCH, an absent key keeps the stored value and an explicit null clears it.","properties":{"requires_verified_caller":{"type":"boolean","description":"The runtime refuses the tool until a verification tool verified the caller.","uniqueKey":"session.oneOf.0.requires_verified_caller","typeLabel":"boolean"},"stores":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["from","as","visibility"],"properties":{"from":{"type":"string","description":"Dot path into the JSON response.","isRequired":true,"uniqueKey":"session.oneOf.0.stores.items.[INDEX].from","typeLabel":"string"},"as":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","description":"Session name, referenced as {{session.\u003cas>}}.","isRequired":true,"uniqueKey":"session.oneOf.0.stores.items.[INDEX].as","typeLabel":"string"},"visibility":{"type":"string","enum":["private","visible"],"isRequired":true,"uniqueKey":"session.oneOf.0.stores.items.[INDEX].visibility","typeLabel":"enum\u003cstring>"}},"uniqueKey":"session.oneOf.0.stores.items.[INDEX]","typeLabel":"object"},"uniqueKey":"session.oneOf.0.stores","typeLabel":"object[]"},"verification":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"success":{"type":"object","additionalProperties":false,"properties":{"status_in":{"type":"array","items":{"type":"integer","minimum":100,"maximum":599,"uniqueKey":"session.oneOf.0.verification.oneOf.0.success.status_in.items.[INDEX]","typeLabel":"integer"},"uniqueKey":"session.oneOf.0.verification.oneOf.0.success.status_in","typeLabel":"integer[]"},"field":{"type":"string","uniqueKey":"session.oneOf.0.verification.oneOf.0.success.field","typeLabel":"string"},"equals":{"oneOf":[{"type":"string","uniqueKey":"session.oneOf.0.verification.oneOf.0.success.equals.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"session.oneOf.0.verification.oneOf.0.success.equals.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"session.oneOf.0.verification.oneOf.0.success.equals.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"session.oneOf.0.verification.oneOf.0.success.equals","typeLabel":"string | number | boolean"}},"uniqueKey":"session.oneOf.0.verification.oneOf.0.success","typeLabel":"object"},"ttl_from":{"type":"string","uniqueKey":"session.oneOf.0.verification.oneOf.0.ttl_from","typeLabel":"string"},"max_attempts":{"type":"integer","minimum":1,"maximum":10,"description":"Failed verifications allowed per call (default 3). With several verifiers on an agent, the smallest wins.","uniqueKey":"session.oneOf.0.verification.oneOf.0.max_attempts","typeLabel":"integer"},"on_exhausted":{"type":"string","enum":["end_call","transfer","continue"],"description":"What happens when the attempts run out (default end_call). Taken from the verifier with the smallest max_attempts. `transfer` needs a connect_to_human tool attached to the agent.","uniqueKey":"session.oneOf.0.verification.oneOf.0.on_exhausted","typeLabel":"enum\u003cstring>"},"unreachable_counts_as_failure":{"type":"boolean","description":"Count a timeout / connection error / 5xx as a failed attempt (default false; true on any verifier wins).","uniqueKey":"session.oneOf.0.verification.oneOf.0.unreachable_counts_as_failure","typeLabel":"boolean"},"default_ttl_s":{"oneOf":[{"type":"integer","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins.","uniqueKey":"session.oneOf.0.verification.oneOf.0.default_ttl_s.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins.","uniqueKey":"session.oneOf.0.verification.oneOf.0.default_ttl_s.oneOf.1","typeLabel":"null"}],"uniqueKey":"session.oneOf.0.verification.oneOf.0.default_ttl_s","typeLabel":"integer | null"}},"uniqueKey":"session.oneOf.0.verification.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":false,"properties":{"success":{"type":"object","additionalProperties":false,"properties":{"status_in":{"type":"array","items":{"type":"integer","minimum":100,"maximum":599}},"field":{"type":"string"},"equals":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"ttl_from":{"type":"string"},"max_attempts":{"type":"integer","minimum":1,"maximum":10,"description":"Failed verifications allowed per call (default 3). With several verifiers on an agent, the smallest wins."},"on_exhausted":{"type":"string","enum":["end_call","transfer","continue"],"description":"What happens when the attempts run out (default end_call). Taken from the verifier with the smallest max_attempts. `transfer` needs a connect_to_human tool attached to the agent."},"unreachable_counts_as_failure":{"type":"boolean","description":"Count a timeout / connection error / 5xx as a failed attempt (default false; true on any verifier wins)."},"default_ttl_s":{"oneOf":[{"type":"integer","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."},{"type":"null","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."}]}},"uniqueKey":"session.oneOf.0.verification.oneOf.1","typeLabel":"null"}],"uniqueKey":"session.oneOf.0.verification","typeLabel":"object | null"}},"uniqueKey":"session.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":false,"description":"The tool's part in the call-scoped caller authentication session. Null means the tool takes no part. A non-null `verification` makes it a verification tool and carries the verification policy; caller authentication is on for an agent exactly when an attached tool verifies the caller or requires a verified caller. On PATCH, an absent key keeps the stored value and an explicit null clears it.","properties":{"requires_verified_caller":{"type":"boolean","description":"The runtime refuses the tool until a verification tool verified the caller."},"stores":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["from","as","visibility"],"properties":{"from":{"type":"string","description":"Dot path into the JSON response."},"as":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","description":"Session name, referenced as {{session.\u003cas>}}."},"visibility":{"type":"string","enum":["private","visible"]}}}},"verification":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"success":{"type":"object","additionalProperties":false,"properties":{"status_in":{"type":"array","items":{"type":"integer","minimum":100,"maximum":599}},"field":{"type":"string"},"equals":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"ttl_from":{"type":"string"},"max_attempts":{"type":"integer","minimum":1,"maximum":10,"description":"Failed verifications allowed per call (default 3). With several verifiers on an agent, the smallest wins."},"on_exhausted":{"type":"string","enum":["end_call","transfer","continue"],"description":"What happens when the attempts run out (default end_call). Taken from the verifier with the smallest max_attempts. `transfer` needs a connect_to_human tool attached to the agent."},"unreachable_counts_as_failure":{"type":"boolean","description":"Count a timeout / connection error / 5xx as a failed attempt (default false; true on any verifier wins)."},"default_ttl_s":{"oneOf":[{"type":"integer","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."},{"type":"null","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."}]}}},{"type":"null","additionalProperties":false,"properties":{"success":{"type":"object","additionalProperties":false,"properties":{"status_in":{"type":"array","items":{"type":"integer","minimum":100,"maximum":599}},"field":{"type":"string"},"equals":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"ttl_from":{"type":"string"},"max_attempts":{"type":"integer","minimum":1,"maximum":10,"description":"Failed verifications allowed per call (default 3). With several verifiers on an agent, the smallest wins."},"on_exhausted":{"type":"string","enum":["end_call","transfer","continue"],"description":"What happens when the attempts run out (default end_call). Taken from the verifier with the smallest max_attempts. `transfer` needs a connect_to_human tool attached to the agent."},"unreachable_counts_as_failure":{"type":"boolean","description":"Count a timeout / connection error / 5xx as a failed attempt (default false; true on any verifier wins)."},"default_ttl_s":{"oneOf":[{"type":"integer","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."},{"type":"null","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."}]}}}]}},"uniqueKey":"session.oneOf.1","typeLabel":"null"}],"uniqueKey":"session","typeLabel":"object | null"},"channels":{"type":"array","minItems":1,"maxItems":2,"uniqueItems":true,"items":{"type":"string","enum":["chat","voice"],"uniqueKey":"channels.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"For a tool from the organization tool library, which kinds of agents can use it.","uniqueKey":"channels","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"description":"Look up an order by its number or the caller's email.","hold_message":"Let me pull that order up."},"examples":{"Example":{"title":"Example","value":{"description":"Look up an order by its number or the caller's email.","hold_message":"Let me pull that order up."}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"9377208f-7992-4656-82a2-35f0551ca816":{"description":"The tool, updated.","content":{"application/json":{"schema":{"type":"object","description":"A tool an agent can call during a conversation. Project-wide tools (`agent_id: null`) can be attached to any agent of the project; a private tool belongs to one agent.","required":["id","project_id","agent_id","name","description","type","configs","parameters","parameter_mapping","hold_message","hold_messages","async_config","session","updated_at"],"properties":{"id":{"type":"string","description":"Tool id.","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"project_id":{"type":"string","isRequired":true,"uniqueKey":"project_id","typeLabel":"string"},"agent_id":{"oneOf":[{"type":"string","description":"The agent the tool is private to, or `null` for a project-wide tool.","isRequired":true,"uniqueKey":"agent_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The agent the tool is private to, or `null` for a project-wide tool.","isRequired":true,"uniqueKey":"agent_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"agent_id","typeLabel":"string | null"},"name":{"type":"string","description":"The name the model calls the tool by.","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"description":{"type":"string","description":"What the tool does and when to use it, as the model reads it.","isRequired":true,"uniqueKey":"description","typeLabel":"string"},"type":{"type":"string","description":"What the tool does, which decides the shape of `configs`: `http`, `knowledgebase`, `code`, `builtin`, `workflow`, `messaging`, `handoff` or `ticket`.","isRequired":true,"uniqueKey":"type","typeLabel":"string"},"configs":{"type":"object","additionalProperties":true,"description":"The tool's configuration, in the shape of its `type` (see `configs` in Create a tool). It can also carry values Clarity fills in on save, such as a workflow's `url` or a knowledge base's search target.","isRequired":true,"uniqueKey":"configs","typeLabel":"object"},"parameters":{"type":"object","additionalProperties":true,"description":"JSON Schema of the arguments the model passes when it calls the tool.","isRequired":true,"uniqueKey":"parameters","typeLabel":"object"},"parameter_mapping":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"parameter_mapping.oneOf.0.additionalProperties","typeLabel":"string"},"description":"Renames arguments before the request is built, `{argument: request_field}`. `null` when none.","isRequired":true,"uniqueKey":"parameter_mapping.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"parameter_mapping.oneOf.1.additionalProperties","typeLabel":"string"},"description":"Renames arguments before the request is built, `{argument: request_field}`. `null` when none.","isRequired":true,"uniqueKey":"parameter_mapping.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"parameter_mapping","typeLabel":"object | null"},"hold_message":{"oneOf":[{"type":"string","description":"What the agent says while the tool runs, or `null` for nothing.","isRequired":true,"uniqueKey":"hold_message.oneOf.0","typeLabel":"string"},{"type":"null","description":"What the agent says while the tool runs, or `null` for nothing.","isRequired":true,"uniqueKey":"hold_message.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hold_message","typeLabel":"string | null"},"hold_messages":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"hold_messages.oneOf.0.additionalProperties","typeLabel":"string"},"description":"The hold message per language of a multilingual agent, keyed by language label.","isRequired":true,"uniqueKey":"hold_messages.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":{"type":"string","uniqueKey":"hold_messages.oneOf.1.additionalProperties","typeLabel":"string"},"description":"The hold message per language of a multilingual agent, keyed by language label.","isRequired":true,"uniqueKey":"hold_messages.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"hold_messages","typeLabel":"object | null"},"async_config":{"oneOf":[{"type":"object","additionalProperties":true,"description":"Settings that let the conversation go on while the tool runs, in the shape of `async_config` in Create a tool. `null` means the agent waits for the result.","isRequired":true,"uniqueKey":"async_config.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":true,"description":"Settings that let the conversation go on while the tool runs, in the shape of `async_config` in Create a tool. `null` means the agent waits for the result.","isRequired":true,"uniqueKey":"async_config.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"async_config","typeLabel":"object | null"},"session":{"oneOf":[{"type":"object","additionalProperties":false,"description":"The tool's part in the call-scoped caller authentication session. Null means the tool takes no part. A non-null `verification` makes it a verification tool and carries the verification policy; caller authentication is on for an agent exactly when an attached tool verifies the caller or requires a verified caller. On PATCH, an absent key keeps the stored value and an explicit null clears it.","properties":{"requires_verified_caller":{"type":"boolean","description":"The runtime refuses the tool until a verification tool verified the caller.","uniqueKey":"session.oneOf.0.requires_verified_caller","typeLabel":"boolean"},"stores":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["from","as","visibility"],"properties":{"from":{"type":"string","description":"Dot path into the JSON response.","isRequired":true,"uniqueKey":"session.oneOf.0.stores.items.[INDEX].from","typeLabel":"string"},"as":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","description":"Session name, referenced as {{session.\u003cas>}}.","isRequired":true,"uniqueKey":"session.oneOf.0.stores.items.[INDEX].as","typeLabel":"string"},"visibility":{"type":"string","enum":["private","visible"],"isRequired":true,"uniqueKey":"session.oneOf.0.stores.items.[INDEX].visibility","typeLabel":"enum\u003cstring>"}},"uniqueKey":"session.oneOf.0.stores.items.[INDEX]","typeLabel":"object"},"uniqueKey":"session.oneOf.0.stores","typeLabel":"object[]"},"verification":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"success":{"type":"object","additionalProperties":false,"properties":{"status_in":{"type":"array","items":{"type":"integer","minimum":100,"maximum":599,"uniqueKey":"session.oneOf.0.verification.oneOf.0.success.status_in.items.[INDEX]","typeLabel":"integer"},"uniqueKey":"session.oneOf.0.verification.oneOf.0.success.status_in","typeLabel":"integer[]"},"field":{"type":"string","uniqueKey":"session.oneOf.0.verification.oneOf.0.success.field","typeLabel":"string"},"equals":{"oneOf":[{"type":"string","uniqueKey":"session.oneOf.0.verification.oneOf.0.success.equals.oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"session.oneOf.0.verification.oneOf.0.success.equals.oneOf.1","typeLabel":"number"},{"type":"boolean","uniqueKey":"session.oneOf.0.verification.oneOf.0.success.equals.oneOf.2","typeLabel":"boolean"}],"uniqueKey":"session.oneOf.0.verification.oneOf.0.success.equals","typeLabel":"string | number | boolean"}},"uniqueKey":"session.oneOf.0.verification.oneOf.0.success","typeLabel":"object"},"ttl_from":{"type":"string","uniqueKey":"session.oneOf.0.verification.oneOf.0.ttl_from","typeLabel":"string"},"max_attempts":{"type":"integer","minimum":1,"maximum":10,"description":"Failed verifications allowed per call (default 3). With several verifiers on an agent, the smallest wins.","uniqueKey":"session.oneOf.0.verification.oneOf.0.max_attempts","typeLabel":"integer"},"on_exhausted":{"type":"string","enum":["end_call","transfer","continue"],"description":"What happens when the attempts run out (default end_call). Taken from the verifier with the smallest max_attempts. `transfer` needs a connect_to_human tool attached to the agent.","uniqueKey":"session.oneOf.0.verification.oneOf.0.on_exhausted","typeLabel":"enum\u003cstring>"},"unreachable_counts_as_failure":{"type":"boolean","description":"Count a timeout / connection error / 5xx as a failed attempt (default false; true on any verifier wins).","uniqueKey":"session.oneOf.0.verification.oneOf.0.unreachable_counts_as_failure","typeLabel":"boolean"},"default_ttl_s":{"oneOf":[{"type":"integer","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins.","uniqueKey":"session.oneOf.0.verification.oneOf.0.default_ttl_s.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins.","uniqueKey":"session.oneOf.0.verification.oneOf.0.default_ttl_s.oneOf.1","typeLabel":"null"}],"uniqueKey":"session.oneOf.0.verification.oneOf.0.default_ttl_s","typeLabel":"integer | null"}},"uniqueKey":"session.oneOf.0.verification.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":false,"properties":{"success":{"type":"object","additionalProperties":false,"properties":{"status_in":{"type":"array","items":{"type":"integer","minimum":100,"maximum":599}},"field":{"type":"string"},"equals":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"ttl_from":{"type":"string"},"max_attempts":{"type":"integer","minimum":1,"maximum":10,"description":"Failed verifications allowed per call (default 3). With several verifiers on an agent, the smallest wins."},"on_exhausted":{"type":"string","enum":["end_call","transfer","continue"],"description":"What happens when the attempts run out (default end_call). Taken from the verifier with the smallest max_attempts. `transfer` needs a connect_to_human tool attached to the agent."},"unreachable_counts_as_failure":{"type":"boolean","description":"Count a timeout / connection error / 5xx as a failed attempt (default false; true on any verifier wins)."},"default_ttl_s":{"oneOf":[{"type":"integer","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."},{"type":"null","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."}]}},"uniqueKey":"session.oneOf.0.verification.oneOf.1","typeLabel":"null"}],"uniqueKey":"session.oneOf.0.verification","typeLabel":"object | null"}},"isRequired":true,"uniqueKey":"session.oneOf.0","typeLabel":"object"},{"type":"null","additionalProperties":false,"description":"The tool's part in the call-scoped caller authentication session. Null means the tool takes no part. A non-null `verification` makes it a verification tool and carries the verification policy; caller authentication is on for an agent exactly when an attached tool verifies the caller or requires a verified caller. On PATCH, an absent key keeps the stored value and an explicit null clears it.","properties":{"requires_verified_caller":{"type":"boolean","description":"The runtime refuses the tool until a verification tool verified the caller."},"stores":{"type":"array","maxItems":20,"items":{"type":"object","additionalProperties":false,"required":["from","as","visibility"],"properties":{"from":{"type":"string","description":"Dot path into the JSON response."},"as":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,63}$","description":"Session name, referenced as {{session.\u003cas>}}."},"visibility":{"type":"string","enum":["private","visible"]}}}},"verification":{"oneOf":[{"type":"object","additionalProperties":false,"properties":{"success":{"type":"object","additionalProperties":false,"properties":{"status_in":{"type":"array","items":{"type":"integer","minimum":100,"maximum":599}},"field":{"type":"string"},"equals":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"ttl_from":{"type":"string"},"max_attempts":{"type":"integer","minimum":1,"maximum":10,"description":"Failed verifications allowed per call (default 3). With several verifiers on an agent, the smallest wins."},"on_exhausted":{"type":"string","enum":["end_call","transfer","continue"],"description":"What happens when the attempts run out (default end_call). Taken from the verifier with the smallest max_attempts. `transfer` needs a connect_to_human tool attached to the agent."},"unreachable_counts_as_failure":{"type":"boolean","description":"Count a timeout / connection error / 5xx as a failed attempt (default false; true on any verifier wins)."},"default_ttl_s":{"oneOf":[{"type":"integer","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."},{"type":"null","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."}]}}},{"type":"null","additionalProperties":false,"properties":{"success":{"type":"object","additionalProperties":false,"properties":{"status_in":{"type":"array","items":{"type":"integer","minimum":100,"maximum":599}},"field":{"type":"string"},"equals":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"ttl_from":{"type":"string"},"max_attempts":{"type":"integer","minimum":1,"maximum":10,"description":"Failed verifications allowed per call (default 3). With several verifiers on an agent, the smallest wins."},"on_exhausted":{"type":"string","enum":["end_call","transfer","continue"],"description":"What happens when the attempts run out (default end_call). Taken from the verifier with the smallest max_attempts. `transfer` needs a connect_to_human tool attached to the agent."},"unreachable_counts_as_failure":{"type":"boolean","description":"Count a timeout / connection error / 5xx as a failed attempt (default false; true on any verifier wins)."},"default_ttl_s":{"oneOf":[{"type":"integer","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."},{"type":"null","minimum":60,"maximum":86400,"description":"Session lifetime when the response gives none (null - until the call ends). The smallest non-null value wins."}]}}}]}},"isRequired":true,"uniqueKey":"session.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"session","typeLabel":"object | null"},"updated_at":{"oneOf":[{"type":"integer","format":"int64","description":"When the tool was last changed, in milliseconds since the Unix epoch. `null` for a tool not changed since this field was added.","isRequired":true,"uniqueKey":"updated_at.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","format":"int64","description":"When the tool was last changed, in milliseconds since the Unix epoch. `null` for a tool not changed since this field was added.","isRequired":true,"uniqueKey":"updated_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"updated_at","typeLabel":"integer\u003cint64> | null"},"library_tool_id":{"oneOf":[{"type":"string","description":"The organization tool library entry this tool comes from, or `null` for a tool that belongs to this project only.","uniqueKey":"library_tool_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"The organization tool library entry this tool comes from, or `null` for a tool that belongs to this project only.","uniqueKey":"library_tool_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"library_tool_id","typeLabel":"string | null"},"library_revision":{"oneOf":[{"type":"integer","description":"The library entry's revision this tool holds, or `null`.","uniqueKey":"library_revision.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The library entry's revision this tool holds, or `null`.","uniqueKey":"library_revision.oneOf.1","typeLabel":"null"}],"uniqueKey":"library_revision","typeLabel":"integer | null"},"library_channels":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"library_channels.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Which kinds of agents (`chat`, `voice`) can use the library entry, or `null`.","uniqueKey":"library_channels.oneOf.0","typeLabel":"string[]"},{"type":"null","items":{"type":"string"},"description":"Which kinds of agents (`chat`, `voice`) can use the library entry, or `null`.","uniqueKey":"library_channels.oneOf.1","typeLabel":"null"}],"uniqueKey":"library_channels","typeLabel":"string[] | null"},"used_by_count":{"type":"integer","description":"How many agents of the project have the tool attached. A published agent keeps calling the tool it was published with until it is published again, whatever this count says. Present on reads and lists.","uniqueKey":"used_by_count","typeLabel":"integer"},"used_by_agents":{"type":"array","description":"The agents the tool is attached to. Returned when you get one tool, not in lists.","items":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"used_by_agents.items.[INDEX].id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"used_by_agents.items.[INDEX].name","typeLabel":"string"}},"uniqueKey":"used_by_agents.items.[INDEX]","typeLabel":"object"},"uniqueKey":"used_by_agents","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"id":"6e2a4c8d-1b3f-4a5c-9d7e-0f1a2b3c4d5e","project_id":"3f6c1a52-8d0e-4b8f-9a51-2c7d4e0b9f13","agent_id":null,"name":"lookup_order","description":"Look up an order by its number or the caller's email.","type":"http","configs":{"url":"https://api.example.com/orders","method":"GET","query_params":[{"name":"number","value":"{{order_number}}"}]},"parameters":{"type":"object","required":["order_number"],"properties":{"order_number":{"type":"string"}}},"parameter_mapping":null,"hold_message":"Let me pull that order up.","hold_messages":null,"async_config":null,"session":null,"updated_at":1794397200000,"library_tool_id":null,"library_revision":null,"library_channels":null},"examples":{"Example":{"title":"Example","value":{"id":"6e2a4c8d-1b3f-4a5c-9d7e-0f1a2b3c4d5e","project_id":"3f6c1a52-8d0e-4b8f-9a51-2c7d4e0b9f13","agent_id":null,"name":"lookup_order","description":"Look up an order by its number or the caller's email.","type":"http","configs":{"url":"https://api.example.com/orders","method":"GET","query_params":[{"name":"number","value":"{{order_number}}"}]},"parameters":{"type":"object","required":["order_number"],"properties":{"order_number":{"type":"string"}}},"parameter_mapping":null,"hold_message":"Let me pull that order up.","hold_messages":null,"async_config":null,"session":null,"updated_at":1794397200000,"library_tool_id":null,"library_revision":null,"library_channels":null}}},"exampleType":"examples"}},"exampleType":"examples"},"f5f2b237-d14b-4e04-9ad4-7b469070277d":{"description":"`configs`, `async_config` or `session` do not fit the tool's stored `type` (sent without `type`), or a knowledge base tool names an article or collection your organization does not have.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"properties":{"error":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine-readable reason, present on the refusals a client may branch on. Among them: `PUBLISH_CAPABILITY_REQUIRED` (403, the credential may not change what is live), `AGENT_NOT_PUBLISHED` (409, the agent has no published version yet), `AGENT_TYPE_NOT_DISPATCHABLE` (422, a Voice Assist agent named where an agent must place a call or answer one itself — a campaign, an outbound caller ID, a dispatched call, an eval; a number's inbound dispatch rule accepts one; the body carries `agent_type` and `agent_id`), `ASSIST_FLEET_NOT_CONFIGURED` (422 on a dispatch rule naming a Voice Assist agent in a project whose LiveKit has no Voice Assist listener), `NOT_APPLICABLE_TO_AGENT_TYPE` (422, a voice-only setting written on a Voice Assist agent), `AGENT_TYPE_BOUNDARY` (409), `AGENT_TYPE_NOT_SUPPORTED` (400), `INVALID_CUSTOMER_TIMEZONE` (400, `customer_timezone` is not a time zone name; the body carries the value), `VOICE_ASSISTANT_REQUIRED` (403, the organization is not licensed for Voice Assist), `ORGANIZATION_UNAVAILABLE` (503), `REGION_PROFILE_CONFLICT` (503), `LLM_SERVICE_TIER_UNAVAILABLE` (422, an agent's processing speed is not offered by its model or not enabled for the organization; `reason` says which) and `AUTH_UPSTREAM_UNAVAILABLE` (503 on any endpoint, with `Retry-After`: the credential could not be checked right now; it was not rejected and the request was not carried out).","uniqueKey":"code","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"For type code, configs.code must be a non-empty string defining an execute(args) function","path":"configs"},"examples":{"Example":{"title":"Example","value":{"error":"For type code, configs.code must be a non-empty string defining an execute(args) function","path":"configs"}}},"exampleType":"examples"}},"exampleType":"examples"},"c70a187f-55a1-4a31-9001-89f20eb7f08c":{"description":"No credential was sent, or the API key is invalid or revoked. A key that could not be checked at all answers 503 `AUTH_UPSTREAM_UNAVAILABLE` instead (see Errors).","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"properties":{"error":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine-readable reason, present on the refusals a client may branch on. Among them: `PUBLISH_CAPABILITY_REQUIRED` (403, the credential may not change what is live), `AGENT_NOT_PUBLISHED` (409, the agent has no published version yet), `AGENT_TYPE_NOT_DISPATCHABLE` (422, a Voice Assist agent named where an agent must place a call or answer one itself — a campaign, an outbound caller ID, a dispatched call, an eval; a number's inbound dispatch rule accepts one; the body carries `agent_type` and `agent_id`), `ASSIST_FLEET_NOT_CONFIGURED` (422 on a dispatch rule naming a Voice Assist agent in a project whose LiveKit has no Voice Assist listener), `NOT_APPLICABLE_TO_AGENT_TYPE` (422, a voice-only setting written on a Voice Assist agent), `AGENT_TYPE_BOUNDARY` (409), `AGENT_TYPE_NOT_SUPPORTED` (400), `INVALID_CUSTOMER_TIMEZONE` (400, `customer_timezone` is not a time zone name; the body carries the value), `VOICE_ASSISTANT_REQUIRED` (403, the organization is not licensed for Voice Assist), `ORGANIZATION_UNAVAILABLE` (503), `REGION_PROFILE_CONFLICT` (503), `LLM_SERVICE_TIER_UNAVAILABLE` (422, an agent's processing speed is not offered by its model or not enabled for the organization; `reason` says which) and `AUTH_UPSTREAM_UNAVAILABLE` (503 on any endpoint, with `Retry-After`: the credential could not be checked right now; it was not rejected and the request was not carried out).","uniqueKey":"code","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"Invalid or revoked token"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid or revoked token"}}},"exampleType":"examples"}},"exampleType":"examples"},"7fc1ec4f-8350-4c11-902b-5d8bf443d1b0":{"description":"Your credential has no administrative access to the project.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"properties":{"error":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine-readable reason, present on the refusals a client may branch on. Among them: `PUBLISH_CAPABILITY_REQUIRED` (403, the credential may not change what is live), `AGENT_NOT_PUBLISHED` (409, the agent has no published version yet), `AGENT_TYPE_NOT_DISPATCHABLE` (422, a Voice Assist agent named where an agent must place a call or answer one itself — a campaign, an outbound caller ID, a dispatched call, an eval; a number's inbound dispatch rule accepts one; the body carries `agent_type` and `agent_id`), `ASSIST_FLEET_NOT_CONFIGURED` (422 on a dispatch rule naming a Voice Assist agent in a project whose LiveKit has no Voice Assist listener), `NOT_APPLICABLE_TO_AGENT_TYPE` (422, a voice-only setting written on a Voice Assist agent), `AGENT_TYPE_BOUNDARY` (409), `AGENT_TYPE_NOT_SUPPORTED` (400), `INVALID_CUSTOMER_TIMEZONE` (400, `customer_timezone` is not a time zone name; the body carries the value), `VOICE_ASSISTANT_REQUIRED` (403, the organization is not licensed for Voice Assist), `ORGANIZATION_UNAVAILABLE` (503), `REGION_PROFILE_CONFLICT` (503), `LLM_SERVICE_TIER_UNAVAILABLE` (422, an agent's processing speed is not offered by its model or not enabled for the organization; `reason` says which) and `AUTH_UPSTREAM_UNAVAILABLE` (503 on any endpoint, with `Retry-After`: the credential could not be checked right now; it was not rejected and the request was not carried out).","uniqueKey":"code","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"7086115e-2f6d-45b4-94c9-fd1c1795b4cc":{"description":"The project or the tool does not exist.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"properties":{"error":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine-readable reason, present on the refusals a client may branch on. Among them: `PUBLISH_CAPABILITY_REQUIRED` (403, the credential may not change what is live), `AGENT_NOT_PUBLISHED` (409, the agent has no published version yet), `AGENT_TYPE_NOT_DISPATCHABLE` (422, a Voice Assist agent named where an agent must place a call or answer one itself — a campaign, an outbound caller ID, a dispatched call, an eval; a number's inbound dispatch rule accepts one; the body carries `agent_type` and `agent_id`), `ASSIST_FLEET_NOT_CONFIGURED` (422 on a dispatch rule naming a Voice Assist agent in a project whose LiveKit has no Voice Assist listener), `NOT_APPLICABLE_TO_AGENT_TYPE` (422, a voice-only setting written on a Voice Assist agent), `AGENT_TYPE_BOUNDARY` (409), `AGENT_TYPE_NOT_SUPPORTED` (400), `INVALID_CUSTOMER_TIMEZONE` (400, `customer_timezone` is not a time zone name; the body carries the value), `VOICE_ASSISTANT_REQUIRED` (403, the organization is not licensed for Voice Assist), `ORGANIZATION_UNAVAILABLE` (503), `REGION_PROFILE_CONFLICT` (503), `LLM_SERVICE_TIER_UNAVAILABLE` (422, an agent's processing speed is not offered by its model or not enabled for the organization; `reason` says which) and `AUTH_UPSTREAM_UNAVAILABLE` (503 on any endpoint, with `Retry-After`: the credential could not be checked right now; it was not rejected and the request was not carried out).","uniqueKey":"code","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"768b1529-1862-4eb1-8d07-e9312cff9938":{"description":"The new name is taken in the tool's scope (`tool_name_already_exists_for_agent`); `agent_id` would make a tool private while other agents use it (`code: SHARED_TOOL_SCOPE_NARROWING_REFUSED`, with `used_by_agents`); the tool belongs to the organization tool library and cannot be made private (`library_tool_cannot_be_private`); or a resource the tool points at is not usable, as on create.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"properties":{"error":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine-readable reason, present on the refusals a client may branch on. Among them: `PUBLISH_CAPABILITY_REQUIRED` (403, the credential may not change what is live), `AGENT_NOT_PUBLISHED` (409, the agent has no published version yet), `AGENT_TYPE_NOT_DISPATCHABLE` (422, a Voice Assist agent named where an agent must place a call or answer one itself — a campaign, an outbound caller ID, a dispatched call, an eval; a number's inbound dispatch rule accepts one; the body carries `agent_type` and `agent_id`), `ASSIST_FLEET_NOT_CONFIGURED` (422 on a dispatch rule naming a Voice Assist agent in a project whose LiveKit has no Voice Assist listener), `NOT_APPLICABLE_TO_AGENT_TYPE` (422, a voice-only setting written on a Voice Assist agent), `AGENT_TYPE_BOUNDARY` (409), `AGENT_TYPE_NOT_SUPPORTED` (400), `INVALID_CUSTOMER_TIMEZONE` (400, `customer_timezone` is not a time zone name; the body carries the value), `VOICE_ASSISTANT_REQUIRED` (403, the organization is not licensed for Voice Assist), `ORGANIZATION_UNAVAILABLE` (503), `REGION_PROFILE_CONFLICT` (503), `LLM_SERVICE_TIER_UNAVAILABLE` (422, an agent's processing speed is not offered by its model or not enabled for the organization; `reason` says which) and `AUTH_UPSTREAM_UNAVAILABLE` (503 on any endpoint, with `Retry-After`: the credential could not be checked right now; it was not rejected and the request was not carried out).","uniqueKey":"code","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"1bff1e0f-2300-4aae-bf7d-db61d327c464":{"description":"The body failed validation, as on create. When `type` is not sent, `configs` is checked against the stored type and a mismatch answers 400 instead.","content":{"application/json":{"schema":{"type":"object","description":"A validation failure. `error` is a human-readable summary; `issues` (request validation) or `details` (agent configuration validation) locate each problem. A refused processing speed answers with `error` and `code` both `LLM_SERVICE_TIER_UNAVAILABLE` and the fields `path`, `reason`, `tier`, `provider` and `model`.","properties":{"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A machine-readable code, on the failures that carry one: `LLM_SERVICE_TIER_UNAVAILABLE` for a processing speed the agent cannot use.","uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"},"path":{"type":"string","description":"With `LLM_SERVICE_TIER_UNAVAILABLE`: the refused field, `agent_model_config.llm_service_tier`.","uniqueKey":"path","typeLabel":"string"},"reason":{"type":"string","enum":["model","organization"],"description":"With `LLM_SERVICE_TIER_UNAVAILABLE`: `model` when the language model does not offer the speed (or the value is not a speed at all), `organization` when your organization does not have it.","uniqueKey":"reason","typeLabel":"enum\u003cstring>"},"tier":{"type":"string","description":"With `LLM_SERVICE_TIER_UNAVAILABLE`, the refused value, as text.","uniqueKey":"tier","typeLabel":"string"},"provider":{"type":"string","description":"With `LLM_SERVICE_TIER_UNAVAILABLE`, the agent's language model provider.","uniqueKey":"provider","typeLabel":"string"},"model":{"type":"string","description":"With `LLM_SERVICE_TIER_UNAVAILABLE`, the agent's language model.","uniqueKey":"model","typeLabel":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"Dotted path of the offending field","uniqueKey":"issues.items.[INDEX].path","typeLabel":"string"},"code":{"type":"string","uniqueKey":"issues.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"issues.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"issues.items.[INDEX]","typeLabel":"object"},"uniqueKey":"issues","typeLabel":"object[]"},"details":{"type":"array","items":{"oneOf":[{}],"uniqueKey":"details.items.[INDEX]","typeLabel":"any"},"uniqueKey":"details","typeLabel":"any[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>","path":"\u003cstring>","reason":"model","tier":"\u003cstring>","provider":"\u003cstring>","model":"\u003cstring>","issues":[{"path":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}],"details":["\u003cunknown>"]}}},"exampleType":"generated"}},"exampleType":"generated"},"567bcc84-6d12-4fe0-ba24-75d95502e4ed":{"description":"A service the tool depends on could not be reached, as on create. Retry later.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":true,"properties":{"error":{"type":"string","description":"Error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine-readable reason, present on the refusals a client may branch on. Among them: `PUBLISH_CAPABILITY_REQUIRED` (403, the credential may not change what is live), `AGENT_NOT_PUBLISHED` (409, the agent has no published version yet), `AGENT_TYPE_NOT_DISPATCHABLE` (422, a Voice Assist agent named where an agent must place a call or answer one itself — a campaign, an outbound caller ID, a dispatched call, an eval; a number's inbound dispatch rule accepts one; the body carries `agent_type` and `agent_id`), `ASSIST_FLEET_NOT_CONFIGURED` (422 on a dispatch rule naming a Voice Assist agent in a project whose LiveKit has no Voice Assist listener), `NOT_APPLICABLE_TO_AGENT_TYPE` (422, a voice-only setting written on a Voice Assist agent), `AGENT_TYPE_BOUNDARY` (409), `AGENT_TYPE_NOT_SUPPORTED` (400), `INVALID_CUSTOMER_TIMEZONE` (400, `customer_timezone` is not a time zone name; the body carries the value), `VOICE_ASSISTANT_REQUIRED` (403, the organization is not licensed for Voice Assist), `ORGANIZATION_UNAVAILABLE` (503), `REGION_PROFILE_CONFLICT` (503), `LLM_SERVICE_TIER_UNAVAILABLE` (422, an agent's processing speed is not offered by its model or not enabled for the organization; `reason` says which) and `AUTH_UPSTREAM_UNAVAILABLE` (503 on any endpoint, with `Retry-After`: the credential could not be checked right now; it was not rejected and the request was not carried out).","uniqueKey":"code","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"79258329-9c11-41e2-825c-e7e86baa03e6":{"organizationApiKey":{"type":"http","scheme":"bearer","description":"Your organization API key (it starts with `anek_org_`). The same key works on the Voice API and the Support API. See [Authentication](/authentication).","scopes":[],"schemeName":"organizationApiKey"}}},"servers":{"c1b5bfaf-ca83-44db-afe9-8385e654f187":{"url":"https://voice-api.onclarity.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Your organization API key (it starts with `anek_org_`). The same key works on the Voice API and the Support API. See [Authentication](/authentication).","scopes":[],"schemeName":"organizationApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Your organization API key (it starts with `anek_org_`). The same key works on the Voice API and the Support API. See [Authentication](/authentication).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"organizationApiKey","name":"Authorization"}],"title":"organizationApiKey"}]},"originalFileLocation":"api-reference/voice-openapi.json"},"subdomain":"on-clarity","siteName":"Clarity Support Docs","title":"Update a tool - Clarity Support Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T11:30:36.325Z","originalFileLocation":"api-reference/voice/tools/update-a-tool.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Changes the fields you send and keeps the others. The top-level keys of configs are merged into the stored configuration (a messaging, handoff or ticket configuration is replaced whole), and the result is checked against the tool\u0026#x27;s type; when you also send type, send the complete configs. The edit reaches the drafts of every agent that uses the tool; live calls keep the published copy until each agent is published again or you push the tool to live agents. A request that changes nothing writes nothing.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Clarity Support Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/on-clarity/mFVlSgsYkfg6E9Cg/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/on-clarity/mFVlSgsYkfg6E9Cg/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/on-clarity/mFVlSgsYkfg6E9Cg/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/on-clarity/mFVlSgsYkfg6E9Cg/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/on-clarity/mFVlSgsYkfg6E9Cg/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/on-clarity/mFVlSgsYkfg6E9Cg/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/on-clarity/mFVlSgsYkfg6E9Cg/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/on-clarity/mFVlSgsYkfg6E9Cg/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/on-clarity/mFVlSgsYkfg6E9Cg/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update a tool - Clarity Support Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Changes the fields you send and keeps the others. The top-level keys of configs are merged into the stored configuration (a messaging, handoff or ticket configuration is replaced whole), and the result is checked against the tool\u0026#x27;s type; when you also send type, send the complete configs. The edit reaches the drafts of every agent that uses the tool; live calls keep the published copy until each agent is published again or you push the tool to live agents. A request that changes nothing writes nothing.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Clarity Support Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.support.onclarity.com/api-reference/voice/tools/update-a-tool\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://on-clarity.mintlify.site/_mintlify/api/og/v2?division=Tools\u0026amp;title=Update+a+tool\u0026amp;description=Changes+the+fields+you+send+and+keeps+the+others.+The+top-level+keys+of+%60configs%60+are+merged+into+the+stored+configuration+%28a+%60messaging%60%2C+%60handoff%60+or+%60ticket%60\u0026amp;theme=d4d3ea60eb64236c312935e2\u0026amp;signature=fdb2f3403901d6d1bd7e625d0581364a8ff6df205adeff820b84045196f04ee0\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Update a tool - Clarity Support Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Changes the fields you send and keeps the others. The top-level keys of configs are merged into the stored configuration (a messaging, handoff or ticket configuration is replaced whole), and the result is checked against the tool\u0026#x27;s type; when you also send type, send the complete configs. The edit reaches the drafts of every agent that uses the tool; live calls keep the published copy until each agent is published again or you push the tool to live agents. A request that changes nothing writes nothing.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://on-clarity.mintlify.site/_mintlify/api/og/v2?division=Tools\u0026amp;title=Update+a+tool\u0026amp;description=Changes+the+fields+you+send+and+keeps+the+others.+The+top-level+keys+of+%60configs%60+are+merged+into+the+stored+configuration+%28a+%60messaging%60%2C+%60handoff%60+or+%60ticket%60\u0026amp;theme=d4d3ea60eb64236c312935e2\u0026amp;signature=fdb2f3403901d6d1bd7e625d0581364a8ff6df205adeff820b84045196f04ee0\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/on-clarity/mFVlSgsYkfg6E9Cg/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Clarity Support Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0aa68a\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.support.onclarity.com/api-reference/voice/tools/update-a-tool\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/voice/tools/update-a-tool.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.support.onclarity.com/#organization\",\"name\":\"Clarity Support Docs\",\"url\":\"https://docs.support.onclarity.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/on-clarity/wANpiWtgQORdXhk3/logo/light.svg?fit=max\u0026auto=format\u0026n=wANpiWtgQORdXhk3\u0026q=85\u0026s=a67bcf8cb635c40e2371c3f86424d4a0\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.support.onclarity.com#website\",\"name\":\"Clarity Support Docs\",\"url\":\"https://docs.support.onclarity.com\",\"publisher\":{\"@id\":\"https://docs.support.onclarity.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.support.onclarity.com/api-reference/voice/tools/update-a-tool#webpage\",\"url\":\"https://docs.support.onclarity.com/api-reference/voice/tools/update-a-tool\",\"name\":\"Update a tool\",\"description\":\"Changes the fields you send and keeps the others. The top-level keys of configs are merged into the stored configuration (a messaging, handoff or ticket configuration is replaced whole), and the result is checked against the tool's type; when you also send type, send the complete configs. The edit reaches the drafts of every agent that uses the tool; live calls keep the published copy until each agent is published again or you push the tool to live agents. A request that changes nothing writes nothing.\",\"dateModified\":\"2026-11-12T11:30:36.325Z\",\"isPartOf\":{\"@id\":\"https://docs.support.onclarity.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.support.onclarity.com/api-reference/voice/tools/update-a-tool#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.support.onclarity.com/api-reference/voice/tools/update-a-tool#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Voice API\",\"item\":\"https://docs.support.onclarity.com/api-reference/voice/projects/list-projects\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tools\",\"item\":\"https://docs.support.onclarity.com/api-reference/voice/tools/list-tools\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Update a tool\",\"item\":\"https://docs.support.onclarity.com/api-reference/voice/tools/update-a-tool\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.support.onclarity.com/api-reference/voice/tools/update-a-tool#apireference\",\"headline\":\"Update a tool\",\"name\":\"Update a tool\",\"description\":\"Changes the fields you send and keeps the others. The top-level keys of configs are merged into the stored configuration (a messaging, handoff or ticket configuration is replaced whole), and the result is checked against the tool's type; when you also send type, send the complete configs. The edit reaches the drafts of every agent that uses the tool; live calls keep the published copy until each agent is published again or you push the tool to live agents. A request that changes nothing writes nothing.\",\"url\":\"https://docs.support.onclarity.com/api-reference/voice/tools/update-a-tool\",\"mainEntityOfPage\":{\"@id\":\"https://docs.support.onclarity.com/api-reference/voice/tools/update-a-tool#webpage\"},\"dateModified\":\"2026-11-12T11:30:36.325Z\",\"publisher\":{\"@id\":\"https://docs.support.onclarity.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.support.onclarity.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Clarity Support Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Clarity Support Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/voice/tools/update-a-tool.md","siteName":"Clarity Support Docs","nav":{"global":{"anchors":[{"anchor":"Open Clarity","icon":"arrow-up-right-from-square","href":"https://support.onclarity.com"},{"anchor":"Support","icon":"envelope","href":"mailto:hello@onclarity.com"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","groups":[{"group":"Getting started","pages":[{"title":"API introduction","href":"/api-reference/introduction"},{"title":"Errors","href":"/api-reference/errors"}]},{"group":"Voice API","pages":[{"group":"Projects","icon":"folder-open","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects","title":"List projects","icon":"folder-open","href":"/api-reference/voice/projects/list-projects"}]},{"group":"Agents","icon":"robot","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents","title":"List agents","icon":"robot","href":"/api-reference/voice/agents/list-agents"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/agents","title":"Create an agent","icon":"robot","href":"/api-reference/voice/agents/create-an-agent"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents/{id}","title":"Get an agent","icon":"robot","href":"/api-reference/voice/agents/get-an-agent"},{"openapi":"api-reference/voice-openapi.json PATCH /v1/projects/{projectId}/agents/{id}","title":"Update an agent","icon":"robot","href":"/api-reference/voice/agents/update-an-agent"},{"openapi":"api-reference/voice-openapi.json DELETE /v1/projects/{projectId}/agents/{id}","title":"Delete an agent","icon":"robot","href":"/api-reference/voice/agents/delete-an-agent"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/agents/{id}/clone","title":"Clone an agent","icon":"robot","href":"/api-reference/voice/agents/clone-an-agent"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/agents/{id}/publish","title":"Publish the draft","icon":"robot","href":"/api-reference/voice/agents/publish-the-draft"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/agents/{id}/discard-draft","title":"Discard the draft","icon":"robot","href":"/api-reference/voice/agents/discard-the-draft"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents/{id}/versions","title":"List an agent's versions","icon":"robot","href":"/api-reference/voice/agents/list-an-agents-versions"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents/{id}/versions/{versionId}","title":"Get an agent version","icon":"robot","href":"/api-reference/voice/agents/get-an-agent-version"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/agents/{id}/versions/{versionId}/republish","title":"Roll back to an earlier version","icon":"robot","href":"/api-reference/voice/agents/roll-back-to-an-earlier-version"}]},{"group":"Tools","icon":"wrench","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/tools","title":"List tools","icon":"wrench","href":"/api-reference/voice/tools/list-tools"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/tools","title":"Create a tool","icon":"wrench","href":"/api-reference/voice/tools/create-a-tool"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/tools/{id}/push","title":"Push a tool to live agents","icon":"wrench","href":"/api-reference/voice/tools/push-a-tool-to-live-agents"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents/{id}/tools","title":"List an agent's tools","icon":"wrench","href":"/api-reference/voice/tools/list-an-agents-tools"},{"openapi":"api-reference/voice-openapi.json PUT /v1/projects/{projectId}/agents/{id}/tools","title":"Set an agent's tools","icon":"wrench","href":"/api-reference/voice/tools/set-an-agents-tools"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/tools/{id}","title":"Get a tool","icon":"wrench","description":"Returns one tool, with the agents that use it in `used_by_agents`. Check that list before you edit a project-wide tool: the edit reaches every one of them.","href":"/api-reference/voice/tools/get-a-tool"},{"openapi":"api-reference/voice-openapi.json PATCH /v1/projects/{projectId}/tools/{id}","title":"Update a tool","icon":"wrench","href":"/api-reference/voice/tools/update-a-tool"},{"openapi":"api-reference/voice-openapi.json DELETE /v1/projects/{projectId}/tools/{id}","title":"Delete a tool","icon":"wrench","description":"Deletes the tool and detaches it from every agent's draft. Published versions keep their copy until the agent is published again. A tool from the organization tool library is deleted from the library, which is refused while any agent uses it. Needs the publish permission, which organization API keys carry.","href":"/api-reference/voice/tools/delete-a-tool"}]},{"group":"Outbound calls","icon":"phone-arrow-up-right","pages":[{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/agents/{id}/dispatch-call","title":"Dispatch an outbound call","icon":"phone-arrow-up-right","href":"/api-reference/voice/outbound-calls/dispatch-an-outbound-call"}]},{"group":"Conversations","icon":"comments","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/conversations","title":"List conversations","icon":"comments","href":"/api-reference/voice/conversations/list-conversations"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/conversations/{id}","title":"Get a conversation","icon":"comments","href":"/api-reference/voice/conversations/get-a-conversation"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/conversations/{id}/calls","title":"List a conversation's calls","icon":"comments","href":"/api-reference/voice/conversations/list-a-conversations-calls"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/conversations/{id}/artifacts","title":"Get conversation artifacts","icon":"comments","href":"/api-reference/voice/conversations/get-conversation-artifacts"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/conversations/{id}/metrics","title":"Get conversation metrics","icon":"comments","href":"/api-reference/voice/conversations/get-conversation-metrics"}]},{"group":"Calls","icon":"phone","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/calls","title":"List calls","icon":"phone","href":"/api-reference/voice/calls/list-calls"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/calls/{id}","title":"Get a call","icon":"phone","href":"/api-reference/voice/calls/get-a-call"}]},{"group":"Campaigns","icon":"bullhorn","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/campaigns","title":"List campaigns","icon":"bullhorn","href":"/api-reference/voice/campaigns/list-campaigns"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/campaigns","title":"Create a campaign","icon":"bullhorn","href":"/api-reference/voice/campaigns/create-a-campaign"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/campaigns/{id}","title":"Get a campaign","icon":"bullhorn","href":"/api-reference/voice/campaigns/get-a-campaign"},{"openapi":"api-reference/voice-openapi.json PUT /v1/projects/{projectId}/campaigns/{id}","title":"Update a campaign","icon":"bullhorn","href":"/api-reference/voice/campaigns/update-a-campaign"},{"openapi":"api-reference/voice-openapi.json DELETE /v1/projects/{projectId}/campaigns/{id}","title":"Delete a campaign","icon":"bullhorn","href":"/api-reference/voice/campaigns/delete-a-campaign"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/campaigns/{id}/start","title":"Start a campaign","icon":"bullhorn","href":"/api-reference/voice/campaigns/start-a-campaign"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/campaigns/{id}/cancel","title":"Cancel a campaign","icon":"bullhorn","href":"/api-reference/voice/campaigns/cancel-a-campaign"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/campaigns/{id}/items","title":"Add contacts to a campaign","icon":"bullhorn","href":"/api-reference/voice/campaigns/add-contacts-to-a-campaign"},{"openapi":"api-reference/voice-openapi.json PUT /v1/projects/{projectId}/campaigns/{id}/items/{itemId}","title":"Update a campaign contact","icon":"bullhorn","href":"/api-reference/voice/campaigns/update-a-campaign-contact"},{"openapi":"api-reference/voice-openapi.json DELETE /v1/projects/{projectId}/campaigns/{id}/items/{itemId}","title":"Remove a campaign contact","icon":"bullhorn","href":"/api-reference/voice/campaigns/remove-a-campaign-contact"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/campaigns/{id}/clone","title":"Clone a campaign","icon":"bullhorn","href":"/api-reference/voice/campaigns/clone-a-campaign"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/campaigns/{id}/analytics","title":"Get campaign progress","icon":"bullhorn","href":"/api-reference/voice/campaigns/get-campaign-progress"}]},{"group":"Telephony","icon":"tower-broadcast","pages":[{"group":"Phone numbers","icon":"hashtag","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/phone-numbers","title":"List phone numbers","icon":"hashtag","href":"/api-reference/voice/phone-numbers/list-phone-numbers"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/phone-numbers","title":"Create a phone number","icon":"hashtag","href":"/api-reference/voice/phone-numbers/create-a-phone-number"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/phone-numbers/{id}","title":"Get a phone number","icon":"hashtag","href":"/api-reference/voice/phone-numbers/get-a-phone-number"},{"openapi":"api-reference/voice-openapi.json PUT /v1/projects/{projectId}/phone-numbers/{id}","title":"Update a phone number","icon":"hashtag","href":"/api-reference/voice/phone-numbers/update-a-phone-number"},{"openapi":"api-reference/voice-openapi.json DELETE /v1/projects/{projectId}/phone-numbers/{id}","title":"Delete a phone number","icon":"hashtag","href":"/api-reference/voice/phone-numbers/delete-a-phone-number"}]},{"group":"Inbound SIP trunks","icon":"arrow-right-to-bracket","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/telephony/sip-trunks","title":"List inbound SIP trunks","icon":"arrow-right-to-bracket","href":"/api-reference/voice/inbound-sip-trunks/list-inbound-sip-trunks"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/telephony/sip-trunks","title":"Create an inbound SIP trunk","icon":"arrow-right-to-bracket","href":"/api-reference/voice/inbound-sip-trunks/create-an-inbound-sip-trunk"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/telephony/sip-trunks/{id}","title":"Get an inbound SIP trunk","icon":"arrow-right-to-bracket","href":"/api-reference/voice/inbound-sip-trunks/get-an-inbound-sip-trunk"},{"openapi":"api-reference/voice-openapi.json PUT /v1/projects/{projectId}/telephony/sip-trunks/{id}","title":"Update an inbound SIP trunk","icon":"arrow-right-to-bracket","href":"/api-reference/voice/inbound-sip-trunks/update-an-inbound-sip-trunk"},{"openapi":"api-reference/voice-openapi.json DELETE /v1/projects/{projectId}/telephony/sip-trunks/{id}","title":"Delete an inbound SIP trunk","icon":"arrow-right-to-bracket","href":"/api-reference/voice/inbound-sip-trunks/delete-an-inbound-sip-trunk"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/telephony/sip-trunks/{id}/activate","title":"Activate an inbound SIP trunk","icon":"arrow-right-to-bracket","href":"/api-reference/voice/inbound-sip-trunks/activate-an-inbound-sip-trunk"}]},{"group":"Outbound SIP trunks","icon":"arrow-right-from-bracket","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/telephony/outbound-trunks","title":"List outbound SIP trunks","icon":"arrow-right-from-bracket","href":"/api-reference/voice/outbound-sip-trunks/list-outbound-sip-trunks"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/telephony/outbound-trunks","title":"Create an outbound SIP trunk","icon":"arrow-right-from-bracket","href":"/api-reference/voice/outbound-sip-trunks/create-an-outbound-sip-trunk"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/telephony/outbound-trunks/{id}","title":"Get an outbound SIP trunk","icon":"arrow-right-from-bracket","href":"/api-reference/voice/outbound-sip-trunks/get-an-outbound-sip-trunk"},{"openapi":"api-reference/voice-openapi.json PUT /v1/projects/{projectId}/telephony/outbound-trunks/{id}","title":"Update an outbound SIP trunk","icon":"arrow-right-from-bracket","href":"/api-reference/voice/outbound-sip-trunks/update-an-outbound-sip-trunk"},{"openapi":"api-reference/voice-openapi.json DELETE /v1/projects/{projectId}/telephony/outbound-trunks/{id}","title":"Delete an outbound SIP trunk","icon":"arrow-right-from-bracket","href":"/api-reference/voice/outbound-sip-trunks/delete-an-outbound-sip-trunk"}]}]},{"group":"Evals","icon":"flask-vial","pages":[{"group":"Suites","icon":"layer-group","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-suites","title":"List eval suites","icon":"layer-group","href":"/api-reference/voice/eval-suites/list-eval-suites"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/eval-suites","title":"Create an eval suite","icon":"layer-group","href":"/api-reference/voice/eval-suites/create-an-eval-suite"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-suites/{id}","title":"Get an eval suite","icon":"layer-group","href":"/api-reference/voice/eval-suites/get-an-eval-suite"},{"openapi":"api-reference/voice-openapi.json PATCH /v1/projects/{projectId}/eval-suites/{id}","title":"Update an eval suite","icon":"layer-group","href":"/api-reference/voice/eval-suites/update-an-eval-suite"},{"openapi":"api-reference/voice-openapi.json DELETE /v1/projects/{projectId}/eval-suites/{id}","title":"Delete an eval suite","icon":"layer-group","href":"/api-reference/voice/eval-suites/delete-an-eval-suite"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-suites/{id}/compare","title":"Compare submissions on a suite","icon":"layer-group","href":"/api-reference/voice/eval-suites/compare-submissions-on-a-suite"}]},{"group":"Test cases","icon":"list-check","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-test-cases","title":"List eval test cases","icon":"list-check","href":"/api-reference/voice/eval-test-cases/list-eval-test-cases"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-test-cases/{id}","title":"Get an eval test case","icon":"list-check","href":"/api-reference/voice/eval-test-cases/get-an-eval-test-case"}]},{"group":"Scenarios","icon":"masks-theater","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-scenarios","title":"List eval scenarios","icon":"masks-theater","href":"/api-reference/voice/eval-scenarios/list-eval-scenarios"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-scenarios/{id}","title":"Get an eval scenario","icon":"masks-theater","href":"/api-reference/voice/eval-scenarios/get-an-eval-scenario"}]},{"group":"Judges","icon":"scale-balanced","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-judges","title":"List eval judges","icon":"scale-balanced","href":"/api-reference/voice/eval-judges/list-eval-judges"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/eval-judges","title":"Create an eval judge","icon":"scale-balanced","href":"/api-reference/voice/eval-judges/create-an-eval-judge"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-judges/templates","title":"List judge prompt templates","icon":"scale-balanced","href":"/api-reference/voice/eval-judges/list-judge-prompt-templates"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-judges/{id}","title":"Get an eval judge","icon":"scale-balanced","href":"/api-reference/voice/eval-judges/get-an-eval-judge"},{"openapi":"api-reference/voice-openapi.json PATCH /v1/projects/{projectId}/eval-judges/{id}","title":"Update an eval judge","icon":"scale-balanced","href":"/api-reference/voice/eval-judges/update-an-eval-judge"},{"openapi":"api-reference/voice-openapi.json DELETE /v1/projects/{projectId}/eval-judges/{id}","title":"Delete an eval judge","icon":"scale-balanced","href":"/api-reference/voice/eval-judges/delete-an-eval-judge"}]},{"group":"Runs","icon":"play","pages":[{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents/{agentId}/eval-submissions","title":"List an agent's eval runs","icon":"play","href":"/api-reference/voice/eval-submissions/list-an-agents-eval-runs"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/agents/{agentId}/eval-submissions","title":"Create an eval run","icon":"play","href":"/api-reference/voice/eval-submissions/create-an-eval-run"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents/{agentId}/eval-submissions/{id}","title":"Get an eval run","icon":"play","href":"/api-reference/voice/eval-submissions/get-an-eval-run"},{"openapi":"api-reference/voice-openapi.json PATCH /v1/projects/{projectId}/agents/{agentId}/eval-submissions/{id}","title":"Update a paused eval run","icon":"play","href":"/api-reference/voice/eval-submissions/update-a-paused-eval-run"},{"openapi":"api-reference/voice-openapi.json DELETE /v1/projects/{projectId}/agents/{agentId}/eval-submissions/{id}","title":"Delete an eval run","icon":"play","href":"/api-reference/voice/eval-submissions/delete-an-eval-run"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents/{agentId}/eval-submissions/{id}/verdicts","title":"List an eval run's verdicts","icon":"play","href":"/api-reference/voice/eval-submissions/list-an-eval-runs-verdicts"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents/{agentId}/eval-submissions/{id}/call-results","title":"List an eval run's calls","icon":"play","href":"/api-reference/voice/eval-submissions/list-an-eval-runs-calls"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents/{agentId}/eval-submissions/{id}/report","title":"Get an eval run's report","icon":"play","href":"/api-reference/voice/eval-submissions/get-an-eval-runs-report"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/agents/{agentId}/eval-submissions/{id}/improve-candidates","title":"Get the failed checks of an eval run and the calls to read for them","icon":"play","href":"/api-reference/voice/eval-submissions/get-the-failed-checks-of-an-eval-run-and-the-calls-to-read-for-them"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/agents/{agentId}/eval-submissions/{id}/run","title":"Start or resume an eval run","icon":"play","href":"/api-reference/voice/eval-submissions/start-or-resume-an-eval-run"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/agents/{agentId}/eval-submissions/{id}/pause","title":"Pause an eval run","icon":"play","href":"/api-reference/voice/eval-submissions/pause-an-eval-run"},{"openapi":"api-reference/voice-openapi.json POST /v1/projects/{projectId}/agents/{agentId}/run-all-evals","title":"Start all of an agent's paused eval runs","icon":"play","href":"/api-reference/voice/eval-submissions/start-all-of-an-agents-paused-eval-runs"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-submissions","title":"List all eval runs in a project","icon":"play","href":"/api-reference/voice/eval-submissions/list-all-eval-runs-in-a-project"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-submissions/{id}","title":"Get an eval run by id","icon":"play","href":"/api-reference/voice/eval-submissions/get-an-eval-run-by-id"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-submissions/{id}/status","title":"Get an eval run's status","icon":"play","href":"/api-reference/voice/eval-submissions/get-an-eval-runs-status"},{"openapi":"api-reference/voice-openapi.json GET /v1/projects/{projectId}/eval-submissions/{id}/verdicts","title":"List an eval run's verdicts by run id","icon":"play","href":"/api-reference/voice/eval-submissions/list-an-eval-runs-verdicts-by-run-id"}]}]}]},{"group":"Support API","pages":[{"group":"AI service","icon":"wand-magic-sparkles","pages":[{"openapi":"api-reference/support-openapi.json GET /api/integration/ai_service/ticket/{ticket_id}/details","title":"Get ticket details","icon":"wand-magic-sparkles","href":"/api-reference/support/ai-service/get-ticket-details"},{"openapi":"api-reference/support-openapi.json POST /api/integration/ai_service/ticket/{ticket_id}/voice_handoff","title":"Request a voice call","icon":"wand-magic-sparkles","href":"/api-reference/support/ai-service/request-a-voice-call"},{"openapi":"api-reference/support-openapi.json GET /api/integration/ai_service/customer/{customer_id}/details","title":"Get customer details","icon":"wand-magic-sparkles","href":"/api-reference/support/ai-service/get-customer-details"},{"openapi":"api-reference/support-openapi.json GET /api/integration/ai_service/customer/{customer_id}/tickets","title":"List a customer's tickets","icon":"wand-magic-sparkles","href":"/api-reference/support/ai-service/list-a-customers-tickets"},{"openapi":"api-reference/support-openapi.json POST /api/integration/ai_service/customer/send","title":"Send a customer message","icon":"wand-magic-sparkles","href":"/api-reference/support/ai-service/send-a-customer-message"}]},{"group":"Messages","icon":"message","pages":[{"openapi":"api-reference/support-openapi.json POST /api/message/send","title":"Send a message on a ticket","icon":"message","href":"/api-reference/support/messages/send-a-message-on-a-ticket"},{"openapi":"api-reference/support-openapi.json POST /api/attachment/upload","title":"Upload an attachment","icon":"message","href":"/api-reference/support/messages/upload-an-attachment"}]},{"group":"Customers","icon":"users","pages":[{"openapi":"api-reference/support-openapi.json POST /api/customer/create","title":"Create a customer","icon":"users","href":"/api-reference/support/customers/create-a-customer"},{"openapi":"api-reference/support-openapi.json POST /api/customer/delete","title":"Delete a customer","icon":"users","href":"/api-reference/support/customers/delete-a-customer"},{"openapi":"api-reference/support-openapi.json GET /api/customer/{customer_id}","title":"Get a customer","icon":"users","href":"/api-reference/support/customers/get-a-customer"},{"openapi":"api-reference/support-openapi.json POST /api/customer/edit","title":"Update a customer","icon":"users","href":"/api-reference/support/customers/update-a-customer"},{"openapi":"api-reference/support-openapi.json POST /api/customer/tags_set","title":"Set a customer's tags","icon":"users","href":"/api-reference/support/customers/set-a-customers-tags"},{"openapi":"api-reference/support-openapi.json GET /api/customer/list","title":"List customers","icon":"users","href":"/api-reference/support/customers/list-customers"},{"openapi":"api-reference/support-openapi.json GET /api/custom-attributes/definitions/list","title":"List custom attribute definitions","icon":"users","href":"/api-reference/support/customers/list-custom-attribute-definitions"},{"openapi":"api-reference/support-openapi.json GET /api/custom-attributes/values","title":"Get custom attribute values","icon":"users","href":"/api-reference/support/customers/get-custom-attribute-values"},{"openapi":"api-reference/support-openapi.json POST /api/custom-attributes/values/set","title":"Set a custom attribute value","icon":"users","href":"/api-reference/support/customers/set-a-custom-attribute-value"}]},{"group":"Tickets","icon":"ticket","pages":[{"openapi":"api-reference/support-openapi.json POST /api/ticket/category_set","title":"Set a ticket's category","icon":"ticket","href":"/api-reference/support/tickets/set-a-tickets-category"},{"openapi":"api-reference/support-openapi.json POST /api/ticket/status_set","title":"Set a ticket's status","icon":"ticket","href":"/api-reference/support/tickets/set-a-tickets-status"},{"openapi":"api-reference/support-openapi.json POST /api/ticket/tags_change","title":"Add or remove ticket tags","icon":"ticket","href":"/api-reference/support/tickets/add-or-remove-ticket-tags"},{"openapi":"api-reference/support-openapi.json POST /api/ticket/tags_set","title":"Set a ticket's tags","icon":"ticket","href":"/api-reference/support/tickets/set-a-tickets-tags"},{"openapi":"api-reference/support-openapi.json POST /api/ticket/assign/v2","title":"Assign a ticket","icon":"ticket","href":"/api-reference/support/tickets/assign-a-ticket"},{"openapi":"api-reference/support-openapi.json GET /api/ticket_priority/list","title":"List ticket priorities","icon":"ticket","href":"/api-reference/support/tickets/list-ticket-priorities"},{"openapi":"api-reference/support-openapi.json GET /api/ticket_status/list","title":"List ticket statuses","icon":"ticket","href":"/api-reference/support/tickets/list-ticket-statuses"},{"openapi":"api-reference/support-openapi.json GET /api/ticket_category/list","title":"List ticket categories","icon":"ticket","href":"/api-reference/support/tickets/list-ticket-categories"},{"openapi":"api-reference/support-openapi.json GET /api/agent/list","title":"List agents","icon":"ticket","href":"/api-reference/support/tickets/list-agents"},{"openapi":"api-reference/support-openapi.json GET /api/team/list","title":"List teams","icon":"ticket","href":"/api-reference/support/tickets/list-teams"},{"openapi":"api-reference/support-openapi.json GET /api/tag/list","title":"List tags","icon":"ticket","href":"/api-reference/support/tickets/list-tags"}]},{"group":"Knowledge base","icon":"book-open","pages":[{"openapi":"api-reference/support-openapi.json POST /api/kb/articles/create","title":"Create an article","icon":"book-open","href":"/api-reference/support/knowledge-base/create-an-article"},{"openapi":"api-reference/support-openapi.json DELETE /api/kb/articles/delete","title":"Delete an article","icon":"book-open","href":"/api-reference/support/knowledge-base/delete-an-article"},{"openapi":"api-reference/support-openapi.json GET /api/kb/articles/detail","title":"Get an article","icon":"book-open","href":"/api-reference/support/knowledge-base/get-an-article"},{"openapi":"api-reference/support-openapi.json GET /api/kb/meta","title":"Get knowledge base metadata","icon":"book-open","href":"/api-reference/support/knowledge-base/get-knowledge-base-metadata"},{"openapi":"api-reference/support-openapi.json POST /api/kb/articles/list","title":"List articles","icon":"book-open","href":"/api-reference/support/knowledge-base/list-articles"},{"openapi":"api-reference/support-openapi.json PATCH /api/kb/articles/update","title":"Update an article","icon":"book-open","href":"/api-reference/support/knowledge-base/update-an-article"},{"openapi":"api-reference/support-openapi.json POST /api/kb/articles/upload","title":"Upload articles from a file","icon":"book-open","href":"/api-reference/support/knowledge-base/upload-articles-from-a-file"}]},{"group":"Webhooks","icon":"bolt","pages":[{"openapi":"api-reference/support-openapi.json POST /api/webhooks/create","title":"Create a webhook","icon":"bolt","href":"/api-reference/support/webhooks/create-a-webhook"},{"openapi":"api-reference/support-openapi.json GET /api/webhooks/{webhook_id}","title":"Get a webhook","icon":"bolt","href":"/api-reference/support/webhooks/get-a-webhook"},{"openapi":"api-reference/support-openapi.json DELETE /api/webhooks/{webhook_id}","title":"Delete a webhook","icon":"bolt","href":"/api-reference/support/webhooks/delete-a-webhook"},{"openapi":"api-reference/support-openapi.json GET /api/webhooks/events/list","title":"List webhook events","icon":"bolt","href":"/api-reference/support/webhooks/list-webhook-events"},{"openapi":"api-reference/support-openapi.json GET /api/webhooks/list","title":"List webhooks","icon":"bolt","href":"/api-reference/support/webhooks/list-webhooks"},{"openapi":"api-reference/support-openapi.json POST /api/webhooks/edit","title":"Update a webhook","icon":"bolt","href":"/api-reference/support/webhooks/update-a-webhook"}]}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Update a tool - Clarity Support Docs","buildId":"dpl_G2Qd45vZZ7MkBiGF9yYx8ZsbbKXX","deploymentId":"dpl_G2Qd45vZZ7MkBiGF9yYx8ZsbbKXX","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-NXj-Rqjv.js","utils-m0thOP-_.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D13EKcfm.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema--XTdfsEb.js","snippetPresets-D3s4lmAH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-ChURybxL.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DL8CiXq2.js","shallow-DI2-YB2E.js","getApiPlaygroundDisplay-DxbW7b_y.js","CodeSnippet-CiNYS0pP.js","CodeSnippets-BT87bThu.js","Page-DSpdRuhM.js","getPastedJson-F_g_IrFQ.js","icon-CCIG5BAs.js","MethodPill-DY3E0jwx.js","DuplicateIcon-BN88xnEg.js","createIcon-VCCc5HO5.js","DynamicMarkdown-CaSwclgK.js","SectionHeading-DXV8nWhc.js","axios-vUo_bRtp.js","Markdown-CV32Re6G.js","clsx-5ydLOnhV.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-pFDdfjRe.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BUGO5bPJ.js"]}