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, such as Zapier, n8n, Make or your own service, can receive LoadFocus alerts. PagerDuty and Opsgenie have their own channels (paid plans) that send the format those services expect.
Creating a webhook channel
- Go to Alert Channels and click + New Alert Channel.
- Choose Webhook.
- Give it a name (shown in the channel list) and paste the HTTPS URL that should receive the POST.
- Click Save channel, 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:
| Event | event value | When it fires |
|---|---|---|
| Check failed | check.failed | A check transitions into the failed state (assertion failed, error, or timeout). |
| Check recovered | check.recovered | A previously-failed check passes again. |
| Check degraded | check.degraded | Response time crosses the degraded threshold without failing. |
| SSL expiry | ssl.expiry | 14, 7 and 3 days before a monitored HTTPS certificate expires, and on the expiry day. |
| Domain expiry | domain.expiry | A monitored domain registration is close to expiring. |
| Test | test | You click the Test button next to the channel. |
Which of these reach a given channel is controlled by the Fail / Recover / Degraded / SSL / Domain pills under that channel on the check's edit page. All events are enabled by default. The test event is always sent when you click Test.
Payload
The POST body is application/json, sent with the header User-Agent: LoadFocus-Webhook/1.0:
{"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,domain.expiry,test. - check.id / check.name / check.url: the monitor that triggered the alert (null in a
testevent). - status: the check status at send time (
failed,passed,degraded, or null for SSL, domain and test events). - location: the region the check ran from (null for SSL, domain and test events).
- timestamp: ISO-8601 UTC time of the event.
SSL expiry events add a details object, domain expiry events add one with domain, daysRemaining, expiresAt and source, and a test event has a details.message text. The SSL example:
{"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": "Jun 14 23:59:59 2026 GMT" }}
Security and requirements
- HTTPS only. Webhook URLs must start with
https://. PlainhttpURLs 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, so 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
testevent before relying on the channel. A free service like webhook.site is handy for inspecting the exact payload.
Integration examples
- Zapier / Make / n8n: start a workflow from a "Catch Hook" or webhook trigger and branch on the
eventfield to post to chat, create tickets, or update a status page. - Your own service: accept the POST, check
source === "loadfocus", and act onevent. - PagerDuty and Opsgenie: use their own alert channels (paid plans), not the webhook channel.
Related
- Alert Channels: overview of all channel types and per-channel event routing.