Documentation
Setting up monitoring
How to add an endpoint, choose a check interval, decide what counts as a healthy response and control where the alerts go.
Quick start
- 1 Create an account Registration takes an email address and a password. No card is needed to start.
- 2 Add your first endpoint Use Add Site in the dashboard and paste the full address, including https.
- 3 Set the check interval and alerts Choose how often the check runs, the timeout, and which channels should fire.
- 4 Monitoring starts immediately The first check runs right after saving, and the endpoint appears in the list with its status.
Site configuration
Monitoring frequency
How often an endpoint is checked. Tighter intervals detect an outage sooner and use more of the monitoring allowance on your plan.
| Interval | Use it for |
|---|---|
| 1 minute | Checkout, login and API endpoints where minutes cost money |
| 5 minutes | The default for most business websites |
| 15 minutes | Secondary pages and internal tools |
| 30 minutes | Low traffic sites |
| 60 minutes | Archive pages that only need a daily sanity check |
Expected status code
The HTTP status that means the endpoint is healthy. Anything else opens an incident.
200- Standard successful response
201- Created, typical for API endpoints
301- Redirect, when redirects are not being followed
Monitoring options
- Record response time
- Every check stores how long the response took, alongside its status code.
- Request timeout
- How long a check waits before it counts the endpoint as failing.
- Follow redirects
- Follow HTTP redirects and judge the final response instead of the first one.
Notifications
Alerts go to the account email address and to the teammates you add on the endpoint (3 on Starter, 10 on Professional, no limit on Enterprise), into a Slack channel and to your own webhook URL, and on Professional and above to the phone numbers you set. Both the failure and the recovery are announced, and the recovery message carries the measured outage length.
What the messages look like
Site down: shop.yourdomain.com returned HTTP 500 at 09:41:03
Site up: shop.yourdomain.com recovered at 09:46:07, outage 5 min 04 s
Slack and webhooks
Open the endpoint, paste a Slack incoming webhook URL, a webhook URL of your own, or both, and save. The Send test buttons next to the fields post a test message straight away. Slack gets one message when the endpoint goes down and one when it is back.
Webhook request
A POST with a JSON body to your https URL, sent when the endpoint goes down and when it recovers. Any answer outside 2xx, a timeout or a refused connection is retried up to five times over about 45 minutes, with the same delivery_id on every try.
{
"event": "endpoint.down",
"delivery_id": "6f1c2e9a-0d4b-4f8e-9a51-1c7d3b2e8f40",
"endpoint": { "id": 42, "name": "Checkout API", "url": "https://shop.yourdomain.com/api/health" },
"state": "down",
"occurred_at": "2026-10-01T09:41:03+00:00",
"status_code": 500,
"incident": { "id": 917, "started_at": "2026-10-01T09:41:03+00:00", "resolved_at": null,
"downtime_minutes": null, "reason": "Site returned status code 500 instead of expected 200" }
}
Verifying the signature
Every request carries X-TrackDowntime-Signature: t=1759311663,v1=<hex>. Compute HMAC SHA-256 of the timestamp, a dot and the raw request body, keyed with the signing secret shown on the endpoint, compare it with v1 in constant time, and reject timestamps older than five minutes.
// PHP
[$t, $v1] = sscanf($_SERVER['HTTP_X_TRACKDOWNTIME_SIGNATURE'], 't=%d,v1=%s');
$expected = hash_hmac('sha256', $t . '.' . file_get_contents('php://input'), $secret);
$valid = hash_equals($expected, $v1) && abs(time() - $t) < 300;
Support
Questions about setup, plans or an incident in your account go to [email protected].