Programmatic access to monitoring status, uptime history, incidents, SSL metadata, and server health reports.
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
You can retrieve your token by visiting your dashboard and clicking Generate API token.
This controller is responsible for handling all API requests related to monitoring data. It provides endpoints for retrieving uptime/downtime, response times, incidents, and other monitoring statistics. The controller makes extensive use of caching to ensure optimal performance.
The ID of the monitoring.
curl --request GET \
--get "https://webguard.marcel-breuer.dev/api/v1/monitorings/01k0rqs3gmz6esfrmgsre03yd6" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"days\": 16,
\"start_date\": \"2026-06-02T06:56:29\",
\"end_date\": \"2052-06-25\"
}"
{
"status_since": {
"status": "UP",
"time": "2021-01-01 00:00:00"
},
"status_now": {
"status": "UP"
},
"uptime_downtime": [
{
"date": "2021-01-01",
"uptime": 100,
"downtime": 0
}
],
"response_times": [
{
"datetime": "2021-01-01 00:00:00",
"response_time": 123
}
],
"incidents": [
{
"started_at": "2021-01-01 00:00:00",
"finished_at": "2021-01-01 00:05:00",
"type": "DOWN",
"reason": "HTTP status code 500"
}
],
"heatmap": [
{
"hour": "00:00",
"uptime": 100
}
],
"ssl": {
"valid": true,
"expiration": "2022-01-01T00:00:00.000000Z",
"issuer": "Let's Encrypt",
"issue_date": "2021-10-01T00:00:00.000000Z"
},
"uptime_calendar": {
"2021-01": [
{
"date": "2021-01-01",
"uptime": "100.00"
}
]
}
}
The ID of the monitoring.
curl --request GET \
--get "https://webguard.marcel-breuer.dev/api/v1/monitorings/01k0rqs3gmz6esfrmgsre03yd6/status" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"status": "UP",
"since": "2021-01-01 00:00:00",
"checked_at": "2021-01-01 00:00:00",
"next": "2021-01-01 00:05:00",
"interval": 300
}
The ID of the monitoring.
The number of days to retrieve data for. Defaults to 30.
curl --request GET \
--get "https://webguard.marcel-breuer.dev/api/v1/monitorings/01k0rqs3gmz6esfrmgsre03yd6/uptime-downtime?days=30" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"days\": 16
}"
[
{
"date": "2021-01-01",
"uptime": 100,
"downtime": 0
}
]
The ID of the monitoring.
The day ranges to retrieve.
curl --request GET \
--get "https://webguard.marcel-breuer.dev/api/v1/monitorings/01k0rqs3gmz6esfrmgsre03yd6/uptime-downtime-summary?days%5B%5D[]=7&days%5B%5D[]=30&days%5B%5D[]=90" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"days\": [
1
]
}"
{
"data": {
"7": {
"has_data": true
},
"30": {
"has_data": true
}
}
}
The ID of the monitoring.
The number of days to retrieve data for. Defaults to 30.
curl --request GET \
--get "https://webguard.marcel-breuer.dev/api/v1/monitorings/01k0rqs3gmz6esfrmgsre03yd6/response-times?days=30" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"days\": 16
}"
[
{
"datetime": "2021-01-01 00:00:00",
"response_time": 123
}
]
The ID of the monitoring.
Optional number of past days to include. If omitted, all available history is considered.
Optional maximum number of entries returned. Defaults to 100.
Optional number of entries to skip for pagination. Defaults to 0.
curl --request GET \
--get "https://webguard.marcel-breuer.dev/api/v1/monitorings/01k0rqs3gmz6esfrmgsre03yd6/checks?days=16&limit=16&offset=16" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"days\": 1,
\"limit\": 22,
\"offset\": 7
}"
{
"data": [
{
"id": "01H...",
"checked_at": "2026-03-24T12:00:00Z",
"status": "down",
"http_status_code": 503,
"response_time": 210.5,
"status_identifier": "status.server_error",
"status_key": "notifications.status.server_error",
"source": "live"
}
],
"meta": {
"count": 1,
"limit": 100,
"offset": 0,
"days": 7,
"has_more": false,
"next_offset": null
}
}
The ID of the monitoring.
The number of days to retrieve data for. Defaults to 30.
curl --request GET \
--get "https://webguard.marcel-breuer.dev/api/v1/monitorings/01k0rqs3gmz6esfrmgsre03yd6/incidents?days=30" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"days\": 16
}"
[
{
"started_at": "2021-01-01 00:00:00",
"finished_at": "2021-01-01 00:05:00",
"type": "DOWN",
"reason": "HTTP status code 500"
}
]
The ID of the monitoring.
curl --request GET \
--get "https://webguard.marcel-breuer.dev/api/v1/monitorings/01k0rqs3gmz6esfrmgsre03yd6/heatmap" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" [
{
"hour": "00:00",
"uptime": 100
}
]
The ID of the monitoring.
curl --request GET \
--get "https://webguard.marcel-breuer.dev/api/v1/monitorings/01k0rqs3gmz6esfrmgsre03yd6/ssl" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"valid": true,
"expiration": "2022-01-01T00:00:00.000000Z",
"issuer": "Let's Encrypt",
"issue_date": "2021-10-01T00:00:00.000000Z"
}
The ID of the monitoring.
date The start date to retrieve data for.
date The end date to retrieve data for.
curl --request GET \
--get "https://webguard.marcel-breuer.dev/api/v1/monitorings/01k0rqs3gmz6esfrmgsre03yd6/uptime-calendar?start_date=2021-01-01&end_date=2021-01-31" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"start_date\": \"2026-06-02T06:56:29\",
\"end_date\": \"2052-06-25\"
}"
{
"2021-01": [
{
"date": "2021-01-01",
"uptime": "100.00"
}
]
}
Use the private endpoint generated for a Server Health monitoring. Send CPU, RAM, and storage percentages from your server agent or cron script. If no explicit status is supplied, WebGuard marks the report down when any percentage metric reaches that monitor's configured threshold.
The private server health token generated when the monitoring is created.
curl --request POST \
"https://webguard.marcel-breuer.dev/api/v1/server-health/01HXZ7Q92W3K7VY9E6JQFM4XPC" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"status\": \"up\",
\"cpu_usage_percent\": 42.5,
\"ram_usage_percent\": 68.2,
\"storage_usage_percent\": 74.1,
\"load_average\": 1.42,
\"uptime_seconds\": 86400,
\"extra_metrics\": {
\"swap_usage_percent\": 12.4
}
}"
{
"message": "Server health report accepted.",
"status": "up",
"metrics": {
"cpu_usage_percent": 42.5,
"ram_usage_percent": 68.2,
"storage_usage_percent": 74.1
}
}