Skip to main content
This guide takes you from an existing text agent to a working phone agent in three steps.

Prerequisites

  • The Voice Agents feature enabled for your team. Voice endpoints return 403 until it is.
  • A sender with an AI agent configured. See AI Agent Setup.
  • A phone number assigned to that sender (required for inbound calls). See Purchasing Phone Numbers.
Voice calls run against live infrastructure and are not available with test-mode API keys. Use a zv_live_ key.

Step 1 — Enable Voice on the Agent

Voice is a property of the agent. Patch the agent with a voice object to turn it on and set a greeting.
The agent keeps its existing provider, model, system prompt, tools, and knowledge bases. Voice only adds how it behaves on a call.

Step 2 — Place an Outbound Call

Call POST /v1/calls with the recipient’s number. Zavu dials them, and the agent takes over when they answer.
The response is 202 with the call in queued or ringing status. senderId is optional — the project’s default sender is used when omitted.

Step 3 — Receive Inbound Calls

Inbound calls need no extra code. When someone dials a phone number assigned to the sender, Zavu answers with the voice agent automatically. To set it up:
  1. Assign a phone number to the sender (see Purchasing Phone Numbers).
  2. Confirm the sender’s agent has voice.enabled set to true (Step 1).
  3. Call the number. The agent answers with its greeting and holds the conversation.

Read the Call and Transcript

Retrieve a call to read its outcome and full transcript. The transcript is a list of turns in order.
To stop a call in progress, hang up:

Next Steps

Configuration

Voicemail handling, call transfer, and limits

Webhooks

Get notified when calls start and end