User guide
Queues and Teams
Looking for what it does rather than how to use it? Read the Queues and Teams overview .
Last verified against the codebase: 2026-07-25.
What it is
A queue is a named bucket that tickets land in, with its own members, routing rules, assignment policy, SLA targets and alerts. A team is a named group of people that queue access can be granted to in one move.
Together they decide three things: where a ticket goes, who works it, and who can see it.
Concepts
| Concept | What it is |
|---|---|
| Queue | A bucket for tickets, owned by one organization. Carries members, rules, assignment method, SLA targets, AI settings and alert toggles. |
| Default queue | The queue unrouted tickets fall into. One per organization; setting a new one clears the old flag automatically. |
| Queue member | An agent who works the queue. Members receive auto-assignment and new-ticket alerts. A member flagged lead can also manage the member list. |
| Access mode | EVERYONE (anyone in the owning organization) or RESTRICTED (members, granted people and teams, plus the admin bypass). |
| Access grant | Grants one person or one team access to a restricted queue. Exactly one of the two per grant. |
| Team | An organization-scoped group of people. Built for queue grants but not tied to them. |
| Directory link | A team can mirror an identity provider group synced over SCIM. While linked, membership follows the directory and manual edits are refused. |
| Share | Publishes an MSP’s queue down into a managed client organization. Carries its own client-side access mode. |
| Routing rule | Matches a ticket attribute and sends it to a queue. Highest priority wins. |
Roles and permissions
The role hierarchy is platform administrator > MSP administrator > MSP technician > organization administrator > power user > CUSTOMER`.
Note that MSP technician outranks organization administrator. Every rank floor below is “this role or higher” against that order, so a technician clears an organization administrator floor.
Beyond the rank floor, each queue action resolves a per-queue authority:
| Authority | Who holds it | What it permits |
|---|---|---|
full | Platform; organization administrator+ whose account owns the queue; MSP administrator+ over a serviced client’s queue | Everything: settings, rules, members, grants, shares |
share | organization administrator+ of an organization the queue is shared into | That share’s access mode, and grants scoped to their own organizations |
lead | An active queue member flagged isLead | The member list only |
| none | Everyone else | Nothing — the queue answers 404 |
| Action | Minimum role | Extra requirement |
|---|---|---|
| See a queue / list queues | any signed-in | Access to that queue |
| Pick a queue when filing | any signed-in | Access to that queue |
| Create a queue | organization administrator | MSP technician is refused |
| Edit / delete a queue | organization administrator | authority full |
| Manage members | any signed-in | authority full or lead |
| Manage routing rules | organization administrator | authority full |
| Manage access grants | organization administrator | manageable organization |
| Create / revoke a share | organization administrator | authority full |
| Change a share’s access mode | organization administrator | authority full or share |
| Move a ticket between queues | organization administrator | queue usable for that ticket |
| Manage teams | organization administrator | own organization only |
Walkthrough — creating a queue
MSP portal: Settings → Queues. Organization portal: Settings → Ticket Queues. Both render the same page against your own account’s queues.
- Click New Queue. The editor opens on the General tab.
- Give it a name — unique within the organization — plus an optional description, colour and icon.
- On Access, choose
EVERYONEorRESTRICTED. Leave it onEVERYONEunless you have a reason; see section 5. - On Assignment, pick a method and decide whether auto-assign is on.
- On SLA, set response and resolution targets in minutes, and whether the clock counts business hours only.
- On Alerts, choose which of the three notifications the queue’s members receive.
- Save. Members and Rules tabs appear once the queue exists — you cannot add either before there is a queue to attach them to.
To make it the fallback for unrouted tickets, turn on Default queue. The previous default is cleared in the same operation, so there is always at most one.
Walkthrough — restricting a queue
RESTRICTED hides the queue and the tickets inside it from people who have no route to it.
- Open the queue, go to Access, set the mode to Restricted.
- Add the people and teams who should reach it. Granting a team grants every current and future member of that team.
- Save.
After that, the queue is reachable by:
- its active members,
- anyone with a direct grant,
- anyone in a granted team,
- organization administrator and above within the owning account (the admin bypass),
- the requester and assignee of any individual ticket, always.
Admins are never partitioned. An organization administrator can always see their own account’s restricted queues. They could grant themselves access in two clicks, so hiding it would be false security and a lockout hazard.
A client can never hide from its MSP. A queue owned by an account that your account services stays visible to your staff — the MSP operates the helpdesk. The reverse does not hold: an MSP’s restricted queue binds its own technicians as well as client viewers.
Walkthrough — sharing a queue with a client
This is the MSP-side journey. It needs authority full, which means the queue belongs to your account.
- MSP portal → Settings → Queues, open the queue.
- Go to Sharing. The tab only appears when there is somewhere to share to — a managed client organization, or a share already in place.
- Pick a client organization from Share with a client organization…. The share is created immediately, in
EVERYONEmode. - Set the share’s access mode:
- Everyone — every user in that client organization can see the queue and file into it.
- Restricted — only the people and teams granted on the client side.
- If you chose Restricted, add client-side grants. Both you and the client’s own admins can manage them.
The client sees the incoming share at Settings → Ticket Queues, in the “shared with your organization” section, where their admins can adjust the client-side access mode and grants for their own organization.
The target must be a managed client. Sharing to an organization your account does not service is refused with Target organization must be a managed client organization. A queue cannot be shared to its own organization.
Teams
MSP portal: Settings → Teams. Organization portal: Settings → Teams.
A team is a named, coloured group of people in one organization. Its only built-in consumer today is queue access grants, but nothing about the model is queue-specific.
- Membership is bounded by the tenant. A person can only be added if they hold an active membership in the team’s organization, or a membership in that organization’s account.
- Names are unique per organization. A collision returns
A team with this name already exists. - Deleting a team cascades. Its memberships and its queue grants go with it. The people themselves are untouched.
- Deactivating a team revokes its grants’ effect. Grant matching requires
isActive: trueon the team, so switching a team off removes the access it conferred without deleting anything.
Mirroring a directory group
If your identity provider syncs groups over SCIM, a team can mirror one:
- Open the team, choose a directory group under Directory group.
- Save. Membership reconciles immediately and again on every SCIM membership change.
While a team is linked, manual member edits are refused with This team mirrors a directory group — manage membership in your identity provider. Unlinking freezes the current membership in place rather than emptying it. One group can back only one team; a second attempt returns That directory group is already linked to another team.
Routing rules
Rules live on the destination queue: open the queue → Rules. Rules are evaluated in descending priority; the first match wins.
| Match type | Matches on |
|---|---|
CATEGORY | Ticket category |
SOURCE | How the ticket arrived |
PRIORITY | Ticket priority |
TAG | Ticket tags |
ORGANIZATION | The ticket’s organization |
Match modes: EQUALS, NOT_EQUALS, CONTAINS, STARTS_WITH, ENDS_WITH, IN_LIST, REGEX.
REGEX patterns are validated before use: patterns over 200 characters, and patterns matching known catastrophic-backtracking shapes such as (.*)+ and (.+)+, are rejected.
CUSTOM is rejected at the API with Custom-field matching is not yet supported — tickets have no custom fields to match against. This is deliberate: tickets have no custom-field storage, so a CUSTOM rule would be saved and then silently never fire.
When no rule matches, the ticket falls to a default queue — the ticket’s own organization’s default first, and only if it has none, the servicing MSP’s.
An MSP’s rules apply to its clients’ tickets. Rule evaluation spans the ticket’s own organization and the organizations of every account servicing it, because an MSP’s queues and rules live in the MSP’s own organization.
Reorder rules with the up/down controls; the whole ordered set is submitted at once, so a partial list is rejected.
Assignment
| Method | Behaviour |
|---|---|
ROUND_ROBIN | Distributes evenly across active members |
LOAD_BALANCED | Picks the member with the fewest active tickets |
LEAST_RECENT | Picks the member who has waited longest |
MANUAL | No automatic assignment |
Auto-assignment only runs when the queue’s Auto-assign toggle is on. Set Max active per agent to stop the picker handing work to someone already at capacity; leave it empty for no cap. Members carry a priority (higher means more work) and free-form skills tags.
You do not have to trigger it.
Moving a ticket between queues
Open the ticket. In the MSP portal the queue is a card in the header strip alongside Assigned To; in the organization portal it sits with the status, priority and assignee controls. Choose a different queue and the move applies immediately.
The picker lists the queues available for the ticket’s organization, not yours — so an MSP technician working a client ticket sees the client’s own queues, their MSP’s queues, and anything shared into that organization. Queues reached through a share are labelled with the owning organization.
Every move is recorded on the ticket’s activity timeline as “Moved from queue A to B”, with the acting person and timestamp. The trail stores queue names, not ids, so it stays readable after a queue is renamed or deleted. Re-assigning a ticket to the queue it is already in records nothing.
If the target queue has auto-assign on, the move also picks an agent.
The control is read-only below organization administrator; power user and CUSTOMER see the queue name as text.
Ticket visibility
Restricting a queue restricts its tickets. The rule narrows what you can already reach — it never widens it.
- A queue owned by your own account partitions you:
RESTRICTEDhides its tickets unless you are a member, granted, an admin, or the ticket’s requester or assignee. - A queue owned by any other account never hides a ticket the tenant boundary already reaches. Both halves of that matter: a client cannot hide its tickets from the MSP that runs its helpdesk, and an MSP cannot make a client’s own data vanish by routing it into an MSP-internal queue.
- Unqueued tickets are always visible.
- Requesters and assignees always see their own tickets, whatever queue they sit in. An end user’s ticket never disappears from their portal because staff moved it.
The same rule is applied by the MSP ticket surface as by the ticketing service, from one shared implementation, so the two can never drift apart.
Notifications
Three queue-level toggles, all on the Alerts tab, all delivering in-app notifications to the queue’s active members:
| Toggle | Fires when | Default |
|---|---|---|
| New Ticket Alert | A ticket enters the queue | On |
| SLA Warning | A ticket in the queue is within 15 minutes of breaching | On |
| Unassigned Timeout | A ticket has sat unassigned past the queue’s timeout | Off |
- The person who performed the action and any auto-assigned agent are excluded from the new-ticket alert — the agent gets a dedicated assignment notification instead.
- SLA warnings are raised separately for the first-response clock and the resolution clock, and each is raised at most once per ticket.
- The unassigned nag fires once per ticket, ever. Set the timeout in minutes next to the toggle; the sweep runs every 10 minutes.
- Inactive members and deactivated people never receive any of them.
Every queue setting
| Setting | Effect | Unset / default |
|---|---|---|
name | Display name, unique per organization | Required, ≤ 100 chars |
description | Free text | Empty, ≤ 500 chars |
color, icon | Display only | Empty |
isDefault | Catches unrouted tickets | false |
isActive | Inactive queues accept no new tickets and vanish from pickers | true |
sortOrder | Display ordering in pickers | 0 |
accessMode | EVERYONE or RESTRICTED | EVERYONE |
autoAssign | Pick an agent on arrival | false |
assignmentMethod | How that agent is picked | ROUND_ROBIN |
maxActivePerAgent | Skip agents at capacity | No cap |
slaResponseMins | First-response target, minutes | No target |
slaResolutionMins | Resolution target, minutes | No target |
slaBusinessHoursOnly | Count only business hours | true |
businessHours | Per-queue schedule | Organization default |
aiEnabled | Let the AI agent work this queue | false |
aiInstructions | Extra system prompt, ≤ 5000 chars | Empty |
aiAutoRespond | Reply to new tickets without a human | false |
aiConfidenceThreshold | Below this, escalate instead of answering | 0.7 |
aiEscalateAfterMins | Hand to a human after this long | Never |
aiTemplateMode | EXACT follows the reply template; GUIDED uses it as a style guide | EXACT |
aiAutoReplyTemplateId | Which email template the AI replies with | None |
notifyOnNewTicket | See section 12 | true |
notifyOnSlaWarning | See section 12 | true |
notifyOnUnassignedTimeout | See section 12 | false |
unassignedTimeoutMins | Minutes before the nag | None — required if the toggle is on |
Plan tiers
Queues and teams are not plan-gated. Every capability in this document — queues, members, routing rules, access modes, grants, teams, and MSP→client sharing — is available on every tier including Free.
Two adjacent capabilities are gated, and are documented in their own guides:
| Capability | Gate | Tiers |
|---|---|---|
| SSO / directory provider configuration | ssoEnabled | Enterprise only |
The per-queue SLA fields in section 13 are not covered by slaManagement — they belong to the queue and are available on every tier. Mirroring a team from a directory group needs SCIM provisioning to be running, which in practice means an Enterprise plan.
Troubleshooting
| Message | Cause | Fix |
|---|---|---|
A queue with this name already exists | Queue names are unique per organization. | Pick another name, or rename the existing queue. |
Insufficient role | An MSP technician tried to create a queue. | An MSP administrator or organization administrator must create it. |
Organization not found: <id> | The target organization is not yours and not one you manage. | Check the management relationship. The message is deliberately vague. |
Cannot delete the default queue | Every organization keeps a fallback. | Make another queue the default first. |
Cannot delete queue with assigned tickets | Deleting would orphan live work. | Move the tickets out, or deactivate the queue instead. |
404 Queue on an edit you expect to work | You hold no authority over that queue — possibly only lead or share. | See section 3. A lead can manage members only. |
Custom-field matching is not yet supported | A routing rule used CUSTOM. | Use CATEGORY, SOURCE, PRIORITY, TAG or ORGANIZATION. |
Target organization must be a managed client organization | The share target is not serviced by the queue’s account, or is the queue’s own org. | Share only to organizations your account manages. |
organizationId is not manageable for this queue | A grant named an organization you cannot administer for this queue. | Omit it to default correctly, or name one of your own organizations. |
Provide exactly one of personId or teamId | A grant supplied both or neither. | One grant grants one subject. |
Ticket and queue must belong to the same organization | The queue is reachable but cannot hold that organization’s tickets. | Use the org’s own queue, a servicing MSP’s queue, or share the queue in first. |
A team with this name already exists | Team names are unique per organization. | Pick another name. |
This team mirrors a directory group — manage membership in your identity provider | The team is SCIM-linked. | Edit the group in the identity provider, or unlink the team. |
scimGroupId must reference a directory group of your organization | The group belongs to another tenant, or does not exist. | Pick a group from your own directory. |
That directory group is already linked to another team | One group backs one team. | Unlink the other team first. |
404 Person when adding a team member | The person is outside the team’s organization and account. | Invite them to the organization first. |
Organization context required | The caller has no active organization. | Sign in to a portal with an organization context. |
| A queue you created is missing from a ticket picker | The queue is inactive, or cannot hold that organization’s tickets. | Check isActive, and whether the queue is shared into the target org. |
Limits and known behaviour
- One share per queue per client organization. Re-sharing updates the existing share rather than creating a second one.
- Grants are matched by identity, not by organization. A grant’s
organizationIddecides who may manage the grant, not where it applies. - A team grant follows the team. Adding someone to a granted team gives them the queue immediately; removing them takes it away.
- Deactivating a queue does not move its tickets. They stay where they are and remain visible; the queue simply stops appearing in pickers.
route-ticketandassign-tickethave no bulk form. Both act on one ticket per call.- Queue AI settings are configuration for the AI agent, documented here for completeness; the agent’s own behaviour is covered by the AI guide.
- Queue-level
businessHoursis a per-queue JSON schedule, separate from the organization-wide business-hours calendars behind theslaManagementgate. - Mobile. Queue and team administration is web-only today.