Audio in, insight out.
Key → upload → poll → result. One credit per call analyzed, refunded automatically if the analysis fails; the 14-day trial starts with 200 calls free.
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 PULSE_KEY="wz_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Upload a recording#
POST /v1/calls takes multipart/form-data — up to 25 audio files per request, 60MB each. Every field except files is optional: language_hint speeds up transcription when you know the language, queue tags the call for filtering, and agent_external_idlinks it to the agent's ID in your own systems. The Idempotency-Key header makes retries safe — replays return the original calls instead of uploading (and charging) twice.
curl -X POST https://pulse.whizztech.ai/v1/calls \
-H "Authorization: Bearer $PULSE_KEY" \
-H "Idempotency-Key: batch-2026-07-11-a" \
-F "files=@call-0932.mp3" \
-F "language_hint=ara" \
-F "queue=billing" \
-F "agent_external_id=agent-104"{
"calls": [
{
"id": "9f2c51b8-4a07-4e63-b1d8-72e0a5c93f14",
"job_id": "5b8f0d21-6a3e-4c97-b1d0-84e7f2a9c655",
"file_name": "call-0932.mp3",
"status": "uploaded",
"replayed": false
}
]
}Wait for the analysis#
The pipeline transcribes (diarized, word timestamps), redacts PII, analyzes, and scores the call — typically minutes. Poll GET /v1/calls/{id} with backoff until status is analyzed (or failed, which refunds the credit) — or skip polling entirely with a webhook.
curl https://pulse.whizztech.ai/v1/calls/9f2c51b8-4a07-4e63-b1d8-72e0a5c93f14 \
-H "Authorization: Bearer $PULSE_KEY"Read the result#
The same GET /v1/calls/{id} now carries everything: the diarized transcript, the analysis, and the QA scorecard. Every criterion score cites the transcript quote it was judged on — the analysis output is written in the language of the call.
{
"id": "9f2c51b8-4a07-4e63-b1d8-72e0a5c93f14",
"object": "call",
"status": "analyzed",
"file_name": "call-0932.mp3",
"duration_sec": 312.4,
"language": "ara",
"sentiment": "negative",
"qa_score": 71.5,
"csat_predicted": 2,
"escalation_risk": "high",
"queue": "billing",
"agent_id": "c3a91f70-…",
"transcript": {
"segments": [
{ "speaker": "customer", "start": 0.4, "end": 6.1, "text": "…" },
{ "speaker": "agent", "start": 6.3, "end": 11.8, "text": "…" }
],
"language_code": "ara",
"word_count": 843
},
"analysis": {
"summary": "Customer called about a double charge on this month's invoice…",
"topics": ["billing", "double charge", "refund"],
"pain_points": [
{ "issue": "Charged twice for the same invoice", "quote": "…" }
],
"agent_suggestions": [
{
"original": "That's just how the system works.",
"improved": "I can see why that's frustrating — let me check what happened and fix it now.",
"why": "Acknowledges the emotion and takes ownership instead of deflecting."
}
],
"escalation_risk": "high",
"churn_risk": "medium",
"compliance_flags": [
{ "rule": "Identity verification before account changes", "passed": true, "detail": "…" }
]
},
"qa": {
"overall_score": 71.5,
"verdict": "partial",
"needs_review": false,
"criterion_scores": [
{ "criterionId": "empathy", "name": "Empathy", "score": 55, "weight": 2, "passed": false, "reasoning": "…" }
],
"citations": [
{ "criterionId": "empathy", "quote": "That's just how the system works.", "start": 148.2, "end": 151.0, "speaker": "agent" }
]
}
}The full field reference — every transcript, analysis, and QA field — is on the Calls page.
Work the corpus#
GET /v1/calls lists calls newest-first with cursor pagination and filters for status, language, queue, and a created_after/created_before window:
curl "https://pulse.whizztech.ai/v1/calls?status=analyzed&queue=billing&limit=25" \
-H "Authorization: Bearer $PULSE_KEY"