Phone calls your app can place, hear and join
AgentVoice is the calling backend for apps. An AI agent speaks with a natural voice, your app reads the transcript as it happens, and a person can listen in, barge in or take over.
import { AgentVoice } from "@agentvoice/sdk";
const av = new AgentVoice({ apiKey: process.env.AGENTVOICE_API_KEY });
const call = await av.calls.createAndFollow(
{
line_id: "lin_main",
to: "+15615550123",
brief: {
goal: "Confirm the appointment on Friday at 3 PM, or move it to the next free slot.",
business: { name: "Palm Dental" },
limits: { refuse: ["pay a deposit"], may_commit_unattended: false },
},
},
{
onPartial: (p) => process.stdout.write(`\r${p.role}: ${p.text}`),
onTurn: (t) => console.log(`\n${t.role}: ${t.text}`),
},
);
console.log(call.outcome?.summary);- Natural ElevenLabs voices
- Real numbers over VoIP.ms
- SMS and MMS on the same line
- Android phone as a gateway
A voice agent is more than a voice
Calls need numbers, turn taking, interruptions, menus to navigate and a way for a person to step in when the agent should not go on alone. AgentVoice runs all of that, so your app sends a brief and reads the outcome.
Yourappplacesthecall.Anagenttalks.Apersoncanstepinatanymoment.
Built for calls that matter
Listen in from the portal
Open the live console for any call. You hear both sides, see the transcript as the words arrive, and the callee never knows you are there.
Take over and hand back
Barge in with your microphone. Take over to silence the agent, then hand the call back.
Whisper and say
Give the agent new context mid call, or make it say an exact sentence.
Tools that call your code
Define a tool with a JSON schema. The agent calls it in the middle of a sentence, your app answers, and the call goes on.
See how it works for developersOne request starts a call
Place the call
Send a line, a number to dial and a brief. The agent calls, speaks with a natural voice and follows your limits.
Follow it live
Turns and partial words stream to your app over WebSocket, SSE or signed webhooks. Open the console and listen in.
Step in or take the result
Whisper to the agent, barge in, or take over and hand back. When the call ends you get the outcome and the recording.
curl https://agentvoice.top/v1/calls \
-H "Authorization: Bearer $AGENTVOICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"line_id": "lin_main",
"to": "+15615550123",
"brief": { "goal": "Confirm Friday at 3 PM" }
}'Questions people ask first
What do I need to place a call?
An API key, a line and a brief. A line is a phone number from VoIP.ms or an Android phone paired as a gateway. The brief says what the call is for and what the agent must refuse.
Can a person join a call?
Yes. Listen in without being heard, barge in with your microphone, or take over so the agent goes quiet. Hand back when you are done. The console in the portal does all three.
How do I handle incoming calls?
Pick a policy per line: the agent answers, the call forwards, or your app decides. With decide, your app gets a call.incoming event and answers within a few seconds.
Can the agent call my own code?
Yes. Create a tool with a JSON schema. When the agent calls it, your app gets an event and posts the result back. A timeout keeps the call moving if your app is slow.
What about texts?
Each line can send and receive SMS and MMS. Inbound messages arrive as events and show in the portal inbox.
Is there a price?
Usage is metered per day in call minutes, messages and numbers, and shown in the portal. An administrator sets the prices and approves each account.
You decide what the agent may say and what it may keep
Set limits in every brief, choose whether audio is recorded, and set how many days recordings stay. An administrator approves each new account.
Get an API key