User guide

SLA and Escalations

Looking for what it does rather than how to use it? Read the SLA and Escalations overview .

Applies to the MSP, organization and platform portals.


What it is

Escalation is what happens when a ticket needs someone else: another team, the platform, or a paid third-party specialist.

The two are connected but separate. A ticket can breach its SLA without being escalated, and can be escalated without ever having breached.


Concepts

ConceptWhat it is
SLA policyA named set of targets belonging to one organization. One policy per organization is default.
SLA targetResponse and resolution minutes for one priority. One target per priority per policy.
Business hoursThe working week the clocks run during, as wall-clock times in a declared time zone.
HolidayA day the clocks do not run. One-off, or recurring on the same month/day every year.
EscalationA record that a ticket was handed upward, with a reason and a type.
ProviderAn external firm registered to accept escalations, with specialties, capacity and a rate card.
AssignmentThe link between one escalation and one provider, carrying a snapshotted rate and a lifecycle.

The two clocks

Every SLA-tracked ticket has two independent clocks:

  • Response — runs from ticket creation until the first response is recorded. Stops permanently once recorded.
  • Resolution — runs from ticket creation until the ticket is resolved.

Each is separately met or breached. A ticket answered in two minutes and then left for a week has met response and breached resolution.

Priorities

Targets are set per priority: CRITICAL, URGENT, HIGH, MEDIUM, LOW. A priority with no target in the policy gets no deadline at all — the ticket is simply untracked rather than defaulted.

Escalation types

TypeRaised by
MANUALA person, from the ticket
AUTO_SLAThe auto-escalation job, after an SLA breach
CUSTOMER_REQUESTStored for escalations originating from a customer request

Escalation modes

Set per organization under Settings → Support:

ModeBehaviour
MANUALStaff choose when to hand a ticket over. Default.
AUTO_SLAThe job hands the ticket over automatically after an SLA breach.
DISABLEDNo hand-off is allowed.

Who receives an escalation

An escalation is addressed to the account that services the organization raising it:

  1. The primary manager (Account.managedByAccountId) — the account that bills and brands the client.
  2. Otherwise a single active management link, where exactly one MSP holds one.
  3. Otherwise the platform — which covers an unmanaged tenant, and a co-managed client where no primary exists and picking one MSP would be a guess.

The recipient sees the escalation in its own portal and is notified; the organization that raised it keeps visibility throughout. Escalating onward to a third-party provider is a separate, deliberate step.


Roles and permissions

SLA policy and calendar administration is scoped by account: you only ever see and edit policies belonging to organizations in your own account. Platform admins span all accounts.

ActionCustomerOrg adminMSP techMSP adminPlatform
View SLA policies
Create / edit / delete policies
Edit business hours / holidays
See a ticket’s live SLA state
Pause / resume an SLA clock
Escalate a ticket
De-escalate a ticket
Accept / resolve an escalation
Return an escalation
Reassign / reprioritise
Register a provider
Trigger the auto-escalation run

Writing SLA policies and calendars is additionally gated on plan tier — see section 6. Reads and deletes are never gated, so a downgrade leaves existing configuration visible and removable.

Pause and resume are bounded by ticket visibility rather than by role: anyone who can open the ticket can stop its clock. The control is surfaced on the MSP ticket detail; the organization portal shows the clock state read-only, on the principle that pausing a commitment is the servicing party’s call.

Escalation visibility

CallerSees
PlatformAll escalations
MSP admin / MSP technicianEscalations to or from their account
Org admin / power userEscalations from their account
Customer, or no accountNothing

An assignment legitimately spans two accounts, so it is visible from either the requesting side or the provider side.


Walkthroughs

Define service levels

  1. Go to Settings → SLA.
  2. Choose the client organization the policy belongs to (MSP portal only).
  3. Select New policy, name it, and add a target row per priority you want tracked, in minutes.
  4. Mark it Default if new tickets in that organization should use it.

Only one policy per organization can be default; setting a new one clears the previous automatically.

Set the working calendar

  1. Go to Settings → SLA → Business Hours.
  2. Pick the client (MSP portal only) and set the time zone.
  3. Enable the working days and set start and end times.
  4. Save changes.

The API requires all seven days on every save, so the form always submits the full week and uses the enabled flag to mark non-working days. Copy to weekdays fills Monday’s hours across Tuesday to Friday.

The time zone is not cosmetic. Start and end times are wall-clock times in the zone you pick, so changing the zone moves every deadline computed against this calendar.

If no business hours exist at all, or none are enabled, clocks run 24/7.

Add holidays

  1. Go to Settings → SLA → Holidays.
  2. Pick the client (MSP portal only) and the year.
  3. Add holiday, or use the bulk action to add the Canadian statutory holidays missing for that year.
  4. Tick Recurring for a day that falls on the same month and day every year.

A recurring holiday only needs entering once — it applies in every subsequent year. A non-recurring one applies only to the exact date stored.

Work a ticket against its SLA

  1. Open the ticket in the MSP portal.
  2. The banner under the header shows First response and Resolution, each with the time remaining, the policy name, and a met/breached/at-risk state.
  3. If you are waiting on the customer, select Pause SLA. The clock stops and the paused minutes are excluded from remaining time.
  4. Select Resume SLA when work restarts.

Paused tickets are excluded from breach marking and from at-risk warnings while they stay paused.

Escalate a ticket

  1. Open the ticket and choose the escalation action.
  2. Enter a reason.
  3. The ticket is flagged escalated, its original account and assignee are recorded, and an escalation record is created.

The organization’s Settings → Support must allow escalation; otherwise the request is refused. To reverse it, de-escalate — optionally restoring the original assignee. Both directions are written to the ticket’s activity trail.

