# Get every page's state

`GET https://evohub.io/api/v1/pages/overview`

Part of the [Status API](https://docs-dev.evohub.io/status.md) reference · operationId `getPagesOverview`.

One entry per page the caller can see (the page list's scope, `team_id` too):
its domain state, component and subscriber counts, the overall status as the
public page works it out, the newest open incident and the current or next
maintenance. Live monitor states are read with a short time budget; a slow
Uptime falls back to the stored status.

**Permission (API-key scope):** `status:page:read`.

## Authorization

Any one of:

- `bearerAuth` (status:page:read)
- `apiKeyHeader` (status:page:read)

Where:

- `bearerAuth`: HTTP Bearer — An EvoHub API key (`evohub_…`) as a bearer token.
- `apiKeyHeader`: API key in the header `X-API-Key` — An EvoHub API key (`evohub_…`).

## Query parameters

- `team_id` (string): Only this team's pages. A team the caller cannot see gives an empty list.

## Responses

### 200 — The pages' state.

Content type: `application/json`

Type: `object`

- `data` (array of PageOverview, required)
  - `page_id` (string (uuid))
  - `domain_status` (string): The custom domain's state (`none`, `pending`, `verifying`, `active`, `error`).
  - `components` (integer)
  - `affected_components` (integer): Components visitors see as anything but operational.
  - `overall_status` (ComponentStatus, one of `operational`, `degraded`, `partial_outage`, `major_outage`, `maintenance`)
  - `subscribers` (integer)
  - `live_incidents` (integer)
  - `live_incident` (object | null): The newest open incident.
    - One of:
      - object
        - `id` (string)
        - `title` (string)
        - `impact` (IncidentImpact, one of `none`, `minor`, `major`, `critical`)
        - `updated_at` (string (date-time))
      - null
  - `maintenance` (object | null): The window in progress, else the next one scheduled.
    - One of:
      - object
        - `id` (string)
        - `title` (string)
        - `status` (MaintenanceStatus, one of `scheduled`, `in_progress`, `completed`)
        - `scheduled_start` (string (date-time))
        - `scheduled_end` (string (date-time))
      - null
- `success` (boolean, required, value `true`)

### 401 — No API key was sent, or it is unknown, revoked or expired (`UNAUTHORIZED`).

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required): Machine-readable code. Branch on this.
  - `message` (string, required): Human-readable explanation.
  - `request_id` (string): This request's id, also in `X-Request-ID`.

### 403 — The key lacks the scope this endpoint needs (`FORBIDDEN`).

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required): Machine-readable code. Branch on this.
  - `message` (string, required): Human-readable explanation.
  - `request_id` (string): This request's id, also in `X-Request-ID`.

### 429 — Too many requests (`RATE_LIMITED`). Wait `Retry-After` seconds.

Headers:

- `Retry-After` (integer): Seconds to wait.

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required): Machine-readable code. Branch on this.
  - `message` (string, required): Human-readable explanation.
  - `request_id` (string): This request's id, also in `X-Request-ID`.

### 500 — Something went wrong on EvoHub's side (`INTERNAL_ERROR`). Retry later.

Content type: `application/json`

Type: `Error`

- `error` (object, required)
  - `code` (string, required): Machine-readable code. Branch on this.
  - `message` (string, required): Human-readable explanation.
  - `request_id` (string): This request's id, also in `X-Request-ID`.

## Example request

```bash
curl -X GET 'https://evohub.io/api/v1/pages/overview' \
  -H 'Authorization: Bearer <TOKEN>'
```
