---
title: Uptime reports and history
description: Heartbeats, hourly statistics, and downloadable SLA reports in JSON or CSV.
sidebar:
  label: Reports & history
---

{/* Source of truth: packages/shared/src/routes.ts — monitors.heartbeats,
    heartbeatDetail, hourlyStats, report, reset. Retention:
    retentionDays in packages/shared/src/plans.ts. */}

Every check Glowo runs is kept as a **heartbeat**: its result, latency, region,
and — on failure — the [error code](/monitors/check-errors) and message.

## Heartbeats

<Frame caption="A monitor's detail page: availability, percentiles, the check-result timeline and per-region run results.">
  ![Glowo monitor detail page showing 100% availability, P50 and P95 response times, a check-results bar chart and a response-time chart](/images/monitor-detail.png)
</Frame>

The monitor page shows the recent heartbeat timeline. Opening a single heartbeat
gives the full detail, including the timing breakdown and the response metadata
captured at the time.

```http
GET /monitors/<monitor-id>/heartbeats
GET /monitors/<monitor-id>/heartbeats/<heartbeat-id>
```

For multi-region monitors each region records its own heartbeat, which is how
you tell "the service is down" from "one region cannot reach it".

## Hourly statistics

```http
GET /monitors/<monitor-id>/hourly-stats
```

Heartbeats rolled up per hour. This is what the dashboard's longer-range charts
draw from — use it when you want a trend rather than individual checks.

## SLA reports

```http
GET /monitors/<monitor-id>/report
GET /monitors/<monitor-id>/report?format=csv
```

Returns uptime percentage, incident count, average latency, paused time and
per-day statistics. `format=csv` returns the same data as a download, for
attaching to a customer SLA review or pasting into a spreadsheet.

**Paused time is reported separately and excluded from uptime**, so pausing a
monitor for planned work does not quietly inflate your numbers — the gap stays
visible and honest.

## Retention

How long heartbeats are kept depends on your plan:

<RetentionTable />

Hourly statistics let you see trends across a longer window than raw heartbeats
would practically allow. If you need history beyond your plan's retention,
export the report periodically.

## Clearing history

```http
DELETE /monitors/<monitor-id>/heartbeats
```

Deletes every heartbeat for a monitor and resets its statistics.

:::caution
This is irreversible and destroys the evidence behind your uptime figures. It is
meant for a monitor you misconfigured and want a clean baseline for — not for
tidying up a bad month.
:::
