Docs
Servers

Send server metrics (CPU, memory, disk)

The Nevision server agent posts host metrics — CPU, memory, disk, network — to a single ingestion URL. The ingest endpoint is language-agnostic, so you can also push from your own collector, a Kubernetes sidecar, or a one-off cron.

Endpoint

POST https://<your-ingest-url>.lambda-url.<region>.on.aws/
Content-Type: application/json

Auth is in the body (siteId + apiKey) — no headers required. Find the live ingest URL on Servers → Add a server. The first POST from a new (siteId, hostname) auto-registers a server and the response returns the assigned serverId.

Payload

{
  "siteId": "YOUR_SITE_ID",
  "apiKey": "YOUR_API_KEY",
  "hostname": "web-01",
  "agentVersion": "1.0.0",
  "os": "linux",
  "arch": "x86_64",
  "cpuCores": 4,
  "totalMemBytes": 8589934592,
  "ingestIntervalSeconds": 60,
  "timestamp": "2026-04-26T10:00:00Z",
  "metrics": {
    "cpu": {
      "loadAvg1": 0.42,
      "loadAvg5": 0.51,
      "loadAvg15": 0.48,
      "percent": 17.3,
      "perCore": [12.1, 22.4, 18.0, 16.7]
    },
    "memory": {
      "totalBytes": 8589934592,
      "usedBytes": 5368709120,
      "freeBytes": 3221225472,
      "swapTotalBytes": 0,
      "swapUsedBytes": 0
    },
    "disks": [
      { "mount": "/", "totalBytes": 100000000000, "usedBytes": 42000000000 }
    ],
    "network": [
      { "iface": "eth0", "rxBytesPerSec": 12000, "txBytesPerSec": 8400 }
    ]
  }
}

cpu.percent is a 0–100 number. ingestIntervalSeconds must be ≥ your plan's minimum (free: 60s, paid: 1s). The first response includes {"accepted": true, "serverId": "..."}; persist that serverId and send it on subsequent requests.

Code examples

curl -X POST "$NEVISION_INGEST_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "YOUR_SITE_ID",
    "apiKey": "YOUR_API_KEY",
    "hostname": "web-01",
    "ingestIntervalSeconds": 60,
    "timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'",
    "metrics": {
      "cpu": {"loadAvg1": 0.4, "loadAvg5": 0.5, "loadAvg15": 0.5, "percent": 17.3, "perCore": []},
      "memory": {"totalBytes": 8589934592, "usedBytes": 5368709120, "freeBytes": 3221225472}
    }
  }'

Response

{ "accepted": true, "serverId": "8e9c..." }

Persist serverId and pass it back on the next call to skip hostname re-resolution. If accepted is false, the response carries an error or reason (cadence_too_high, servers_limit_reached, rate_limited, limitReached).

Tips

  • Respect cadence floor. Free plans accept 1 metric per minute per host; paid plans allow up to 1/sec.
  • Use the official agent if you can. The bundled agent handles backoff, server-id persistence, and unit conversion for you — see Servers → Add a server.
  • Hostname must be unique per host. A fleet of identical hostnames dedupes to a single record — set a unique hostname per node.