Skip to main content
Upptime supports multiple notification channels to alert you when your monitored sites experience downtime. Configure notifications to ensure your team is immediately informed of any incidents.

Available Notification Channels

Upptime integrates with popular communication platforms through GitHub Actions:

Slack

Post incident updates to Slack channels

Discord

Send alerts to Discord servers and channels

Telegram

Receive messages in Telegram groups or channels

Email

Send email notifications to team members

Microsoft Teams

Post to Teams channels

Custom Webhooks

Integrate with any service that accepts webhooks

Configuration

Notifications are configured in your .upptimerc.yml file:
.upptimerc.yml
owner: upptime
repo: upptime

sites:
  - name: Google
    url: https://www.google.com
  - name: Wikipedia  
    url: https://en.wikipedia.org

# Notification configuration
notifications:
  - type: slack
    webhook-url: $SLACK_WEBHOOK_URL
  - type: discord
    webhook-url: $DISCORD_WEBHOOK_URL
Always use GitHub Secrets to store webhook URLs and API tokens. Never commit sensitive credentials to your repository.

Setting Up Notifications

Slack

Integrate Upptime with Slack to receive incident notifications:
  1. Go to your Slack workspace’s Apps page
  2. Search for “Incoming Webhooks” and add it
  3. Choose the channel for notifications
  4. Copy the webhook URL
  1. Go to your repository Settings
  2. Navigate to Secrets and variables > Actions
  3. Click New repository secret
  4. Name: SLACK_WEBHOOK_URL
  5. Value: Paste your webhook URL
  6. Click Add secret
.upptimerc.yml
notifications:
  - type: slack
    webhook-url: $SLACK_WEBHOOK_URL
    channel: "#status-alerts"
Trigger a test by manually running the Uptime workflow:
  1. Go to Actions tab
  2. Select Uptime CI
  3. Click Run workflow

Discord

Send notifications to Discord servers:
  1. Open your Discord server settings
  2. Go to Integrations > Webhooks
  3. Click New Webhook
  4. Name it “Upptime” and select a channel
  5. Copy the webhook URL
  6. Add as DISCORD_WEBHOOK_URL secret in GitHub

Telegram

Receive alerts in Telegram:
  1. Message @BotFather on Telegram
  2. Send /newbot and follow instructions
  3. Copy the bot token
  4. Add as TELEGRAM_BOT_TOKEN secret in GitHub
  1. Add your bot to a group or channel
  2. Send a message to the bot
  3. Visit https://api.telegram.org/bot<TOKEN>/getUpdates
  4. Find the chat.id in the response
  5. Add as TELEGRAM_CHAT_ID secret in GitHub
.upptimerc.yml
notifications:
  - type: telegram
    bot-token: $TELEGRAM_BOT_TOKEN
    chat-id: $TELEGRAM_CHAT_ID

Email

Send email notifications using SMTP:
.upptimerc.yml
notifications:
  - type: email
    smtp-host: smtp.gmail.com
    smtp-port: 587
    smtp-username: $SMTP_USERNAME
    smtp-password: $SMTP_PASSWORD
    from: "[email protected]"
    to:
      - "[email protected]"
      - "[email protected]"
For Gmail, you’ll need to create an App Password instead of using your regular password.

Microsoft Teams

Post to Microsoft Teams channels:
  1. Open Microsoft Teams
  2. Go to the channel for notifications
  3. Click > Connectors
  4. Find Incoming Webhook and configure
  5. Copy the webhook URL
  6. Add as TEAMS_WEBHOOK_URL secret
.upptimerc.yml
notifications:
  - type: teams
    webhook-url: $TEAMS_WEBHOOK_URL

Custom Webhooks

Integrate with any service that accepts webhooks:
.upptimerc.yml
notifications:
  - type: webhook
    url: https://your-service.com/webhook
    method: POST
    headers:
      Authorization: "Bearer $API_TOKEN"
      Content-Type: "application/json"
    body: |
      {
        "site": "$SITE_NAME",
        "status": "$SITE_STATUS",
        "url": "$SITE_URL",
        "timestamp": "$TIMESTAMP"
      }

Notification Events

You can configure which events trigger notifications:
When a site goes down:
notifications:
  - type: slack
    webhook-url: $SLACK_WEBHOOK_URL
    on:
      - down
When a site comes back up:
notifications:
  - type: slack
    webhook-url: $SLACK_WEBHOOK_URL
    on:
      - up
