since (default 1h) plus an optional cluster to scope to a guest.
All of these are reads under supervisor:GetSummary.
Where the traffic is concentrated
Namespace chord
GET .../security/flows/ns-chord returns namespace-to-namespace pairs, split by the same action taxonomy the topology graph uses:
policy-protected and unprotected rows tells you the policy exists but does not cover everything moving between them.
Bytes by pair
GET .../security/flows/bytes-by-pair ranks individual workload pairs by volume, with direction preserved:
syscalls comes from the runtime layer and is populated only where Tetragon is running.
Where traffic leaves the cluster
FQDN egress
GET .../security/flows/fqdn-egress ranks external destinations by bytes:
ext/<ip> entries as a signal in themselves: they are destinations that could not be resolved to a name, either because the DNS visibility policy is missing or because the workload connected to a bare IP. A supervisor where everything is ext/… has a pipeline problem, not an application that dislikes DNS — see Pipeline & runtime.
FQDNs arrive with a trailing dot, exactly as DNS emits them. Match on the trimmed form when you script against this endpoint.
What the traffic actually is
Top L7 paths
GET .../security/flows/top-l7 ranks HTTP method + URL by request count, with denials and average latency:
denies next to a high requests on the same URL is the signature worth hunting: something is retrying into a policy that is dropping it, and the retry loop is invisible on any success-rate dashboard.
HTTP protocol mix
GET .../security/flows/http-mix splits request counts by protocol version, in total and per namespace:
byNamespace is one whose traffic never reached the L7 proxy.
DNS heatmap
GET .../security/flows/dns-heatmap returns one-minute buckets of lookup counts per pod, as { "bucket": "2026-08-16T15:26:00Z", "pod": "proj-demo/api-frontend-7c9d5", "lookups": 36 }. It earns its place during incidents: a pod whose lookup rate jumps by an order of magnitude is usually failing to resolve something and retrying, and that shows here long before it shows in application logs.
Raw L7 events
When an aggregate raises a question,GET .../security/flows/l7-events returns the individual requests behind it — timestamp, source and destination workload, verdict, method, URL, protocol, the real client IP, and the policies that covered each side. Filter it hard (srcNs, srcWl, dstNs, dstWl, anyNs, anyWl, verdict, method, codeBucket, protocol, destPort, after, before); unfiltered it simply returns the most recent events.
coveredBySrc and coveredByDst make this the definitive answer to “which policy touched this request”.
How protected the supervisor is
Policy effectiveness
GET .../security/flows/policy-effectiveness is the namespace-level scorecard, counting flows in each verdict class plus total bytes:
unprotected and you have a work queue: those are the namespaces where nothing would have stopped the traffic. Do read the coverage caveats first — a namespace can look wide open here purely because its workloads lack an app label, or because its policies are networking.k8s.io/v1 NetworkPolicies, which this count does not see.
Edge quality
GET .../security/flows/edge-quality is a single object that tells you how much of the graph is fully evidenced:
pctBoth is therefore a trust gauge for everything else on this page: flowsOnly edges have a verdict but no reliable volume, bytesOnly edges have volume but no verdict. A sudden drop in pctBoth means one of the two sources degraded, not that traffic changed.
Applications
GET .../security/applications groups workloads into logical applications by the label that ties them together, so a policy can be written against a thing rather than a list of pods:
kind: "cluster" entries are guest clusters seen from the supervisor side; kind: "application" entries are ordinary label groupings. This endpoint backs the application picker in policy authoring — see Network policies.
The Sessions tab
Sessions is the same store viewed as conversations rather than aggregates.GET .../security/flows/sessions returns top workload-pair sessions, filtered by Cilium labels — labels=k8s:io.kubernetes.pod.namespace=proj-demo to scope to a namespace, labels=k8s:app=api-frontend to scope to a workload, comma-separated to combine — with since (default 15m) and limit (max 500). sessions/pods expands one row into its individual pods.
Three siblings round out the tab: flows/summary for the headline counters, flows/top-talkers for the busiest endpoints, and flows/denials for recent policy-denied flows. flows/pods lists the pods present in the window, which is what the namespace and workload pickers are built from.
Celum AI covers all of this with three tools:
get_flow_analytics (one call per view — ns-chord, fqdn-egress, top-l7, http-mix, dns-heatmap, bytes-by-pair, policy-effectiveness, edge-quality, applications), get_l7_events for the raw requests behind an aggregate, and get_top_talkers for the quick “who is loudest” question.