Supported Services
Changedetection.io supports:- Chat: Discord, Slack, Mattermost, Rocket.Chat, Telegram, Matrix
- Email: SMTP, Gmail, Office365, Mailgun, SendGrid
- Collaboration: Microsoft Teams, Google Chat, Flock, Gitter
- Incident Management: PagerDuty, Opsgenie, VictorOps
- Custom: Webhooks (JSON/XML), Syslog, MQTT
- And 100+ more services
Apprise URL Syntax
Apprise uses URL-based configuration. Each service has a specific URL format.Discord
string
Discord webhook notificationSteps to get webhook URL:
- In Discord, go to Server Settings → Integrations → Webhooks
- Click “New Webhook” or edit existing
- Copy the webhook URL:
https://discord.com/api/webhooks/{id}/{token} - Extract the ID and token, format as:
discord://{id}/{token}
Slack
string
Slack webhook notificationSteps to get webhook URL:
- Go to https://api.slack.com/apps
- Create a new app or select existing
- Enable “Incoming Webhooks”
- Add webhook to workspace
- Copy webhook URL:
https://hooks.slack.com/services/T.../B.../X... - Extract tokens after
/services/:slack://T.../B.../X...
Email (SMTP)
string
Email notification via SMTPFormat:Example with Gmail:Example with Office365:
Office365
string
Office365 email using Microsoft Graph APIFormat:Example:
Microsoft Teams
string
Microsoft Teams webhook notificationSteps to get webhook URL:
- In Teams, go to the channel where you want notifications
- Click ”⋯” → “Connectors” → “Incoming Webhook”
- Configure webhook and copy URL
- Extract tokens from URL
Google Chat
string
Google Chat webhook notificationExample:
Telegram
string
Telegram bot notificationExample:
Rocket.Chat
string
Rocket.Chat webhook notificationExample:
Custom JSON Webhook
string
Custom JSON POST webhookExample:The notification data will be POSTed as JSON to your endpoint.
Syslog
string
Send notifications to local syslogExample:
Global vs Per-Watch Notifications
Global Notifications
Set default notification URLs that apply to all watches:- Go to Settings (gear icon)
- Navigate to Notifications tab
- Enter notification URLs (one per line)
- Save settings
Per-Watch Notifications
Override global settings for specific watches:- Edit a watch
- Go to Notifications tab
- Enter notification URLs (one per line)
- Enable/disable specific notifications
- Save watch
Per-watch notifications override global notifications. If a watch has notification URLs configured, global notifications will not be sent.
Tag-Based Notifications
Configure notifications at the tag level:- Go to Tags page
- Edit a tag
- Configure notification URLs
- All watches with this tag inherit these notifications
Notification Templates (Jinja2)
Customize notification content using Jinja2 templates with access to watch data, diffs, and timestamps.Available Template Variables
string
The URL being monitoredExample:
string
The title/name of the watchExample:
string
Unique identifier for the watchExample:
string
Tags assigned to the watch
string
Your changedetection.io instance URL (set via BASE_URL env variable)Example:
string
Diff showing changes (with +/- prefixes)Example:With parameters:
string
Diff without +/- prefixes
string
Only added linesExample:
string
Only removed lines
string
Full diff including unchanged lines
string
Diff in unified patch format
string
Current version of the content
string
Previous version of the content
string
Timestamp when change was detectedExample:
string
Text that matched trigger filters
string
URL to preview the changes in changedetection.io
string
Direct URL to the diff view
string
Base64-encoded screenshot (if enabled)
Custom Notification Title
Edit the notification title in Settings → Notifications: Default title:Custom Notification Body
Edit the notification body in Settings → Notifications: Default body:Conditional Notifications
Use Jinja2 conditionals for advanced logic:Notification Formats
Changedetection.io supports multiple notification formats:string
Format for notification contentValues:
text- Plain text (default)markdown- Markdown formattinghtml- HTML formatting
Markdown Format
Use markdown for rich formatting:HTML Format
Use HTML for email notifications:Muting Notifications
Mute Individual Watch
- Edit watch
- Go to Notifications tab
- Check Mute notifications for this watch
- Save
Mute All Notifications
- Go to Settings
- Enable Mute all notifications toggle
- Save
The
all_muted setting overrides all watch-level and tag-level notification settings.Mute by Tag
- Edit tag
- Enable Mute notifications for tag
- All watches with this tag will have notifications muted
Notification Screenshots
Include screenshots in notifications:- Edit watch
- Go to Notifications tab
- Enable Include screenshot in notification
- Save
Screenshots require a browser-based fetcher (Playwright/Puppeteer) and increase notification size.
Testing Notifications
Test Global Notifications
- Go to Settings → Notifications
- Click Send test notification
- Check your notification service for the test message
Test Watch Notifications
- Edit watch
- Go to Notifications tab
- Click Send test notification
- Verify notification received
Troubleshooting
Notifications Not Sending
- Check notification URLs: Verify the Apprise URL format is correct
- Test connectivity: Ensure changedetection.io can reach the notification service
- Check logs: Look for errors in Docker logs:
docker logs changedetection - Verify watch isn’t muted: Check watch and global mute settings
Template Errors
If Jinja2 templates fail:- Syntax errors: Check for missing
}},%}, or quotes - Undefined variables: Ensure template variables exist (e.g.,
watch_titlemay be empty) - Test with simple template: Start with
{{ watch_url }}and add complexity
Discord/Slack Not Receiving
- Webhook permissions: Verify webhook has permission to post
- Rate limits: Check if you’re hitting API rate limits
- URL format: Double-check Discord/Slack webhook URL format
Email Notifications Failing
- SMTP settings: Verify hostname, port, username, password
- Authentication: Use app-specific passwords for Gmail
- TLS/SSL: Try different ports (587 for STARTTLS, 465 for SSL)
- NO_PROXY: Add email server to NO_PROXY environment variable
Best Practices
- Test notifications before deploying watches
- Use templates to reduce notification fatigue
- Set NO_PROXY to exclude notification services from proxy routing
- Use per-watch notifications for critical watches
- Limit diff size in templates with
diff(lines=10) - Monitor notification count to avoid overwhelming channels
- Use tags to organize notification routing
Example Configurations
Multi-Channel Setup
Custom Webhook with Template
Notification URL:Related Documentation
- Environment Variables - Configure BASE_URL for notification links
- Proxy Setup - Set NO_PROXY for notification services
- Apprise Documentation - Full list of supported services