Skip to main content
Use webhooks in Level (level.io) to send device alerts to Flashduty On-call. Level sends alert_active when an alert is raised and alert_resolved when it is resolved. Flashduty correlates the two by the alert id: it creates an alert on trigger and recovers it on resolution.

In Flashduty On-call

You can get the integration push URL in either of the following ways.

Use a dedicated integration

  1. In the Flashduty console, select Channel and open a channel
  2. Select Configuration → Integrations → Private integration, then click Add integration
  3. Select Level, then click Save
  4. Open the generated integration card and copy the Push URL

Use a shared integration

  1. In the Flashduty console, go to Integration Center → Alert Events
  2. Select Level and enter an integration name
  3. Configure the default route and select a channel. You can add more rules under Routing after creation
  4. Click Save and copy the generated Push URL

Configure Level

1

Add a webhook in Level

Where: Level › Settings › WebhooksSave the webhook.
2

Trigger an alert and verify

Where: Level › Settings › Webhooks
  1. Trigger a device alert in Level and confirm Flashduty receives an active alert
  2. After the alert is resolved in Level, confirm the matching Flashduty alert recovers
  3. The Webhooks page in Level shows the status code and response of each delivery, and Re-run request resends one
Level’s documentation does not say whether the webhook has a test button or what a test request contains.After a few seconds, go back to Flashduty. If the integration shows a Latest event time, the setup works.

Alert key

Flashduty uses data.id (the Level alert ID) as the Alert Key, so alert_active and alert_resolved for the same alert share one Alert Key. Changes to the alert name, description, severity, or device hostname do not change it. Level’s event_id identifies an event and stays the same across retries and manual re-runs; Flashduty does not use it as the Alert Key. Requests without data.id are rejected.

Status and severity

The device_created, device_updated, device_deleted, group_created, group_updated, and group_deleted events are not alerts; Flashduty returns success and creates nothing. Severity comes from data.severity: A recovery event keeps the alert’s existing severity.

Labels

The alert title is hostname: alert name, and the description comes from data.description and data.payload.

Troubleshooting

  • Flashduty returns a parameter error: check that the URL is complete and includes integration_key, and that the request body is in Level’s webhook format
  • Alerts do not recover: check that the webhook has alert_resolved selected
  • The same event arrives more than once: Level retries failed deliveries automatically; repeated deliveries of the same alert merge into one Flashduty alert
For field details, see the Level webhooks developer guide.