Skip to content

Get the day-bar uptime report

GET
/v1/sites/{id}/uptime/monitors/{monitorId}/report
curl --request GET \
--url 'https://api.overwatch.weareheavy.dev/v1/sites/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/uptime/monitors/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/report?days=90' \
--header 'x-api-key: <x-api-key>'

One segment per day with three-state semantics: down (red) when a confirmed multi-region incident overlaps the day, degraded (amber) when some region failed below quorum — past a noise floor, so one stray timeout doesn’t paint a healthy day — and ok (green) otherwise.

Uptime percentages count confirmed incident downtime only; sub-quorum failures surface as degraded and in the per-region stats, never in the percentage. overallUptimePct covers the requested window, clamped to the monitor’s creation so a young monitor isn’t diluted by empty days.

id
required
string format: uuid

The site’s UUID.

monitorId
required
string format: uuid

The uptime monitor’s UUID.

days
integer
default: 90 >= 1 <= 365

How many days to cover, ending today. Defaults to 90, capped at 365.

The monitor, its day bars, incidents, and overall uptime.

Media typeapplication/json
object
monitor
required

A stored uptime monitor. status/status_since double as current status.

object
id
required
string format: uuid
tenant_id
required
string
site_id
required
string format: uuid
url
required
string format: uri
name
required
string | null
cadence_seconds
required
integer
timeout_seconds
required
integer
enabled
required
integer
Allowed values: 0 1
alert_emails
required

JSON-encoded array of extra alert addresses.

string | null
alert_webhooks
required

JSON-encoded array of extra alert webhooks.

string | null
status
required

Consensus status written by the coordinator; unknown before the first probes.

string
Allowed values: up degraded down unknown
status_since
required

Epoch ms the current status began, or null.

integer | null
last_checked_at
required

Epoch ms of the last probe, or null.

integer | null
created_at
required
integer
updated_at
required
integer
days
required
Array<object>

One day of the day-bar report.

object
date
required
string format: date
state
required
string
Allowed values: ok degraded down
uptimePct
required

Incident-based uptime % for the day, or null with no checks.

number | null
regions
required

Per-region daily stats, keyed by region code; absent regions had no checks.

object
key
additional properties
object
total
required

Probes in the window.

integer
failed
required
integer
p50Ms
required

Median latency, ms.

number | null
p95Ms
required

95th-percentile latency, ms.

number | null
events
required
Array<object>

A confirmed downtime incident (multi-region consensus).

object
id
required
string format: uuid
tenant_id
required
string
monitor_id
required
string format: uuid
down_at
required

Epoch ms the incident was confirmed.

integer
recovered_at
required

Epoch ms of recovery, or null while ongoing.

integer | null
cause
required

Why the probes failed, classified.

string | null
Allowed values: dns tls timeout http_5xx http_4xx redirect network
regions
required

JSON per-region probe snapshot captured at confirmation.

string | null
created_at
required
integer
overallUptimePct
required

Incident-based uptime % over the window, or null with no data.

number | null
Example
{
"monitor": {
"enabled": 0,
"status": "up"
},
"days": [
{
"state": "ok"
}
],
"events": [
{
"cause": "dns"
}
]
}

Missing or invalid credentials.

Media typeapplication/json
object
error
required

A human-readable error message.

string
Example
{
"error": "invalid api key"
}

The site or monitor was not found.

Media typeapplication/json
object
error
required

A human-readable error message.

string
Example
{
"error": "monitor not found"
}