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
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
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)
Email notification via SMTPFormat:Example with Gmail:Example with Office365:
Office365
Office365 email using Microsoft Graph APIFormat:Example:
Microsoft Teams
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
Google Chat webhook notificationExample:
Telegram
Telegram bot notificationExample:
Rocket.Chat
Rocket.Chat webhook notificationExample:
Custom JSON Webhook
Custom JSON POST webhookExample:The notification data will be POSTed as JSON to your endpoint.
Syslog
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
The URL being monitoredExample:
The title/name of the watchExample:
Unique identifier for the watchExample:
Tags assigned to the watch
Your changedetection.io instance URL (set via BASE_URL env variable)Example:
Diff showing changes (with +/- prefixes)Example:With parameters:
Diff without +/- prefixes
Only added linesExample:
Only removed lines
Full diff including unchanged lines
Diff in unified patch format
Current version of the content
Previous version of the content
Timestamp when change was detectedExample:
Text that matched trigger filters
URL to preview the changes in changedetection.io
Direct URL to the diff view
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: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