Dispatch an escalation to a provider

  1. Create an assignment against a provider. The rate is snapshotted from the provider’s rate card at that moment, so later rate-card edits do not change an in-flight assignment.
  2. The provider accepts or declines, starts work, logs time, and completes with resolution notes.
  3. The requester reviews with a 1–5 rating.
  4. Billing is calculated from logged time and the snapshotted rate, then finalised.

Configuration

SettingWhereEffect if unset
SLA policy + targetsSettings → SLANo deadlines; ticket is untracked
Default policySettings → SLANew tickets get no SLA unless one is named
Business hours + time zoneSettings → SLA → Business HoursClocks run 24/7
HolidaysSettings → SLA → HolidaysNo days excluded
notifyOnSlaWarningSettings → Queues, per queueQueue members get no in-app warning
Escalation modeSettings → SupportMANUAL
Allow platform escalationSettings → SupportEscalation refused
Auto-escalate afterSettings → SupportEscalates as soon as a breach is detected

Managed-client fallback

A managed client usually keeps no SLA configuration of its own — the MSP cannot create policies or calendars inside the client’s organization. So when a client organization has none, both the policy and the calendar fall back to those of the account servicing it.

The client’s own configuration always wins where it exists, and the managed relationship is directional, so one client’s policy never lands on another’s ticket. Hours and holidays are resolved together from the same organization, so the two halves of a calendar can never come from different places.

Events emitted

EventWhen
SLA_WARNINGWithin 15 minutes of a deadline
SLA_RESPONSE_BREACHEDResponse deadline passed unanswered
SLA_RESOLUTION_BREACHEDResolution deadline passed unresolved

Plan tiers

slaManagement is a graduated feature: absent, then BASIC, then ADVANCED.

  • BASIC unlocks SLA policy management — response and resolution targets.
  • ADVANCED additionally unlocks business-hours calendars and holidays.
TierSLA policiesBusiness hours + holidays
MSP_FREE
MSP_STARTER
MSP_GROWTH
MSP_SCALE
MSP_ENTERPRISE
CUSTOMER_FREE
CUSTOMER_ESSENTIALS
CUSTOMER_PROFESSIONAL
CUSTOMER_BUSINESS
CUSTOMER_ENTERPRISE

Gated routes answer 403 FEATURE_NOT_ON_PLAN with a structured upgrade offer. A managed client inherits its managing MSP’s tier when its own account has none. Platform admins and accounts with no resolvable tier are never blocked.

Escalation itself carries no plan gate.


Troubleshooting

MessageCause
Cannot delete SLA policy that is in useTickets or contracts still reference it. The response carries both counts.
organizationId is requiredBusiness-hours and holiday reads need an explicit organization.
Holiday already exists for this dateOne holiday per organization per date. Edit the existing one.
Organization not found: <id>The organization is outside your account, or does not exist.
SLA management isn't included in your current plan.Below BASIC. Reads still work.
Advanced SLA management (business-hours calendars) isn't included in your current plan.Below ADVANCED.
Ticket is already escalatedDe-escalate first.
Ticket is not escalatedDe-escalating something that was never escalated.
Organization does not allow escalationallowPlatformEscalation is off under Settings → Support.
Not permitted to escalate ticketsCustomer-portal callers cannot escalate.
Platform admin access requiredProvider registration, returns, reassignment and the batch trigger.
Assignee must be a platform adminEscalations can only be assigned to platform admins.
Escalation already has an assignmentOne assignment per escalation.
Escalation does not belong to this ticketMismatched ticket and escalation ids.
Time entry is already approvedApproval is not repeatable.
SLA is already paused / SLA is not pausedPausing a stopped clock, or resuming a running one.

Deadlines look wrong by several hours

Check the time zone on Settings → SLA → Business Hours. Start and end times are wall-clock times in that zone; a calendar saved under the wrong zone shifts every deadline by the offset between them.

A holiday was ignored

A non-recurring holiday matches only its exact stored date. If you meant it to repeat annually, edit it and tick Recurring.

The clock did not stop overnight

Business hours only apply if at least one day is enabled. A calendar with every day disabled is treated as 24/7, not as permanently closed.


Limits and known behaviour

  • Response is recorded once. After the first response the response clock stops permanently; later replies do not reopen it.
  • Deadlines recalculate from creation. Changing a ticket’s priority recomputes both deadlines from the original creation time, not from now. A ticket escalated to CRITICAL late in its life may be immediately overdue.
  • Recalculation needs an existing policy. A priority change on a ticket with no SLA policy attached does nothing; it does not retro-assign one.
  • Pause is a manual action. Nothing pauses a clock automatically when a ticket moves to a waiting-on-customer status.
  • Paused time is subtracted, not shifted. Pausing does not move the stored deadline; it adjusts remaining time.
  • Escalation is never auto-dispatched to a provider. Both modes hand the ticket to the servicing MSP (or the platform). Offering it to an external provider is always a deliberate act, so nobody incurs a third-party bill without choosing to.
  • A co-managed client with no primary manager escalates to the platform. With several MSPs holding active links and no managedByAccountId, there is no basis for choosing one, so the platform triages it.
  • Provider capacity filters suggestions, it does not block dispatch. A provider at maxConcurrentEscalations is excluded from suggest-provider and from automatic selection, but naming it directly on an assignment still works.
  • Holiday matching is date-based. A holiday excludes the whole calendar day in the calendar’s time zone; partial-day closures are not modelled.
  • The calendar walk is bounded at 3,650 days. A target that cannot be satisfied inside that window falls back to elapsed time and logs a warning.

Questions this guide did not answer?

Ask us. You will get a reply from someone who uses the product every day.

Book a demo Contact us

A 30-minute walkthrough against your own workflow. No slides.