> Source: https://docs.virtuo.in/vio/agents/tools > Give your Vio voice agent actions it can call mid-call — custom webhook tools, built-in presets like schedule a callback, and integration tools. # Tools **Tools are actions your Vio agent can call in the middle of a conversation — looking up an order, creating a ticket, checking availability, or booking a demo — and then speaking the result back to the caller.** You build tools once in the Tools view, then enable only the ones each agent needs from that agent's Tools tab. ## The three kinds of tool ### Custom webhook tool You give Vio a **URL**, a **request method**, and a **signing secret**. When the agent decides to call the tool, Vio sends the tool arguments to your endpoint, waits for your response, and speaks the result back to the caller. Use it to: - Look up an order or account status - Create a support ticket - Check availability for a slot - Book a demo or appointment This is the bridge to your own systems, and it pairs well with no-code automation platforms like Zapier, Make, or n8n — point the webhook at a flow and the agent can trigger it live on a call. #### POST or GET Pick whichever your backend accepts, in **Request method** on the tool: | Method | How the arguments arrive | Choose it when | |---|---|---| | **POST** (default) | A JSON body: `{ tool, tenantId, callId, callerNumber, arguments }`. Your values are under `arguments`. | Your endpoint accepts JSON. This is the default and what every existing tool uses. | | **GET** | Query-string parameters — one per argument, named exactly as your schema names them. Call details arrive as `X-Vio-Tool`, `X-Vio-Tenant-Id`, `X-Vio-Call-Id` and `X-Vio-Caller-Number` headers. | Your platform only exposes read-style GET endpoints. | On GET, arguments that are objects or arrays are JSON-encoded into their parameter, and any query parameters already on your URL are kept. Very large arguments will not fit in a URL — use POST for those. Switching an existing tool between the two changes only how the arguments travel. The schema you authored, the secret, and the agents using it are untouched. ### Built-in / preset tools One-click, first-party tools you can turn on without any code: | Tool | What the agent can do | |---|---| | **Schedule a callback** | Book its own future call with the caller. Powers [**Callbacks**](/vio/telephony/callbacks). | | **Check availability** | Find appointment times that are genuinely free, so it offers real options instead of guessing. | | **Book appointment** | Book a real meeting during the call. See [**Appointments**](/vio/telephony/appointments). | | **Look up the knowledge base** | Search your uploaded documents to answer factual questions — prices, hours, policies — instead of guessing. | | **Send an email** | Email the caller or your own team mid-call: a confirmation, details they asked for, an internal heads-up. | | **Echo** | A diagnostic that returns whatever it was given. Handy for confirming tool-calling works at all. | **Attach "Check availability" and "Book appointment" together.** An agent with only the booking tool will try to book without first knowing what is free. And neither does anything until that agent has [**booking hours**](/vio/telephony/appointments) — with none set, it declines every request. **"Send an email" picks an audience, never an address.** The agent chooses *who* — the caller, or your team — and Vio resolves the actual address server-side from your settings. It cannot be talked into emailing an arbitrary third party, and it will ask the caller for their address rather than inventing one. ### Integration tools Actions exposed by connected [**Integrations**](/vio/features). When you connect a service, its actions become tools the agent can call. Some connectors are in beta or coming soon. | Kind | You provide | Best for | |---|---|---| | **Custom webhook** | A URL + signing secret | Anything in your own stack; Zapier / Make / n8n flows | | **Built-in / preset** | Nothing — one click | Callbacks, appointments, knowledge-base lookup, email | | **Integration** | A connected account | Actions from services you've linked | ## How to add a tool to an agent ### Build the tool In the **Tools view**, create the tool — for a webhook tool, enter its URL and signing secret. This defines the tool once for your whole workspace. ### Enable it on the agent Open the agent, go to its **Tools tab**, and enable the tools that agent should have. Each agent only gets the tools you switch on, so a support agent and a sales agent can carry different toolsets. ### Test it Place a test call and prompt the scenario that should trigger the tool. Confirm the agent calls it and speaks back the result. See [**Test your agent**](/vio/getting-started/test-your-agent). Reference a tool in your system prompt if you want to nudge *when* the agent uses it — e.g. "When the caller gives an order number, use the order-lookup tool before answering." ## Frequently asked **Q. How do I secure my webhook tool?** Each custom webhook tool has a **signing secret**. Verify the signature on the incoming request at your endpoint so you know it genuinely came from Vio and not a spoofed caller. Vio sends `X-Vio-Signature` (`sha256=`) and `X-Vio-Timestamp`. Recompute it as an HMAC-SHA256 over `.` using your secret, where the payload is **the raw JSON body on POST** and **the raw query string on GET** — everything after the `?`, exactly as you received it, with no re-ordering. The timestamp lets you reject replays outside a window you choose. **Q. Does a failing tool drop the call?** No. If a tool errors or times out, the agent degrades gracefully — it tells the caller it couldn't complete that step and continues the conversation. A broken webhook never hangs up the line. **Q. Why enable tools per agent instead of globally?** So each agent carries only what its job needs. Building in the Tools view and enabling per agent keeps a support agent from accidentally exposing a sales-only action, and vice versa. **Q. Can the agent book its own follow-up call?** Yes — enable the **Schedule a callback** preset tool. The agent can then book a future call with the caller, which runs through [**Callbacks**](/vio/telephony/callbacks). ## Next Score and route what happens after the call in [**Analysis, actions & fulfilment**](/vio/agents/analysis-actions-fulfilment), or tune call behaviour in [**Advanced settings**](/vio/agents/advanced).