---
title: "Stock commentary evidence bundle (one pull)"
method: GET
path: "/stocks/{ticker}/commentary-bundle"
tags: ["Risk Metrics"]
---

# Stock commentary evidence bundle (one pull)

`GET /stocks/{ticker}/commentary-bundle`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/stocks/{ticker}/commentary-bundle`
- Auth: HTTP bearer

One request for everything a single-name risk commentary note needs:
latest L1/L2/L3 metrics + `hedge_levels`, a trailing return-record
summary (arithmetic contributions + drawdown), cohort standing on
gross return, peer variance shares, and residual leadership for the
name's sector/subsector cohort.

Replaces the consumer's previous fan-out across `/metrics`,
`/returns-decomposition`, `/rankings/{ticker}`,
`/cohorts/variance-shares`, and `/cohorts/residual-leadership`.

**Partial enrichment:** metrics are required (unknown ticker → 404).
Thin cohorts, short windows, or missing rankings null the affected
piece and list a reason under `refusals` — the response stays 200 so
the risk note can still render. Return-record values are **sums** of
daily returns (additive); `gross_compound` is reported separately.

## Path parameters

- `ticker` string, required

## Query parameters

- `window` string

## Response `200`

Commentary evidence bundle

- object
  - `ticker` string, required
  - `symbol` string, required
  - `teo` string, required
  - `window` string, required
  - `metrics` object, required
  - `hedge_levels` object, required
  - `meta` object, required
    - `sector_etf` string, nullable
    - `subsector_etf` string, nullable
  - `return_record` object, nullable
  - `standing` object, nullable
  - `cohort_shares` object, nullable
  - `residual_rank` object, nullable
  - `coverage` object, required
    - `metrics` boolean
    - `return_record` boolean
    - `standing` boolean
    - `cohort_shares` boolean
    - `residual_rank` boolean
  - `refusals` object[], required
    - `piece` string
    - `reason` string

## Other responses

- `400`: Invalid ticker or window
- `401` (unresolved $ref)
- `404`: Ticker not found / no metrics
- `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)
