Live agent in three calls.
Key → create an agent → publish → take or make calls. Voice bills per second after a 10-second minimum, at your language tier's all-in rate; every workspace starts with $5 of free credit and no card.
Get an API key#
Create a key at Dashboard → API Keys. The full key is displayed once at creation — only a SHA-256 hash is stored server-side, so copy it into your secret manager immediately.
export WHIZZ_KEY="wz_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Create an agent#
POST /v1/agents takes the persona and first message, the language set, and the dialect and voice. Setting languages to include ar routes the agent to the Dialect Engine automatically — you never name an engine or a vendor. The full field reference is on the Agents page.
curl -X POST https://voice.whizztech.ai/v1/agents \
-H "Authorization: Bearer $WHIZZ_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Support · AR/EN",
"languages": ["ar", "en"],
"dialect": "saudi",
"voice": "noura",
"first_message": "حياك الله في خدمة عملاء وِز، كيف أقدر أخدمك؟",
"persona": "Warm, concise support agent. Confirm the order before acting.",
"tools": ["lookup_order", "expedite_shipment"]
}'{
"id": "ag_7Q2c51b84a07",
"object": "agent",
"name": "Support · AR/EN",
"status": "draft",
"engine_route": "dialect",
"lang_tier": "arabic",
"languages": ["ar", "en"],
"dialect": "saudi",
"voice": "noura",
"published_version": 0,
"created_at": "2026-07-13T09:32:18.000Z"
}Publish and get the widget#
Publishing snapshots a version and syncs the agent to the live gateway. The response carries the web-widget embed — one script tag and the agent takes WebRTC calls in the browser, no phone number required. To take PSTN calls, attach a phone number.
curl -X POST https://voice.whizztech.ai/v1/agents/ag_7Q2c51b84a07/publish \
-H "Authorization: Bearer $WHIZZ_KEY"{
"id": "ag_7Q2c51b84a07",
"status": "published",
"published_version": 1,
"widget": {
"agent_id": "ag_7Q2c51b84a07",
"embed": "<script src=\"https://voice.whizztech.ai/w/ag_7Q2c51b84a07.js\" async></script>",
"connect_url": "wss://voice-gateway.whizztech.ai/rt/connect?agent=ag_7Q2c51b84a07"
}
}Place an outbound call#
With a number attached, POST /v1/calls dials out. Pass per-call varsto personalize the conversation; the agent speaks the caller's dialect and calls your tools mid-call. For many recipients, use a campaign instead.
curl -X POST https://voice.whizztech.ai/v1/calls \
-H "Authorization: Bearer $WHIZZ_KEY" \
-H "Content-Type: application/json" \
-d '{
"agent_id": "ag_7Q2c51b84a07",
"phone_number_id": "pn_5b8f0d21",
"to": "+9665XXXXXXXX",
"vars": { "name": "سلطان", "order": "49207" }
}'{
"id": "call_1d84c0e795b2",
"object": "call",
"agent_id": "ag_7Q2c51b84a07",
"direction": "outbound",
"status": "queued",
"to": "+9665XXXXXXXX",
"created_at": "2026-07-13T09:33:02.000Z"
}Read the result#
When the call ends you get the recording, the diarized transcript, the tools it called, and the outcome — pushed to your webhook as call.completed, or fetched with GET /v1/calls/{id}.
{
"id": "call_1d84c0e795b2",
"object": "call",
"status": "completed",
"direction": "outbound",
"duration_sec": 52.4,
"language": "ar",
"dialect": "saudi",
"outcome": "resolved",
"sentiment": "positive",
"recording_url": "https://…signed…",
"transcript": {
"segments": [
{ "speaker": "agent", "start": 0.4, "end": 4.8, "text": "حياك الله…" },
{ "speaker": "caller", "start": 5.1, "end": 9.7, "text": "…" }
]
},
"tool_calls": [
{ "name": "lookup_order", "args": { "id": "49207" }, "result": { "status": "in_transit" } },
{ "name": "expedite_shipment", "args": { "id": "49207" }, "result": { "ok": true } }
]
}