Skip to content

Get the all-sites overview

GET
/v1/sites/overview
curl --request GET \
--url https://api.overwatch.weareheavy.dev/v1/sites/overview \
--header 'x-api-key: <x-api-key>'

Every visible site with its last two completed crawl runs (for deltas) and its uptime-monitor status counts, plus the organization’s monitor quota — the all-sites dashboard payload in one round trip. The latest accessibility score is stitched onto each run even though the a11y scan runs on its own clock.

Per-site overviews plus the monitor quota.

Media typeapplication/json
object
sites
required
Array<object>

One site’s overview-card payload.

object
site
required

A monitored site, including its per-app toggles.

object
id
required
string format: uuid
tenant_id
required

The owning organization (tenant) id.

string
hostname
required

The hostname derived from root_url; the crawl whitelist.

string
root_url
required
string format: uri
cadence_minutes
required
integer
max_pages
required
integer
max_concurrency
required
integer
enabled
required

1 if the site is actively scheduled, 0 if disabled.

integer
Allowed values: 0 1
last_run_at
required

Epoch ms of the last run, or null.

integer | null
next_run_at
required

Epoch ms of the next scheduled run, or null.

integer | null
created_at
required

Epoch ms the site was registered.

integer
scanner_enabled
required

1 when the Broken Links app is installed. The shared crawl runs when any of it, the Accessibility app, or the SEO app is on.

integer
Allowed values: 0 1
a11y_enabled
required

1 when the Accessibility app is installed.

integer
Allowed values: 0 1
a11y_cadence_minutes
required

The accessibility scan’s own cadence; null falls back to cadence_minutes.

integer | null
a11y_next_run_at
required

Epoch ms the next standalone accessibility scan is due, or null.

integer | null
performance_enabled
required

1 when the Performance app (CrUX sync + regression alerts) is installed.

integer
Allowed values: 0 1
uptime_enabled
required

1 when the Uptime app is installed; 0 stops probing but keeps monitors.

integer
Allowed values: 0 1
seo_enabled
required

1 when the SEO app is installed (on-page checks extracted during the crawl).

integer
Allowed values: 0 1
crux_status

CrUX sync state: null = never checked, ok = data, no-data = not in the dataset.

string | null
crux_checked_at

Epoch ms the CrUX sync last ran for this site.

integer | null
exclude_paths
required

JSON-encoded array of glob patterns for internal paths never crawled.

string
strip_params
required

JSON-encoded array of query-parameter names dropped before crawling.

string
latestRun
required
One of:

A compact completed run for the overview cards.

object
id
required
string format: uuid
started_at
required

Epoch ms.

integer
broken_count
required
integer
a11y_score
required

The latest accessibility score, stitched from the a11y clock.

integer | null
pages_crawled
required
integer
previousRun
required
One of:

A compact completed run for the overview cards.

object
id
required
string format: uuid
started_at
required

Epoch ms.

integer
broken_count
required
integer
a11y_score
required

The latest accessibility score, stitched from the a11y clock.

integer | null
pages_crawled
required
integer
monitors
required

The site’s uptime monitors, counted by current status.

object
count
required
integer
up
required
integer
degraded
required
integer
down
required
integer
unknown
required
integer
monitorQuota
required

The organization’s pooled monitor allowance.

object
count
required

Monitors currently configured across the organization.

integer
included
required

Monitors included in the subscription (2 per site, unless operator-overridden).

integer
overageEnabled
required
boolean
Example
{
"sites": [
{
"site": {
"enabled": 0,
"scanner_enabled": 0,
"a11y_enabled": 0,
"performance_enabled": 0,
"uptime_enabled": 0,
"seo_enabled": 0,
"exclude_paths": "[\"/drafts/*\"]",
"strip_params": "[\"utm_source\"]"
}
}
]
}

Missing or invalid credentials.

Media typeapplication/json
object
error
required

A human-readable error message.

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