Skip to main content
POST
Create custom tool
Adds a custom tool to an assistant and appends its id to the assistant’s config.toolIds, so the assistant can use it on its next call. When the assistant calls the tool, Verbeo sends the arguments to your endpoint_url: see Tool call webhooks for the request your endpoint receives and the answer it gives.

Body

string
required
UUID of the assistant the tool belongs to.
string
required
The name the model calls the tool by. Trimmed, then 1–64 characters: a letter or an underscore first, then letters, digits and underscores only, e.g. lookup_order. Unique within the assistant. end_call, send_sms, transfer_call and report_voicemail are reserved for built-in tools.
string | null
What the model is told about the tool. Say when to use it: “Call this when the caller asks where their order is.” The model decides from this whether to call the tool at all.
string
required
Your endpoint: a full https:// (or http://) URL. It is returned as you send it, so put credentials in headers, not in the URL.
string
required
GET or POST, in any case; it is stored upper-case. A GET sends the arguments as a query string, a POST as a JSON body with the call’s context.
object
default:"{}"
Header names and their string values, sent with every request to your endpoint: an Authorization key, say. Responses show every value as "********". A value of "********" is refused here, since a new tool has no saved value for it to stand for.
object | null
The JSON Schema of the arguments the model fills in from the conversation. null or {}: the tool takes no arguments. Otherwise:
  • It needs a properties object, each key a parameter name: a letter or an underscore first, then letters, digits and underscores.
  • required, if present, lists parameter names.
  • const, oneOf, anyOf, allOf, not, $ref, if, then and else are not supported, in a parameter, a nested object’s properties or an array’s items. For a fixed value, use enum with one value.
number
default:"30"
How long Verbeo waits for your endpoint to answer: a whole number of seconds, from 5 to 300.
string | null
default:"blocking"
blocking: the assistant waits for your answer. non_blocking: the assistant keeps talking while your endpoint works. null is the default.
string | null
default:"when_idle"
Only with tool_behavior: "non_blocking". when_idle: the assistant gives your result once it has finished talking. silent: the assistant confirms the request at once and never announces the result, but can use it if the caller asks. null is the default.
tool_behavior and result_scheduling take effect on assistants that run Gemini 3.8 Live; other models ignore them. See While the tool runs. Fields that are not a custom tool’s are ignored, is_native and a native tool’s settings among them.

Request

Response

201 Created with the new tool object. The header you sent comes back as "********".

Errors

Nothing is left behind when a request fails: if the assistant’s toolIds cannot be updated, the tool is removed again.