query-netdata-cloud — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited query-netdata-cloud (Agent Skill) and scored it 92/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 2 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill teaches end-users (and AI assistants helping them) how to construct REST API queries against Netdata Cloud (https://app.netdata.cloud) using a long-lived API token.
It is split into one shared overview (this file) and four domain-specific guides. Each guide is self-contained and includes runnable curl commands.
| Domain | Guide |
|---|---|
| Time-series metrics | query-metrics.md |
Logs (systemd-journal, windows-events, otel-logs) | query-logs.md |
Topology Functions (topology:snmp, ...) | query-topology.md |
Network-flow Functions (flows:netflow -- NetFlow / sFlow / IPFIX) | query-flows.md |
| Alerts and alert transitions | query-alerts.md |
| Dynamic Configuration (DynCfg) | query-dyncfg.md |
| Generic Function invocation (table snapshots + protocol taxonomy) | query-functions.md |
| Nodes (per-room enumeration with full metadata) | query-nodes.md |
| Rooms (per-space enumeration) | query-rooms.md |
| Members (per-space user enumeration) | query-members.md |
| Event feed (audit + activity log) | query-feed.md |
| Operational how-tos (live catalog) | how-tos/INDEX.md |
For the query protocol details these guides build on, read the authoritative sources directly:
| File | What it covers |
|---|---|
<repo>/src/plugins.d/FUNCTION_UI_REFERENCE.md | Functions v3 protocol -- envelope, simple-table vs log-explorer, facets, histograms, charts, field types, pagination, delta mode, PLAY mode, error handling. The single most important reference for any Function work. |
<repo>/src/plugins.d/FUNCTION_UI_SCHEMA.json | JSON Schema for validating Function responses |
<repo>/src/plugins.d/FUNCTION_TOPOLOGY_SCHEMA.json | JSON Schema for validating production topology payloads |
<repo>/src/plugins.d/DYNCFG.md | External-plugin DynCfg protocol (go.d.plugin and other external collectors) |
<repo>/src/daemon/dyncfg/README.md | Internal DynCfg (high-level and low-level APIs, command enums, lifecycle) |
For querying agents directly (without going through Cloud) -- including auto-minting agent bearer tokens from a Cloud token -- see the sibling skill query-netdata-agents.
question about a Netdata environment that isn't already covered by an existing how-to under how-tos/, you MUST author a new how-to in this directory and add it to how-tos/INDEX.md BEFORE completing the task. The catalog is meant to be live -- the next assistant should not redo the same analysis from scratch. Keep this catalog operator-facing: recipes here should explain how to fetch or use Cloud data. Developer contract validation for collectors, topology producers, schemas, fixtures, UI adapters, or aggregator handoffs belongs in the relevant project developer skill, not in this public skill.
uses agents_query_cloud (and friends) from ../query-netdata-agents/scripts/_lib.sh. Never paste raw Authorization: Bearer $TOKEN curl commands -- that exposes the cloud token to the assistant. The wrappers handle auth internally and emit only the response body to stdout.
users. Your role is to teach them. Every response that proposes a query must end in a complete, runnable command (wrapper-based, not raw curl).
IDs, or Room IDs. Use placeholders (YOUR_API_TOKEN, YOUR_SPACE_ID, YOUR_ROOM_ID) at the top of your curl examples so the user fills them in locally.
complete curl -X METHOD ... -H ... -d '...' block is incomplete. Use a heredoc for the JSON body so the user does not have to escape quotes:
read -r -d '' PAYLOAD <<'EOF'
{ "scope": { "contexts": ["system.cpu"] }, ... }
EOFmetrics, the most important is scope.contexts MUST be set. See the per-domain guide for the rest.
Three things are needed for any query:
Recommended scope: scope:all (full access) or scope:grafana-plugin (read-only data endpoints).
(tooltip: "Space Settings")
Settings")
All endpoints accept the cloud token as an HTTP Authorization header:
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json (for POST endpoints)GET endpoints do not require the Content-Type header but accept it.
These endpoints enumerate what the cloud token can see. Use them when you don't know the Space ID, Room ID, or node UUID up front.
| Endpoint | Method | Purpose |
|---|---|---|
/api/v2/accounts/me | GET | Confirm the token works; returns the user identity. |
/api/v2/spaces | GET | List spaces visible to this token. |
/api/v2/spaces/{spaceID}/rooms | GET | List rooms in a space. |
/api/v3/spaces/{spaceID}/rooms/{roomID}/nodes | POST {} | List nodes in a room with full metadata. |
TOKEN="YOUR_API_TOKEN"
curl -sS \
-H "Authorization: Bearer $TOKEN" \
"https://app.netdata.cloud/api/v2/spaces"Each space record contains id, slug, name, permissions[], and metadata. Match by name or slug to find the space you want.
TOKEN="YOUR_API_TOKEN"
SPACE="YOUR_SPACE_ID"
curl -sS \
-H "Authorization: Bearer $TOKEN" \
"https://app.netdata.cloud/api/v2/spaces/$SPACE/rooms"TOKEN="YOUR_API_TOKEN"
SPACE="YOUR_SPACE_ID"
ROOM="YOUR_ROOM_ID"
curl -sS -X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $TOKEN" \
"https://app.netdata.cloud/api/v3/spaces/$SPACE/rooms/$ROOM/nodes" \
-d '{}'Per-node response fields:
| Field | Description |
|---|---|
nd | Node UUID -- required for any node-targeted call |
mg | Machine GUID |
nm | Hostname |
state | reachable (live) or stale (disconnected) |
v | Agent version |
labels | Key-value labels |
hw, os, health, capabilities | Metadata blocks |
The nd value is what the four domain guides call "node UUID" or {nodeId} in their endpoint paths.
| Symptom | Likely cause |
|---|---|
| HTTP 401 | Token missing, malformed, or revoked. Re-create. |
| HTTP 403 | Token lacks the scope/role for this endpoint or space. |
| HTTP 404 with HTML body | Wrong path; check method (GET vs POST) and version (/api/v2 vs /api/v3). The API does not enumerate paths via Swagger, so 404 means the path does not exist. |
HTTP 400 with errorCode JSON | Missing required parameter. The error message names the missing field. |
| Empty/silent response | Filter excludes everything. Most endpoints return empty data without error. Verify scope/selectors. |
Cloud responses contain space names, node hostnames, machine GUIDs, node UUIDs, claim IDs, cloud-provider labels, IP addresses, and other identifiers. Treat fetched payloads as personal/customer data:
to <repo>/.local/audits/... (gitignored) and report only sanitized summaries upstream.
See <repo>/.agents/sow/specs/sensitive-data-discipline.md for the full rule and the pre-commit verification grep.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.