Skip to main content
Manage alert channels from the command line. Create channels, update configs, and send test notifications.
Alert channel IDs are UUIDs. The CLI validates the format locally before calling the API. Get IDs from devhelm alert-channels list.

Commands

CommandDescription
devhelm alert-channels listList all alert channels
devhelm alert-channels get <id>Get channel details
devhelm alert-channels createCreate an alert channel
devhelm alert-channels update <id>Update a channel
devhelm alert-channels delete <id>Delete a channel
devhelm alert-channels test <id>Send a test notification

alert-channels list

devhelm alert-channels list
FlagTypeDefaultDescription
--page-sizeinteger200Number of items per API request (1–200)

alert-channels get

devhelm alert-channels get <channel-id> -o json

alert-channels create

Create a new alert channel.
devhelm alert-channels create \
  --name "Slack Alerts" \
  --type slack \
  --webhook-url https://hooks.slack.com/services/T00/B00/xxx
FlagTypeRequiredDescription
--namestringYesChannel display name
--typestringYesChannel type (lowercase): email, webhook, slack, pagerduty, opsgenie, teams, discord, telegram, google_chat, pushover, mattermost, splunk_oncall, pushbullet, linear, incident_io, rootly, zapier, datadog, jira, gitlab
--webhook-urlstringWebhook URL (used by webhook, slack, discord, teams channel types)
--configstringChannel-specific configuration as JSON (see note below)
Channel type values are lowercase everywhere — in the CLI --type flag, in --config JSON, and in the YAML channelType field. Both surfaces validate against the same OpenAPI enum and reject uppercase values.

Examples by type

devhelm alert-channels create \
  --name "Slack Alerts" \
  --type slack \
  --webhook-url https://hooks.slack.com/services/T00/B00/xxx
devhelm alert-channels create \
  --name "PagerDuty On-Call" \
  --type pagerduty \
  --config '{"channelType":"pagerduty","routingKey":"R0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}'
devhelm alert-channels create \
  --name "Ops Email" \
  --type email \
  --config '{"channelType":"email","recipients":["ops@example.com"]}'
devhelm alert-channels create \
  --name "Custom Webhook" \
  --type webhook \
  --config '{"channelType":"webhook","url":"https://webhook.site/00000000-0000-0000-0000-000000000000","signingSecret":"my-hmac-secret"}'

Configuring channels that need extra fields

For channels that need more than a webhook URL, pass the configuration as a JSON string with --config. The CLI validates the JSON locally against the matching schema for these 7 types only: email, webhook, slack, pagerduty, opsgenie, teams, discord. For the remaining types (telegram, google_chat, pushover, mattermost, splunk_oncall, pushbullet, linear, incident_io, rootly, zapier, datadog, jira, gitlab), the --config flag rejects the payload before it reaches the API, and there are no dedicated flags for their fields (bot tokens, API keys, project IDs, …). Configure those channels via config-as-code or the dashboard instead:
Config-as-code
alertChannels:
  - name: Telegram On-Call
    config:
      channelType: telegram
      botToken: ${TELEGRAM_BOT_TOKEN}
      chatId: "-1001234567890"
devhelm deploy -f devhelm.yml --yes

alert-channels update

devhelm alert-channels update <channel-id> \
  --name "Slack Alerts (prod)" \
  --webhook-url https://hooks.slack.com/services/T00/B00/new
Supports the same flags as create (--name, --type, --config, --webhook-url), all optional.

alert-channels delete

Prompts for confirmation; pass --yes (-y) in scripts and CI.
devhelm alert-channels delete <channel-id>
Deleting a channel removes it from all notification policies that reference it. Verify the channel isn’t in use before deleting.

alert-channels test

Send a test notification through the channel to verify the configuration.
devhelm alert-channels test <channel-id>

Next steps

Alert channels reference

Detailed configuration for each channel type.

Integrations

Setup guides for Slack, PagerDuty, OpsGenie, and more.