Docs / References
Voice Agents — agent-api reference
Voice agents are a separate system from recommendation agents. They run on ElevenLabs Conversational AI for inbound + outbound phone calls. The public agent surface is for autonomous internal agents (those that own an AGOS API key) — not for arbitrary external callers.
When to use this
- An autonomous agent (with an AGOS Bearer key + voice scopes) needs to programmatically build/configure a voice agent
- That agent needs to attach phone numbers, knowledge base entries, or tools (Calendly, custom webhooks)
- That agent needs to launch outbound campaigns (subject to human approval gates)
- That agent needs to monitor calls (transcripts, recordings, conversion outcomes)
If you're an external agent looking for product recommendations, use the Recommendation Agent surface instead — that's the public, anonymous-callable layer.
Auth
Authorization: Bearer agos_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
API keys are minted in the AgilityOS dashboard at Settings → Agent Keys. Each key has scopes + an agentId (for ownership isolation) — see Authentication for the human-tier system.
Required scopes
| Scope | Grants |
|---|---|
voice:read |
List/read agents, voices, phone numbers, conversations, KB, tools, campaigns |
voice:write |
CRUD agents, KB, tools, env vars; attach existing phone numbers |
voice:campaign:write |
Create campaigns, load contacts |
voice:campaign:execute |
Request start/pause/stop (queues for human approval) |
voice:read:all |
Cross-owner read (for ops/audit agents) |
Endpoints (28 total)
Agents
GET /api/agent-api/voice/agents— list (filtered by ownerAgentId)GET /api/agent-api/voice/agents/:id— readPOST /api/agent-api/voice/agents— createPATCH /api/agent-api/voice/agents/:id— updateDELETE /api/agent-api/voice/agents/:id— delete
Voices + phone numbers
GET /api/agent-api/voice/voices— EL voice libraryGET /api/agent-api/voice/phone-numbers— owned Twilio numbersPOST /api/agent-api/voice/agents/:id/phone— attach existing phone
Knowledge base
GET /api/agent-api/voice/knowledge— list KB documentsPOST /api/agent-api/voice/knowledge/text— add text docPOST /api/agent-api/voice/knowledge/url— add URL docDELETE /api/agent-api/voice/knowledge/:docId— deletePATCH /api/agent-api/voice/agents/:id/knowledge— attach to agent
Per-agent env vars + tools
GET /api/agent-api/voice/agents/:id/env-vars— list keysPUT /api/agent-api/voice/agents/:id/env-vars/:name— set valueDELETE /api/agent-api/voice/agents/:id/env-vars/:name— deleteGET /api/agent-api/voice/agents/:id/tools— list attached toolsPOST /api/agent-api/voice/agents/:id/tools/calendly— attach Calendly presetPOST /api/agent-api/voice/agents/:id/tools— attach custom webhook toolDELETE /api/agent-api/voice/agents/:id/tools/:name— detach
Conversations
GET /api/agent-api/voice/agents/:id/conversations— listGET /api/agent-api/voice/conversations/:id— read
Campaigns + execution
GET /api/agent-api/voice/campaigns— list (owner-scoped)GET /api/agent-api/voice/campaigns/:id— readPOST /api/agent-api/voice/campaigns— createPOST /api/agent-api/voice/campaigns/:id/contacts— load contacts (max 5000/call)GET /api/agent-api/voice/campaigns/:id/contacts— list contactsPOST /api/agent-api/voice/campaigns/:id/(start|pause|stop)— request action (human-gated)GET /api/agent-api/voice/actions/:id— poll action status
Human-approval queue
Calls to start/pause/stop do not execute immediately. They insert a row in va_campaign_actions with status: 'awaiting_approval'. A human reviews and approves in the dashboard at /voice-approvals. On approval, the EL batch call fires for start; the campaign is paused/stopped for the others.
This is the security spine: no autonomous agent can place real outbound calls without human gating.
Carve-outs (NOT exposed to autonomous agents)
| Capability | Why excluded |
|---|---|
| Twilio number provisioning | Spends money — UI/human only |
| Voice settings (account-level credentials) | Secrets — UI/human only |
See also
- Quickstart
- Authentication
- Recommendation Agents — for the public agent-callable surface