---
title: "Cross-asset risk regime"
method: GET
path: "/macro/regime"
tags: ["macro"]
---

# Cross-asset risk regime

`GET /macro/regime`

## Request

- Base URL: `https://kresmion.com/v1`
- URL: `https://kresmion.com/v1/macro/regime`
- Auth: HTTP bearer

Latest daily Risk-On/Off regime score, smoothed 70/30 (70% of the new raw score plus 30% of the previous day's smoothed score) and published UNSCALED (it typically sits within about +-0.75): the label is assigned after multiplying by `regime_scale`, so compare the score with `bucket_edges_in_score_space`, not with +-0.5 / +-1.5. With the four factor sub-scores (growth, liquidity, risk-appetite, volatility), the per-indicator z-scores, conviction, and an `interpretation` string: LLM-written prose over the deterministic numbers, with indicator direction words fixed from each z-score's sign and vetoed when they contradict it (a rule-based template replaces a rejected draft). Quote the numbers, not the prose. `as_of` is the compute timestamp; `data_as_of` is the trading date the score is for.

A `z_scores` entry is `null` when that indicator was not available for the run: it is EXCLUDED from its factor mean, so null means no reading, never a 0.000 reading. `z_asof` gives the SOURCE observation date behind each z. Cadences differ (ISM monthly, WALCL/ICSA/NFCI weekly, the rest daily), so a z only moved if its `z_asof` moved with it.

`regime` is classified on the score AFTER multiplying by the fixed dispersion constant `regime_scale`; `risk_score_smoothed` is published UNSCALED. To draw regime bands against the published score use `bucket_edges_in_score_space`, not the raw ±0.5/±1.5 edges.

## Headers

- `authorization` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

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