Email Alerts
Email is the most universal alert channel. Saturn uses transactional email infrastructure for high deliverability.
Setup
1. Configure Email Addresses
In Settings → Integrations → Email:
- Click Add Email
 - Enter email address
 - Click verification link sent to inbox
 - Select incident types to receive
 
2. Routing Rules
Control which incidents trigger emails:
{
  "email": "ops@company.com",
  "routes": [
    {
      "types": ["MISSED", "FAIL"],
      "severity": ["HIGH"],
      "monitors": ["mon_prod_*"]  // Only production
    }
  ]
}
Email Format
Subject Lines
[Saturn] FAIL: Database Backup (3 attempts)
[Saturn] MISSED: API Health Check
[Saturn] ANOMALY: ETL Pipeline (4.2σ slower)
[Saturn] RESOLVED: Database Backup
Format: [Saturn] TYPE: Monitor Name (context)
Email Body
═══════════════════════════════════════
🔴 FAIL: Database Backup
═══════════════════════════════════════
Monitor: Database Backup
Organization: Acme Corp
Status: OPEN
Severity: HIGH
Time: 2025-10-14 03:15:23 UTC
───────────────────────────────────────
DETAILS
───────────────────────────────────────
Exit Code: 1
Duration: 3.2 seconds
Expected: ≈12 minutes
Error Output:
ERROR: Connection to database failed
Host: db.prod.example.com:5432
Reason: Connection timeout after 3 retries
───────────────────────────────────────
ACTIONS
───────────────────────────────────────
→ View Incident: https://saturn.example.com/incidents/inc_abc123
→ View Monitor: https://saturn.example.com/monitors/mon_xyz789
→ Acknowledge: https://saturn.example.com/ack/inc_abc123
───────────────────────────────────────
RECENT HISTORY
───────────────────────────────────────
Oct 13 03:00 - ✓ Success (12.3 min)
Oct 12 03:00 - ✓ Success (11.8 min)
Oct 11 03:00 - ✓ Success (12.5 min)
───────────────────────────────────────
Deliverability
Saturn uses dedicated infrastructure for transactional emails:
Features
- ✅ SPF/DKIM/DMARC configured
 - ✅ Dedicated IP with good reputation
 - ✅ Bounce handling automatic
 - ✅ Unsubscribe compliance
 - ✅ Rate limiting prevents spam classification
 
Whitelisting
Add Saturn to your email whitelist:
Domains:
notifications@saturn.example.comalerts@saturn.example.com
IP Addresses (for strict firewalls):
- See Status Page
 
Digest Mode
Receive batched email instead of per-incident:
{
  "email": "team@company.com",
  "mode": "digest",
  "frequency": "hourly",  // or "daily"
  "includeResolved": false
}
Hourly Digest Example:
Subject: [Saturn] Hourly Digest - 3 new incidents
═══════════════════════════════════════
Saturn Hourly Digest
October 14, 2025 14:00-15:00 UTC
═══════════════════════════════════════
3 New Incidents:
───────────────────────────────────────
14:15 │ FAIL   │ Database Backup
14:32 │ LATE   │ API Sync
14:47 │ MISSED │ Cache Rebuild
2 Resolved:
───────────────────────────────────────
14:20 │ Database Backup (MTTR: 5 min)
14:55 │ API Sync (MTTR: 23 min)
Current Open: 1 incident (Cache Rebuild)
View Dashboard: https://saturn.example.com
Custom Templates
Customize email templates (Enterprise plan):
<!-- custom-template.html -->
<!DOCTYPE html>
<html>
<head>
  <style>
    .incident { background: #fee; padding: 20px; }
    .details { font-family: monospace; }
  </style>
</head>
<body>
  <div class="incident">
    <h2>{{incidentType}}: {{monitorName}}</h2>
    <p><strong>Time:</strong> {{timestamp}}</p>
    <p><strong>Severity:</strong> {{severity}}</p>
    <div class="details">{{details}}</div>
    <a href="{{incidentUrl}}">View Incident</a>
  </div>
</body>
</html>
Upload via:
curl -X POST https://api.saturn.example.com/api/settings/email-template \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "template=@custom-template.html"
Suppression
Temporarily stop email alerts:
Per Email:
curl -X POST https://api.saturn.example.com/api/alerts/email/<EMAIL_ID>/suppress \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"durationHours": 24}'
Per Monitor: Use Maintenance Windows
Bounce Handling
Saturn automatically handles bounces:
| Bounce Type | Action | 
|---|---|
| Soft bounce | Retry 3 times over 6 hours | 
| Hard bounce | Disable email, notify admin | 
| Spam complaint | Immediate disable | 
View bounce status in Settings → Integrations → Email.
Testing
Send test email:
curl -X POST https://api.saturn.example.com/api/alerts/email/test \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"email": "ops@company.com"}'
Best Practices
✅ Do
- Use role-based emails: 
ops@,oncall@, not personal - Set up filters: Route Saturn emails to dedicated folder
 - Verify regularly: Check spam folder occasionally
 - Use digest mode: For non-critical monitors
 - Document escalation: Who gets which alerts
 
❌ Don't
- Use personal email only: Team members leave
 - Ignore bounces: Fix or remove dead addresses
 - Over-alert: Use appropriate severity levels
 - Skip verification: Unverified emails won't receive alerts
 
Troubleshooting
Not Receiving Emails
Check:
- Email verified? (check Settings)
 - Spam folder?
 - Routing rules correct?
 - Monitor has email channel enabled?
 - Incident type matches rules?
 
Test:
# Send test email
curl -X POST https://api.saturn.example.com/api/alerts/email/test \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -d '{"email": "your@email.com"}'
Emails Going to Spam
Solutions:
- Whitelist Saturn domains/IPs
 - Add Saturn to safe senders
 - Contact IT to adjust spam filters
 - Check DMARC policy
 
API Reference
# Add email
POST /api/alerts/email
Body: {"email": "ops@company.com"}
# Update routing
PATCH /api/alerts/email/<EMAIL_ID>
Body: {"routes": [...]}
# Remove email
DELETE /api/alerts/email/<EMAIL_ID>
# Send test
POST /api/alerts/email/test
Body: {"email": "ops@company.com"}
Next Steps
- Slack Alerts — Rich notifications with threading
 - Discord Alerts — Discord webhook integration
 - Webhooks — Custom integrations with HMAC signatures