Skip to main content
Connect DevHelm to incident.io to declare an incident automatically when an outage is detected. DevHelm calls the incident.io v2 API (POST /v2/incidents); from there incident.io runs its own escalation, status page updates, and team communication.

Setup

1

Create an incident.io API key (and find a severity ID)

  1. In incident.io, go to SettingsAPI keys and create a key with the Create incidents permission enabled
  2. Copy the key — incident.io shows it only once
  3. (Optional) Severities are specific to your organization, so fetch their IDs with the List Severities API:
curl https://api.incident.io/v1/severities \
  -H "Authorization: Bearer YOUR_API_KEY"
Copy the id of the severity you want DevHelm-created incidents to use. If you omit it, the incident is created without an explicit severity.
2

Create the alert channel in DevHelm

devhelm alert-channels create \
  --name "incident.io" \
  --type incident_io \
  --config '{"channelType":"incident_io","apiKey":"inc_live_xxxxxxxx","severityId":"01FCNDV6P870EA6S7TK1DSYDG0","visibility":"public"}'
3

Test the channel

devhelm alert-channels test <channel-id>

Configuration

FieldDescriptionRequired
apiKeyincident.io API key with the Create incidents permissionYes
severityIdSeverity ID from GET /v1/severities; omit for no explicit severityNo
visibilityIncident visibility: public or private (default: public)No

Lifecycle behavior

incident.io is a trigger-resolve channel:
DevHelm eventincident.io action
Incident createdDeclares a new incident
Incident resolvedResolves the corresponding incident
Once the incident exists, incident.io drives escalation, status page updates, and communications — DevHelm just keeps the incident state in sync.

Troubleshooting

The API key is missing the Create incidents permission, or it was revoked. In Settings → API keys, create a new key with that permission and update the channel config.
Severities are organization-specific. Re-fetch them with GET https://api.incident.io/v1/severities and copy a current id. Note the version split: severities live on v1, incidents are created on v2.
visibility must be exactly public or private (lowercase). Any other value is rejected by incident.io.