External API: monitoring
The monitoring endpoint of the External API reports the health of your UnSpot integrations — displays, webhooks, calendar connections and user synchronization — so you can plug UnSpot into your monitoring stack (Zabbix, Grafana, Nagios, etc.).
Authentication
Create an API connection of type Monitoring in Administration > Integrations > External API and copy the token. The token can be generated by a user with the Owner or Integrations admin role (Settings > Integrations > API settings, “System monitoring API” block). Pass it in every request:
Authorization: Bearer <token>Requests without a valid token return 401. If you exceed the rate limit, the API returns 429 with a Retry-After header.
Get monitoring data — GET /api/external/v1/monitoring[/{category}]
Without a category the endpoint returns all sections. With a category it returns only that section.
| Category | What it reports |
|---|---|
displays | Every display device: id, name, status |
webhooks | Counters: total, online, failed, disabled |
calendars | Counters for room calendar connections: total, online, offline |
user-sync | lastSyncDate — when directory synchronization last ran (null if not configured) |
system | On-premise installations only: status of redis, database, filesystem, smtp and message queue lengths |
Example request
curl -H "Authorization: Bearer $TOKEN" \
https://acme.unspot.com/api/external/v1/monitoring/webhooksExample response — 200
{
"message": "OK",
"body": {
"displays": [ { "id": "b7e1...-uuid", "name": "Room 4.1 display", "status": "online" } ],
"webhooks": { "total": 5, "online": 4, "failed": 1, "disabled": 0 },
"calendars": { "total": 12, "online": 12, "offline": 0 },
"userSync": { "lastSyncDate": "2026-07-08T03:00:00+00:00" }
}
}For on-premise installations the system section additionally reports infrastructure health:
{
"message": "OK",
"body": {
"system": {
"redis": "online",
"database": "online",
"filesystem": "online",
"smtp": "online",
"queue": [ { "name": "webhooks", "messages": 0 }, { "name": "notification", "messages": 3 } ]
}
}
}Errors and limits
All responses are wrapped in an envelope {"message": ..., "body": ...}; error bodies look like:
{ "message": "Too Many Requests", "errors": [] }- 400 — unknown category (allowed: displays, webhooks, calendars, user-sync, system).
- 403 Forbidden — insufficient permissions.
- 401 — invalid token, or
System monitoring is only available for on-premise environmentwhen requestingsystemon cloud. - 429 — more than one request per 30 seconds.