Workforce-management workflows
Workforce management (WFM) is the planning side of a contact center: forecasts, shifts, and schedules set out when each agent should be working on which activity; adherence scoring measures whether they did; and the correction workflows — adherence exceptions, open shifts, overtime and VTO offers, approval queues — handle the day-to-day drift between the two. Everything in WFM is tenant-side and two-sided. Managers build schedules, publish coverage, approve or deny agent submissions, and read the rollups; agents file exception requests, bid on open shifts, claim overtime or voluntary time off, and see the schedule that comes back. The same split holds on the API: reads and agent self-serve writes are available to all roles (scoped to the caller’s own records when they are not a manager), while management writes — publishing offers, awarding, approving, denying — require theowner or admin role.
On the dashboard, WFM lives under Voice → Scheduling (open shifts, overtime, VTO, assignments, forecasts, the approval queue) with adherence reporting under Quality. The full endpoint inventory is on the WFM API page — this guide is the narrative; that page is the reference.
1. Prerequisites
Before any of these workflows report truthfully:- Schedules exist. Build shift templates and assign agents to them (the Assignments tab under Voice → Scheduling, or
POST /api/v1/wfm/assignments). Adherence is measured against scheduled activities — with no schedule there is nothing to stick to. - Agent state feeds are live. Adherence compares the schedule against what agents actually do in the ACD: online, on a call, on break, in training, logged out. Those states come from the agent activity (aux code) feeds — if agents never set their aux state in the dialer or inbox, adherence reads as zeros and every exception trend is noise.
- API access with the right scopes. Create an API key with
wfm:readfor dashboards and reports,wfm:read+wfm:writefor anything that publishes, awards, approves, or denies. All data is scoped to the calling tenant; validation failures return422with aVALIDATION_ERRORbody.
2. Read and resolve adherence exceptions
Schedule adherence punishes agents for deviations they had no control over: a dialer outage, an all-hands meeting, unplanned coaching. An adherence exception is a filed carve-out — while approved, those minutes stop counting as non-adherent. An agent (or a manager on their behalf) files one inpending:
exception_type is one of system_outage, emergency_meeting, unplanned_coaching, approved_absence, training, or other. A manager then lists the pending queue (filters: agent_id, status, exception_type, from, to) and decides each row:
pending rows can be approved or denied (a second decision returns 409), and only the requester — or a manager — can cancel a still-pending row with POST /adherence-exceptions/{id}/cancel. Non-manager callers only ever see their own exceptions on every list and trend call. On the dashboard, this whole queue is the adherence panel under Quality.
3. Track trends for a manager dashboard
Individual decisions are only half the job — a supervisor also needs to know whethersystem_outage carve-outs are climbing or one team’s approved_absence volume is out of line. The trends endpoint returns counts and excused seconds grouped by exception type and status over a date window, which is exactly what a manager dashboard card needs:
exception_type grouping, and the pending queue from section 2 underneath. Pass agent_id to trend a single agent; non-managers calling trends get aggregates over their own rows only.
4. Post an open shift
Schedules change after publication: someone calls in sick, a forecast spike needs one more person on Saturday. An open shift publishes that uncovered slot for agents to bid on instead of a supervisor assigning it by hand:POST /open-shifts/{id}/cancel; a bidder who changed their mind withdraws with POST /open-shifts/{id}/bids/{bidId}/withdraw. On the dashboard this is the Open shifts tab under Voice → Scheduling.
5. Handle bids
Awarding blind is how you end up re-doing the schedule — read the bid list first:6. Work overtime offers
Overtime offers use the same publish / claim / award pattern as open shifts, but in the other direction: instead of filling an unassigned shift, you put extra hours on agents already scheduled that day — a typical end-of-week coverage move when volume runs hot:POST /overtime-offers/{id}/cancel) if the spike passes before anyone is awarded; a claimant withdraws with POST /overtime-offers/{id}/claims/{claimId}/withdraw. VTO offers (/vto-offers, the Voluntary time off tab) are the exact mirror — awarding releases the claimant’s scheduled hours instead of adding them, for a slow day when you want volunteers to go home early.
7. Close the loop
An award, an approval, or a denial is not finished when the API returns200 — it is finished when the schedule is right and the audit trail is. Two closing moves:
- Publish the schedule-change back to the affected agents. An award writes the assignment (open shift) or extends it (overtime), so the roster under Voice → Scheduling → Assignments — and the agent’s own view once they reload Voice → Scheduling — is already correct; what you owe the team is the announcement. Post it in your internal Team Chat channel (or whatever channel your org uses), naming who took what so nobody builds assumptions on stale rosters: “Saturday’s open support shift went to Amira; the evening overtime went to Amira + Dev.”
- Record the exception resolution. Leave a
noteon every approve/deny call — the note travels with the row, and six months later it is the difference between an auditable decision and an unexplained line item. If the approval created follow-up work (a coaching session, a schedule correction), file it the same day while context is fresh.
8. Checklist
Run this once when you stand WFM up, and again any time the numbers look wrong:- Adherence gate: agents consistently set their ACD/aux state; spot-check one agent’s day — their adherence timeline (
GET /wfm/adherence/intraday) should match what the schedule said. If aux states are blank, fix that feed before approving any exceptions. - Audit trail: every approve / deny / award / cancel decision carried a note or reason; exceptions are only ever decided once (
409on a re-decision tells you the queue race-checks are working). - Real-time feed: supervisors watching intraday coverage stream
GET /wfm/rta/stream(server-sent events) or read current breaches atGET /wfm/rta/breachesinstead of polling; pair it with a webhook consumer if your manager dashboard lives outside Orbit and needs push instead of a stream. - Role split: your reporting key carries
wfm:readonly; publish/award/approve actions run on a key that also haswfm:write, and onlyowner/adminaccounts hold that second key.
See also
- Workforce Management API — full endpoint reference for every call above
- Quality Management API — scorecards and the adherence panels under Quality
- Build a contact-center QA program — the quality loop that sits next to WFM
- Webhook consumer — push real-time updates into your own manager dashboard
- Error codes —
409state conflicts and422 VALIDATION_ERRORshapes