Skip to content

SLOs and error budget

An SLO (service level objective) is the availability you aim for, for example 99.9 % over 30 days. OKStatus turns it into an error budget — the downtime that objective allows — shows how much of it is left, and warns you before it runs out.

Available on the Max and Enterprise plans. There is one setting: the objective. The window (30 rolling days), the budget and the alerts follow from it.

The SLA is what you promise your customers; it is what the SLA reports measure. The SLO is your internal objective, usually stricter, so that you react before the SLA is at risk. Setting an SLO changes nothing in your reports.

The budget is the downtime the objective allows over 30 days:

ObjectiveDowntime allowed over 30 days
99 %7 h 12 min
99.5 %3 h 36 min
99.9 %43 min
99.95 %21 min

Any objective between 50 % and 99.999 % is accepted.

  • Downtime only, decided exactly as for the uptime figures: a monitor is down when a majority of its regions confirm the failure. A slow monitor is not down — response time alerts cover slowness.
  • Planned maintenance does not count: downtime inside a maintenance window of the monitor is left out.
  • The window rolls: it always covers the last 30 days. An outage gives its time back 30 days later, so the budget refills on its own.
  • Availability on the SLO screens is 1 − downtime ÷ 30 days, so “objective met” and “budget left” always agree.

Open the monitor (Edit, or Add monitor) and go to the Alerts step. Under Availability objective (SLO), pick 99 %, 99.5 %, 99.9 % or 99.95 %, or type your own value. The form shows the budget it gives (“43 min of downtime allowed over 30 days”) and, for an existing monitor, whether the objective would have held over the last 30 days. None removes the SLO.

A group often stands for a service: “Payments” = API + webhooks + back office. Open the group (⋯ → Edit) and pick its objective. The rule is simple: the group is down whenever one of its monitors is. Two monitors down at the same time count once. Each monitor keeps its own SLO if it has one.

The group’s notices go to the group’s alert channels, set in the same dialog.

  • On the SLO page, choose Set SLOs (or the Type → Without SLO menu and the selection button), tick the monitors, pick an objective and Apply. Before applying, the list shows for each monitor whether it would have held that objective over the last 30 days.
  • On the Monitors list, select monitors and use SLO ▾ in the selection bar, next to Group ▾.
  • For large fleets, set sloTarget through the API or Terraform (see below).
  • The SLO page (sidebar, under Monitors): every SLO, monitors and groups, worst first — objective, availability over 30 days, budget left and when it runs out at the current pace. The KPI row counts the SLOs on track, at risk and exhausted.
  • The monitor page: the period bar shows the monitor’s SLO instead of the organization’s SLA target, and an Error budget card shows what is left, the downtime used, the projection and the budget left over the last 30 days.
  • The group header on the Monitors list: “SLO 99.5 % · budget 71 %”.

An SLO is at risk when less than 25 % of its budget is left, or when it would run out within 7 days at the pace of the last 7 days.

Three notices, nothing to configure. They are sent on the monitor’s channels (or the group’s), at most one per evaluation (every 5 minutes):

NoticeSent when
Burning fast2 % of the 30-day budget gone in the last hour, or 5 % in the last 6 hours (and at least one minute of downtime). Repeated at most every 6 hours.
75 % usedThree quarters of the budget are gone. Sent again only after it drops back under 70 %.
ExhaustedThe objective is no longer met. Sent again only after it drops back under 90 %.

There is no “recovered” message: the budget comes back slowly, on its own, and a message for it would be noise. There is no escalation either — an SLO notice is a warning, not an incident. Muted or paused monitors send none.

SLO notices go to e-mail, webhooks and the chat channels (Slack, Discord, Microsoft Teams, Google Chat, Mattermost, Rocket.Chat, Telegram, ntfy, Pushover). Incident tools (PagerDuty, Jira, Jira Service Management, incident.io, Alertmanager, Splunk, Grafana IRM), SMS and mobile push do not receive them: they are for pages, and a budget notice is not one.

SLOs and budgets are never shown on public status pages.

Below Max, the SLO block in the forms and the SLO page are visible but locked, with a link to the plans. If the organization moves to a lower plan, its SLOs are kept but no longer evaluated, and they can still be removed.

WhatREST APITerraformMCP
A monitor’s objectivesloTarget on monitors (null removes it)slo_target on okstatus_monitorslo_target on create_monitor, update_monitor
A group’s objectivesloTarget on monitor groupsslo_target on okstatus_monitor_groupupdate_monitor_group
BudgetsGET /api/v1/slos, GET /api/v1/monitors/:id/slo—list_slos

Terraform manages the objective, not the budget: a figure that changes every minute has no place in a Terraform state.