Guide
Alert Channels
Add a destination in Settings → Alerts, choose a minimum severity and send a test. Alerts identify vendors to investigate; they do not confirm that your app failed.
Free includes email. Pro and Enterprise include the twelve channels below. See plan limits.
Select Email and save. No destination credentials are needed. Delivery follows organization membership and each person's notification preferences.
Slack
Create a Slack incoming webhook (opens in new tab), then select Slack and paste its URL. Step-by-step setup.
Discord
In Discord, open Channel Settings → Integrations → Webhooks. Create a webhook, then select Discord in CheckUpstream and paste the URL.
Microsoft Teams
Create a Workflows webhook for the Teams channel. Select Microsoft Teams and paste the workflow URL. Teams setup.
PagerDuty
Add an Events API v2 integration to your PagerDuty service. Select PagerDuty and paste the routing key.
Degraded maps to warning, partial outage to error, and major outage to critical. CheckUpstream triggers and updates the incident; your team manages acknowledgement in PagerDuty.
OpsGenie
Create an OpsGenie integration API key. Select OpsGenie and paste the key. Degraded maps to P3, partial outage to P2, and major outage to P1. Manage acknowledgement in OpsGenie.
When paging alerts close. For both channels, CheckUpstream requests closure after the vendor explicitly marks its incident resolved, provided the alert is still active, unmuted and on an enabled channel with the original routing key or integration API key. A missing feed entry, tracking timeout or unknown closure reason leaves the paging alert open.
Changing the routing key or integration API key does not redirect older alerts. Manage those alerts in the original paging service.
Vendor resolution does not establish application recovery. Check your own measurements before closing your team's incident.
Google Chat
In your Chat space, open Apps & integrations → Webhooks. Create a webhook, then select Google Chat and paste its URL.
Telegram
Create a bot through @BotFather (opens in new tab), add it to the receiving chat, then select Telegram and enter its bot token and chat ID. Find your chat ID.
SMS
SMS uses your Twilio account. Select SMS and enter:
- Account SID and Auth Token from Twilio.
- From Number: your Twilio sender number.
- To Numbers: comma-separated recipients, including country codes.
Choose a minimum severity and check delivery. Twilio's messaging charges apply to your account.
Webhook
Select Webhook, enter your endpoint URL and set a signing secret. Deliveries use POST with a flat JSON body:
incident.detected: the initial incident alert.incident.updated: a later status or severity update.incident.resolved: the tracked record closed. Checkresolution; this does not always mean the vendor recovered.alert.test: a test from alert settings.
Updates and closure notices go only to the original webhook URL while its channel is enabled and the alert remains unmuted. Changing the URL does not redirect notifications for older alerts.
Verify X-Checkupstream-Signature against an HMAC-SHA256 of the raw body. It is a bare hex digest, without an algorithm prefix. The header is only included when a secret is configured.
Copy the verification example and payloads. Handle each event by type; update and closure payloads differ from the initial alert.
predictedResolution uses historical incident start and closure timestamps. Closure can reflect a feed entry disappearing or tracking expiring. It does not confirm recovery or estimate minutes remaining.
Initial incident payload fields
WebhookPayload
eventstringRequiredThe initial alert uses "incident.detected". Update, closure and test events have separate payloads in the webhook reference.
serviceIdstringRequiredIdentifier of the upstream service
serviceNamestringRequiredDisplay name, e.g. "Stripe"
incidentIdstringRequiredIdentifier of the incident
titlestringRequiredIncident title, e.g. "Elevated API Error Rates"
impactstringRequiredImpact level: "degraded", "partial_outage", or "major_outage"
affectedProjectsobject[]RequiredYour projects that depend on the service
enrichmentobjectRequiredThe full enrichment bundle: summary, affected and surviving capabilities, mitigations, regions, error-rate and latency deltas, recurrence count
predictedResolutionobject | nullRequiredHistorical recorded incident duration, or null when there is not enough history to publish one
timestampstringRequiredISO 8601 timestamp of the delivery
Rootly
Select Rootly and enter an API key with incident creation access. The test checks the key with a read request; it does not create an incident. Review and close real incidents in Rootly after recovery.
Incident.io
Select Incident.io and enter an API key with incident creation access. The test checks the key with a read request; it does not create an incident. Manage real incidents in your Incident.io workflow.
Check delivery
Use the channel's Test button after saving. If the test fails, check the destination, credentials and receiver filters. Webhook receivers should keep alert.test separate from incident notifications and inspect the closure reason before changing incident state.
Add your alert destination
Choose a channel your team checks during an incident.