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 an integration
- Select Healthchecks.io and click Save
- Open the new 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 Routes after creation
- Click Save and copy the generated push URL
Configure Healthchecks.io
1
Add a webhook integration
- Sign in to Healthchecks.io, open the project to connect, and switch to the Integrations tab
- Find Webhook and click Add Integration
- Enter a recognizable Name, such as
Flashduty
2
Configure down notifications
In the Execute when a check goes down section:
- Select POST as the method and paste the complete Flashduty push URL into URL
- Paste the following JSON into Request Body as is
- Leave Request Headers empty
3
Configure up notifications
Repeat the previous step in the Execute when a check goes up section: select POST, enter the same push URL, and paste the same JSON.
$STATUS renders as up there, and Flashduty recovers the alert. If you configure only down notifications, Flashduty alerts do not recover automatically.Click Save Integration.4
Connect checks
A new integration is enabled for all existing checks in the project, and checks created in the console are enabled for all of the project’s integrations. If a check is not connected (for example, you turned the integration off earlier, or created the check through the API without
channels), turn this webhook integration on under Notification Methods on the check’s details page.5
Verify
On the Integrations tab, click Test! for this integration. Healthchecks sends one down notification for a dummy check named
TEST. Flashduty returns success without creating an alert, so you can use it to confirm the push URL and request body.To verify the full flow, make a check go down (for example, call https://hc-ping.com/<uuid>/fail) and confirm that Flashduty receives an active alert. Then send a success ping to https://hc-ping.com/<uuid> and confirm that 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