# Summarize every page

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

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

Every page the caller can see (the page list's scope, `team_id` too) with the
status visitors see, its component count, the active incident and the
maintenance in progress, plus the organization's counts of active incidents,
maintenance today and confirmed subscribers.

Incident, maintenance and subscriber figures need their own read permission
too: without `status:incident:read`, `status:maintenance:read` or
`status:subscriber:read` they are `null`, not an error.

**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 summary.

Content type: `application/json`

Type: `object`

- `data` (PagesSummary, required)
  - `pages` (array of object)
    - `id` (string (uuid))
    - `name` (string)
    - `status` (ComponentStatus, one of `operational`, `degraded`, `partial_outage`, `major_outage`, `maintenance`)
    - `components` (integer)
    - `active_incident` (object | null)
      - One of:
        - object
          - `id` (string)
          - `title` (string)
          - `status` (IncidentStatus, one of `investigating`, `identified`, `monitoring`, `resolved`)
        - null
    - `active_maintenance` (object | null)
      - One of:
        - object
          - `id` (string)
          - `title` (string)
          - `starts_at` (string (date-time))
          - `ends_at` (string (date-time))
        - null
  - `active_incidents` (integer | null): `null` without `status:incident:read`.
  - `maintenance_today` (integer | null): `null` without `status:maintenance:read`.
  - `subscribers` (integer | null): Confirmed subscribers; `null` without `status:subscriber:read`.
- `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/summary' \
  -H 'Authorization: Bearer <TOKEN>'
```
