Docs · Quickstart

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.

shell
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
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"
Response · 201 Created
{
  "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
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.

Response · 200 OK (abridged)
{
  "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
curl "https://pulse.whizztech.ai/v1/calls?status=analyzed&queue=billing&limit=25" \
  -H "Authorization: Bearer $PULSE_KEY"