QVCCS innovation · Audit and governance

Which permission put this user on CX 2? Licence attribution, traced to the role

In Genesys Cloud, the licence a user needs follows from the permissions their roles grant. One quality permission in a shared agent role can lift a whole voice population a tier. We built Permissions Auditor to trace every user's tier to the exact permission and role behind it, reconcile that with Genesys's own views, and rehearse the fix before anyone edits a role.

QVCCS Innovation teamPermissions Auditor user guide →

Why is this user on CX 2? A user holds three roles. One role carries a single permission, quality:evaluation:view, highlighted in amber. A thick arrow traces that one permission up a staircase of Genesys Cloud CX licence tiers, lifting the user from CX 1 to CX 2. The example is illustrative. QVCCS INNOVATION · LICENCE AUDIT Why is this user on CX 2? One user ROLEEmployee ROLEAgent ROLEOutbound quality:evaluation:view CX 1 CX 2 CX 3 ILLUSTRATIVE
  • Did you know Genesys Cloud enables automatic licence assignment by default, and that each role has an associated licence reflecting the level of permissions it grants, so assigning a role also assigns its licence?

  • Did you know the licence a Genesys Cloud role uses corresponds to the highest-tier permission assigned to it, so a single permission can decide the tier of every user who holds that role?

  • Did you know Genesys deprecated the 'including any future permissions' logic of All Permissions, effective 1 June 2026, noting it could cause unintended billing impacts when new permissions require higher licence tiers?

  • Did you know that under the concurrent licensing model, Genesys charges reflect the highest licence level users were assigned during the billing period, so the licence a user's permissions require and the licence they are billed for can differ?

01

The question behind every licence review

It is the quarterly licence review. Finance has a simple question for the Genesys Cloud administrator: why are 385 voice agents on CX 2 when they only take calls? The administrator opens a user and sees the licence, then opens the agent role and scrolls through a long list of permissions. Somewhere in there, months ago, someone added quality:evaluation:view so agents could see their own evaluations. Nobody connected that one tick box to the tier of every agent who holds the role.

That is the pattern we see again and again: the shared-role trap, permissions added to a default role, supervisor creep, UC-only users who pick up a contact-centre role, and manual licence assignments that outlived a role clean-up. Each is easy to fix once it is found. Finding it, across hundreds of roles and thousands of users, with evidence an auditor can follow, is the hard part. Permissions Auditor exists to make that part routine.

02

How Genesys Cloud ties licences to permissions

Genesys documents the model clearly. Automatic licence assignment is on by default; each role has an associated licence that reflects the permissions in it; and when you assign a role to a user you are also assigning its licence. The licence a role uses corresponds to the highest-tier permission it contains. In the admin UI, the Edit Role page shows the licence required alongside the permissions and can identify unused permissions in a role, and a user's Divisions & Licenses tab shows their licence and any add-ons.

The Platform API exposes the same model. Licence definitions list every licence available to the organisation; a licence users endpoint returns each user's licences; and POST /api/v2/license/infer returns the licences inferred for a list of role ids. All of this answers questions one role or one user at a time. What an administrator also needs is the join across all of them: for every user, which permission from which role holds them above the next tier down, and how many users each role edit would move.

03

The insight: attribution is a covering problem

Each licence definition is a set of permissions. A user's roles grant another set. The question is which licence is the lowest tier whose set covers every licence-relevant permission the user holds. The engine reads the organisation's own licence definitions, expands every permission to concrete domain:entity:action strings against the master permission catalogue, and splits each user's effective permissions three ways: coverable by a base licence, found only in add-on definitions, or neutral platform plumbing that no licence mentions. Only coverable permissions move the base tier; add-on-only permissions attach a named add-on chip instead. That is attribution by permissions: it says which licence a user needs, not what the invoice shows, which depends on the licences actually assigned and the billing model. That is why the audit sets attribution beside assignments and billed quantities rather than treating it as the bill.

The clever part is the downgrade target. The tier ladder is not a chain: a voice agent holding one quality permission above CX 1 should be compared with CX 1, one permission away, not with CX 2 Digital, which their whole voice set would violate. So for each user the engine picks the lower tier needing the fewest removals, and the permissions that tier lacks become the drivers, each traced to the role or roles that grant it, marked sole source when one role edit would demote the user. A floor rule stops clean agents being reported as escalated above the UC-only Communicate licence.

