API Referentie
Real-time monitoring voor Nederlandse infrastructuur
Introductie
De StatusBewaker REST API geeft je volledige controle over je monitors, statusdata en alertconfiguraties. Alle endpoints vereisen authenticatie via een Bearer token in de Authorization header. De API is gehost op api.statusbewaker.nl en ondersteunt alleen HTTPS.
Je vindt je API-keys onder Instellingen > API-toegang in je dashboard. Standaard geldt een rate limit van 60 verzoeken per minuut per key. Enterprise-abonnees krijgen een verhoogd plafond van 600 verzoeken per minuut. Alle tijden worden geretourneerd in ISO 8601-formaat (UTC). Fouten gebruiken standaard HTTP-statuscodes met een JSON-body die een error en details veld bevat.
Endpoints
Alle beschikbare API-endpoints, gegroepeerd per functie. Elke endpoint beschrijft de HTTP-methode, vereiste parameters, request-body schema en voorbeeld-responses.
GET /v1/monitors
Retoureert een gepagineerde lijst van alle monitors in je account. Ondersteunt filteren op status (up/down/maintenance) en type (http/tcp/ping/dns).
GET /v1/monitors?status=up&limit=25&offset=0
Response 200:
{
"data": [
{
"id": "mon_7k2x9p4q",
"name": "API Backend — Amsterdam",
"type": "http",
"url": "https://api.voorbeeld.nl/health",
"status": "up",
"uptime_30d": 99.97,
"created_at": "2024-03-12T08:14:00Z"
}
],
"meta": {
"total": 14,
"limit": 25,
"offset": 0
}
}
POST /v1/monitors
Maak een nieuwe monitor aan. Verplichte velden: name, type, target. Optioneel: interval (standaard 60s, min 30s), expected_status, ssl_expiry_alert_days.
POST /v1/monitors
Content-Type: application/json
{
"name": "PostNL Track & Trace",
"type": "http",
"target": "https://www.postnl.nl/api/v2/track",
"interval": 60,
"expected_status": [200, 201],
"ssl_expiry_alert_days": 14,
"tags": ["logistiek", "productie"]
}
Response 201:
{
"id": "mon_3n8w1r5t",
"name": "PostNL Track & Trace",
"status": "initializing",
"created_at": "2025-01-08T14:22:31Z"
}
GET /v1/monitors/{id}/status
Haal gedetailleerde statusdata op voor een specifieke monitor. Retourneert huidige status, laatste check-resultaat, response-time historie (laatste 72 uur) en uptime-statistieken.
GET /v1/monitors/mon_7k2x9p4q/status
Response 200:
{
"monitor_id": "mon_7k2x9p4q",
"current_status": "up",
"last_check": {
"timestamp": "2025-01-08T14:23:00Z",
"response_time_ms": 142,
"status_code": 200,
"ssl_days_remaining": 87
},
"uptime": {
"24h": 100.0,
"7d": 99.94,
"30d": 99.97
},
"response_times": [
{ "timestamp": "...", "ms": 138 },
{ "timestamp": "...", "ms": 151 }
]
}
GET /v1/alerts
Lijst alle geconfigureerde alertkanalen op. Ondersteunde types: webhook, email, slack, teams, pagerduty. Filter op type of active.
GET /v1/alerts?type=webhook
Response 200:
{
"data": [
{
"id": "alt_9m2k4x7p",
"type": "webhook",
"name": "Ops Team — Discord",
"endpoint": "https://discord.com/api/webhooks/...",
"active": true,
"monitors": ["mon_7k2x9p4q", "mon_3n8w1r5t"],
"conditions": ["down", "ssl_expiry", "response_time_gt_500"]
}
]
}
POST /v1/alerts
Configureer een nieuw alertkanaal. Verplicht: type, name, config (type-specifiek). Koppel monitors via monitor_ids. Stel trigger-voorwaarden in via conditions.
POST /v1/alerts
Content-Type: application/json
{
"type": "slack",
"name": "Infra-alerts — #ops-channel",
"config": {
"webhook_url": "https://hooks.slack.com/services/T02/...",
"channel": "#ops-channel"
},
"monitor_ids": ["mon_7k2x9p4q"],
"conditions": ["down", "response_time_gt_1000"],
"cooldown_minutes": 15
}
Response 201:
{
"id": "alt_5r8n2w1q",
"type": "slack",
"name": "Infra-alerts — #ops-channel",
"active": true,
"created_at": "2025-01-08T14:25:10Z"
}
DELETE /v1/monitors/{id}
Verwijder een monitor permanently. Alle bijbehorende statusdata en alertkoppelingen worden verwijderd. Deze actie is onomkeerbaar. Retourneert 204 No Content bij succes.
DELETE /v1/monitors/mon_3n8w1r5t
Authorization: Bearer sk_live_...
Response 204 No Content
Voorbeelden
Praktische code-voorbeelden in veelgebruikte talen om snel te starten met de StatusBewaker API.
Monitor aanmaken en status controleren
const API_KEY = process.env.STATUSBEWAKER_API_KEY;
const BASE = 'https://api.statusbewaker.nl/v1';
// Maak een monitor aan
const monitor = await fetch(`${BASE}/monitors`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Rijksdienst Digitale Overheid',
type: 'http',
target: 'https://www.overheid.nl/healthz',
interval: 60,
expected_status: [200],
ssl_expiry_alert_days: 21
})
}).then(r => r.json());
console.log('Monitor aangemaakt:', monitor.id);
// Controleer status na 30 seconden
await new Promise(r => setTimeout(r, 30000));
const status = await fetch(
`${BASE}/monitors/${monitor.id}/status`,
{ headers: { 'Authorization': `Bearer ${API_KEY}` } }
).then(r => r.json());
console.log('Huidige status:', status.current_status);
console.log('Response tijd:', status.last_check.response_time_ms, 'ms');
console.log('Uptime 30d:', status.uptime['30d'], '%');
Alle monitors ophalen en afval detecteren
import requests
API_KEY = "sk_live_4f8a2b..."
BASE = "https://api.statusbewaker.nl/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}
# Haal alle monitors op
resp = requests.get(f"{BASE}/monitors", headers=headers)
monitors = resp.json()["data"]
# Identificeer monitors met laag uptime
for m in monitors:
uptime = m.get("uptime_30d", 100)
if uptime < 99.5:
print(f"⚠️ {m['name']} — uptime: {uptime}%")
print(f" URL: {m.get('url', 'N/A')}")
print(f" Status: {m['status']}")
# Haal gedetailleerde status op
detail = requests.get(
f"{BASE}/monitors/{m['id']}/status",
headers=headers
).json()
print(f" Laatste check: {detail['last_check']['response_time_ms']}ms")
print(f" SSL verloopt over: {detail['last_check']['ssl_days_remaining']} dagen\n")
Snelle status-check via terminal
# Alle monitors overzicht
curl -s https://api.statusbewaker.nl/v1/monitors \
-H "Authorization: Bearer sk_live_4f8a2b..." | jq '.data[] | {name, status, uptime_30d}'
# Specifieke monitor status
curl -s https://api.statusbewaker.nl/v1/monitors/mon_7k2x9p4q/status \
-H "Authorization: Bearer sk_live_4f8a2b..." | jq '.current_status, .last_check.response_time_ms'
# Webhook alert configureren
curl -s -X POST https://api.statusbewaker.nl/v1/alerts \
-H "Authorization: Bearer sk_live_4f8a2b..." \
-H "Content-Type: application/json" \
-d '{
"type": "webhook",
"name": "Incidenten — Mattermost",
"config": {
"url": "https://mattermost.rijksoverheid.nl/hooks/abc123"
},
"monitor_ids": ["mon_7k2x9p4q"],
"conditions": ["down", "ssl_expiry"],
"cooldown_minutes": 10
}'
Foutafhandeling
De API retourneert standaard JSON-foutmeldingen. Hieronder de meest voorkomende statuscodes:
400 Bad Request — Ongeldige parameters of ontbrekende velden
401 Unauthorized — Ontbrekend of ongeldig API-key
403 Forbidden — Key heeft geen rechten voor deze actie
404 Not Found — Monitor of alert bestaat niet
429 Too Many Requests — Rate limit overschreden (zie Retry-After header)
500 Internal Server Error — Serverfout (contacteer support@statusbewaker.nl)
Voorbeeld 429 response:
{
"error": "rate_limit_exceeded",
"details": "U heeft 60 verzoeken per minuut bereikt. Probeer het over 23 seconden opnieuw.",
"retry_after": 23
}