SLA Reports
SLA reports measure monthly availability against the target you promised a client. Group the checks behind a contract, set the target, and get the month to date, an error budget, an incident log and a branded email on the 1st of every month.
Pro feature. SLA reports are included on the Pro plan. See Plans & Pricing.
Find them at app.exit1.dev/sla .
What a Report Contains
Each report has:
| Setting | Description |
|---|---|
| Name | The client or contract, for example “Acme Corp hosting” |
| Availability target | A preset (99%, 99.5%, 99.9%, 99.95%, 99.99%) or a custom value between 90% and 99.999%, up to 3 decimals |
| Checks and folders | The checks the contract covers. A folder includes its subfolders and any checks added to it later |
| Time zone | The zone the months are counted in, for example Europe/Copenhagen or America/New_York |
| Count blocked probes as down | Off by default. See Blocked probes |
| Monthly email | Optional. Up to 10 recipients and your branding |
DNS and domain checks have no availability, so they are not listed. A report covers up to 250 checks and 50 folders. An account can have up to 50 reports.
Create a Report
- Open SLA reports in the app and click New SLA report.
- Enter the name and pick the target.
- Pick the checks and folders. Copy from status page fills them from an existing status page.
- Check the time zone. It defaults to your browser’s zone.
- Optionally switch on the monthly email, add recipients and set your branding.
- Click Create report. The report computes the current month when you open it.
Folders are the easiest way to keep a report in sync with a contract: put each client’s checks in their own folder, and new checks are picked up automatically.
How Availability Is Calculated
availability = up time / (up time + down time)Every moment of a check’s month counts as exactly one of these:
| State | Counts as | When |
|---|---|---|
| Up | Up | The check was online, or a failure was not confirmed |
| Down | Down | A confirmed outage, outside maintenance |
| Maintenance | Excluded | The check was in a maintenance window |
| Blocked | Excluded (by default) | A firewall such as Cloudflare blocked or challenged the probe |
| No data | Excluded | The check was disabled, did not exist yet, or there are no results to go on |
Only confirmed downtime counts. A single failed probe that the retry or the second region did not confirm is a blip, not an outage, so it counts as up. This is the same rule the rest of exit1 uses for incidents.
Slow is not down. Degraded or slow responses count as up. Availability is about whether the service answered.
Excluded time is left out of both sides of the formula. It is shown on its own as excluded time, with a coverage percentage:
coverage = measured time / time in the periodTime before a check was created is not part of its period, so a check added on the 20th is not shown with 35% coverage.
Several Checks in One Report
The report’s availability is time-weighted across its checks: the up time of all checks added together, divided by their measured time added together. Each check also gets its own availability, downtime, incident count and status.
How Long One Result Counts
A check result counts until the next one. Checks record a result on every status change, on every failure and at least once an hour, so there is normally no gap. A gap longer than 3 hours (or twice the check interval, for checks slower than hourly) is counted as no data from the 3-hour mark on, because we can’t claim up or down for time we did not observe.
Maintenance
Time a check spends in maintenance mode is excluded and listed under Exclusions, so a client can see what was left out and why. Planned work does not burn the error budget.
Blocked Probes
When a firewall such as Cloudflare blocks or challenges our probe, the probe never reached your server, so it says nothing about whether the service was up. By default that time is excluded.
If your contract counts any failed request as down, switch on Count blocked probes as down for the report. Blocked time then counts as downtime.
Other 4xx responses are not treated as blocked. A 404 from your own endpoint is a real failure.
Time Zones and Periods
A period is a calendar month in the report’s time zone: from local midnight on the 1st to local midnight on the 1st of the next month. Time zones are IANA names, such as Europe/Copenhagen or America/New_York.
Daylight saving time is handled. A month with a DST change is one hour shorter or longer than usual, which is correct. Incident times are shown in the report’s zone with the zone abbreviation, for example “Nov 14, 03:12 CET”. In the app, hover a time to see it in UTC.
Changing the time zone recalculates past months in the new zone when you open them. Emails already sent are kept on record with the zone they were sent in.
Month to Date, Error Budget and Status
The current month is shown month to date. The numbers refresh 4 times a day, at 02:10, 08:10, 14:10 and 20:10 UTC. The report shows how far the data goes (“data through”). Use the refresh button to recompute a month on demand.
Error Budget
The error budget is the downtime the target allows:
error budget = (1 - target) × measured timeA 99.9% target allows about 43 minutes of downtime in a fully measured 30-day month:
| Target | Allowed downtime per 30-day month |
|---|---|
| 99% | 7h 12m |
| 99.5% | 3h 36m |
| 99.9% | 43m 12s |
| 99.95% | 21m 36s |
| 99.99% | 4m 19s |
Error budget used is the downtime so far divided by the budget. It can go past 100%.
Status
| Status | Meaning |
|---|---|
| On track | The month is in progress and the budget is healthy |
| At risk | The month is in progress and 75% or more of the budget is used, or the downtime so far, projected to the whole month, would exceed it |
| Breached | Availability is below the target. During the month: the downtime already exceeds the budget for the whole month, so the target can no longer be met |
| Met | The month is over and availability met the target |
If less than half of the month was measured, the report says so next to the numbers (“Less than half of this month was measured”). The numbers are still shown.
When a Month Is Final
A month becomes final once the data for it is complete: at the first refresh at least 2 hours after the month ends in the report’s zone. That is between 2 and about 8 hours into the 1st, local time. The 2-hour margin lets late results arrive. A final month does not change, unless you change the report’s time zone.
Incident Log
Each confirmed outage is one incident, with its check, start, end (or Ongoing) and duration. An outage that runs past midnight is still one incident. The app keeps up to 500 incidents per month, longest first, plus the true total.
Excluded periods (maintenance, blocked and no data) are listed separately under Exclusions.
The daily chart shows confirmed downtime per local day. Hover a day to see its excluded time.
Monthly Email
Switch on Monthly email to send the full report to up to 10 recipients on the 1st of every month, in the report’s time zone. The email goes out a few hours after the month becomes final.
- Recipients can be anyone, including people outside your team, such as your client.
- Branding: company name, a logo (PNG or JPEG over https; without a logo the company name is shown) and a brand color. The footer says the email was sent on your behalf via exit1.dev.
- Subject: for example “Acme Corp hosting: October 2026 SLA report, 99.95% (Met)”.
- Send test email sends the report to your own address only, up to 5 times per hour. Test emails are marked “[Test]”.
The email contains a summary (availability against target, status, downtime, error budget, incidents and coverage), a table per check, the incident log, the exclusions and a one-line methodology note. A View in exit1 button opens the report in the app for members of your account.
What the Email Leaves Out
Some email clients cut long messages short and hide the rest, which would hide the unsubscribe link. So the email keeps to a size limit:
- Checks: checks that missed the target or had incidents come first. Up to 50 are listed, then a line for the rest.
- Incidents: the 25 longest, then a line with the number and total downtime of the rest.
- Exclusions: the 10 longest, then a total per kind.
The full log is in the app.
Unsubscribe
Every email has an unsubscribe link. It unsubscribes that recipient from that report only. In the editor, an unsubscribed recipient is marked unsubscribed. Remove and add them again only if they asked for it.
If an address bounces, exit1 stops sending to it.
Exports and the API
There is no PDF or CSV export of SLA reports. To get the numbers into another tool, use the read-only SLA Reports API, or the get_sla_report tool on the MCP server.
Plans and Downgrades
SLA reports are a Pro feature. If the account leaves Pro, reports stay readable but stop refreshing, and monthly emails pause. They resume with the next month after you upgrade again. Deleting a report works on any plan. Its numbers and email schedule are removed; your checks and their history are not touched.
Team members can see the account’s SLA reports. Editors can change them.