Skip to content

Get hourly per-region metrics

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

Hourly per-region latency and failure buckets for charts. Buckets are closed hours only — combine with the /live endpoint for the open hour. uptimePct uses the same incident-based definition as the day-bar report, over this range.

id
required
string format: uuid

The site’s UUID.

monitorId
required
string format: uuid

The uptime monitor’s UUID.

hours
integer
default: 24 >= 1 <= 2160

How many hours to cover, ending now. Defaults to 24, capped at 2160 (90 days).

Hourly buckets, incidents in range, and the range’s 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
fromMs
required

Epoch ms of the first bucket.

integer
hours
required
Array<object>

One closed hour of one region’s probes.

object
bucketStart
required

Epoch ms of the hour’s start.

integer
region
required
string
Allowed values: na eu as oc
total
required
integer
failed
required
integer
p50Ms
required
number | null
p95Ms
required
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
uptimePct
required
number | null
Example
{
"monitor": {
"enabled": 0,
"status": "up"
},
"hours": [
{
"region": "na"
}
],
"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"
}