---
title: "L3 factor decomposition time series"
method: GET
path: "/l3-decomposition"
tags: ["Risk Metrics"]
---

# L3 factor decomposition time series

`GET /l3-decomposition`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/l3-decomposition`
- Auth: HTTP bearer

Returns columnar time series of L3 hedge ratios and explained-risk fractions (parallel arrays by trading date) from V3 `security_history`. Components: market, sector, subsector, residual. Includes `ticker`, `universe`, and `data_source`. This route does not append `_agent` to the JSON body in the current implementation; use headers / account balance for billing if applicable.
**Billing:** $0.04 per request.

## Query parameters

- `ticker` string, required
- `market_factor_etf` string
- `years` integer

## Response `200`

Columnar L3 HR/ER time series (V3).

- L3DecompositionResponse: Columnar L3 decomposition from V3 `security_history` (daily points; arrays are parallel by index). Field names use readable suffixes (`l3_market_er`, …). No `_agent` block in the current response body.
  - `ticker` string, required
  - `dates` string[], required
  - `l3_market_hr` number[], required
  - `l3_sector_hr` number[], required
  - `l3_subsector_hr` number[], required
  - `l3_market_er` number[], required
  - `l3_sector_er` number[], required
  - `l3_subsector_er` number[], required
  - `l3_residual_er` number[], required
  - `market_factor_etf` string, required
  - `universe` string, required
  - `data_source` string, required

## Other responses

- `401`: Missing or invalid Bearer token.
- `402`: Insufficient balance.
- `404`: Ticker not found.
- `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)