When response times are slow:
notifications:
  - type: slack
    webhook-url: $SLACK_WEBHOOK_URL
    on:
      - degraded
Notify on all status changes:
notifications:
  - type: slack
    webhook-url: $SLACK_WEBHOOK_URL
    on:
      - down
      - up
      - degraded

Per-Site Notifications

Configure different notifications for different sites:
.upptimerc.yml
sites:
  - name: Production API
    url: https://api.example.com
    notifications:
      - type: slack
        webhook-url: $SLACK_CRITICAL_WEBHOOK
      - type: pagerduty
        integration-key: $PAGERDUTY_KEY
        
  - name: Staging Site
    url: https://staging.example.com
    notifications:
      - type: slack
        webhook-url: $SLACK_DEV_WEBHOOK

Notification Content

Customize the content of notifications:
.upptimerc.yml
notifications:
  - type: slack
    webhook-url: $SLACK_WEBHOOK_URL
    message-template: |
      🚨 Alert: $SITE_NAME is $STATUS
      URL: $SITE_URL
      Response: $RESPONSE_CODE
      Time: $TIMESTAMP

Managing GitHub Secrets

1

Navigate to Settings

Go to your repository and click Settings
2

Access Secrets

In the sidebar, go to Secrets and variables > Actions
3

Add New Secret

Click New repository secret
4

Enter Details

  • Name: Use uppercase with underscores (e.g., SLACK_WEBHOOK_URL)
  • Value: Paste your webhook URL or API token
5

Reference in Config

Use the secret in .upptimerc.yml with $SECRET_NAME syntax
Secrets are encrypted and cannot be viewed after creation. Make sure to save a backup copy securely.

Testing Notifications

Test your notification setup:
  1. Manual workflow trigger: Run the Uptime CI workflow manually
  2. Test site: Add a site you know is down (e.g., https://thissitedoesnotexist.koj.co)
  3. Wait for check: The next scheduled check will trigger a notification
  4. Verify delivery: Check your notification channel
.upptimerc.yml
sites:
  # Test site that will always be down
  - name: Test Broken Site
    url: https://thissitedoesnotexist.koj.co

Rate Limiting

To avoid notification spam:
Set a minimum time between notifications:
notifications:
  - type: slack
    webhook-url: $SLACK_WEBHOOK_URL
    min-interval: 3600  # Only notify once per hour
Group multiple site failures into one notification:
notifications:
  - type: slack
    webhook-url: $SLACK_WEBHOOK_URL
    group-notifications: true
    group-interval: 300  # Group notifications within 5 minutes

Troubleshooting

  1. Verify the secret is correctly named in GitHub
  2. Check the workflow logs in the Actions tab
  3. Test the webhook URL manually with curl
  4. Ensure the notification channel/bot is properly configured
  1. Double-check you copied the entire URL
  2. Ensure no extra spaces or characters
  3. Regenerate the webhook if needed
  4. Verify the webhook hasn’t been revoked
  1. Check your notification platform’s rate limits
  2. Reduce notification frequency
  3. Use notification grouping
  4. Consider multiple webhooks for high-volume alerts

Best Practices

Use Separate Channels

Create dedicated channels for status notifications to reduce noise

Set Priorities

Use different notification methods for critical vs. non-critical sites

Test Regularly

Periodically test notifications to ensure they’re working

Document Setup

Keep documentation of webhook URLs and configuration

Advanced Integration

PagerDuty Integration

For on-call escalation:
.upptimerc.yml
notifications:
  - type: pagerduty
    integration-key: $PAGERDUTY_INTEGRATION_KEY
    severity: critical
    component: "Web Services"

Datadog Integration

Send metrics to Datadog:
.upptimerc.yml
notifications:
  - type: datadog
    api-key: $DATADOG_API_KEY
    site: datadoghq.com
    tags:
      - "service:upptime"
      - "env:production"

Custom GitHub Actions

Create your own notification logic:
.github/workflows/custom-notify.yml
name: Custom Notifications
on:
  issues:
    types: [opened, closed]
jobs:
  notify:
    runs-on: ubuntu-latest
    steps:
      - name: Send custom notification
        run: |
          # Your custom notification logic here
          curl -X POST ${{ secrets.CUSTOM_WEBHOOK }} \
            -H 'Content-Type: application/json' \
            -d '{"incident": "${{ github.event.issue.title }}"}'

Next Steps

Build docs developers (and LLMs) love