Quickstart
You're building a product — let's call it AcmeCallAI — and you want voice-AI calling underneath. ZazaVoice provides the calling infrastructure; your customers see your brand. This page gets your first programmatic call out the door in about 5 minutes.
The flow:
1. Sign up + buy a number (one-time, in the dashboard)
2. Create a voice agent (one-time, in the dashboard)
3. Generate an API key
4. Dispatch a call via curl
5. Receive the result via webhook
1. Sign up + buy a number
Sign up at https://zazavoice.com, add a payment method, buy a phone number. Numbers are typically active within a minute. See Phone numbers for the buying flow.
For development you can stay on the Trial (27 free minutes) or top up a PAYG wallet with $10 — same API behaviour, no monthly commitment.
2. Create a voice agent
Dashboard → Voice Agents → Create Agent. Pick a personality, a voice,
write a short system prompt describing the agent's job. See
Voice agents for the configuration
fields. Note the agent's ID from the URL bar (/dashboard/agents/<ID>)
or the API in step 4.
3. Generate an API key
Dashboard → Settings → API Keys → Create key.
Give it a descriptive name (e.g. acmecallai-prod). The plaintext key
is shown exactly once — copy it into your secret store immediately.
Keys are prefixed zaza_ so they're easy to spot in logs.
Keys are scoped to your organization. They authenticate every /v1/*
call.
4. Dispatch your first call
curl -X POST https://zazavoice-api-569199843054.us-central1.run.app/api/v1/calls/outbound \
-H "Authorization: Bearer zaza_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"fromNumber": "+14155550100",
"toNumber": "+14155550199",
"agentId": 12
}'
Response:
{
"callId": 3401,
"callSid": "CA7d23f…",
"status": "queued",
"from": "+14155550100",
"to": "+14155550199"
}
The call rings within a few seconds. The AI handles the conversation
using the agent's prompt + voice. When the call ends, you'll receive a
call.completed webhook (next step).
Same call from Node:
await fetch(`${ZAZAVOICE_API}/v1/calls/outbound`, { method: 'POST', headers: { Authorization: `Bearer ${process.env.ZAZAVOICE_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ fromNumber, toNumber, agentId: 12 }), });
5. Receive the result via webhook
Dashboard → Settings → Webhooks → New endpoint. Provide:
- URL — your HTTPS endpoint (e.g.
https://api.acmecallai.com/zazavoice-webhooks). - Events —
call.completed,call.failed. (Also available:call.started,campaign.lead.updated,sms.received,appointment.created.)
On save you'll get a signing secret (whsec_…). Store it server-side.
Your endpoint receives POSTs like:
{
"event": "call.completed",
"data": {
"callId": 3401,
"duration": 42,
"disposition": "INTERESTED",
"transcript": "…"
},
"timestamp": "2026-05-21T15:30:00Z"
}
Always verify the X-ZazaVoice-Signature header before trusting the
payload — see Webhooks for the HMAC-SHA256 code in Node
and Python.
You're integrated
That's the whole loop: configure agents + numbers once in the dashboard, dispatch calls programmatically, react to outcomes via webhooks. Your customers see whatever brand you put around it; ZazaVoice runs the calling under the hood.
What to read next
- API reference — every endpoint, params, error shape.
- Webhooks — event types, signature verification, retry behaviour.
- Capabilities & limits — honest list of what the API supports today and what's not yet in scope.