> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# QA workload management: assign evaluations, quotas and due dates

> Hand a specific call to a specific QA evaluator, cap how many open reviews each evaluator holds, and track every assignment against a due-date window from the dashboard or the API.

# 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:

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/quality/evaluations/assign \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "form_id": "form_qa_support",
    "agent_id": "user_agent_12",
    "call_id": "call_9f2c",
    "assignee_id": "user_evaluator_7"
  }'
```

The assignment is open — pending and unscored — until the evaluator submits real scores through the normal grading flow. Two assignments for the same call return `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:

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/quality/evaluations/eval_abc123/reassign \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "assignee_id": "user_evaluator_3" }'
```

Once a score is submitted the assignment locks: reassigning it returns `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 returns `409 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 as `qa_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:

```bash theme={null}
curl "https://api.orbit.devotel.io/api/v1/quality/evaluations/workload" \
  -H "X-API-Key: dv_live_sk_your_key_here"
```

The response carries the tenant's resolved `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.

## Endpoints

| Method | Path                                        | Purpose                                                            |
| ------ | ------------------------------------------- | ------------------------------------------------------------------ |
| `POST` | `/api/v1/quality/evaluations/assign`        | Hand a call to a specific evaluator (quota-checked)                |
| `POST` | `/api/v1/quality/evaluations/{id}/reassign` | Move an open assignment to a different evaluator                   |
| `GET`  | `/api/v1/quality/evaluations/workload`      | Per-evaluator open count, quota, remaining capacity, overdue count |

## See also

* [Quality API reference](/api-reference/quality) — scores, calibration sessions, and the scorecard pipeline these assignments feed into
* [Team chat](/guides/team-chat) — coordinate a review queue rebalance with your QA leads
