Unsparing Docs

Alerts & Notifications

Configure how and when Unsparing notifies you. Email, Slack, webhooks, and alert routing for teams.

Alert Channels

Unsparing supports multiple notification channels:

ChannelFreeHomelabberTeamsAgency
Email
Webhooks
Slack

Email Alerts

Email alerts are enabled by default for all plans. Configure additional email addresses in Settings → Notifications.

Each email alert includes:

  • Monitor type — Cron, DNS, SSL, or Uptime
  • Monitor name — Which monitor triggered
  • Status — Up, down, degraded, recovered
  • Timestamp — When the event occurred
  • Quick link — Direct link to the investigation timeline

Slack Integration

Available on Teams and Agency plans.

  1. Go to Settings → Integrations → Slack
  2. Click Connect Slack and authorize Unsparing in your workspace
  3. Select the channel for notifications
  4. Configure which alert types to forward to Slack

Slack alerts include:

  • Color-coded severity indicators (🔴 Critical, 🟡 Warning, 🟢 Recovery)
  • Actionable buttons to acknowledge or investigate
  • Threaded replies for incident discussions

Webhooks

Available on Homelabber plan and above.

Setting Up a Webhook

  1. Go to Settings → Integrations → Webhooks
  2. Click Add Webhook
  3. Enter the URL and select which events to forward
  4. Optionally add a secret for signature verification

Webhook Payload Format

All webhooks use a consistent JSON payload:

{
  "id": "evt_abc123",
  "event": "monitor.failed",
  "timestamp": "2025-05-18T10:00:00Z",
  "data": {
    "monitor_id": "mon_xyz789",
    "monitor_type": "uptime",
    "monitor_name": "Production API",
    "previous_status": "up",
    "current_status": "down",
    "details": {
      "url": "https://api.example.com/health",
      "status_code": 503,
      "response_time_ms": 5230,
      "error": "Connection timeout after 10s"
    }
  }
}

Event Types

EventTrigger
monitor.createdNew monitor added
monitor.failedMonitor check failed
monitor.recoveredMonitor recovered after failure
monitor.degradedResponse time exceeded threshold
ssl.expiringSSL certificate approaching expiry
dns.changedDNS record value changed
cron.missedCron job didn't fire on schedule

Signature Verification

Webhooks include an X-Unsparing-Signature header. Verify it:

const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

Alert Routing (Teams & Agency)

Route alerts to the right person:

  1. Go to Settings → Alert Routing
  2. Create rules based on:
    • Monitor type — Send all SSL alerts to the security team
    • Severity — Send critical alerts to the on-call engineer
    • Monitor name — Send client-specific alerts to the account manager
  3. Each rule can route to email, Slack, or webhooks

Example Routing Rules

ConditionRoute To
SSL expiring in 7 days#infra-alerts Slack channel
Uptime monitor downOn-call engineer email
DNS record changed#security Slack channel
Any recovery#monitoring Slack channel

Alert Severity Levels

LevelColorMeaning
Critical🔴Service is down or certificate expires in < 7 days
Warning🟡Service is degraded or certificate expires in < 30 days
Info🔵Routine notification, certificate renewal detected
Recovery🟢Service is back up after downtime

Escalation

On Teams and Agency plans, configure escalation policies:

  1. Alert fires → notify primary contact
  2. After 5 minutes → notify secondary contact
  3. After 15 minutes → notify team lead
  4. After 30 minutes → notify everyone

Automations · API Reference

On this page