# Add and group status page components

A **component** is one row on a status page. Most components are backed by one of your monitors and show its live
state and uptime history. A **third-party** component represents something you do not monitor - a payment provider,
a cloud region - whose state you set by hand.

## Component fields

| Field (UI label) | API field | Type / allowed values | Default | What it does for you |
|---|---|---|---|---|
| Monitor (**Choose a monitor...**) | `monitorId` | One of your monitors | - | The monitor whose checks drive the row's state and uptime. |
| **This isn't monitored by HostTracker (third-party)** | `thirdParty` | `true` / `false` | `false` | Makes a hand-set component with no monitor behind it. |
| **Public label** | `name` | Text, up to 200 characters. Required for a third-party component | The monitor's name | The name visitors see. |
| **Group** (optional) | `group` | Text, up to 100 characters | none | Rows sharing a group name are listed together under that heading. |
| **Status** (third-party only) | `manualState` | `operational`, `degraded`, `down` (UI: **Operational**, **Degraded**, **Down**) | Operational | The state you declare for a third-party service. Ignored on monitored rows. |
| Order | array order | - | the order you add them | The display order on the page. |
| - | `id` | Component id | assigned | Keeps a component (and the subscribers scoped to it) when you replace the component list through the API. |

The page-level switch **Auto-add all monitors** (`settings.autoAddMonitors`, default off) adds every monitor on your
account automatically, including ones you create later; rows you listed yourself keep their labels, groups and
order.

## Add monitors in the app

1. Open **Status pages**, click **Edit** on the page, and go to the **Monitors** tab.
2. Under **Add a monitor**, use **Choose a monitor...** / **Search your monitors...** to find one, optionally set its
   **Public label** and **Group**, and click **Add**.
3. To add many at once, open **Bulk add**: filter by tags (monitors without a tag are listed as **(untagged)**) and
   by name or URL, optionally set a **Group for added monitors**, then add all matching monitors.
4. To add a service you do not monitor, tick **This isn't monitored by HostTracker (third-party)**, enter the
   **Public label (required)** and pick a **Status**.
5. Changes on this tab are saved as you make them.

Each row shows a status dot, the label, badges where they apply (**Third-party**, **Paused**, **Monitor deleted - not
shown on the page**, **Not on your plan**), and its **30d uptime**. Use the pencil (**Edit**) to change the label,
group or third-party status, and **Remove** to take a row off the page. **Select** switches to multi-select, with
**Select all** and **Clear**, for removing many rows.

## Order and group

- **Drag** a row by its handle, or use **Move up** / **Move down** (keyboard and touch).
- **Sort** reorders the whole list by **Friendly name (A -> Z)** or **(Z -> A)**; **Manual order** keeps yours.
- Group headings appear on the public page when **Show monitors under groups** is on (Appearance tab). Turn it off
  for one flat list. On the public page, groups whose services are all operational can collapse, and rows can be
  ordered by state - see [Appearance and branding](/status-pages/branding/#what-visitors-see).

## Do it with the API or MCP

`PUT /statuspage/{id}/component` (scope `statuspage:write`) **replaces the whole component set**; the order of the `components` array
is the display order:

```bash
curl -X PUT https://api2.host-tracker.com/statuspage/PAGE_ID/component \
  -H "Authorization: Bearer $HT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "components": [
      { "id": "EXISTING_COMPONENT_ID", "monitorId": "WEB_MONITOR_ID", "name": "Website", "group": "Web" },
      { "monitorId": "API_MONITOR_ID", "name": "Public API", "group": "API" },
      { "thirdParty": true, "name": "Payment provider", "manualState": "degraded" }
    ]
  }'
```

- Send each existing component's `id` to keep it. An item without an `id` is a **new** component - and email
  subscribers scoped to the old one are unsubscribed, because subscriptions belong to the component id.
- A component you leave out is removed from the page.
- `monitorId` must be one of your own monitors.
- Read the current set with `GET /statuspage/{id}` (the `components` array, with `id`, `monitorId`, `name`,
  `group`, `manualState`).
- To turn on auto-add: `PATCH /statuspage/{id}` with `{"settings": {"autoAddMonitors": true}}`.

**MCP:** `create_status_page` accepts the initial components as `componentsJson`. There is no dedicated tool for
changing components afterwards - use `api_request` with `PUT /statuspage/{id}/component` and the full list (read it
first with `get_status_page`). **Terraform:** the `components` attribute of `hosttracker_status_page` also writes
the whole set.

## What a component shows

- **State**: from the monitor's latest checks - operational, down, maintenance (inside a maintenance window), or no
  data. A paused monitor shows without data unless **Hide paused monitors** is on.
- **Uptime**: a percentage and a 90-day bar, one tick per day; maintenance days are blue.
- Monitor names, URLs and settings changes are reflected automatically; there is nothing to keep in sync.
- A monitor can be a component on several status pages (for example a public page and a password-protected one for
  a client).

## Removing components and deleted monitors

- Removing a component takes it off the page only; the monitor keeps checking and alerting.
- If visitors subscribed to that component alone, the editor warns you first ("Remove this monitor?") - those
  subscriptions are deleted with it.
- If you delete the monitor behind a component, the row stays in the editor marked **Monitor deleted - not shown on
  the page** and disappears from the public page. Remove it when convenient.

## Limits and gotchas

- **Components per page** depend on your plan: 1 on the smallest plans, otherwise as many as your plan has monitors,
  between 5 and 150. See [plan limits](/status-pages/plan-limits/). Going over answers `403 package_limit` with
  `feature: "statusPages.components"`.
- **After a downgrade**, rows past the new limit stay in the editor (marked **Not on your plan**) but only the first
  rows, in your order, appear publicly. Reorder to choose which ones show.
- **Auto-add** shows at most 100 monitors publicly, and never more than your component limit.
- A third-party component has no uptime history - HostTracker never checked it.

## Related

- [Create a status page](/status-pages/create/)
- [Appearance and branding](/status-pages/branding/)
- [Let visitors subscribe](/status-pages/subscribers/)
- [Status page plan limits](/status-pages/plan-limits/)
