---
title: "Correlation vs macro factors (query convenience)"
method: GET
path: "/metrics/{ticker}/correlation"
tags: ["Risk Metrics"]
---

# Correlation vs macro factors (query convenience)

`GET /metrics/{ticker}/correlation`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/metrics/{ticker}/correlation`
- Auth: HTTP bearer

Same computation as POST /correlation. Pass macro keys as a comma-separated `factors` query param (alias: `factor` is accepted as a synonym).

## Path parameters

- `ticker` string, required

## Query parameters

- `factors` string
- `return_type` 'gross' | 'l1' | 'l2' | 'l3_residual'
- `window_days` integer
- `method` 'pearson' | 'spearman'

## Response `200`

Correlations and lineage metadata.

- FactorCorrelationSingleResponse
  - `ticker` string, required
  - `return_type` 'gross' | 'l1' | 'l2' | 'l3_residual', required
  - `window_days` integer, required
  - `method` 'pearson' | 'spearman', required
  - `correlations` object, required
  - `overlap_days` integer, required: Largest number of paired observations used among requested factors.
  - `warnings` string[], required
  - `_metadata` RiskMetadata: Lineage and provenance metadata for all data responses. Included in response body as _metadata and as X-Risk-* headers.
    - `model_version` string: ERM3 model version (e.g. ERM3-L3-v30).
    - `data_as_of` string, date: Latest trading date reflected in the response (model outputs / latest snapshot).
    - `factor_set_id` string: Factor set identifier.
    - `universe_size` integer: Number of stocks in the universe.
    - `wiki_uri` string, uri: Methodology documentation URL.
    - `factors` string[]: L3 factor ETF tickers (market + 11 sectors).
    - `data_source` 'zarr': Present on history-style JSON responses. Always `"zarr"` as of the pure-Zarr SSOT cutover: all historical time series (daily metrics, hedge weights, returns decomposition, rankings) are served from consolidated Zarr stores on GCS. The Supabase `security_history` table has been removed; the legacy `"supabase"` value is retained in clients only for backwards compatibility.
    - `range` string[]: Optional inclusive ISO date bounds of the returned history window when `data_source` is set.
  - `_agent` object
    - `latency_ms` integer
    - `request_id` string

## Other responses

- `400`: Invalid ticker or query.
- `401`: Missing or invalid Bearer token.
- `402`: Insufficient balance.
- `404`: Ticker not found or insufficient history.
- `429`: Rate limit exceeded.

---

[API](https://skmtc.dev/riskmodels/apis/riskmodels-api.md) · [All operations](https://skmtc.dev/riskmodels/apis/riskmodels-api/llms.txt) · [OpenAPI document](https://skmtc.dev/riskmodels/apis/riskmodels-api/revisions/1a034cad408a?raw)
