DocsAlerts & incidents
Alerts
Alert contacts for e-mail, SMS, voice calls, Slack, Discord, Microsoft Teams, Google Chat, Telegram, Pushover and webhooks — verification, alert rules, delays, reminders and escalation.
On this page
- What triggers an alert
- Alert contacts and channels
- Verification
- Testing
- Channels that need platform setup
- SMS and voice credits
- Alert rules
- Escalation patterns
- Delivery and retries
- Webhooks
- Default payload
- Custom body templates
- Mobile push notifications
- E-mail preferences and in-app notifications
- In-app notifications
Alerts have two parts:
- Alert contacts — where alerts go (an e-mail address, a phone number, a Slack channel…). Manage them in Alert contacts.
- Alert rules — which monitors alert which contacts, after how long and how often. Set them on each monitor's page under Alert rules.
What triggers an alert#
| Event | When | Webhook event |
|---|---|---|
| Down | A monitor is confirmed down (see how outages are confirmed) | monitor.down |
| Up | The monitor recovered — sent only to contacts that received the down alert | monitor.up |
| Slow | Two consecutive responses slower than the monitor's slow threshold (HTTP/keyword) | monitor.slow |
| SSL certificate expiring | A certificate reaches one of the monitor's "days before expiry" thresholds | ssl.expiring |
| Domain expiring | A domain registration reaches one of the thresholds | domain.expiring |
| Test | You pressed Test on a contact | test |
Monitors in an active maintenance window don't change status and don't alert.
Alert contacts and channels#
| Channel | What you enter | Verification | Notes |
|---|---|---|---|
| An e-mail address | 6-digit code by e-mail | Addresses of confirmed team members are verified automatically. | |
| SMS | A phone number in international (E.164) format, e.g. +40712345678 |
6-digit code by SMS | Uses SMS credits. |
| Voice call | A phone number in E.164 format | 6-digit code by phone call | Uses credits (twice the SMS cost for the destination). |
| Slack | An incoming-webhook URL (https://hooks.slack.com/…) |
— | Create an Incoming Webhook for the channel in your Slack workspace. |
| Discord | A channel webhook URL | — | Channel settings → Integrations → Webhooks. |
| Microsoft Teams | A Workflows webhook URL | — | In Teams, add the Post to a channel when a webhook request is received workflow to the channel; messages are sent as Adaptive Cards. |
| Google Chat | A space webhook URL | — | Space → Apps & integrations → Webhooks. |
| Telegram | The chat ID (a number; negative for groups) | — | Start a chat with our Telegram bot (or add it to the group) first, so it is allowed to message you. |
| Pushover | Your user or group key, plus your Pushover application token | — | Optional device name and priority (default: high for down alerts, normal otherwise). |
| Webhook | Any https:// (or http://) URL |
— | Sends JSON to your own systems; see below. Available on plans with webhooks. |
URLs for Slack, Discord, Teams and Google Chat must use https://. Treat webhook URLs like passwords: anyone who has one can post to your channel.
Verification#
E-mail, SMS and voice contacts must be verified before they receive alerts — this stops alerts (and costs) going to a mistyped number. After you save the contact, enter the 6-digit code we sent. If it didn't arrive, request a new code from the contact. Codes expire; an expired or wrong code is rejected with a clear message.
Testing#
Press Test next to a contact to send a test alert. The result tells you whether the channel accepted the message (for example "HTTP 404" when a webhook URL is wrong).
Channels that need platform setup#
SMS, voice calls and Telegram are delivered through providers configured by the isituprightnow operators. If one of them is not available yet, saving or testing such a contact shows a "not available yet" message instead of failing silently.
SMS and voice credits#
SMS and voice alerts use prepaid credits: one credit per SMS by default, a voice call twice the SMS cost of the destination (some countries cost more). Some plans include monthly credits, and you can buy credit packs in Billing — see Billing. When the balance reaches zero, SMS and voice alerts are skipped (other channels still work) and the account owners and admins get a "credits low" e-mail, at most once a day. The same e-mail is sent when the balance drops to 5 or less.
Alert rules#
Open a monitor and add a rule per contact under Alert rules:
| Field | API field | Values | Meaning |
|---|---|---|---|
| Contact | contactId |
one of your contacts | Who is alerted. |
| After (min) | thresholdMinutes |
0–1440 | Alert only if the monitor is still down after this many minutes. 0 = as soon as the outage is confirmed. |
| Repeat (min) | repeatEveryMinutes |
0, or 5–1440 | Remind every N minutes while the incident is open and not acknowledged. 0 = a single alert. |
Reminders stop when the monitor recovers or when someone acknowledges the incident.
Escalation patterns#
Because every rule has its own delay, a few rules make an escalation policy:
| Contact | After | Repeat | Effect |
|---|---|---|---|
| #ops Slack channel | 0 | 0 | The team sees every outage immediately. |
| On-call engineer (SMS) | 5 | 15 | Paged if it isn't a blip, reminded until someone acknowledges. |
| Engineering manager (voice) | 30 | 0 | Called once if the outage lasts half an hour. |
Delivery and retries#
If a channel fails to accept an alert (for example a webhook answers 500), we retry up to 5 times with growing pauses (1, 2, 4, 8 minutes…). Alerts are written in the language of the recipient: e-mail alerts follow the language of the team member who owns the address; chat, SMS, voice and webhook messages follow the account owner's language.
Webhooks#
A webhook contact sends an HTTP request to your URL for every alert. Configure:
- Method —
POST(default),PUT,PATCHorGET(without a body). - Headers — e.g.
Authorization: Bearer …so your endpoint can authenticate us. - Body template — optional; leave it empty for the default JSON payload.
Requests time out after 10 seconds, don't follow redirects, use the user agent IsItUpRightNow-Webhooks/1.0 (+https://isituprightnow.com) and count as delivered on any 2xx answer. Like checks, webhooks can only reach public internet addresses.
Default payload#
{
"event": "monitor.down",
"monitor": {
"id": "8b0c7d3e-3f5a-4a49-9a51-2f1f0f4c6a10",
"name": "Website — homepage",
"target": "https://www.example.com/"
},
"status": "Down",
"title": "Website — homepage is DOWN",
"message": "isituprightnow: Website — homepage is DOWN: HTTP 503 (https://www.example.com/)",
"locale": "en",
"occurredAt": "2026-10-03T14:05:12.000Z",
"cause": "HTTP 503",
"regions": ["eu-central", "us-east"],
"incidentId": "5e1f2a9b-77c4-4d3e-9a0f-6b2d8c1e4f55",
"downtimeSeconds": null,
"responseMs": null,
"expiresAt": null,
"link": "https://isituprightnow.com/app/incidents/5e1f2a9b-77c4-4d3e-9a0f-6b2d8c1e4f55"
}| Field | Description |
|---|---|
event |
monitor.down, monitor.up, monitor.slow, ssl.expiring, domain.expiring or test. |
monitor |
The monitor's id, name and target. |
status |
The monitor status: Up or Down. |
title |
A short English title (stable, good for filters). |
message |
A one-line human-readable text in the account owner's language (locale: en or ro). |
occurredAt |
When it happened, ISO 8601 UTC. |
cause |
What failed, as reported by the checker, e.g. Timeout or HTTP 503 (not translated). |
regions |
The regions that saw the failure. |
incidentId |
The incident, when there is one. |
downtimeSeconds |
On monitor.up: how long the outage lasted. |
responseMs |
On monitor.slow: the measured response time. |
expiresAt |
On ssl.expiring / domain.expiring: the expiry date. |
link |
Where to see the details in the dashboard. |
Fields that don't apply are null. Titles and messages are examples — don't parse them; use event, status and the ids.
Custom body templates#
Write your own body with {{placeholders}}. When the template starts with { or [, it is sent as application/json and every value is JSON-escaped; otherwise as text/plain.
| Placeholder | Value |
|---|---|
{{event}} |
monitor.down, monitor.up, … |
{{status}} |
down, up, or the event kind (slow, …) |
{{monitorId}}, {{monitorName}} |
The monitor |
{{target}}, {{monitorUrl}} |
The monitor's target |
{{title}}, {{message}} |
Texts in the account owner's language |
{{cause}}, {{regions}} |
Failure cause; regions separated by commas |
{{occurredAt}} |
ISO 8601 UTC time |
{{incidentId}}, {{downtimeSeconds}}, {{responseMs}} |
Empty when not applicable |
{{link}}, {{locale}} |
Dashboard link; en or ro |
For example, to create a ticket in a system that expects its own format:
{
"summary": "{{title}}",
"description": "{{message}} ({{cause}}, regions: {{regions}})",
"severity": "{{status}}",
"external_id": "{{incidentId}}",
"url": "{{link}}"
}Mobile push notifications#
Team members who use the mobile app get a push notification on their phone for every down and recovery of the account's monitors — no alert rule needed. Down alerts can ring like an alarm, even during quiet hours.
E-mail preferences and in-app notifications#
Besides alerts, isituprightnow sends a few other messages. Choose which ones you get in Settings → Notifications:
| Message | Default | Who gets it |
|---|---|---|
| Uptime reports — weekly, monthly or off | Monthly | Owners and admins of each account with monitors |
| Product news and tips | Off — only if you opt in | Users who ticked "Send me product news and tips" when signing up or turned it on later |
| Service announcements (for example planned maintenance or important changes) | Always | Users they concern |
Changing these never affects alerts.
- Unsubscribe link. Every report and product news e-mail ends with an Unsubscribe link and a link to your preferences. The page it opens asks you to confirm with a button — opening the link alone changes nothing — and lets you change both preferences without signing in. Mail apps that support one-click unsubscribe show their own button too.
- No tracking. These e-mails contain no tracking pixels and no tracked links.
In-app notifications#
Announcements from the isituprightnow team also appear in the dashboard: the bell at the top of every page shows how many are unread and opens the latest ten. See all notifications opens the full list, where you can filter unread ones, Mark as read one at a time or Mark all as read. Product news only appears there if you opted in to it. Notifications are kept for 180 days.
Didn't find what you were looking for? Contact us.