Documentation menu
Build an agent
Tools
A tool is an HTTP call an agent makes — your own endpoint, or an already-connected integration — at a point in the call you choose.
The three hooks
Every tool runs at exactly one of three points, and each has a very different latency budget:
- on_start
- Before the opening line. The caller hears silence while it runs, so it's capped hard (5s) and a failure is swallowed rather than stalling the greeting.
- during_call
- Offered to the model as something it may call mid-turn — it decides whether and when. The caller is waiting, so this hook has the tightest cap (8s).
- on_end
- After the call is over. Nobody is waiting, so it can take longer (20s) and gets retried once on a transient failure.
Custom HTTP tools
Point a tool at any URL — your own backend, or a third-party API directly — with a method, headers, and (for non-GET requests) a JSON body template:
{
"phone": "{{lead.phone}}",
"name": "{{lead.name}}",
"order_id": "{{args.orderId}}"
}Every field is rendered through the same placeholders before the request is sent: {{lead.name}}, {{lead.phone}}, {{agent.name}}, {{call.id}}, and — for an on_end tool only, since they don’t exist until the call is over — {{call.transcript}}, {{call.summary}}, {{call.duration}}.
Parameters, for during_call tools
A during_call tool can declare arguments the model works out from the conversation and supplies when it calls the tool — available in templates as {{args.yourName}}.
namestringrequiredWhat the model calls it by — lowercase, no spaces.
descriptionstringWhat it does. On during_call tools, this is what the model reads to decide whether to use it — be specific.
when'on_start' | 'during_call' | 'on_end'Which hook it runs on.
method'GET' | 'POST' | 'PUT' | 'PATCH'urlstringrequiredAny http(s) address — your own endpoint or a third-party API.
headersarrayKey/value pairs. Values are never returned to the dashboard once saved.
bodyTemplatestringJSON, with placeholders. Ignored for GET.
timeoutMsnumberClamped to the hook's own ceiling regardless of what's asked for.
Integration tools
Anything already connected in Settings — Google Sheets, Google Calendar, Slack, HubSpot — can be added as a tool with one click and nothing to configure: no endpoint, no API key to paste, since it reuses the credentials from that connection.
How during_call tools actually run
On the Deepgram Voice Agent engine, tools are offered to the model as real functions and it calls one natively. On classic and Sarvam, which drive a plain chat model with no function-calling channel, the model is told about each tool and asked to emit a tag in its reply — the tag is never spoken, the backend runs the tool, and the model gets the result back for a follow-up reply in the same turn. Either way, the behaviour from the caller’s side is identical: a short holding phrase, then the answer.
search_knowledge_base — with nothing to configure. See Knowledge base.Safety
- Every URL is checked against private and link-local address ranges before the request goes out, so a tool can never be pointed at your own internal network.
- Responses are capped at 512KB and truncated before being handed to the model.
- A tool never throws into the call — a down endpoint returns a short failure string the model can read out or work around, and gets retried once if the failure looks transient.