---
title: "Get contagion map"
method: GET
path: "/agent/contagion"
---

# Get contagion map

`GET /agent/contagion`

## Request

- Base URL: `https://app.fahaliai.com`
- URL: `https://app.fahaliai.com/agent/contagion`
- Auth: none declared

Returns cross-asset contagion and tail dependence map: nodes (symbols with risk scores), edges (pairwise correlation strength), and clusters of correlated assets.

## Response `200`

Contagion map

- SpectraContagionMap
  - `nodes` object[], required
    - `symbol` string, required
    - `riskScore` number, required
    - `riskLevel` 'critical' | 'high' | 'moderate' | 'low', required
    - `confidence` number, required
  - `edges` object[], required
    - `source` string, required
    - `target` string, required
    - `strength` number, required
    - `correlation` number, required
    - `confidence` number, required
    - `severity` 'low' | 'moderate' | 'high' | 'extreme', required: Derived from the edge's own measured strength (tail_correlation), never carried through from the upstream engine's contagion_risk label. Edges below a 0.1 materiality floor are not emitted at all (see server/lib/contagionGraph.ts classifyEdgeSeverity).
    - `lagHours` number, nullable, required: tail_dependence has no lag column. Always null today; never a fabricated constant.
    - `sampleSize` integer, required: How many times this (source, target) pair was independently re-observed within the endpoint's 1-hour lookback -- NOT a statistical sample size for the correlation coefficient itself, which tail_dependence does not expose.
  - `clusters` object[], required
    - `symbols` string[], required
    - `riskLevel` 'critical' | 'high' | 'moderate' | 'low', required
    - `leadSymbol` string: Absent unless a directed edge into this cluster has a strict out-degree winner AND that winner's out-degree exceeds the runner-up's by at least 20% (a 1-edge margin over a large base is not treated as confident). Never alphabetical, never symbols[0].
    - `leadOutDegree` integer: Present whenever the cluster has at least one directed edge, regardless of whether the margin was enough to claim leadSymbol -- lets a consumer see a thin-margin case for what it is.
    - `runnerUpOutDegree` integer: Present whenever there is a second out-degree candidate to compare against. Absent when leadOutDegree has no rival (a lone directed edge).
    - `lagHours` number: Absent unless at least one edge from the lead carries an observed lag. tail_dependence has no lag column today, so this is always absent.
    - `edgeCount` integer, required
  - `provenance` SpectraProvenance, required
    - `source` 'predictions' | 'alerts' | 'agent_verdict' | 'derived', required
    - `modelVersion` string, required
    - `engineNames` string[], required
    - `walkForwardValidated` boolean, required
    - `dataAsOf` string, date-time, required
  - `aiMetadata` SpectraAiMetadata, required
    - `schemaVersion` '1.0', required
    - `reasoningTrace` boolean, required
    - `confidenceNormalized` boolean, required
    - `schemaStable` boolean, required
    - `lastModelRetrain` string, date, nullable

---

[API](https://skmtc.dev/fahaliai/apis/fahali-intelligence-api.md) · [All operations](https://skmtc.dev/fahaliai/apis/fahali-intelligence-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fahaliai/apis/fahali-intelligence-api/revisions/d8115da5453f?raw)
