Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
MDX
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189---category: Referencetitle: Notification Channels Referencedescription: Technical specification for openstatus notification channels and alert payloads.---
Notifications in openstatus provide real-time alerts regarding changes in monitor status, such as recovery from an outage or detection of a new failure. By default, no notification channels are configured in a new workspace. You must configure and enable specific channels to receive alerts.
## Notification channels
Each notification channel requires specific configuration parameters to enable alert delivery.
### Slack
Integrates with Slack to send alerts to a designated channel.
**Configuration:**
- **Incoming webhook URL** (required) โ a [Slack incoming webhook URL](https://api.slack.com/incoming-webhooks) where notifications will be posted. Example: `https://hooks.slack.com/services/XXX/YYY/ZZZ`.
You can [download the openstatus logo](https://www.openstatus.dev/assets/logos/openstatus.jpeg) to add a custom logo.
### Email
Sends alerts directly to a specified email address.
**Configuration:**
- **Email address** (required) โ the recipient's email address.
### Discord
Delivers alerts to a Discord channel via a webhook.
**Configuration:**
- **Webhook URL** (required) โ a [Discord webhook URL](https://support.discord.com/hc/en-us/articles/228383668) for the target channel. Example: `https://discordapp.com/api/webhooks/123456789012345678/abcdefghijklmnopqrstuvwxyz1234567890`.
You can [download the openstatus logo](https://www.openstatus.dev/assets/logos/openstatus.jpeg) to add a custom logo.
### Grafana OnCall IRM
Sends notifications to a Grafana OnCall IRM.
**Configuration:**
- **Webhook URL** (required) โ a [Grafana OnCall IRM webhook URL](https://grafana.com/docs/grafana-cloud/alerting-and-irm/irm/configure/integrations/webhooks/incoming-webhooks/oncall-webhooks/).
### Google Chat
Sends notifications to a Google Chat space.
**Configuration:**
- **Webhook URL** (required) โ a [Google Chat webhook URL](https://developers.google.com/workspace/chat/quickstart/webhooks) for the target space.
### Microsoft Teams
Sends notifications to a Microsoft Teams channel through a Power Automate workflow.
**Configuration:**
- **Webhook URL** (required) โ the URL of a Power Automate *"When a Teams webhook request is received"* workflow. Example: `https://prod-00.westeurope.logic.azure.com:443/workflows/abc/triggers/manual/paths/invoke`.
### SMS
Sends alerts as SMS messages to a mobile phone number.
**Configuration:**
- **Phone number** (required) โ the recipient's phone number in international format (e.g., `+14155552671`).
**Note:** SMS delivery can vary by country due to provider routing. Contact support if delivery issues are encountered. WhatsApp notifications may be an alternative.
### WhatsApp
Sends alerts as WhatsApp messages to a mobile phone number.
**Configuration:**
- **Phone number** (required) โ the recipient's phone number in international format (e.g., `+14155552671`).
### Telegram
Delivers alerts to a specified Telegram chat.
**Configuration:**
- **Chat ID** (required) โ the unique identifier for the Telegram chat. This typically requires manual retrieval; users can ask `@raw_info_bot` for their chat ID.
**Bot ID:** the official openstatus Telegram bot ID is `@openstatushq_bot`.
### Webhook
Sends HTTP POST requests to a custom endpoint with a JSON payload.
**Configuration:**
- **URL** (required) โ the endpoint URL to which the webhook payload will be sent.- **Headers** (optional) โ custom HTTP headers to include with the webhook request (key-value pairs).
#### Notification payload
Every webhook notification โ `error`, `degraded`, and `recovered` โ uses the same flat JSON payload. `statusCode`, `latency`, and `errorMessage` are optional on **every** status; the sender includes whichever apply to the check.
```json{ "monitor": { "id": 1, "name": "test", "url": "http://openstat.us" }, "cronTimestamp": 1744023705307, "status": "error", "statusCode": 500, "latency": 1337, "errorMessage": "Internal Server Error"}```
**Payload fields:**
| Field | Type | Description || :------------- | :------- | :------------------------------------------------------------------- || `monitor.id` | `number` | Unique identifier of the monitor. || `monitor.name` | `string` | Name of the monitor. || `monitor.url` | `string` | The URL or URI being monitored. || `cronTimestamp`| `number` | Timestamp of the check execution in milliseconds since epoch. || `status` | `string` | Monitor status: `"degraded"`, `"error"`, or `"recovered"`. || `statusCode` | `number` | (Optional) HTTP status code returned by the monitored service. || `latency` | `number` | (Optional) Time taken to complete the check in milliseconds. || `errorMessage` | `string` | (Optional) A description of the error encountered during the check. |
#### Authentication
Webhook requests carry **no payload signature or HMAC**. The only verification mechanism is the custom headers you configure (e.g. a shared-secret header such as `Authorization` or `x-webhook-secret`) โ validate one of those on your endpoint.
#### Zod schema
The validation schema for webhook payloads:
```tsimport { z } from "zod";
export const PayloadSchema = z.object({ monitor: z.object({ id: z.number(), name: z.string(), url: z.string(), }), cronTimestamp: z.number(), status: z.enum(["degraded", "error", "recovered"]), statusCode: z.number().optional(), latency: z.number().optional(), errorMessage: z.string().optional(),});```
### OpsGenie
Integrates with OpsGenie for incident management.
**Configuration:**
- **API key** (required) โ an API key obtained from your OpsGenie account.- **Region** (required) โ the OpsGenie API region your account lives in: `us` or `eu`.
### PagerDuty
Integrates with PagerDuty for incident alerting.
**Configuration:**
- **Integration key** (required) โ the Events API v2 integration key for your PagerDuty service. The dashboard walks you through the PagerDuty connect flow, which fills this in for you.
### Ntfy
Sends notifications to an Ntfy topic.
**Configuration:**
- **Ntfy topic** (required) โ the topic name to which notifications will be published.- **Custom server URL** (optional) โ the URL of a custom Ntfy server if not using the default.- **Bearer token** (optional) โ an authentication token for accessing the Ntfy server.
## Related resources
- **[Incident reference](/docs/reference/incident)** โ information about incident creation and management.