How SMS & voice alert billing works
Some alert channels have a real per-message cost. Here’s how that cost is calculated and what to do when your balance runs low.
What’s billed and what’s free
Section titled “What’s billed and what’s free”- Email, webhooks, and the chat/bot/push channels (Slack, Teams, Telegram, Discord, Viber, Mattermost, web push, PagerDuty, Opsgenie, Pushover, Pushbullet) are free - they don’t draw from any balance.
- SMS and voice calls draw from your account’s SMS credit balance, counted in segments as below.
- WhatsApp is designed to bill the same way as SMS (same segment/encoding math, from the same credit balance) once it ships - it isn’t a free channel, even though it isn’t yet creatable for any account (see WhatsApp).
A contact’s per-message cost is exposed on the API as sendCost (GET /contact/{id} - present only for sms
and voiceCall contacts, omitted for every other type) - the price per segment for that specific contact,
before the segment/multiplier math below is applied.
Monthly SMS allowance
Section titled “Monthly SMS allowance”Paid plans include a free monthly SMS allowance - a number of SMS credits refreshed each billing cycle before any paid balance is drawn down. Once the free allowance for the month is used, further SMS/voice alerts draw from your paid credit balance.
How a message is counted - segments
Section titled “How a message is counted - segments”An SMS isn’t billed as “one message” flat - it’s billed by segments, based on the character count and alphabet used:
| Encoding | Used when | Single segment | Each extra segment |
|---|---|---|---|
| GSM-7 / Latin | Every character in the message has a code point under 256 (plain Latin text, digits, common punctuation) | 160 characters | 153 characters |
| UCS-2 | The message contains even one character at code point 256 or above (Cyrillic, Arabic, emoji, and other non-Latin scripts) | 70 characters | 67 characters |
A message longer than one segment’s worth of characters is split and billed as multiple segments (segment count = total length divided by the extra-segment size, rounded up). This is why an alert with a longer error message, a non-Latin monitor name, or an emoji can cost more than one credit - keeping monitor and contact names in plain Latin text keeps messages in the cheaper encoding.
On top of the segment count, a 2x multiplier applies to the whole message whenever it contains any character at code point 256 or above - each segment of that message is billed at double the normal per-segment cost, in addition to UCS-2 already fitting fewer characters per segment. This compounds the cost of non-Latin monitor names, error messages, or emoji even further than the segment table alone suggests. A message that is entirely Latin/digits/punctuation is never multiplied, however long it is.
Voice calls are billed by the same per-segment, text-length math as SMS, applied to the text of the spoken script - not a flat per-call price. A longer or non-Latin script costs more, the same way a longer or non-Latin SMS does.
Do it with the API or MCP
Section titled “Do it with the API or MCP”Billing itself isn’t a setting you configure - it’s a consequence of the contact type and the message text. The one thing you can read is the per-segment price for a specific contact:
GET /contact/{id}The response’s sendCost field (present only for sms/voiceCall) is the price per segment before the
segment-count and 2x multiplier above are applied. There’s no MCP tool that returns account balance or segment
pricing directly - get_account/get_account_usage cover quota and package limits, not the SMS credit ledger.
Low balance
Section titled “Low balance”When your SMS credit balance runs low, HostTracker sends a low-balance warning email so you can top up before SMS/voice alerts start failing. Top up from Billing in your account.
Limits and gotchas
Section titled “Limits and gotchas”- There is no per-message price cap - a sufficiently long, non-Latin message can cost several segments at the doubled rate. Keep monitor/contact names and any custom text in Latin characters if cost predictability matters more than the exact wording.
- The free monthly allowance and paid balance are pooled at the account level, not per contact - every SMS and voice contact on the account draws from the same balance.
- A send that would exceed the balance fails silently from the recipient’s point of view - nothing is queued or retried once funds run out; top up and the next scheduled check’s alert goes through normally.

