# Let visitors subscribe to status updates

Subscribers hear about your status page announcements without having to check the page. Visitors subscribe
themselves **by email**; you, the page owner, can add **Slack**, **Microsoft Teams** or **webhook** channels. Both
kinds can follow the whole page or a single component.

## What subscribers receive

| Event | Email subscribers | Slack / Teams / webhook channels |
|---|---|---|
| An incident or maintenance is declared | yes | yes |
| An update is posted to its timeline (including **Resolve**) | yes | yes |
| An announcement is edited or deleted | no | no |
| The announcement banner changes | no | no |
| A monitor goes down on its own (no announcement) | no | no |

Subscribers are notified about what **you** post on the page, not about every check. To alert yourself about
monitor failures, use [alert contacts](/alerts/overview/).

A subscription scoped to one component hears only about announcements whose **Affected monitors** include that
component.

## Email: visitor self-service (double opt-in)

This needs the **Enable subscribe** feature switched on (Settings tab, **Features**) - it is on by default.

1. On the public page the visitor clicks **Subscribe**, enters an email address and, if offered, picks the whole page
   or one component.
2. HostTracker emails a **5-digit confirmation code**, valid for **30 minutes**.
3. The visitor enters the code on the page. Only then does the address start receiving updates.

Rules: after **3** wrong codes the attempt is locked and the visitor has to subscribe again; a new code for the same
address can be requested every **5 minutes**. Every email carries an unsubscribe link, which opens a confirmation
page on your status page (the visitor confirms with a button).

Turning **Enable subscribe** off hides the form and the RSS/Atom feeds **and stops email delivery to people who
already subscribed** (their subscriptions are kept). Push channels keep receiving updates either way.

An owner cannot add an email subscriber - neither in the app nor through the API. Email subscription is always the
address owner's own choice.

## Push channels: Slack, Teams, webhook (owner-added)

| Setting (UI label) | API field | Allowed values | What it does for you |
|---|---|---|---|
| **Type** | `kind` | **Webhook** (`webhook`), **Slack** (`slack`), **Teams** (`teams`) | How the update is formatted and sent. |
| **Webhook URL** | `url` | Absolute `http(s)` URL, up to 500 characters | The incoming-webhook address of your channel or endpoint. |
| **Notify about** | `componentId` | **Everything on this page** (omit) or one component | Scopes the channel to announcements that name that component. |

1. Open the page's **Announcements** tab; the **Subscribers** panel is below the announcements.
2. Click **Add channel**, choose the **Type**, paste the **Webhook URL** and pick **Notify about**.
3. Add it. Channels need no confirmation and start receiving updates at once.

For **Teams**, use a Teams Workflows webhook URL (the "Post to a channel when a webhook request is received"
workflow). Old Office 365 connector URLs no longer work.

## Manage subscribers

The **Subscribers** panel lists everyone and everything subscribed: email addresses (a **Pending** badge until
confirmed) and channels, with their scope. **Remove** takes one off (**Remove?** to confirm). **Export CSV**
downloads the list.

If the panel says no one has subscribed yet, check that **Enable subscribe** is on - visitors subscribe from the
public page.

## Do it with the API or MCP

Scopes `statuspage:read` / `statuspage:write`.

| Task | Operation |
|---|---|
| List subscribers (email with `confirmedAt`, and channels) | `GET /statuspage/{id}/subscriber` |
| Add a push channel | `POST /statuspage/{id}/subscriber` |
| Remove any subscriber | `DELETE /statuspage/{id}/subscriber/{subscriberId}` |

```bash
curl -X POST https://api2.host-tracker.com/statuspage/PAGE_ID/subscriber \
  -H "Authorization: Bearer $HT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "kind": "slack", "url": "https://hooks.slack.com/services/T000/B000/XXXX" }'
```

A subscriber row reads `{id, kind, email?, url?, componentId?, confirmedAt?, created}`. `kind: "email"` cannot be
added through the API.

There are no dedicated MCP tools for subscribers; use `api_request` with the operations above.

## Limits

The number of **confirmed** subscribers per page depends on your plan: 10, 50, 200, 500 or 2,000 - see
[plan limits](/status-pages/plan-limits/). Pending (unconfirmed) emails do not count. Push channels count from the
moment you add them. At the limit, new subscriptions are refused (`403 package_limit` with
`feature: "statusPages.subscribers"`); existing subscribers keep receiving updates even after a downgrade.

Delivery is best-effort: a failing channel never blocks your announcement.

## Related

- [Post announcements and incident updates](/status-pages/announcements/)
- [Add and group components](/status-pages/components/)
- [Status page plan limits](/status-pages/plan-limits/)
