# Dashboard API

The Uptizm API has 4 endpoints on this resource, one section each.

## Get team statistics

`GET /dashboard/stats`

Monitor counts by status, average response time, open incidents and the rolling 24 hour uptime with its change against the previous 24 hours.

- URL: `https://api.uptizm.com/v1/dashboard/stats`
- Auth: `Authorization: Bearer upz_...`
- Required ability (`x-required-ability`): `stats:read`
- Tag: Dashboard
- operationId: `v1.dashboard.stats`

### Response 200

Content type: `application/json`.

- `data` (object, required)
  - `monitors_up` (integer, required)
  - `monitors_down` (integer, required)
  - `monitors_degraded` (integer, required)
  - `monitors_maintenance` (integer, required)
  - `monitors_paused` (integer, min 0, required)
  - `monitors_pending` (integer, min 0, required)
  - `monitors_total` (integer, min 0, required)
  - `avg_response_ms` (integer or null, required)
  - `open_incidents` (integer, min 0, required)
  - `uptime_24h` (number or null, required)
  - `uptime_24h_delta` (number or null, required)

### Errors

- 401: Unauthenticated
- 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team.
- 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds.

Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md

## List active incidents

`GET /dashboard/active-incidents`

The team's unresolved incidents, newest first.

- URL: `https://api.uptizm.com/v1/dashboard/active-incidents`
- Auth: `Authorization: Bearer upz_...`
- Required ability (`x-required-ability`): `stats:read`
- Tag: Dashboard
- operationId: `v1.dashboard.active-incidents`

### Response 200

Content type: `application/json`.

- `data` (array of IncidentResource and object, required)
  - `id` (string, required)
  - `team_id` (string, required)
  - `title` (string, required)
  - `title_key` (string or null, required): The translation key of the incident title, sent beside `title`.
  - `title_params` (array of any, required)
  - `lifecycle` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required)
  - `severity` (string, one of `"critical"`, `"warn"`, `"info"`, required)
  - `impact` (string, one of `"none"`, `"minor"`, `"major"`, `"critical"`, required)
  - `signal_source` (string, one of `"user_threshold"`, `"ai_anomaly"`, `"manual"`, required)
  - `ai_owned` (boolean, required)
  - `primary_monitor_id` (string or null, required)
  - `trigger_metric_key` (string or null, required)
  - `started_at` (string, required)
  - `resolved_at` (string or null, required)
  - `postmortem_body` (string or null, required)
  - `postmortem_published_at` (string or null, required)
  - `assignee` (object): The responder the incident is assigned to, or null when it is unassigned.
    - `id` (string, required)
    - `name` (string, required)
  - `ai_investigation` (object or null): The AI investigation report for the incident, or null when there is none to show.
    - `verdict` (string or null, required)
    - `summary` (string or null, required)
    - `evidence_for` (string or array of string, max items 0, required)
    - `evidence_against` (string or array of string, max items 0, required)
    - `used_confirmation` (boolean, required)
    - `confirmation_region` (string, required)
    - `model` (string, required)
  - `monitors` (array of object, required)
    - `monitor_id` (string, required)
    - `name` (string, required)
    - `component_status_at_start` (string or null, required)
    - `component_status_current` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required): Read from the monitor, not the pivot.
  - `updates` (array of IncidentUpdateResource, required)
    - `id` (string, required)
    - `incident_id` (string, required)
    - `actor` (string, required)
    - `author` (string or null, required)
    - `status` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required)
    - `message` (string, required)
    - `is_public` (boolean, required)
    - `autonomous` (boolean, required)
    - `display_at` (string, required)
    - `created_at` (string or null, required)
  - `created_at` (string or null, required)
  - `updated_at` (string or null, required)

### Errors

- 401: Unauthenticated
- 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team.
- 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds.

Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md

## List the worst monitors

`GET /dashboard/monitors-snapshot`

The team's monitors in the worst state, worst first, capped.

- URL: `https://api.uptizm.com/v1/dashboard/monitors-snapshot`
- Auth: `Authorization: Bearer upz_...`
- Required ability (`x-required-ability`): `stats:read`
- Tag: Dashboard
- operationId: `v1.dashboard.monitors-snapshot`

### Response 200

Content type: `application/json`.

