> ## Documentation Index
> Fetch the complete documentation index at: https://docs.happyuptime.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SLA tracking

Track actual uptime against a target, see your remaining error budget, and pull monthly compliance numbers.

# SLA tracking

Happy Uptime computes uptime over a rolling window and compares it against your declared target (`sla_target_pct`). The result tells you both the literal % and your remaining "error budget" — the headroom before you breach the SLA.

## Anatomy

For each monitor with an SLA target:

| Field | Meaning |
|---|---|
| `sla_target_pct` | Your goal, e.g. `99.9` |
| `actual_uptime_pct` | Computed from check results in the window |
| `error_budget_seconds_remaining` | How much downtime you can still afford |
| `error_budget_burned_pct` | Fraction of the budget you've used |
| `breached` | `true` if `actual < target` |

## Pre-aggregation

Raw check results live in `check_results` (high cardinality). For SLA + analytics queries, hourly and daily rollups are pre-computed:

| Table | Granularity |
|---|---|
| `check_rollups_hourly` | Per (monitor, region, hour). Holds avg / p50 / p95 / p99 response time + uptime fraction |
| `check_rollups_daily` | Per (monitor, day). Aggregated from hourly. Includes incident count |

A cron runs every hour to compute the previous hour's rollups, and every midnight UTC to roll daily.

## Endpoints

| Endpoint | Returns |
|---|---|
| [`GET /analytics/sla?monitor_id=…&days=30`](/api/analytics/sla) | SLA tracking for one monitor over N days |
| [`GET /analytics/uptime?days=30`](/api/analytics/uptime) | Per-monitor uptime over time |
| [`GET /analytics/latency?monitor_id=…&days=7`](/api/analytics/latency) | P50/P95/P99 response times |
| [`GET /analytics/summary`](/api/analytics/summary) | Org-wide stats |

## Quick links

**[Analytics API](/api/analytics/sla)**

Pull SLA numbers programmatically.
  **[Plans](/reference/pricing)**

Tier-specific SLA tracking limits.