# Alert channels

HostTracker can deliver an alert over any of the channels below. Each has its own short setup guide with the
exact steps, what the message looks like, and any gotchas. See [what a contact is](/alerts/contacts/) for the
full contact model these all share (confirmation, alert delay, active hours, grouping).

## Which to use

| Channel | Addressed by | API type token | Best for |
|---|---|---|---|
| [Email](/alerts/channels/email/) | Email address | `email` | The default channel - always start here. |
| [SMS](/alerts/channels/sms/) | Phone number | `sms` | A loud alert that reaches you without a data connection. |
| [Voice call](/alerts/channels/voice/) | Phone number | `voiceCall` | The hardest alert to miss - good for a top escalation tier. |
| [Telegram](/alerts/channels/telegram/) | Bot registration | `telegram` | Free, instant, and doubles as a chat with the HostTracker bot. |
| [Slack](/alerts/channels/slack/) | Incoming webhook URL | `http` + gateway `Slack` (or auto-detected from the address) | Team alerts in a shared channel. |
| [Microsoft Teams](/alerts/channels/teams/) | Workflow webhook URL | `http` + gateway `Teams` | Team alerts for Teams-based organizations. |
| [Discord](/alerts/channels/discord/) | Bot registration | `discord` | Community or team alerts in a Discord server. |
| [Viber](/alerts/channels/viber/) | Bot registration (QR code) | `viber` | Personal chat-app alerts. |
| [Mattermost](/alerts/channels/mattermost/) | Incoming webhook URL | `http` + gateway `Mattermost` | Self-hosted team chat, same setup as Slack. |
| [PagerDuty](/alerts/channels/pagerduty/) | Integration key | `http` + gateway `PagerDuty` | On-call paging and incident management. |
| [Opsgenie](/alerts/channels/opsgenie/)&nbsp;¹ | Integration key | `http` + gateway `Opsgenie` | On-call paging and incident management. |
| [Pushover](/alerts/channels/pushover/) | User key | `http` + gateway `Pushover` | Personal push notifications on phone or desktop. |
| [Pushbullet](/alerts/channels/pushbullet/) | Access token | `http` + gateway `Pushbullet` | Personal push notifications across your devices. |
| [WhatsApp](/alerts/channels/whatsapp/)&nbsp;¹ | Phone number | `whatsApp` | Reaching people who live in WhatsApp. |
| [Web push](/alerts/channels/web-push/) | Browser subscription | `webPush` | A notification in the browser you're using right now. |
| [Webhook](/alerts/channels/webhook/) | URL you control | `http` (no gateway) | Feeding alerts into your own system or automation. |

¹ **Opsgenie and WhatsApp are not yet available** - both exist in the type catalogue but are non-creatable for
every account today: Opsgenie because its setup needs a wire member the contact API doesn't have yet, WhatsApp
because it's parked pending Meta Cloud API onboarding. Facebook Messenger and Google Chat bot channels also
exist in the API but are hidden from the app's New Contact picker by product decision, and Skype is fully
retired (existing rows still read, nothing new can be created).

## Slack, Teams, PagerDuty, Opsgenie, Pushover, Pushbullet and Mattermost are all `http` under the hood

There's no separate storage type for each of these seven - every one of them is an ordinary `http` contact,
distinguished by a **`gateway`** value (`Slack`, `Teams`, `PagerDuty`, `Opsgenie`, `Pushover`, `Pushbullet` or
`Mattermost`) that tells HostTracker how to format and route the request. Slack is the one exception that's
recognized without a gateway value: an address starting with `https://hooks.slack.com/` is detected
automatically. This is why the app shows each as its own type in the picker (so setup matches the service you're
connecting to) while `GET /contact/type` and a plain `POST /contact {"type":"http", ...}` see one underlying
type with a `gateway` field.

## Two ways contacts are addressed

- **Typed address** - you type an email, phone number, webhook URL, integration key, or API/user token
  directly.
- **Registered by wizard** - Telegram, Discord and Viber contacts are created by registering with the
  HostTracker bot (following a link, scanning a QR code, or running a chat command), not by typing an address;
  web push is registered by the browser's own push-subscription handshake.

## Do it with the API or MCP

`GET /contact/type` returns the full catalogue this table is built from, including which types are creatable
today. Create any of the typed-address channels the same way, varying only `type`/`gateway`/`address`:

```
POST /contact
{ "type": "http", "gateway": "PagerDuty", "address": "<integration key>", "name": "On-call" }
```

The MCP `create_contact` tool covers only `email`, `sms`, `voiceCall` and `webPush` directly - creating an
`http`-family contact (including the gateway-recognized ones) from an agent goes through `api_request` with the
body shape above, since it needs the `gateway` field `create_contact` doesn't expose. See each channel's own
page for its exact body.

## Related

- [What a contact is](/alerts/contacts/)
- [Alert delays & escalation](/alerts/escalation/)
- [Grouped alerts](/alerts/grouped-alerts/)
- [SMS & voice billing](/alerts/sms-billing/)