Users, roles, permissions and licences converge on one attribution On the left, the Genesys Cloud chain that decides a licence: a user holds roles, roles grant permissions, and licence definitions list the permissions each licence covers. In the middle, the read-only Genesys Public API calls the Permissions Auditor harvests: licence definitions, the permission catalogue, roles, users with the authorization expand, licence assignments, licence inference by role set, billable usage quantities and conversation aggregates. On the right, one view per user reconciles three answers – attributed by the audit, assigned by Genesys and inferred by Genesys – with the driver permission and the role that grants it. GENESYS DATA MODEL The licence chain User Roles (+ divisions) Permissions Licence definitions domain:entity:action strings Each licence lists the ones it covers GENESYS PUBLIC API · READ-ONLY One staged harvest GET /api/v2/license/definitions GET /api/v2/authorization/permissions GET /api/v2/authorization/roles GET /api/v2/users?expand=authorization,dateLastLogin GET /api/v2/license/users POST /api/v2/license/infer GET /api/v2/billing/reports/billableusage POST /api/v2/analytics/conversations/aggregates/query SOLID: REQUIRED · DASHED: OPTIONAL, BEST-EFFORT ONE VIEW PER USER Three answers, one row ATTRIBUTED · THIS AUDIT Lowest tier covering every perm ASSIGNED · GENESYS What the user holds today INFERRED · GENESYS license/infer for the role set DRIVER permission ← role “sole source” = one edit drops a tier Disagreements become findings Snapshot kept, re-run after cleanup Nothing about tiers is hard-coded: the licence lattice is read live from the organisation at every harvest
Licence definitions, permissions, roles and users are harvested read-only, then each user gets three answers and a traced driver.
Read this diagram as text

Three columns show the Genesys licence chain, the read-only API calls the Permissions Auditor harvests, and the resulting per-user view with three licence answers and a driver.

  1. Left panel, "Genesys data model: the licence chain", runs top to bottom: User, Roles (with divisions), Permissions, Licence definitions.
  2. Notes say permissions are domain:entity:action strings and each licence lists the ones it covers.
  3. The chain arrows into the middle panel, "Genesys Public API · read-only: one staged harvest", which lists required calls for licence definitions, authorisation permissions, authorisation roles, users expanded with authorisation and last login, licence users and licence infer.
  4. Two further calls, billable usage and conversation aggregates, are marked as optional and best-effort.
  5. The harvest arrows into the right panel, "One view per user: three answers, one row".
  6. The three answers are: Attributed by this audit, the lowest tier covering every permission; Assigned by Genesys, what the user holds today; and Inferred by Genesys, from licence infer for the role set.
  7. A Driver box shows the permission and the role that grants it, where "sole source" means one edit drops a tier.
  8. Notes say disagreements become findings and the snapshot is kept so the audit can be re-run after clean-up.
  9. A banner says nothing about tiers is hard-coded: the licence lattice is read live from the organisation at every harvest.

04

How we engineered the harvest

Permissions Auditor signs in with OAuth client credentials and runs one staged, read-only harvest that streams progress live: organisation, licence definitions, the permission catalogue, roles with their permission policies and base licence tags, then users through /api/v2/users with expand=authorization,dateLastLogin and state=any. That expand carries each user's roles and Genesys's own union of their permissions, so no per-user follow-up calls are needed, and inactive users who still hold grants stay visible. Licence assignments, licence inference for each distinct role set, a best-effort billable-usage extract and per-user media counts from the conversation aggregates query complete the picture.

Nothing about tiers is hard-coded. The licence lattice, which licences exist and what each covers, is read live at every harvest, and the mapping of each licence to a category is shown openly so an oddly named licence is visible rather than silently mis-bucketed. Every audit is a timestamped snapshot, so you can re-run after a clean-up and compare. The client is read-only by construction: it refuses every non-GET request before it reaches the network, apart from two allowlisted read-only queries, licence inference and conversation aggregates. A per-session rate limiter, Retry-After back-off on 429 responses and a single token refresh on 401 keep it polite to the platform.

