# Set up SMS alerts

SMS is a loud, hard-to-miss channel that doesn't depend on a data connection, making it a good choice for a
personal phone contact or a mid-tier in an [escalation ladder](/alerts/escalation/).

## Settings reference

| Setting (UI label) | API field (v2) | Type / allowed values | Default | Plan limits | What it does for you |
|---|---|---|---|---|---|
| Contact Type | `type` | `"sms"` | - | - | |
| Phone number | `address` | Phone number in full international format (with country code) | - (required) | - | Where the text is sent |

`groupedAlerts`, `plainText`, `mimeType`, `httpHeaders` and `templates` don't apply to SMS - the app doesn't
show them for this type, and setting them through the API has no effect on delivery. SMS cannot receive
scheduled reports (email-only, see [subscriptions](/alerts/subscriptions/#event-types)).

## Set it up in the app

1. Open **Alerts & Contacts** and click **+ Add contact**.
2. Choose **SMS**.
3. Enter the phone number in full international format (with country code), and give the contact a name.
4. Save, then confirm the contact using the code sent to that number. See
   [confirmed vs unconfirmed contacts](/alerts/contacts/#confirmation---why-an-unconfirmed-contact-gets-nothing).

## What the message looks like

A short plain-text message: the monitor's name, what happened (down/up/still-down), and a brief error summary
when there is one - no links, no formatting, since SMS has no rich content. See
[SMS & voice billing](/alerts/sms-billing/) for exactly how the message text turns into a segment count and a
cost.

## Do it with the API or MCP

```
POST /contact
{ "type": "sms", "address": "+15551234567", "name": "On-call phone" }
```

MCP: `create_contact(type="sms", address="+15551234567", name="On-call phone")`. Confirm with
`send_contact_confirmation` / `confirm_contact`.

## What happens next

HostTracker sends a confirmation code by text immediately. The contact receives nothing real until it's
confirmed. Once confirmed and subscribed, every Down/Up/still-down that reaches it (after its own alert delay
and active hours) is a billed SMS - see [SMS & voice billing](/alerts/sms-billing/).

## Limits and gotchas

- SMS draws from your **SMS credit balance** and is counted by segment - a message using non-Latin characters
  or emoji costs more segments than plain text. See [how SMS & voice billing works](/alerts/sms-billing/).
- Some countries and carriers restrict delivery from certain senders - if a confirmation code doesn't arrive,
  double-check the number format before assuming it's a delivery problem.
- Pair SMS with [active hours](/alerts/active-hours/) if you don't want text messages outside working hours.
- Changing a confirmed contact's address resets it back to unconfirmed - a new code goes to the new number.

## Related

- [How SMS & voice billing works](/alerts/sms-billing/)
- [Voice call](/alerts/channels/voice/)
- [All channels](/alerts/channels/)
