Webhook Channel

Webhook Alert Channel

The webhook channel lets LoadFocus send an HTTP POST with a JSON body to any URL you control whenever a monitored check changes state. It is the most flexible alert channel: anything that accepts an inbound JSON webhook — PagerDuty Events API, Opsgenie, Zapier, n8n, Make, or your own service — can receive LoadFocus alerts.

Creating a webhook channel

  1. Go to Alert Settings and click + New Alert Channel.
  2. Choose Webhook.
  3. Give it a name (shown in the channel list) and paste the HTTPS URL that should receive the POST.
  4. Click Save Configuration, then enable the channel on any check and pick which events it should receive with the per-channel routing pills.

When LoadFocus calls your webhook

LoadFocus POSTs to your URL on these events:

Eventevent valueWhen it fires
Check failedcheck.failedA check transitions into the failed state (assertion failed, error, or timeout).
Check recoveredcheck.recoveredA previously-failed check passes again.
Check degradedcheck.degradedResponse time crosses the degraded threshold without failing.
SSL expiryssl.expiry14, 7 and 3 days before a monitored HTTPS certificate expires, and on the expiry day.
TesttestYou click the Test button next to the channel.

Which of these reach a given channel is controlled by the Fail / Recover / Degraded / SSL pills under that channel on the check's edit page. All events are enabled by default.

Payload

The POST body is application/json:

{
"source": "loadfocus",
"event": "check.failed",
"check": {
"id": "75be9e45e858177eea4a18bbdc765472",
"name": "Designerbox",
"url": "https://designerbox.ai"
},
"status": "failed",
"location": "us-east-1",
"timestamp": "2026-06-07T12:00:00.000Z"
}

Field reference:

  • source — always loadfocus. Use it to recognise the sender.
  • event — one of check.failed, check.recovered, check.degraded, ssl.expiry, test.
  • check.id / check.name / check.url — the monitor that triggered the alert.
  • status — the check status at send time (failed, passed, degraded, or null for SSL/test).
  • location — the AWS region the check ran from.
  • timestamp — ISO-8601 UTC time of the event.

SSL expiry events add a details object:

{
"source": "loadfocus",
"event": "ssl.expiry",
"check": { "id": "...", "name": "...", "url": "https://..." },
"status": null,
"location": null,
"timestamp": "2026-06-07T12:00:00.000Z",
"details": { "daysRemaining": 7, "validTo": "Aug 29 23:59:59 2026 GMT" }
}

Security and requirements

  • HTTPS only. Webhook URLs must start with https://. Plain http URLs are rejected.
  • Private addresses are blocked. To prevent server-side request forgery, LoadFocus resolves your hostname and refuses to call private, loopback, link-local or carrier-grade-NAT addresses (for example 10.0.0.0/8, 127.0.0.1, 169.254.0.0/16, 192.168.0.0/16). Your endpoint must be reachable on the public internet.
  • No redirects. LoadFocus does not follow HTTP redirects on webhook calls — point the channel at the final URL.
  • Timeout. Each call times out after 10 seconds. There is no automatic retry, so your receiver should accept and queue the payload quickly.
  • Verify it works. Use the Test button to send a test event before relying on the channel. A free service like webhook.site is handy for inspecting the exact payload.

Integration examples

  • PagerDuty — point the channel at your Events API v2 integration URL and route only check.failed to it (turn off the Recover/Degraded/SSL pills) so it opens incidents on failure.
  • Opsgenie — use an inbound API integration URL; map check.failed to alert-create and check.recovered to alert-close in Opsgenie.
  • Zapier / Make / n8n — start a workflow from a "Catch Hook" trigger and branch on the event field to post to chat, create tickets, or update a status page.
  • Your own service — accept the POST, check source === "loadfocus", and act on event.
  • Alert Channels — overview of all channel types and per-channel event routing.