Integrations
Integrations are where your alerts go. Connect the tools your team already uses, and Canary9 delivers a notification the moment a check fails, and again when it recovers.
Available integrations
Slack
Post colour-coded alerts to a channel via an incoming webhook.
Microsoft Teams
Post colour-coded alert cards into a Teams channel via a Workflows webhook.
Discord
Post colour-coded alert embeds to a Discord server via an incoming webhook.
PagerDuty
Trigger and resolve incidents through the Events API, correlated automatically.
Jira
Open a Jira issue when something goes down and comment on it when it recovers.
Webhook
POST alert events to any HTTP endpoint with a custom JSON payload. Build your own integration.
Deliver alert notifications straight to any inbox, sent from noreply@canary9.com.
SMS is on the way.

The page has three sections: Installed lists the integrations your organization has configured, Available lists everything else you can connect today, and Coming soon previews what's next. Hover over a card to see its description and action.
Add an integration
Open Integrations in the sidebar, hover over the integration you want, and select Add (or Configure on an installed card). Everything about an integration is managed from the dialog that opens: add a connection, edit one, send a test, pause it, or remove it. Give your new connection a name and fill in the connection details:
Slack
- Webhook URL: an incoming webhook from your Slack workspace (
https://hooks.slack.com/services/…). - Channel and emoji: optional overrides for where the message posts and the bot icon.
Microsoft Teams
Teams alerts use a Workflows webhook, the modern replacement for the retired Incoming Webhook connector. To create one:
- In Teams, open the channel that should receive alerts, select ⋯ → Workflows.
- Choose the "Post to a channel when a webhook request is received" template and accept the defaults (the channel is pre-filled).
- Copy the URL the workflow gives you and paste it into Canary9 as the Webhook URL.
Workflows created today issue URLs on https://….environment.api.powerplatform.com/…; older flows may still use the legacy https://prod-….logic.azure.com/… shape. Canary9 accepts both.
Discord
- Webhook URL: an incoming webhook from a Discord server (Server Settings → Integrations → Webhooks), of the form
https://discord.com/api/webhooks/…. - Bot username and avatar URL: optional overrides for the name and picture the alert posts under.
PagerDuty
- Routing key: the integration key from a PagerDuty Events API v2 service.
Jira
- Site URL (
https://your-org.atlassian.net), account email, and an API token. - Project key: where issues are created (e.g.
OPS); optionally an issue type (defaults to Task). - Additional fields: an optional JSON object merged into every issue, so you can satisfy required custom fields specific to your Jira project.
Webhook
The webhook integration lets you receive alert events on any HTTP endpoint you control: build a custom integration, log alerts to your own system, or bridge to a tool Canary9 doesn't support natively yet.
- Webhook URL: any
http://orhttps://endpoint you control. - HTTP method:
POST(default),PUT,PATCH,GET, orDELETE. - Custom headers: an optional JSON object of headers sent with every request, e.g. for an API key your endpoint expects.
- Payload template: an optional JSON document with
{{message}},{{event_type}},{{severity}},{{created_at}},{{dedup_key}},{{endpoint_id}},{{endpoint_name}}, and{{endpoint_url}}placeholders, substituted with the event's values before sending. Leave it blank to send Canary9's default event payload, which includes the same endpoint fields.
Editing an existing webhook integration is available from the integration's row on the Integrations page.
- Recipients: up to 10 email addresses, comma separated. Every alert goes to all of them.
- Subject prefix: optional text added to the start of every alert email subject, handy for inbox filters (e.g.
[prod]).
Alert emails are sent from noreply@canary9.com. If your mail provider filters aggressively, add that address to your allow list so alerts never land in spam.
Routing & handles
Every integration has a handle (auto-derived from its name, e.g. my-slack-bot). By default, an alert fans out to all enabled integrations. To send a specific alert only to specific places, @-mention the handle in the policy's notification message, see Alerts & notifications. This lets you send, say, customer-facing outages to PagerDuty while routing everything to a Slack channel.
Test, disable, and remove
- Test: send a sample notification to confirm the connection works; you'll see success or the error inline.
- Enable / disable: flip an integration off to pause delivery without losing its configuration.
- Delete: remove an integration entirely.
For Jira and PagerDuty: recoveries are linked back to the original alert automatically, so a resolved check closes the loop on the same incident or issue instead of creating a duplicate. Correlation is per endpoint and policy, so two endpoints covered by the same policy always get their own incident or issue, and one endpoint's recovery never resolves another's. For webhooks: every payload includes a stable dedup_key for the alert, so your endpoint can correlate a "down" event with its later "recovered" event.
Every notification links to the endpoint. Email and Microsoft Teams show an Open endpoint in Canary9 button, Slack and Discord link the endpoint name, PagerDuty incidents carry a click-through link, Jira issues include the link in the description, and webhook payloads carry endpoint_id, endpoint_name, and endpoint_url. The link opens the endpoint's row on the Endpoints page so you can act on the alert straight away.