Skip to main content
When your agent invokes a custom tool during a call, Verbeo sends an HTTP request to the tool’s configured endpoint_url. Create and manage tools in the dashboard or with the Tools API. This is distinct from the call lifecycle events that go to the agent’s webhookUrl — tool call requests go directly to the tool’s own endpoint, and your server must respond within the tool’s timeout (default 30 seconds, configurable from 5 to 300) with a result that is fed back to the agent in real time.

How tool calls work

During a live conversation, when the agent decides to use a tool, Verbeo:
  1. Extracts the tool arguments from the conversation context according to the tool’s JSON Schema.
  2. Sends an HTTP request to the tool’s endpoint_url using the configured HTTP method.
  3. Waits up to the tool’s timeout (default 30 seconds) for your server to respond.
  4. Passes your response back to the agent as the tool result, which the agent uses to continue the conversation.
Your tool endpoint must respond within the tool’s timeout (default 30 seconds). If it does not, the tool call times out and the agent receives an error result. Design your tool handlers to be fast — fetch only what you need and avoid blocking operations. On Gemini 3.8 Live, set slow tools to Keep talking so the caller can keep talking to the agent while your endpoint works (see Connect your backend with custom tools).
Tools set to Keep talking (Gemini 3.8 Live):
  • A request still running when the call ends is allowed to finish, up to the tool’s timeout and at most 30 seconds after the call.
  • With Don’t say it, the agent confirms the request before your endpoint answers, and your response is never spoken, success or failure.
  • When the caller corrects or adds a detail mid-request, your endpoint receives both requests, and both are completed.

Request format

The HTTP method is configured per tool: GET or POST. A POST request receives a JSON body. A GET request receives the arguments as URL query parameters.

POST body

The body uses the same top-level envelope as the lifecycle events (event, call_id, agent_id, timestamp), with the tool name, arguments, and live call context nested under payload.

GET request

For GET tools, arguments are flattened into the query string. No call metadata or args wrapper is included in the request.
Use POST if your tool handler needs access to call metadata such as the caller’s number, dynamic variables, or the live transcript.

Request fields

string
required
Always "tool_invoked".
string
required
Verbeo UUID for this call. Correlate it with the call’s lifecycle events.
string
required
UUID of the agent invoking the tool.
string
required
ISO 8601 timestamp of when the tool was invoked.
object
required
The tool invocation and live call context.

Responding to tool calls

Your endpoint must return an HTTP 2xx status code and a JSON body within the tool’s timeout. The response body is passed directly back to the agent as the tool result. You can return a plain string result or any JSON object:
The agent reads your response verbatim as the tool result and uses it to construct its next utterance. Prefer natural-language-friendly responses over raw data structures. A message like "Appointment confirmed for April 18 at 11 AM" leads to a more natural conversation than a raw JSON blob.

Implementation example

Accessing dynamic variables

Use payload.call.dynamic_variables to access any variables that were set when the call was initiated, giving your tool full context about the caller:

Differences from lifecycle events