VPS Health Monitoring
Watches a server's own resource health — CPU, memory, disk, load. The VPS is the monitored TARGET here, not a vantage point.
How it's different from a probe
This is separate from VPN tunnel monitoring and from Custom Probes: nothing runs checks FROM a VPS server, it just reports its own health back to ExitProbe.
vps:read to list and read servers and vps:write to register, edit, delete or rotate a token. Deleting a VPS server is final — there’s no soft-delete/restore, unlike Projects and Monitors.Registering, rotating & monitoring from code
Installing the agent
Register VPS returns an install_command — the same agent installer as Custom Probes, but flagged -r vps so it reports resource health instead of running checks.
/user/vpsVPS health monitoring watches a server's own resource health (CPU, memory, disk, load) — the VPS is the monitored TARGET here, not a vantage point. This is separate from VPN tunnel monitors.
| project_id | integer | Only servers in this project. |
| status | string | `online`, `offline` or `unregistered` (the agent has never reported). |
| search | string | Matches name, IP address or hostname. |
| per_page | integer | 1–100. Sending this (or `page`) turns pagination on and fills `pagination`; omit both to get every server. |
| page | integer | Page number, starting at 1. |
curl -X GET "https://api.exitprobe.com/api/v1/user/vps" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"{
"success": true,
"data": {
"vps_servers": [{ "id": 1, "name": "prod-db-1", "status": "online", "agent_status": "online", "health_score": 92, "health_grade": "excellent", "cpu_usage": 12.4, "memory_usage": 44.1, "disk_usage": 61.0 }],
"summary": { "total": 4, "online": 3, "offline": 1, "unregistered": 0, "inactive": 0, "average_health_score": 88, "critical": 1, "excellent": 2 },
"pagination": { "page": 1, "per_page": 25, "total": 4, "last_page": 1, "has_more": false },
"usage": { "count": 4, "max_custom_vps": 10, "can_add_custom_vps": true }
}
}/user/vps/summaryOnline / offline / unregistered counts and the average health score — no rows. Cheap enough to poll from a status board.
| project_id | integer | Count only this project. |
curl -X GET "https://api.exitprobe.com/api/v1/user/vps/summary" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"{ "success": true, "data": { "total": 4, "online": 3, "offline": 1, "unregistered": 0, "inactive": 0, "average_health_score": 88, "critical": 1, "excellent": 2 } }/user/vpsRegisters a server and returns its agent token plus the one-time `install_command` to run on it. The token is shown only in this response — store it, or rotate it later.
| name* | string | |
| ip_address* | string | |
| project_id | integer | Defaults to your default/first project. |
curl -X POST "https://api.exitprobe.com/api/v1/user/vps" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "My Monitor"
}'{
"success": true,
"message": "VPS registered successfully. Run the installation command on your server to start monitoring it.",
"data": { "vps_server": { "id": 1, "name": "prod-db-1" }, "agent_token": "vps_9f8e7d6c...", "install_command": "curl -sSL https://api.exitprobe.com/install.sh | sudo bash -s -- -s https://api.exitprobe.com -t vps_9f8e7d6c... -r vps" }
}/user/vps/lookup-ip| ip* | string |
curl -X POST "https://api.exitprobe.com/api/v1/user/vps/lookup-ip" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "My Monitor"
}'/user/vps/{id}Full resource metrics (CPU, memory, disk, swap, load averages, top processes) plus recent health snapshots and incidents.
| summary_only | boolean | Skip history — faster for a list/summary view. |
| history_only | boolean | Return only health_snapshots + incidents, skip the full server block. |
| range | string | Limit snapshot history to a window: `1h`, `6h`, `24h`, `7d` or `30d`. |
| limit | integer | Max snapshots returned, 1–2000. Defaults to 500 (the newest). |
curl -X GET "https://api.exitprobe.com/api/v1/user/vps/{id}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"/user/vps/{id}Configure alert thresholds. Takes effect on the next evaluation run, which also auto-resolves any open incident a loosened threshold no longer breaches.
| name | string | |
| is_active | boolean | |
| notifications_enabled | boolean | |
| cpu_threshold | integer | 50–100. Floored at 50 — anything lower would alert on a healthy server. |
| memory_threshold | integer | 50–100. |
| disk_threshold | integer | 50–100. |
| threshold_duration_minutes | integer | 5–1440 — how long a breach must sustain before alerting. |
curl -X PATCH "https://api.exitprobe.com/api/v1/user/vps/{id}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"name": "My Monitor"
}'/user/vps/{id}Removes the server and its history. Final — there is no restore.
curl -X DELETE "https://api.exitprobe.com/api/v1/user/vps/{id}" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"/user/vps/{id}/regenerate-tokenRotates the agent token. The old token stops working immediately; run the returned `install_command` on the server again. The new token is shown only in this response.
curl -X POST "https://api.exitprobe.com/api/v1/user/vps/{id}/regenerate-token" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"