down) and recovery (up) notifications to Flashduty On-call. Each check maps to one Flashduty alert: the alert triggers when the check misses its ping or receives a failure signal, and recovers when the check receives a ping again.
Self-hosted Healthchecks needs v3.5 or later, because the template below uses the $NAME_JSON, $BODY_JSON, and $SLUG placeholders.
In Flashduty On-call
You can get the integration push URL in either of the following ways.Use a dedicated integration
- In the Flashduty console, go to Channels and open a channel
- Select Configuration → Integrations → Private integration, then click Add integration
- Select Healthchecks.io and click Save
- Open the generated integration card and copy the Push URL
Use a shared integration
- In the Flashduty console, go to Integration Center → Alert Events
- Select Healthchecks.io and enter an integration name
- Configure the default route and select a channel. You can add more rules under Routing after creation
- Click Save and copy the generated Push URL
Configure healthchecks.io
1
Add a webhook integration in Healthchecks.io
Where: Healthchecks.io › project › Integrations › Webhook › Add IntegrationSign in to Healthchecks.io, open the project to connect, switch to the Integrations tab, find Webhook, and click Add Integration.The recovery notification is required:
$STATUS renders as up in the template, and Flashduty closes the alert based on it. If you configure only the down notification, Flashduty alerts never recover automatically.Click Save Integration to save.2
Link the checks
Where: Healthchecks.io › ChecksA new integration is automatically linked to the project’s existing checks, and checks created in the console are automatically linked to all of the project’s integrations. If a check is not linked (for example, it was turned off manually before, or it was created through the API without
channels), click the Webhook icon on that check in the Checks page, or turn this webhook on under Notification Methods on the check’s detail page.3
Verify
On the Integrations tab, click Test! on this integration. Healthchecks sends a down notification for a simulated check named
TEST. Flashduty returns success but creates no alert, so this only proves the Push URL and request body are configured correctly; it does not prove the alert flow works.To verify the full flow, make a check actually go down (for example, call https://hc-ping.com/<uuid>/fail) and confirm Flashduty receives an active alert and the integration shows its Latest event time; then send a successful ping by calling https://hc-ping.com/<uuid> and confirm the alert recovers.Payload fields
The alert title is the check name. When the name is empty, Flashduty uses the slug, then
Healthchecks.io check <code>. Every alert also carries the label source=healthchecks-io.
Alert key
Flashduty uses$CODE (code, the check UUID) as the Alert Key. The down and up notifications of a check carry the same UUID, so they land on the same alert. Different checks create different alerts even if they share a name. Renaming a check or changing its slug or tags does not change the Alert Key.
A check that is deleted and created again gets a new UUID and is no longer linked to the old alert.
Status and severity
Healthchecks.io notifications have no severity. Flashduty maps them as follows:
An empty or any other
status is rejected.
FAQ
Does a check that stays down send repeated notifications?
Does a check that stays down send repeated notifications?
No. Healthchecks.io sends one notification per status change: one when the check goes
down, and one when it returns to up.Are failed deliveries retried?
Are failed deliveries retried?
Yes. Each Healthchecks.io request times out after 30 seconds. On a connection failure or a status code other than 200, 201, 202, or 204, it makes up to 3 attempts in total. If all 3 fail, the notification is lost; if that was the up notification, close the alert manually.
Troubleshooting
- Flashduty returns an invalid parameter error: Confirm the method is POST, the request body is the JSON above, and
codeandstatusare unchanged - JSON parsing fails: Check whether a tag contains a double quote or backslash.
$TAGSis inserted as is, and these characters make the body invalid JSON. Change the tag, or remove thetagsline from the template - The request body of a self-hosted Healthchecks contains
$NAME_JSONor$SLUGliterally: The version is too old to support these placeholders. Upgrade to v3.5 or later - Alerts do not recover: Confirm that the Execute when a check goes up section also has the push URL and request body
- No notifications arrive: Confirm the integration is on under the check’s Notification Methods. For self-hosted Healthchecks, also confirm that
WEBHOOKS_ENABLEDis not turned off