Guides

Notifications

Configure alert channels — Email, Slack, Discord, Telegram, Webhook.

A notification channel is one delivery destination. Channels are independent of monitors — once a channel exists, attach it to as many monitors as you like.

API write examples require Business. Pro API access is read-only; all supported plans can configure their available channel types in the dashboard.

Channel types

Email

Free plan and up. Notifications go to a list of email addresses configured on the channel. The fallback channel auto-created at signup uses your account email.

{
  "type": "email",
  "name": "Engineering",
  "config": { "email_addresses": ["alerts@team.example"] }
}

Slack — Pro+

Uses Slack Incoming Webhooks. Walkthrough: Slack alerts.

{
  "type": "slack",
  "name": "#engineering",
  "config": { "webhook_url": "https://hooks.slack.com/services/T00.../B00.../..." }
}

Discord — Pro+

Channel-level webhooks (Right-click channel → Edit Channel → Integrations → Webhooks → New).

{
  "type": "discord",
  "name": "#alerts",
  "config": { "webhook_url": "https://discord.com/api/webhooks/.../..." }
}

Telegram — Pro+

  1. In Dashboard → Notifications, create a Telegram channel.
  2. The dashboard opens the configured bot with a one-time connect code in the link.
  3. Press Start in Telegram. The bot links that chat to the channel.

If the browser blocks the new tab, use the channel's connection link. The code is issued by Obzerv, not by the bot.

The channel stores a chat_id, not the connect code.

Webhook — Business+

POSTs a JSON body to any public URL on every status change. Schema, headers, error handling: Webhook payload reference.

{
  "type": "webhook",
  "name": "Internal pager",
  "config": { "webhook_url": "https://hooks.internal.example/obzerv" }
}

Subscription scope

Channels use monitor_scope: "all" for current and future monitors, or monitor_scope: "selected" with monitor_ids for an explicit selection. selected with monitor_ids: [] receives no monitor alerts. The channel's is_enabled flag can disable delivery without deleting it.

Attaching channels to monitors

Use the monitor channelIds field on create/update. Pass the complete desired set — channels not listed are detached for this monitor. Omit channelIds when you are not changing subscriptions. channelIds: [] deliberately disables all channels for that monitor.

curl -X PUT https://obzerv.xyz/api/monitors/<monitor-id> \
  -H "Authorization: Bearer $OBZERV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "channelIds": ["<channel-id-1>", "<channel-id-2>"] }'

Delivery behavior

  • One delivery per status transition (up → down or down → up). No periodic re-alerts.
  • Maintenance windows suppress deliveries for affected monitors.
  • Confirmed incident events are queued durably. Transient delivery failures can be retried, so receivers must handle duplicates. See webhook events.

Test a channel

Send a one-off test message:

curl -X POST https://obzerv.xyz/api/notification-channels/<channel-id> \
  -H "Authorization: Bearer $OBZERV_API_KEY"

Check the destination for the test notification. Webhook tests use the channel's signing secret; legacy webhook channels without a secret must be recreated.

See also