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.

Scoped tokens need 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

Everything below is also available as typed methods in the Node.js and Laravel SDKs: register a server and receive its token and install command, rotate that token, read live health and history, tune alert thresholds, and delete it.

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.

GET/user/vps
List VPS Servers

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. This is separate from VPN tunnel monitors.

Query Parameters
project_idintegerOnly servers in this project.
statusstring`online`, `offline` or `unregistered` (the agent has never reported).
searchstringMatches name, IP address or hostname.
per_pageinteger1–100. Sending this (or `page`) turns pagination on and fills `pagination`; omit both to get every server.
pageintegerPage number, starting at 1.
Example Request
curl -X GET "https://api.exitprobe.com/api/v1/user/vps" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"
Example Response
{
  "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 }
  }
}
GET/user/vps/summary
VPS Summary

Online / offline / unregistered counts and the average health score — no rows. Cheap enough to poll from a status board.

Query Parameters
project_idintegerCount only this project.
Example Request
curl -X GET "https://api.exitprobe.com/api/v1/user/vps/summary" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"
Example Response
{ "success": true, "data": { "total": 4, "online": 3, "offline": 1, "unregistered": 0, "inactive": 0, "average_health_score": 88, "critical": 1, "excellent": 2 } }
POST/user/vps
Register VPS

Registers 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.

Request Body
name*string
ip_address*string
project_idintegerDefaults to your default/first project.
Example Request
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"
}'
Example Response
{
  "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" }
}
POST/user/vps/lookup-ip
Lookup IP

Request Body
ip*string
Example Request
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"
}'
GET/user/vps/{id}
Get VPS

Full resource metrics (CPU, memory, disk, swap, load averages, top processes) plus recent health snapshots and incidents.

Query Parameters
summary_onlybooleanSkip history — faster for a list/summary view.
history_onlybooleanReturn only health_snapshots + incidents, skip the full server block.
rangestringLimit snapshot history to a window: `1h`, `6h`, `24h`, `7d` or `30d`.
limitintegerMax snapshots returned, 1–2000. Defaults to 500 (the newest).
Example Request
curl -X GET "https://api.exitprobe.com/api/v1/user/vps/{id}" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"
PATCH/user/vps/{id}
Update VPS Settings

Configure alert thresholds. Takes effect on the next evaluation run, which also auto-resolves any open incident a loosened threshold no longer breaches.

Request Body (all optional)
namestring
is_activeboolean
notifications_enabledboolean
cpu_thresholdinteger50–100. Floored at 50 — anything lower would alert on a healthy server.
memory_thresholdinteger50–100.
disk_thresholdinteger50–100.
threshold_duration_minutesinteger5–1440 — how long a breach must sustain before alerting.
Example Request
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"
}'
DELETE/user/vps/{id}
Delete VPS

Removes the server and its history. Final — there is no restore.

Example Request
curl -X DELETE "https://api.exitprobe.com/api/v1/user/vps/{id}" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"
POST/user/vps/{id}/regenerate-token
Regenerate Agent Token

Rotates 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.

Example Request
curl -X POST "https://api.exitprobe.com/api/v1/user/vps/{id}/regenerate-token" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"