GET /api/query/stats

Graph-wide node and edge counts plus a threat-intel summary, precomputed and cached. The cheapest way to learn the shape of the graph. Code in five languages.

Updated July 2026API Reference

GET /api/query/stats Documentation

GET /api/query/stats returns graph-wide counts and a threat-intel summary. It is the cheapest way to discover the shape of the graph without running a Cypher scan, and the response is cached for about a minute.

Use it instead of a global Cypher count. A query like MATCH ()-[r]->() RETURN count(r) tries to walk every edge and will time out; the counts here are precomputed and instant.

Base URL: https://graph.whisper.security. No request body; authentication is optional and shared across the API.

Call it

curl -s -A "whisper-client/1.0" \
  -H "X-API-Key: $WHISPER_API_KEY" \
  "https://graph.whisper.security/api/query/stats"

Response

{
  "physical": {"nodeCount": 3744608859, "edgeCount": 31249017349},
  "virtual": {"nodeCount": 3682888714, "edgeCount": 8003999020},
  "total": {"nodeCount": 7427497573, "edgeCount": 39253016369},
  "objectCount": 46680513942,
  "threatIntel": {
    "threatIntelLoaded": true,
    "hasTaxonomy": true,
    "feedSourceCount": 43,
    "categoryCount": 25,
    "available": true
  }
}
FieldWhat it holds
physicalNodes and edges stored on disk.
virtualObjects computed at query time from live routing and threat-intelligence data, such as ANNOUNCED_BY and LISTED_IN edges.
totalThe sum of physical and virtual.
objectCountAll nodes and edges added together.
threatIntelWhether the threat-intel layer and taxonomy are loaded, plus the feed and category counts.

The numbers grow over time; the snapshot above is from June 2026. For running actual queries, see POST /api/query.