# Publish a public status page

Source: https://docs.imprezahost.com/status-pages.html

A status page shows your visitors whether an application is up, without
giving them anything else about you or your servers. It is **off** for every
app until you publish it, and you can withdraw it at any time.

## What visitors see

The page shows only:

- the **public name** you choose (not the app's internal name);
- the **current state**:

  | State | Meaning |
  | --- | --- |
  | Operational | At least two measurement regions reach the app. |
  | Major outage | At least two regions fail to reach it for the window of your uptime rule. |
  | Degraded | Fewer than two measurement regions are currently healthy, so the state cannot be confirmed. This describes our measurement, not necessarily your app. |
  | Not monitored yet | There is no uptime measurement for this app (see [Before you start](#prerequisites)). |

- **availability** over the last 24 hours, 7 days and 90 days, as a
  percentage of successful checks from all regions together, or "No data
  yet";
- the **incident list**: when each outage started, when it ended (or
  "ongoing") and how long it lasted, up to the last 15.

It never shows your domain, an IP address, the app or account ID, your
e-mail, or which regions measure it. The page loads no third-party resources,
sends no referrer and sets no cookie. The same data is available as JSON with
`?format=json` or `Accept: application/json`.

## Before you start

- **An uptime rule on the app.** The page is built from the external uptime
  checks, which run only for apps with an enabled **external unreachable**
  alert rule (metric `uptime`). Without it the page shows "Not monitored yet"
  and no availability. Add it in **My Apps → Advanced → Metrics & alerts**, or with
  `impreza_set_alert_rule`.
- **A public HTTPS domain or an `.onion` address.** The checks reach the app
  on its own domain over HTTPS (port 443), or on its `.onion` over Tor.
  Apps reachable only over HTTP, on another port or by IP address are not
  checked.

The checks run once a minute from several regions. Samples are kept for 48
hours, hourly totals and state changes for 90 days.

## Publish the page

**Portal:** open the app in **My Apps → Advanced**, card **Public status
page**, type the **Public name** and choose **Publish status page**. The card
is offered for custom apps; for a catalog app, use the API or MCP. Only a
login that may manage the account's apps sees these controls.

**REST** (scope `manage`):

```http
PUT /v1/platform/deployments/custom/{deployment_id}/status-page
{"public_name": "My service", "enabled": true}
```

**MCP:** `impreza_set_status_page` with `deployment_id` and `public_name`, on
the hosted connector or the local `impreza-mcp` 0.56.0 or later.
`impreza_get_status_page` (scope `read`) shows whether the page is on, its
name and its address.

The answer contains the page address, `https://api.imprezahost.com/status/stp_…`.
The token after `/status/` is random: it says nothing about you or the app.
Anyone who has the address can open the page, so share it only where you
want it seen.

## Rename, rotate or withdraw

- **Rename:** publish again with a new `public_name`, or **Save name** in
  the portal. The address does not change.
- **Rotate the address:** `POST /v1/platform/deployments/custom/{deployment_id}/status-page/rotate`,
  **Rotate address** in the portal, or `impreza_set_status_page` with
  `rotate_token: true` (the name stays as it is). A new random address is
  created and the old one answers `404`.
- **Withdraw:** `DELETE /v1/platform/deployments/custom/{deployment_id}/status-page`,
  **Withdraw** in the portal, or `impreza_set_status_page` with
  `enabled: false`. The address answers `404`. Publishing again later
  creates a new address.

After a rotation or a withdrawal the old address answers `404` from the next
request. A page is served with a one-minute cache, so a copy fetched just
before can still be shown for up to 60 seconds. Unknown, malformed and
withdrawn addresses all answer the same `404`.

## Limits

- One page per app. The public name has 1 to 80 characters.
- Visitors are rate limited per network address (60 requests a minute by
  default; `429` with `Retry-After` above that). The limiter keeps only a
  daily-rotated keyed hash of the address, for two minutes.
- **Apps with an `.onion` address:** while the page is published, requests
  for `/status/…` on the app's own addresses are answered by the status page
  service, so the app's own `/status/` path is not reachable there. The
  address the API returns is always the clearnet one.
- Availability counts every region's check. One region that cannot reach the
  app lowers the percentage even while the state stays Operational.
