Skip to content

The Terminal System Monitoring service exposes endpoints to inspect and control the host running the Hoody daemon. Use it to build process inspectors, port scanners, system dashboards, and lifecycle automation. Operations cover system resources, daemon configuration, displays, listening ports, process introspection, signal delivery, process freeze/unfreeze, and full system power management.

All endpoints are served under /api/v1/system/... except the health probe, which lives at /api/v1/terminal/health.

Returns the standardized 9-field health response. Unauthenticated. Always returns HTTP 200 with application/json when the service is up.

This endpoint takes no parameters.

Terminal window
curl -X GET https://api.hoody.com/api/v1/terminal/health

Returns comprehensive system statistics including CPU usage, memory, network interfaces, uptime, and disk usage.

This endpoint takes no parameters.

Terminal window
curl -X GET https://api.hoody.com/api/v1/system/resources \
-H "Authorization: Bearer <token>"

Returns the JSON array of daemon programs from the hoody-daemon config.

This endpoint takes no parameters.

Terminal window
curl -X GET https://api.hoody.com/api/v1/system/daemon \
-H "Authorization: Bearer <token>"

Returns information about connected displays from the external display script.

This endpoint takes no parameters.

Terminal window
curl -X GET https://api.hoody.com/api/v1/system/displays \
-H "Authorization: Bearer <token>"

Returns a JSON array of all TCP/UDP listening ports with associated process information. Supports extensive filtering on protocol, user, port, IP, program name, and HTTP/Hoody-Kit service detection.

NameInTypeRequiredDescription
protocolquerystringNoFilter by protocol: tcp, udp, or comma-separated list
userquerystringNoFilter by user (exact match)
portqueryintegerNoFilter by specific port number
ipquerystringNoFilter by IP address (comma-separated list)
skip_programquerystringNoExclude specific programs (comma-separated list)
http_onlyquerybooleanNoOnly return HTTP services
hoody_onlyquerybooleanNoOnly return Hoody Kit services
Terminal window
curl -X GET "https://api.hoody.com/api/v1/system/ports?protocol=tcp&user=root&http_only=true" \
-H "Authorization: Bearer <token>"

Returns a JSON array of all processes with CPU, memory, and state information. Supports sorting, filtering, and limiting.

NameInTypeRequiredDescription
sortquerystringNoSort by field. Allowed values: cpu, memory, pid, name. Default: pid
limitqueryintegerNoMaximum number of processes to return. Default: all
filterquerystringNoFilter by process name (substring match, case-insensitive)
Terminal window
curl -X GET "https://api.hoody.com/api/v1/system/processes?sort=cpu&limit=10" \
-H "Authorization: Bearer <token>"

Returns detailed information about a specific process including all stats, command line, environment, and open files.

NameInTypeRequiredDescription
pidpathintegerYesProcess ID
Terminal window
curl -X GET https://api.hoody.com/api/v1/system/processes/4127 \
-H "Authorization: Bearer <token>"

Send a Unix signal to one or more processes by PID or name. Supports all standard signals (SIGTERM, SIGKILL, SIGSTOP, SIGCONT, etc.). When targeting by name, the signal is delivered to every matching process.

FieldTypeRequiredDescription
pidintegerNoProcess ID to signal. Mutually exclusive with name
namestringNoProcess name to signal — signals ALL matching processes. Mutually exclusive with pid
signalstring | integerNoSignal to send. String form accepts SIGTERM, TERM, 15, etc. (with or without SIG prefix). Integer form accepts any value in [0, NSIG) including realtime signals SIGRTMIN..SIGRTMAX (typically 34..64 on Linux), which have no portable string names
forcebooleanNoShorthand for SIGKILL (true) or SIGTERM (false). Overrides the signal parameter

You must supply either pid or name (not both) and either signal or force.

Terminal window
curl -X POST https://api.hoody.com/api/v1/system/process/signal \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"pid": 4127,
"signal": "SIGTERM"
}'

The freeze and unfreeze endpoints let you suspend and resume processes (or whole process trees) without losing in-memory state. They are useful for pausing background workloads such as builds, fine-tunes, or AI inference.

Suspend execution of one or more processes by delivering SIGSTOP. Pair this with /api/v1/system/processes/unfreeze (SIGCONT) to resume.

FieldTypeRequiredDescription
pidintegerNoProcess ID to freeze. Mutually exclusive with name. PIDs 1, 2, the server’s own PID, and the server’s parent PID are guarded and rejected with 403
namestringNoProcess name (case-insensitive comm match — freezes every matching process). Mutually exclusive with pid. Truncated to 15 characters by the kernel
include_descendantsbooleanNoWhen true, also freezes every descendant via a one-shot /proc PPID snapshot (bounded at 65535 PIDs). Default: false. The parent is signalled before descendants to shrink the fork/escape race window. With descendants, by-name dedupes overlapping subtrees so the same PID isn’t signalled twice
Terminal window
curl -X POST https://api.hoody.com/api/v1/system/processes/freeze \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"pid": 4127,
"include_descendants": true
}'

Resume execution of one or more previously-stopped processes by delivering SIGCONT. The body schema mirrors /freeze exactly. Calling unfreeze on a process that is already running is harmless — SIGCONT is a no-op for non-stopped processes.

FieldTypeRequiredDescription
pidintegerNoProcess ID to unfreeze. Mutually exclusive with name. The guarded-PID set (1, 2, self, parent) is the same as for freeze
namestringNoProcess name (case-insensitive comm match). Mutually exclusive with pid. Truncated to 15 characters by the kernel
include_descendantsbooleanNoAlso unfreeze all descendants via /proc PPID snapshot (bounded at 65535 PIDs). Default: false. By-name dedupes overlapping subtrees
Terminal window
curl -X POST https://api.hoody.com/api/v1/system/processes/unfreeze \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"pid": 4127,
"include_descendants": true
}'

Initiate a system reboot with optional delay. Requires root/sudo permissions — the Linux kernel enforces the check.

shutdown(8) schedules in whole minutes, so the server rounds up to the nearest minute and reports the actual scheduled value as effective_minutes in the response.

NameInTypeRequiredDescription
delayqueryintegerNoDelay in seconds before reboot, 0..86400 (default: 0 for immediate). The server rounds up to the nearest whole minute
Terminal window
curl -X POST "https://api.hoody.com/api/v1/system/reboot?delay=60" \
-H "Authorization: Bearer <token>"

Initiate a system shutdown with optional delay. Requires root/sudo permissions — the Linux kernel enforces the check.

shutdown(8) schedules in whole minutes, so the server rounds up to the nearest minute and reports the actual scheduled value as effective_minutes in the response.

NameInTypeRequiredDescription
delayqueryintegerNoDelay in seconds before shutdown, 0..86400 (default: 0 for immediate). The server rounds up to the nearest whole minute
Terminal window
curl -X POST "https://api.hoody.com/api/v1/system/shutdown?delay=120" \
-H "Authorization: Bearer <token>"