# Read a public page by domain

`GET https://evohub.io/api/v1/public/pages/by-domain/{domain}`

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

The same as reading it by id, found by its custom domain. No API key.

## Path parameters

- `domain` (string, required, example `status.example.com`): The page's custom domain, for example `status.example.com` (case-insensitive).

## Responses

### 200 — The page as visitors see it.

Content type: `application/json`

Type: `object`

- `data` (PublicPage, required)
  - `page` (object): The page as visitors see it: the admin page object without `org_id`, `team_id`, `reply_to_email` and the analytics retention, with `analytics` reduced to `{enabled, ga4_measurement_id, honor_privacy_signals}`.
  - `overall_status` (ComponentStatus, one of `operational`, `degraded`, `partial_outage`, `major_outage`, `maintenance`)
  - `components` (array of object)
    - `id` (string)
    - `name` (string)
    - `description` (string)
    - `source` (string)
    - `status` (ComponentStatus, one of `operational`, `degraded`, `partial_outage`, `major_outage`, `maintenance`)
    - `position` (integer)
    - `group` (string)
    - `uptime_percentage` (number): Monitor-linked components: uptime over the page's history window.
    - `uptime_history` (array of object)
      - `date` (string (date))
      - `status` (string)
      - `up_ratio` (number)
  - `active_incidents` (array of object): Open incidents: `id, title, impact, status, started_at, resolved_at, affected_component_ids, updates[], postmortem, postmortem_published_at`.
  - `scheduled_maintenances` (array of object)
  - `past_incidents` (array of object): Resolved within the page's history window.
  - `product_pages` (array of object)
    - `name` (string)
    - `slug` (string)
    - `component_ids` (array of string)
    - `logo_url` (string)
- `success` (boolean, required, value `true`)

### 404 — No public page with that id or domain (`NOT_FOUND`). A private page answers the same.

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/public/pages/by-domain/status.example.com'
```
