QA workload management
Quality management gives you scorecards, calibration sessions, and a continuous auto-sampler (every 15 minutes) that drops calls into a shared queue. Workload management sits on top of that: instead of leaving every review up for grabs, a supervisor can say who reviews what, cap how much unfinished work any one evaluator can hold, and see who is falling behind — before it becomes a backlog. It works from the Quality → Evaluations → Workload tab in the dashboard and through the API. Everything here is reviewer-scoped: organization members with an owner or admin role. Agents never see the workload view; they only see their own scores.Assign a call to a specific evaluator
From the dashboard, open Quality → Evaluations → Workload and click Assign evaluation — pick an active scorecard and the evaluator, and the assignment lands as pending on their queue. Over the API:409 ALREADY_ASSIGNED; the continuous auto-sampler and CSAT-triggered reviews coexist with manual ones and can claim the same scoring form afterward.
Rebalance an open assignment
Any pending, unscored assignment can be moved to a different evaluator — from the Reassign action on the Evaluations tab, or via the API:409 INVALID_STATE, because a scored review has an audit trail an evaluator owns. Self-evaluations and system-generated rows (the auto-sampler’s unclaimed stubs, CSAT-triggered and AI auto-scored rows) are never reassignable.
Per-evaluator quotas
Each evaluator has a cap on open (assigned-but-unscored) work — 25 by default. Assigning to an evaluator already at cap returns409 QUOTA_EXCEEDED with the server’s message, and the dashboard picker pre-disables full evaluators so you find out before submitting. Tune the cap per organization through your workspace settings (the General settings surface) under qa_evaluation_assignment.max_open_per_evaluator; the change applies immediately to every existing and future assignment.
Due dates
Every assignment carries a due date: its creation time plus your review window — 3 days by default, tunable per organization asqa_evaluation_assignment.due_days. The due date is derived on every read rather than stored, so changing the window re-buckets overdue counts immediately and you never backfill a column.
See everyone’s workload
The Workload tab lists every eligible evaluator with their open count against the quota, remaining capacity, and how many of their open assignments have passed the due-date window. Over the API:due_days and max_open_per_evaluator plus an items[] row per evaluator (open_count, overdue_count, quota, remaining). Add ?evaluator_id=user_... to narrow to one evaluator.
Permissions: who can do what
All three workload endpoints sit behind reviewer scope — an organization member with the owner, admin, or supervisor role, using an API key withinbox:read (the workload list) or inbox:write (assign and reassign) scope.
Agents never see the workload view either way — they only ever see their own scores.
Common errors
Every endpoint returns the same error envelope —error.code is stable to check programmatically, error.message is human text, and meta.request_id is the support handle. Quote error.code, never the message, in automation.
Reassigning onto the current reviewer is an idempotent no-op: it returns
200 with the unchanged assignment and consumes no quota headroom.
End to end: assign → reassign → audit
This sequence takes one call from triage to a rebalance, with the response envelope you get back at each step. Assumedue_days is 3 and the quota is the default 25.
1. Assign the call to evaluator 7.
201:
quality.evaluation_assigned entry with the form, agent, call, and assignee ids — visible from Settings → Audit log.
2. Evaluator 7 goes on leave, so move the open assignment to evaluator 3.
200:
due_at and created_at. The due date anchors to the original assignment time, so a reassign near the window edge can land on the new evaluator already overdue — check due_at in the response before assuming fresh time. The audit log records quality.evaluation_reassigned with the from- and to-reviewer ids.
3. Verify the audit trail.
Both steps wrote audit entries under Settings → Audit log (quality.evaluation_assigned, then quality.evaluation_reassigned), and the reassign response confirms the new holder. Once evaluator 3 submits scores, the row locks and further reassign attempts return 409 INVALID_STATE.
Capacity planning from the workload endpoint
UseGET /workload as a headroom report, not just a board. The worked sample below assumes the default quota of 25 and due_days of 3.
- Headroom is
remaining— here evaluator 3 has 3 slots, evaluator 7 has 19. Route new assignments to the highest-remainingevaluator and409 QUOTA_EXCEEDEDnever fires. - Overdue share is
overdue_count / open_count— 14/22 for evaluator 3 means most of their queue is stale. Do not deduct overdue work from headroom; whenoverdue_countis high, prefer a reassign sweep onto idle evaluators over raising the quota, because a bigger cap on a stale queue just grows the staleness. - Branch on overdue: if an evaluator’s
overdue_countexceeds half theiropen_count, treat theirremainingas unusable until the backlog clears; if every evaluator is overdue-heavy, raisingdue_daysis not the fix — increase reviewer count or lower the auto-sampler’s inflow. - Tenant config in the envelope:
due_daysandmax_open_per_evaluatorride along on every response, so your planner never hard-codes the defaults and re-buckets automatically when you retune the settings.
Dashboard vs API parity
The dashboard and the API expose the same underlying operations, but not every control exists on both sides. Plan the API for scheduling and reporting, the UI for point-and-click judgement calls.
Self-evaluations and system-generated rows (auto-sampler stubs, CSAT-triggered, AI auto-scored) appear in the workload counts but are never reassignable from either surface.
Endpoints
See also
- Quality API reference — scores, calibration sessions, and the scorecard pipeline these assignments feed into
- Team chat — coordinate a review queue rebalance with your QA leads