# Alerts & contacts overview

HostTracker alerting has two separate ideas that are easy to mix up: a **contact** is *where* an alert can be
delivered, and a **subscription** is *what* it gets alerted about. Set up a contact once, then subscribe it to
as many monitors as you like.

## Contacts vs subscriptions

- A **[contact](/alerts/contacts/)** is a delivery address: an email, a phone number, a Telegram chat, a Slack
  webhook, a PagerDuty key and so on. Creating a contact does not alert anyone by itself - and for email, SMS
  and voice it stays that way until it's [confirmed](/alerts/contacts/#confirmation---why-an-unconfirmed-contact-gets-nothing).
- A **[subscription](/alerts/subscriptions/)** binds one monitor to one contact and picks which events it should
  hear about (Up, Down, still-down) or which scheduled reports it should receive.
- **[Contact groups](/alerts/contact-groups/)** are a passive, named preset you apply to a monitor in one step -
  applying it writes ordinary subscriptions once, it isn't a live link. **[Subscribing monitors to a
  contact](/alerts/subscribe-monitors/)** manages subscriptions from the contact's side, one contact against many
  monitors.
- In the app, a new monitor is subscribed to all your contacts (Up and Down alerts, Weekly and Monthly reports) because
  the create form's **Subscribe all** switch starts on; turn it off before saving to choose contacts yourself. A
  monitor created through the API or MCP has no subscriptions until you add them.

## Channels at a glance

| Channel | Typical use |
|---|---|
| [Email](/alerts/channels/email/) | The default, always-on channel. Free. |
| [SMS](/alerts/channels/sms/) / [Voice call](/alerts/channels/voice/) | Loud, hard-to-miss alerts. Billed from your SMS credit - see [SMS & voice billing](/alerts/sms-billing/). |
| [Telegram](/alerts/channels/telegram/) / [Discord](/alerts/channels/discord/) / [Viber](/alerts/channels/viber/) | Chat apps, set up by registering with the HostTracker bot rather than typing an address. |
| [Slack](/alerts/channels/slack/) / [Microsoft Teams](/alerts/channels/teams/) / [Mattermost](/alerts/channels/mattermost/) | Team chat, set up with an incoming webhook. |
| [PagerDuty](/alerts/channels/pagerduty/) / [Opsgenie](/alerts/channels/opsgenie/)&nbsp;¹ | On-call paging, addressed by an integration key. Every alert is sent immediately, never batched. |
| [Pushover](/alerts/channels/pushover/) / [Pushbullet](/alerts/channels/pushbullet/) | Personal push notifications, addressed by a key or token. |
| [WhatsApp](/alerts/channels/whatsapp/)&nbsp;¹ | Sent via the Meta Cloud API. |
| [Web push](/alerts/channels/web-push/) | A browser notification, registered from the web app itself. |
| [Webhook](/alerts/channels/webhook/) | Send the alert as JSON to your own endpoint (unsigned - the signed, typed [webhooks](/integrations/webhooks/) system is a separate resource under Integrations). |

¹ Opsgenie and WhatsApp aren't creatable for any account today - the New Contact picker hides both (along with
the retired Skype and the hidden-by-design Facebook/Google Chat bot channels). Every other type in the table,
including all seven flavors an `http` contact can take (Slack, Teams, PagerDuty, Pushover, Pushbullet,
Mattermost, or a plain webhook), is live. See [what a contact is](/alerts/contacts/#contact-types) for the
full picture.

See the [full channel list and setup guides](/alerts/channels/) for details on every option.

## Escalation, timing and grouping

- **[Alert delays & escalation](/alerts/escalation/)** - a contact can wait before it hears about a Down (a
  fixed ladder from instant up to 24 hours), and an outage that keeps going can escalate to later contacts.
- **[Active hours](/alerts/active-hours/)** - restrict a contact to chosen hours, days and a timezone.
- **[Grouped alerts](/alerts/grouped-alerts/)** - many alerts firing close together for the same contact can be
  coalesced into one message instead of a flood; on-call channels (PagerDuty, Opsgenie) never do this.
- **[Test a contact](/alerts/test-a-contact/)** - send a real sample alert to confirm a contact is wired up
  correctly, before you rely on it.

## Check it with the API or MCP

An agent auditing or rebuilding a user's alerting setup typically works top-down: `list_contacts` (or
`GET /contact`) to see every delivery address and whether each is confirmed, then `list_subscriptions` (or
`GET /alert` / `GET /report`) to see who's subscribed to what. `GET /contact/{id}?expand=subscription` folds
both together for one contact. See [what a contact is](/alerts/contacts/) and
[subscriptions](/alerts/subscriptions/) for the exact fields and bodies.

## Related

- [Subscriptions: alert vs report](/alerts/subscriptions/)
- [How down detection works](/monitors/down-detection/)
- [SMS & voice billing](/alerts/sms-billing/)