05

Reconciliation: attributed, assigned and inferred

The audit's answer is never shown alone. Each user's attributed tier sits beside the licence Genesys has assigned and the licence Genesys infers for their role set, plus billed quantities where the client may read them. Disagreements become findings rather than being smoothed over, including one aimed at the engine itself: if licence inference names a different base licence for a role set, an engine-disagreement finding says so, treats Genesys as authoritative and offers the drivers as the explanation to check.

There are eight finding kinds. Role escalation and default-role escalation name a role that is the sole source of the permissions holding users above the next tier. Assignment-over and assignment-under catch stale manual assignments in both directions; under-assignment is flagged high severity as true-up exposure, never as a saving. Zombie seats are licence-holding users with no login for 90 days or more. Communicate drift catches UC-only users whose roles now grant contact-centre permissions, and usage rightsizing flags digital-capable tiers that handled no digital interactions in the usage window. The same harvest also lists master admins, role managers who can mint escalations, stale admins and wildcard-heavy roles.

06

From the overview to one user's drill-down

A finished snapshot opens on its Overview: headline tiles for the attributed monthly figure, identified savings, users escalated by role configuration and zombie seats, each drilling through to the page that explains it. The licence mix shows attributed users per tier with the add-on mix beneath, a reconciliation panel sets Genesys-assigned counts beside the billable-usage extract, and Biggest levers lists the top findings, with a clear caveat that savings overlap and any sum is an upper bound.

The Users page is where the evidence lives. Filter by name, attributed tier or add-on, assigned-versus-attributed mismatch or last-login age, then expand a row: every driver permission with its granting role badges, sole source highlighted where one role edit would demote the user, all their roles, the media they handled and Genesys's own inference for their role set. The Roles page scores every role by blast radius, with escalating permissions highlighted in amber against the full expanded list and buttons for the holders and a pre-loaded simulation.

07

What-if: rehearse the role surgery before touching production

Every finding links to a pre-loaded simulation. Pick a role, then remove it from every holder or untick permissions to strip from it, with the escalating permissions already highlighted and a one-click Strip all escalating permissions. Edit as many roles as you like in one scenario and recompute. The result shows the licence mix before and after, the users who move from one tier to another and the monthly difference at your rate card. Both sides are computed from the same role permission sets, so the difference reflects your edits alone.

In the demo organisation the flagship story is the one from our opening: a shared agent role carrying one quality permission escalates 385 synthetic users, and stripping that single permission in the simulator moves exactly those 385 from CX 2 to CX 1, so the finding and the simulation agree. Nothing is written to Genesys. The output is a change plan for a person to apply in Admin › Roles, under the organisation's own change control, which is precisely where a licence decision belongs.

Finding the real downgrade target, then previewing the fix On the left, an illustrative voice agent attributed to CX 2 because of 40 voice permissions plus one quality management permission. Of the lower tiers, CX 2 Digital would need all 40 voice permissions removed and Communicate 45, while CX 1 needs only the one quality permission removed, so CX 1 is the realistic downgrade target and that permission is the driver. On the right, the what-if simulator strips that permission from the role in a scenario and shows the before and after licence mix and the users who move, as a change plan for a person to apply in Admin; nothing is written to Genesys. DRIVERS · ILLUSTRATIVE Fewest missing, not rank minus one VOICE AGENT · ATTRIBUTED CX 2 40 voice permissions + 1 quality permission LOWER TIER · PERMISSIONS TO REMOVE CX 2 Digital 40 Communicate 45 CX 1 – target 1 Driver: quality:evaluation:view ← Agent role (sole source) WHAT-IF SIMULATOR Rehearse the role surgery SCENARIO · ROLE: AGENT routing:queue:view conversation:communication:view quality:evaluation:view – strip LICENCE MIX · BEFORE → AFTER Before After CX 1 CX 2 Moved users listed from → to Recomputed per user from role permission sets Remediation is a report, not a button: the output is a change plan for Admin › Roles – nothing is written to Genesys
The driver is found by fewest removals, not by rank, and the simulator previews the move before any role is edited.
Read this diagram as text