- `data` (array of MonitorResource, required)
  - `id` (string, required)
  - `team_id` (string, required)
  - `name` (string, required)
  - `url` (string or null, required)
  - `type` (string, required)
  - `method` (string, one of `"get"`, `"post"`, `"head"`, required)
  - `status` (string, required)
  - `paused_by_plan` (boolean, required): Why a paused monitor is paused: true when the plan stopped it, so the client offers an upgrade; false for a pause the customer chose.
  - `paused_for_downtime` (boolean, required): True when a month of nothing but `down` readings paused a Free monitor.
  - `last_status` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required)
  - `check_interval_sec` (integer, required)
  - `effective_check_interval_sec` (integer, required): What the loop actually spends, which is the stored value clamped up to the plan's floor.
  - `timeout_sec` (integer, required)
  - `regions` (array of any, required)
  - `expected_status_code` (integer, required)
  - `request_headers` (array of any): Both emitted so the edit form can prefill what the operator configured.
  - `request_body` (string or null)
  - `ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace.
  - `effective_ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace.
  - `ai_auto_updates` (boolean, required): Read back by the monitor form's own switch.
  - `auth_config` (array of any or null, required)
  - `slo_target` (number or null, required)
  - `escalation_policy_id` (string or null, required): The pinned paging ladder, or null to fall back to the team default.
  - `uptime_24h` (string, required): Measured uptime over the trailing 24h, attached by the show action only (null in list/edit responses and while a monitor has no checks yet, which the client renders as "no data").
  - `slo_down_minutes_7d` (string, required)
  - `slo_observed_minutes_7d` (string, required)
  - `slo_gap_minutes_7d` (string, required)
  - `slo_measured_minutes_7d` (string, required)
  - `slo_down_minutes_30d` (string, required)
  - `slo_observed_minutes_30d` (string, required)
  - `slo_gap_minutes_30d` (string, required)
  - `slo_measured_minutes_30d` (string, required)
  - `tags` (array of any, required)
  - `show_on_status_page` (boolean, required)
  - `only_show_if_degraded` (boolean, required)
  - `follow_redirects` (boolean, required)
  - `alert_on_down` (boolean, required)
  - `alert_on_recover` (boolean, required)
  - `ssl_tracking` (boolean, required)
  - `anomaly_detection` (boolean, required)
  - `response_anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required)
  - `ssl_expires_at` (string or null, required)
  - `ssl_last_checked_at` (string or null, required)
  - `ssl_last_error` (string or null, required)
  - `ssl_alert_threshold_days` (integer, required)
  - `is_group` (boolean, required)
  - `parent_id` (string or null, required)
  - `last_checked_at` (string or null, required)
  - `last_response_ms` (integer or null, required)
  - `last_probe_error` (string or null, required): Set when the EDGE refused to run a probe, which is a configuration problem on this monitor rather than an outage of its target.
  - `last_probe_error_at` (string or null, required)
  - `next_check_at` (string or null, required)
  - `consecutive_fails` (integer, required)
  - `incident_threshold` (integer, required)
  - `assertion_rules` (array of any or null, required): Null for both means off: no rules asserted, no degraded threshold.
  - `degraded_after_ms` (integer or null, required)
  - `maintenance_tolerance_sec` (integer, required)
  - `description` (string or null, required)
  - `description_source` (string or null, one of `"ai_draft"`, `"user"`, `null`, required)
  - `site_kind` (string or null, one of `"ecommerce"`, `"saas"`, `"api"`, `"content"`, `"corporate"`, `"other"`, `null`, required)
  - `intent` (string or null, required)
  - `created_at` (string or null, required)
  - `updated_at` (string or null, required)

### Errors

- 401: Unauthenticated
- 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team.
- 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds.

Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md

## List pending AI suggestions

`GET /dashboard/ai-inbox`

The newest pending AI suggestions, with `meta.total` counting all of them.

- URL: `https://api.uptizm.com/v1/dashboard/ai-inbox`
- Auth: `Authorization: Bearer upz_...`
- Required ability (`x-required-ability`): `stats:read`
- Tag: Dashboard
- operationId: `v1.dashboard.ai-inbox`

### Response 200

Content type: `application/json`.

- `data` (array of string, required)
- `meta` (object, required)
  - `total` (integer, min 0, required)

### Errors

- 401: Unauthenticated
- 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team.
- 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds.

Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md
