A Service Level Agreement, or SLA, is an agreed upon measure of the response and resolution times that your support team delivers to your customers. Providing support based on service levels ensures that you're delivering measured and predictable service. It also provides greater visibility when problems arise.
You can define SLA service targets in Zendesk Support so that you and your agents can monitor your service level performance and meet your service level goals. Zendesk Support highlights tickets that fail to meet service level targets so that you can promptly identify and address problems.
- A set of conditions that a ticket must satisfy in order for the SLA policy to be applied
- The target time for each desired metric and priority value
- One or more metrics that you choose to measure
- Whether targets will be measured in business or calendar hours by priority value
For more information about viewing SLAs as an agent, see Viewing and understanding SLA policies.
To learn about setting up multiple versions of policies, see Versioning your SLA policies.
Fine tuning: Learn how you can make the most out of your SLAs with Sam Chandler's Fine tuning: succeeding with SLAs--why, when, and how!.
Understanding how SLA policies are applied to tickets
When a ticket is created or updated, it runs through all of your normal triggers you’ve already set up in your Zendesk Support instance. After the triggers have been applied, we run that ticket through the SLA system.
Starting at the top of your list of policies and moving down, we compare the conditions on that policy to the ticket. The first policy we find whose conditions are satisfied by the ticket is applied to the ticket. For details about how policies are ordered, see Ordering SLA policies. To review which policies have been applied to a ticket and in what order, see Viewing which SLA policies have been applied to a ticket
In most cases when a ticket is updated, the ticket will match the exact same policy that’s already applied and nothing will change. If your ticket has changed in priority but you haven’t modified your SLA policies since that ticket was last updated, the targets on the ticket will be updated to reflect the priority.
There are, of course, some exceptions. If you’ve created a new, more restrictive policy since that ticket was last updated, it’s possible that the ticket will receive that new policy that didn’t exist before. Or, alternatively, you may have updated the targets for the policy that’s already been applied. In both of those cases, the ticket will receive the new information.
When you merge an older ticket with an SLA into a new ticket, the older ticket’s SLA state is frozen, whether achieved or missed. The newer ticket proceeds with its own SLA. The merge action appears as an internal update on the newer ticket, which doesn’t meet or change any SLAs
Tickets set to Solved immediately fulfill all active SLA targets.
Understanding what metrics you can measure
You can define SLA service targets for five different metrics: first reply time, next reply time, periodic update time, requester wait time, and agent work time. The first three metrics measure reply time, while the second two measure resolution time.
Reply time metrics
The following metrics measure reply time:
-
First reply time is the time between ticket creation and the first public comment from an agent, displayed in minutes. Some qualifications include:
Requester Ticket comment Result The requester is an end user. The ticket is created with a public end-user comment. The SLA first reply time target starts at their comment and runs through the next public agent comment. This is the most common workflow and typical behavior. The ticket is created with a public agent comment. The SLA first reply time target is immediately satisfied. It does not activate or record an achievement. The ticket is created with a private comment. See Creating a private ticket for an end-user. The SLA first reply time target starts at the first public comment by an end-user after the ticket is made public. This means the first reply can start after a public agent comment. It still runs until the next public agent comment after the end-user. The requester is a light agent. The ticket is created with a public agent comment. The SLA first reply time target is immediately satisfied. It does not activate or record an achievement. The ticket is created with a private comment by the agent requester. The SLA first reply time target starts at ticket creation. It still must be fulfilled with a public agent comment after that. The ticket is created with a private comment by a different agent: The SLA first reply time target does not activate. - Next reply time is the time between the oldest unanswered customer comment and the next public comment from an agent, displayed in minutes.
- Periodic update time is the time between each public comment from agents, displayed in minutes. The SLA is still active on Pending. If a user reopens a ticket, the periodic update time will not start until an agent makes another comment.
- Pausable update is the time between each public comment from agents when the tickets is in the New, Open, and On-hold statuses, pausing when the ticket is put into Pending.
The First reply time and Next reply time metrics typically use an end-user comment as starting point, and a public agent response as an end point. The following graphic shows how these metrics fit in with the lifecycle of a ticket.
The Periodic update time uses the agent's public comment as a starting point and resets after each published comment. For example if you have a periodic update time of 30 minutes, your agent will need to add a new public comment every 30 minutes.
The Pausable update metric uses the agent's public comment on a new or existing ticket as a starting point, only if that ticket is not in the pending status. If a ticket is contains a public comment and is marked as pending in the same event, the metric will not be applied to the ticket until the ticket is first submitted in an open status and set back to pending. Once a comment is present, the metric pauses in the pending status and resumes in a non-pending status with either no comment or a private comment from an agent.
Resolution time metrics
The following metrics measure resolution time:
- Requester wait time is the combined total time spent in the New, Open, and On-hold statuses. The SLA will pause on Pending.
- Agent work time is the combined total time spent in the New and Open statuses. The SLA will pause on Pending and On-hold.
Note that you should only choose one resolution time metric.
Resolution metrics always use the status of the ticket for starting, pausing, and stopping, as opposed to comments. The following graphic shows how the resolution time metrics fit in with the lifecycle of a ticket.
Reopening tickets
- First Reply Time, Next Reply Time: If a ticket is reopened with an end user comment and all conditions are met, the relevant Reply Time metric is restarted.
- Periodic Update, Pausable Update: If a ticket is reopened with an end user comment, nothing will happen. If a ticket is reopened with an agent comment, the relevant Update metric is restarted.
- Agent Work Time, Requester Wait Time: There metrics activate only with the appropriate ticket status, including if the ticket is reopened.
Setting up SLA policies
To set up SLA policies, you combine the metrics described above with conditions and targets.
Conditions for SLA policies are similar to the conditions you use to set up triggers. Like conditions for triggers, they have both All and Any conditions, and the conditions can be based on ticket fields, user fields, or organization fields. However, there are fewer options than in triggers. For example, you can't create a condition based on the ticket’s status or priority, because those pieces of information are already built into the SLA policy model. For more information about using custom ticket fields, see Using custom ticket fields in business rules and views.
A target is the goal within which a particular time-based metric should fall. If, for example, you want all urgent tickets in a given policy to have a first reply time that is less than or equal to 15 minutes, you would set a target of 15 minutes. You can define individual targets for each combination of metric and priority per policy. You can also set hours of operation, whether in Business or Calendar hours, for each priority and policy.
To set up an SLA policy
- Click the Admin icon (
) in the sidebar, then select Business Rules > Service Level Agreements.
- Click Add policy.
- Enter a name in the Policy Name field.
- Optionally, enter a description in the Description field.
- In the Conditions section, select the conditions for this policy. Start typing the condition to autocomplete or select an option from the drop-down menu.
- In the Targets section, enter a time target for each metric and ticket priority. You can enter hours, minutes, or both. Remember that you should use only one of the two resolution time metrics.
- For each priority, select either Calendar hours or Business hours for Hours of operation.
- Click Save.
Community tip! Mat Cropper shows how to set up SLAs so the correct policy is always applied in Running triggers, automations, and reporting based on ticket SLAs. And Mark Powell shows how to set up SLAs for time zones in Using SLAs with different time zones, contracts, and business hours.
- Click the Admin icon (
) in the sidebar, then select Business Rules > Service Level Agreements.
- Click on the SLA policy you want to edit.
- Edit the policy as necessary and click Save.
Ordering SLA policies
It's possible to create logically overlapping policies, but at any given time a single ticket can only have one policy applied to it. When you have multiple policies that match a ticket, we’ll use the order of the policies to break any ties. For details about how the order of policies affects tickets, see Understanding how SLA policies are applied to tickets. To review which policies have been applied to a ticket and in what order, see Viewing which SLA policies have been applied to a ticket
To make your policies most effective, you should roughly order your policies with the most restrictive policies at the top, and your least restrictive policies at the bottom.
To order your SLA policies
- Click the Admin icon (
) in the sidebar, then selecting Business Rules > Service Level Agreements.
- Hover your mouse over the left of the SLA policy name you want to reorder until the grabber is highlighted.
- Click and drag the policy to the new position.
Adding SLAs to views
Similar to ticket statuses, SLA targets have different statuses on a ticket. Agents can see these statuses in tickets or in views in the Next SLA breach column. The Next SLA breach column displays the calendar time left before the next target on any given ticket will be breached.
For details about the different SLA statuses, see Understanding SLA target statuses. For details about understanding how target status appears in this column, see Seeing SLA statuses in views.
Currently, there's no way to send notifications to agents based on SLA breaches.
To add SLAs to a view
- Click the Views icon (
) in the sidebar, then select a view.
- Click the View options menu in the upper right.
- Click Edit.
- Scroll down to the Formatting options section.
- Under Columns not included in table, click Next SLA breach.
- Drag Next SLA breach into the Columns included in table column.
- To make sure the tickets whose targets are most breached or are closest to breaching will get attention first, select Order by > Next SLA breach in Ascending order.
- Click Submit.
Using SLA breaches in automations
You can set up automations based on SLA breach status using two conditions, Hours since last SLA breach and Hours until next SLA breach. For information about creating automations, see Streamlining workflows with time-based events and automations.
Currently, you can't create triggers based on SLA breach status.
Reporting on SLAs
You can now view how well you are meeting your SLA policies with the SLA reporting dashboard. This dashboard gives you relevant information for each SLA metric you measure. The reports enable you to pinpoint areas where you might need to increase efficiency or staffing based on weekly and hourly information.
You can either build new custom SLA reports (see the Insights object reference and Insights metrics reference), or use the pre-built reporting dashboard (see SLA reporting dashboard overview).
It is important to note that the pre-built reports are based on a per instance basis rather than a per ticket basis. Most of your SLA metrics (First Reply Time, Requester Wait Time, Agent Work Time) are measured once per ticket. However, the metrics Next Reply Time and Periodic Update Time are used to measure the amount of time between comments. So, these metric could potentially be calculated multiple times.
For example, suppose you answered your customers' comments within the target time once, but breached the target three times after. Each of those achievements and breaches are calculated as separate instances.
Now how would this work if you are trying to calculate your Next Reply Time achieved percentage?
- Ticket A: 1 breach, 3 achievements (4 instances)
- Ticket B: 1 breach, 5 achievements (6 instances)
- Ticket C: 0 breaches, 3 achievements (3 instances)
- Ticket D: 3 breaches, 1 achievement (4 instances)
- Ticket E: 0 breaches, 3 achievements (3 instances)
Overall, there are 20 instances of Next Reply Time measured across five tickets. Your % Achieved is calculated by taking the number of achieved instances over the total number of instances. In this case your achieved percentage would be 75%.
% Achievement=15 achieved instances/20 measured instances=75%
The SLA metric instance attribute is also important when you build your own custom reports. If you want to view individual instances, you need to slice your report by this attribute. You can find this attribute underneath How>Ticket SLAs.
Deleting SLA policies
You can delete an SLA policy if it is no longer needed.
To delete an SLA policy:
- Click the Admin icon (
) in the sidebar, then select Business Rules > Service Level Agreements.
- Locate the SLA policy you want to delete.
- Click the gear icon (
) opposite the SLA policy title.
- Choose Delete, then confirm the selection.
184 Comments
In the article you mention:
How does it work for Agent Time? For example I have a ticket where the Agent Time SLA of 8 hours is breached by an hour, but the ticket get's reassigned and given a new SLA policy where the Agent Time is 24 hours. What does the SLA clock do?
Or if the scenario is reversed and the ticket Agent Time SLA is 24 hours, and it is 9 hours left till breach. The the ticket gets reassigned and the SLA policy changed to 8 hours Agent Time. What happens?
Request: I would appreciate being able to use Requester's Language as a condition of SLAs without having additional tags on a ticket. Or even being able to use schedule as a condition.
Use Case: Our teams are based on functions used for groups in Zendesk and then split by language in views so they share macros and make reporting cleaner as their tasks are the same. Not being able to target SLAs based on language or schedule requires creating alternatives such as a ticket field for language or ticket tagging. Which if a requester's language is updated without updating the ticket right away means that they will sit in the incorrect SLA for longer.
Other ideas for targeting SLAs based on language?
Hi,
i have maybe a stupid question but i am scratching my head on it.
As per header when defining SLA policies, the sentence is the following from Zendesk:
A service level agreement (SLA) is a contract between you and your customers that specifies performance measures for support by ticket priority. For example, we respond to urgent tickets in ten minutes and resolve them within two hours. Your SLA policies are applied to tickets in the order they appear on this page, so drag to reorder as needed
Now, if my first resolution time is 10 business days for an incident .. which target to i use in my matrix for each priority ??
FRT: not relevant
Requester Wait time? but the "paused" time doesnt goes toward the time from new to solved..
Thanks for your guidance.
NB
Hi Nicolas. It sounds like you want full resolution time applied to an SLA policy. Am I reading that right?
Full resolution time is indeed a metric, but not one that SLA policies use.The only resolution times that SLA policies consider are Requester Wait Time and Agent Work Time.
As you noted, "pending" time isn't considered because that time is outside of the agent's control, so having an SLA around it wouldn't be typical.
I found a number of references about using full resolution time that might help, however:
A couple good community posts on the subject:
Tracking time spent on tickets between re-open and solve
Full Resolution Time
And some reference documentation:
Ticket metrics via REST API
Insights reporting and object reference
Hope this is on track with your question and helps!
Hey Zendesk Team,
Quick question we create our SLAs to match categories. However, you might find a ticket might go through several categories before finally being closed. In this case which sla will be applied on the ticket.
Hello all,
Hoping someone can answer this question. In the documentation above it says:
Is this a hard and fast rule that you can ONLY choose one OR the other, and not both? What happens if you choose BOTH?
Thanks for your insight!
Martha
We really need two additional metrics, and these have been requested a couple of times already in this thread and the SLA FAQ thread:
1) Next Reply Time Excluding Pending Tickets
2) Next Reply Time Satisfied by Public Comment OR Internal Notes (Private Comments)
1) The current "Pausable Update" metric doesn't work for this because it tracks time between Agent public comments, not reply time from the last end-user comment. This means any time an agent sets a ticket to pending, they have to make a public comment.
2) This is required for internal response-time tracking, and should be monitored for all agents to ensure that tickets are being handled promptly, even if a public comment has not yet been made. In fact, this is a more important metric than Public Reply Time, because different issues can take different amounts of time to resolve and thus reply to the client, but what you really want to be tracking is how long it takes for an agent to start working on the ticket, and that includes internal notes. Some tickets really shouldn't receive a public reply until a task is completed (generally any task-oriented tickets that are not a system broken), and those should have private notes added, and the time between end-user comment and that private note should be tracked. Not having this means anytime an agent begins working on a ticket they have to make a public comment, even if that comment has *no* usable information or even any information the end user didn't already have.
I'm curious, are SLA's visible to the end user?
Hi Jon,
Natively SLA's are not visible to the end-user. If this is something you're looking to make available, you may be able to set this up using our API and some Javascript. Here's a link to our API documentation which I believe you'll find useful.
Cheers!
Hi,
Any solution for setting SLA's based on a future due date?
I have 2 sets of 3 customers who submit tickets based on future work needed. Due Dates are set using the 'Task' due date. So if I set my SLA for 24hrs, for a ticket form not due for a month, the SLA is breached by they time we get to it.
Can anyone think of a work around for this?
Hello Gina,
We are using the on-hold status with a trigger that changes the ticket to open state on due-date for a similar case.
Maybe this works for you too.
Do you happen to have any better screenshots of what this would look like in a view? The screenshots in this article are small and blurry :)
Thank you!
Thanks for the feedback, Jessie. I've passed it along to our publishing team and we'll see if we can get some clearer images for you!
I am trying to determine if I can use Next Reply metric in the same policy as either Periodic or Pausable Update. I believe my question is: When the Next Reply Metric is satisfied with an agent response, is the Periodic or Pausable Update activated with the very same agent response?
Another question I have is why conditions cannot be based off ticket status. I read the text quoted below, but I do not understand what "those pieces of information are already built into the SLA policy model" means. I am confused why a condition based on status would affect anything negatively
"Conditions for SLA policies are similar to the conditions you use to set up triggers. Like conditions for triggers, they have both All and Any conditions, and the conditions can be based on ticket fields, user fields, or organization fields. However, there are fewer options than in triggers. For example, you can't create a condition based on the ticket’s status or priority, because those pieces of information are already built into the SLA policy model."
Hey Kevin,
Periodic and Pausable update is indeed activated from the same public response by the agent. As for status condition, the reason this not an available condition is because the Status is already being looked at to determine if an SLA target has been met or is paused.
For example, the pausable update target will pause when the ticket is in pending status. This rule is built into the SLA policy system.
Let me know if you have additional questions for me.
Thanks!
Brett,
Since you mention Pausable Updates, has there been any progress on changing the logic that means a ticket will never start the Pausable Update timer if an Agent switches a ticket to Pending at the same time that they make their first Public Reply? This leads to some tickets falling through the cracks, since they won't have a "countdown" in the SLA column, and any automations based on "hours until breach" will not run.
I had a ticket about this issue and was told it would be flagged for feedback/voice of the customer.
Here is how you have it documented:
"The pausable update metric uses the agent's public comment on a new or existing ticket as a starting point, only if that ticket is not in the pending status. Once a comment is present, the metric pauses in the pending status and resumes in a non-pending status with either no comment or a private comment from an agent."
The part I take issue with is that it says "only if that ticket is not in the pending status." When a ticket is in the "New" status, an Agent's first Public Reply should start the Pausable Update, and it does, as long as the Agent does not simultaneously change the status to Pending.
I understand that the Pausable Update SLA currently works this way. However, I have not seen any argument for why it should work this way.
Hi!
I use Zendesk Insights and am not currently able to make the switch to Explore.
I would like to set up a daily report with the following information:
* Tickets currently in New/Open state with the current SLA considered a breach.
I am not interested in "#SLAs breached total" because that would return tickets whose most recent requester reply has not passed SLA yet even though earlier replies may have.
I merely want to see tickets whose current SLA status ("Next SLA Breach" as shown in Views) is passed, and are currently new/open.
I tried building a report that shows New/Open Tickets with SLA breaches, but that keeps returning historical breaches whereas in this instance I am more interested in the current breach only.
Hey Christopher,
Are you trying to see SLA stats in real-time? If so, I'm afraid this isn't possible at this time.
Let me know if I'm misunderstanding your question! If you have a report example that we can take a look at that may also be helpful.
Cheers!
Hi Brett!
No worries, I believe I have sorted it out! :) It does not need to be in real-time as such, since our agents do not work in the night. I built a report showing Tickets where the current SLA is Breached and the Ticket Status is New or Open.
I based it on another Metric that was present in Insights, "# SLAs Breached (Total)" but adapted it to this:
SELECT IFNULL((SELECT COUNT(Records of Ticket SLAs) WHERE SLA Metric Status in (Breached (Active)) and Ticket Status <> Deleted and SLA Policy <> (empty value)), 0)
We send out a Daily Report every morning at 7am, so this will report a close enough estimate to show many currently open tickets have surpassed their SLA, even though a few of them (the ones expiring between the latest update to Insights and 7am) are missing.
That's awesome! Thanks for sharing Christopher :)
I think it would be useful as an Explore Tip as I'm sure other users could benefit from reporting on this data.
If you're interested, you can create an Explore Recipe tip in our Explore Best Practices, Workflows, and Tips topic which I've linked for you.
Thanks again and glad you were able to get this solved.
Cheers!
I am trying to set up SLA's and I am running into an issue. A lot of my organization tickets are submitted by light agents. I found that SLA Policies are not being applied when a ticket is re-opened from solve with a private comment from a light agent. I found that it takes a public comment from an Agent to trigger a policy being added.
Is there a way to ensure that an SLA policy is applied whenever a ticket is re-opened?
Hey Jason,
What SLA target are you looking to pick back up once a light-agent replies and re-opens the ticket? I'm afraid there's no way to customize an SLA policy and allow internal notes to be factored in here.
I'd be happy to pass this along as feedback to the appropriate product managers on your behalf.
We have a Next Reply Time SLA that requires that Urgent and High Priority Cases for our Premium customers are updated ever 2 and 4 hours respectively.
However, what we often see happen is that the agent will inform the customer that they will have an update for them in 2 days, (for example) and the customer is fine with that.
However, the case is still Open, or On-Hold and so the NRT SLA will still fail multiple times. We can't set the ticket to pending as that wouldn't be correct.
My question is, can we pause the NRT SLA when we've informed our customers as to when they will get a response?
Thanks
Craig
Hi Craig Willis, if I understand your problem correctly, a workaround is to provide a specific macro for your agents to use when that happens.
The macro could leave a generic internal note, set the status to On Hold and, more importantly, a specific tag (e.g. long_onhold).
From that moment on, all those tickets where agents apply the macro should be updated with the new SLA policy.
Hope this helps!
I'm having a similar issue as Jason. The non-requester replies which re-opens the ticket with a private note. An SLA does not apply.
When someone solves their ticket via Answer Bot and then replies re-opening the ticket, the first reply SLA is not applied but instead the next reply/pausable reply SLA policies are applied. It would more sense for the first reply SLA to apply since an agent has not replied yet. If a view is sorted by SLA, someone could move themselves up the queue by solving and then replying.
Hey Monica,
The First Reply Time target will not start until the ticket gets a first public comment from an end-user. Additionally, the FRT target is considered fulfilled once the ticket has been Solved . More information in the following article: Understanding first reply time (Professional and Enterprise)
There's no way to adjust how the FRT target functions and I do apologize for any confusion this may have caused.
Let me know if you have any other questions!
Hi team,
Our online support assists customers (end users), and stores (light agents) who process the orders.
We have a 5 hour store response SLA.
The issue is... all the comments are internal/private notes, and as such the first reply is never actioned - although it has taken place.
Is there a work around to this?
Anyone? *Coo-eee*
Elaborating a bit - the agents engaging with the light agents are internal/private comments. There is sometimes a chance that then becomes a public comment to customer.
The red flags remain for SLA not being actioned in time, but the response has actually taken place. It's just not recognised unfortunately.
How to resolve this?
Hey Conza -
I spoke with the product manager about your issue, and she said that there's not an easy workaround for this. However, she'd be interested in connecting with you to get more details on your use case as she's looking into some features related to your needs for a little ways down the road. Would you be interested in speaking with her?
Please sign in to leave a comment.