An illustrative two-panel view: on the left, choosing the realistic downgrade target for one user; on the right, a what-if simulator previewing the role change.

  1. Left panel, "Drivers · illustrative: fewest missing, not rank minus one": a voice agent is attributed CX 2 because of 40 voice permissions plus 1 quality permission.
  2. For each lower tier the panel shows how many permissions would have to be removed: CX 2 Digital 40, Communicate 45, and CX 1 just 1.
  3. CX 1 is marked as the target.
  4. The driver is quality:evaluation:view, granted only by the Agent role (sole source).
  5. An arrow leads from the driver to the right panel, "What-if simulator: rehearse the role surgery", where a scenario for the Agent role keeps routing:queue:view and conversation:communication:view ticked and marks quality:evaluation:view to strip.
  6. A licence mix bar compares before and after: before, most users are on CX 2; after, most are on CX 1.
  7. A box lists the moved users from one tier to another, recomputed per user from role permission sets.
  8. A banner says remediation is a report, not a button: the output is a change plan for Admin, Roles, and nothing is written to Genesys.

08

Built by the practice, for the people who answer to finance

Permissions Auditor came out of the QVCCS method. Our Senior Business Consultant captured the questions administrators and finance teams ask at licence reviews; the Solution Architect wrote down the attribution rules, the downgrade logic and the floor rule before the engine was built; Senior Developers implemented it as pure functions over each stored snapshot under the Senior Platform Practice Lead's engineering standards; and our Systems Integration Tester proved the engine against Genesys's own licence inference, including an organisation that held add-on upgrades rather than the next base tier. A synthetic demo organisation with every trap planted keeps the whole product testable without customer data.

Money is handled with care. The billable-usage report carries quantities, not prices, so every monetary figure is an editable rate card multiplied by audited counts, badged with its provenance until you enter your own contracted rates, and editing a rate can never change which tier a user lands on. The seven-sheet Excel workbook carries users, drivers, roles, findings, security posture and the rate card used, so the evidence travels with the recommendation. For clients on our managed professional services tiers, it turns a licence review from an argument into a list of specific, reversible role changes.

How it compares

Licences and permissions in native Genesys Cloud CX and in QVCCS Permissions Auditor

Native facts are as documented in the Genesys Cloud Resource Center and the Platform API definition.

AspectNative Genesys Cloud CXQVCCS Permissions Auditor
A user's licenceDivisions & Licenses tab shows the user's licence and any add-ons; licence users API returns assignments.Assigned, attributed and inferred side by side for every user, with mismatches raised as findings.
Why a role needs a tierEdit Role page shows the licence required; a role's licence follows its highest-tier permission.Driver permissions traced to their granting roles for every user, with sole source marked.
Licence inferencePOST /api/v2/license/infer returns licences inferred from a list of role ids.Called for each distinct role set (up to 300) as an independent cross-check of the engine.
Scale of a role changeRole membership lists who holds a role.Blast radius per role: holders, users it solely escalates and the saving at your rate card.
Unused accessEdit Role identifies unused permissions in a role.Zombie seats with no login for 90+ days, and digital tiers that handled no digital work.
Trying a fixEdit the role in Admin; permission updates take up to five minutes to take effect.What-if scenarios preview the tier moves first; nothing is written to Genesys.
MoneyBillable usage report gives licence quantities, without prices.Editable rate card × audited counts, with provenance shown on every figure.

Genesys's own assignment and inference remain authoritative; the auditor explains them and highlights where they differ from the permissions users actually hold.

The takeaways

  • Every user's licence tier traced to the exact permission and role that drive it.
  • Fewest-removals downgrade targets produce short, actionable driver lists.
  • Three-way reconciliation against Genesys assignment and inference, with disagreements surfaced.
  • A what-if simulator that previews role changes without writing anything to Genesys.
  • Read-only by construction, with snapshots you can compare after every clean-up.

Permissions Auditor is part of the QVCCS App Suite, included with every Managed Professional Services tier and built by the same certified team that designs, builds and supports Genesys Cloud CX solutions.

Read the user guide Managed Professional Services

Last reviewed

Questions about what you have read?

Clients, partners and people introduced to us can reach the specialists behind our applications and articles directly.

Who to contact