Notification groups
A group is a set of destinations plus the checks and domains it covers. Failure, recovery, and certificate notices only go to the groups attached to that resource. That is how billing stays quiet while ops gets paged.
HTTPS webhook
Set an HTTPS URL on the group. GeeksUptime posts JSON with
Content-Type: application/json; charset=utf-8 and
User-Agent: GeeksUptime/1.0. Only HTTPS URLs are accepted.
Every payload includes:
schema_version— currently1delivery_id— 32-character hex, unique per deliveryevent_type— see the table belowoccurred_at— UTC instant ending inZclient_id,workspace_idresource— the check or domain involved
| event_type | When it fires |
|---|---|
uptime.check.failed |
Check went down and an incident opened |
uptime.check.recovered |
Check recovered after a down incident |
domain.ssl.expiring_soon |
Certificate hits an expiry milestone |
Certificate fingerprint / serial change events are delivered on Slack and mobile push today; they are not part of the generic HTTPS webhook schema yet.
Sample: uptime failure
{
"schema_version": 1,
"delivery_id": "a1b2c3d4e5f6789012345678abcdef01",
"event_type": "uptime.check.failed",
"occurred_at": "2026-07-30T09:41:00Z",
"client_id": 42,
"workspace_id": 7,
"resource": {
"type": "uptime_check",
"id": 101,
"name": "Checkout",
"url_or_host": "https://checkout.example.com"
},
"context": {
"incident_id": 9001,
"severity": "major",
"failed_locations": ["london", "frankfurt"]
}
}
On recovery, event_type becomes uptime.check.recovered and
context.severity is typically recovered. Empty context objects
are omitted.
Sample: SSL expiry
{
"schema_version": 1,
"delivery_id": "b2c3d4e5f6789012345678abcdef0123",
"event_type": "domain.ssl.expiring_soon",
"occurred_at": "2026-07-30T06:00:00Z",
"client_id": 42,
"workspace_id": 7,
"resource": {
"type": "domain",
"id": 55,
"name": "example.com"
},
"ssl": {
"days_until_expiry": 14,
"not_after": "2026-08-13 23:59:59"
}
}
Slack
Set a Slack Incoming Webhook URL on the group
(https://hooks.slack.com/services/…. Slack receives a formatted message
(text + Block Kit), not the HTTPS JSON schema above. Slack also receives certificate
change notices.
AMQP
RabbitMQ connection settings for a client are available to authenticated mobile clients
via GET /app/api/v1/mobile/rabbitmq-config. Outbound event publishing onto
that queue is configured per your integration; it is not the same versioned JSON contract
as the HTTPS webhook.
Verify a receiver locally
From the Docker development environment you can POST a synthetic payload with
make debug-webhook-sample URL=https://your-receiver.example/path
(optional EVENT=uptime_recovery|domain_ssl).