Alert channels

Alert channels are destinations Happy Uptime sends alerts to. Pair them with alert rules (for monitor events) or project channels (for incident / vendor events).

Supported type values: slack, slack_app, discord, webhook, email, telegram, teams, pagerduty, opsgenie.

Auth: Bearer API key.

List channels

GET /alerts/channels

bash
curl -H "Authorization: Bearer $HU_API_KEY" \ https://happyuptime.com/api/v1/alerts/channels

Response items include: id, organization_id, name, type, config, is_default, signing_secret (webhook only), consecutive_failures, paused_at, created_at.

Create a channel

POST /alerts/channelsscope: write

Config by type

bash
curl -X POST -H "Authorization: Bearer $HU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Ops Slack", "type": "slack", "config": { "webhookUrl": "https://hooks.slack.com/services/..." } }' \ https://happyuptime.com/api/v1/alerts/channels

Webhook channels auto-generate a signing_secret (prefix whsec_) on create. Save it from the response — it's the only way to verify HMAC signatures downstream. See Webhook payloads.

Rotate a webhook signing secret

POST /alerts/channels/:id/rotate-secretscope: write

Returns a new signing_secret. The old secret is invalidated immediately — update your verifier before rotating.

Resume a paused channel

POST /alerts/channels/:id/resumescope: write

Channels are auto-paused after 50 consecutive failed deliveries. Call this after fixing your endpoint to clear paused_at and reset the failure counter.

Delete a channel

DELETE /alerts/channels/:idscope: write

Project channels (org-level subscriptions)

For events that aren't tied to a monitor (incident., vendor.), attach a channel at the org level:

POST /alerts/project-channels

json
{ "alert_channel_id": "ch_xxx", "alert_type": "incident" }

Valid alert_type: incident, dependency_incident.