---
title: "Latest L3 hedge ratios and explained variances for up to 100 tickers"
method: GET
path: "/batch/latest-metrics"
tags: ["Risk Metrics"]
---

# Latest L3 hedge ratios and explained variances for up to 100 tickers

`GET /batch/latest-metrics`

## Request

- Base URL: `https://riskmodels.app/api`
- URL: `https://riskmodels.app/api/batch/latest-metrics`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://riskmodels.app/oauth/authorize`, token URL `https://riskmodels.app/api/oauth/token`, scopes: `mcp:read`)

Lightweight batch read from `security_history_latest` — one row per requested ticker with the six L3 scalars. Cheaper and narrower than `POST /batch/analyze`; use that endpoint when you need returns panels or full metrics.

Tickers are de-duplicated and upper-cased; the list is truncated to the first 100. Tickers that resolve but have no latest row come back with `date` and all six metrics `null` rather than being omitted, so the response aligns positionally with what resolved.

**Authentication:** Required (API Key or OAuth2)
**Billing:** $0.005 per request
**Rate Limit:** 120 requests/minute (default)

## Query parameters

- `tickers` string, required

## Response `200`

Latest metrics per ticker

- object
  - `data` object[]
    - `ticker` string
    - `date` string, date, nullable
    - `l3_mkt_hr` number, nullable
    - `l3_sec_hr` number, nullable
    - `l3_sub_hr` number, nullable
    - `l3_mkt_er` number, nullable
    - `l3_sec_er` number, nullable
    - `l3_sub_er` number, nullable
  - `source` string

## Other responses

- `400`: `tickers` missing or empty after parsing
- `401`: Authentication required
- `402`: Insufficient balance
- `404`: None of the supplied tickers resolved to the universe

---

[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)
