Build a contact-center QA program
This guide walks a supervisor through the whole Quality Management loop: you author a scorecard with weighted sections and a compliance gate, calibrate reviewers against each other before any score counts, grade calls and work the acknowledge/appeal lifecycle, then put agent effort on a leaderboard. Everything runs from the Quality section of the dashboard and the/api/v1/quality API.
Working knowledge of the Quality Management API helps — this guide is the narrative; that page is the endpoint reference.
Who sees what
The Quality surfaces are role-scoped on both the dashboard and the API:- Owner / admin — full program: author forms, score, calibrate, set workloads, read the org rollup and the full leaderboard.
- Supervisor — the same reviewer surface, scoped to the queues they supervise on the leaderboard (requesting a queue they do not supervise returns
403). - Agent — their own view only: the evaluations made about them (with acknowledge/appeal) and their own gamification card under Quality → Leaderboard.
1. Program shape
A working QA program has four moving parts, and each maps to one surface:- The rubric — an evaluation form: weighted sections, weighted criteria, and a
sample_rate_pctthat feeds the continuous auto-sampler (every 15 minutes; covers AI voice agents’ production calls as well as human agents’). Authored under Quality → Evaluations → Scorecards. - The reviewer queue — system-created pending rows (auto-sampled calls, AI auto-scored calls below your flag threshold) plus manual assignments land in Quality → Evaluations. Reviewers claim, correct, and resolve from there.
- Reviewer agreement — blind calibration sessions under Quality → Evaluations → Calibration measure how far reviewers (and the AI auto-scorer) drift from each other before scores reach agents.
- The agent-facing layer — the agent sees their own evaluations, acknowledges or appeals them, and watches their points and badges on Quality → Leaderboard, windowed by day, week, or month.
2. Author a form
Create the rubric under Quality → Evaluations → Scorecards, or over the API:- Weights are relative. Numbers normalize within each section and across the form —
weight: 2is simply twiceweight: 1, whether you think in percentages or points. auto_failis the compliance gate. Mark a sectionauto_fail: trueand any zero on one of its criteria forces the whole evaluation to0. Use it for identity verification, required disclosures, and similar non-negotiables — not for soft skills.sample_rate_pctdecides coverage.10means the continuous auto-sampler (every 15 minutes) queues a weighted share of each agent’s calls against this form as pending rows. Leave it0to keep the form manual-only.max_scoreper criterion defaults to100; reviewers submit a raw0..max_scorevalue per criterion and the server derives the0..100total. A client can never set the total directly.
3. Run calibration before scores go live
Calibrate before you grade for real: with a brand-new form, reviewers will each read the rubric differently, and a calibration session surfaces that disagreement while nothing is at stake. Open Quality → Evaluations → Calibration and start a session on one call against the form you just authored, inviting the reviewers who will score against it. Each invited reviewer scores the call blind — nobody can see another reviewer’s score (or the AI’s) until they submit their own, and a reviewer who has not submitted cannot open the report at all. Over the API:POST /calibrations/{id}/close) and put the form into live rotation.
Two properties make calibration safe to run liberally:
- Each reviewer submits once — a second attempt returns
409, so a session is a single blind snapshot per reviewer. - Calibration rows are practice data. They never feed the agent’s evaluation record, the ack/appeal flow, or the leaderboard.
4. Score and work the lifecycle
Live scoring happens under Quality → Evaluations. Rows arrive three ways: the auto-sampler (un-scored stubs fromsample_rate_pct), AI auto-scored rows (auto_scored: true, flagged below your tenant’s flag threshold), and manual assignments. A reviewer grades a call against the form by submitting the per-criterion scores map:
pending → acknowledgedorpending → appealed → resolved. Only the evaluated agent can acknowledge or appeal; an appeal requires anappeal_note; only a reviewer can resolve. Resolving closes the appeal — it does not regrade the score.- Auto-sampled rows are claimed, not edited. An un-scored sampler row is filled in with
POST /evaluations/{id}/claim-score; only apending, still-unclaimed auto-sampled row is eligible. - AI auto-scored rows are overridden, not rescored from scratch. A reviewer corrects one with
POST /evaluations/{id}/override; the corrected total is re-derived, the row is stamped with the reviewer, andflagged_for_reviewclears. - Listing is keyset-paginated — read
next_cursorand pass it back ascursor. Agents listing evaluations only ever see their own rows.
5. Workload and quotas
Once scoring is running, reviews need an owner or they sit unclaimed. Workload management — assigning a specific call to a specific evaluator, capping how many open reviews each evaluator holds, and tracking due dates — is covered in its own guide: QA workload management. Use it to turn the shared queue into named responsibility per evaluator.6. Gamification leaderboard
Quality → Leaderboard ranks agents on points and badges computed on demand from the QA, call, and CSAT data the platform already captures — no extra setup, no separate ingestion. Window the board with Today / This week / This month, or narrow it to a single voice queue for a team competition. Over the API:403 for anything else. An agent reading Quality → Leaderboard sees their own card (GET /quality/gamification/me) — points, badges, and rank — computed against the same default board, so an agent’s rank always matches what their supervisor sees.
Before adopting a new rewards scheme, pass point_rules or badge_definitions in the leaderboard body to preview a tuned ruleset against live data, and compare it against the defaults from GET /quality/gamification/config.
End-to-end sequence
Putting it together, a minimal program in API calls:POST /evaluation-forms— author the rubric with weights, oneauto_failsection, and a startingsample_rate_pct.POST /calibrations→ each reviewerPOST /calibrations/{id}/scores→GET /calibrations/{id}/report→POST /calibrations/{id}/close— calibrate until variance is small.- Reviewers grade live work:
POST /evaluationsfor manual reviews;POST /evaluations/{id}/claim-scorefor sampler rows;POST /evaluations/{id}/overridefor flagged AI rows. - The agent reacts:
POST /evaluations/{id}/acknowledge, orPOST /evaluations/{id}/appeal→ reviewerPOST /evaluations/{id}/resolve. POST /gamification/leaderboard— read the week’s board; the agent checks their own card withGET /gamification/me.
See also
- Quality Management API — full endpoint reference for every call above
- QA workload management — assignments, quotas, and due dates
- Train agents with AI roleplay in Practice Studio — the before-call side: agents rehearse against an AI customer
- Error codes —
409state conflicts and422 VALIDATION_ERRORshapes