---
title: "Market Regime"
method: GET
path: "/research/regime"
tags: ["research"]
---

# Market Regime

`GET /research/regime`

## Request

- Base URL: `https://mcp.f1ow.com/v1`
- URL: `https://mcp.f1ow.com/v1/research/regime`
- Auth: one of:
  - HTTP bearer
  - none

Deterministic market-regime classification across seven axes: trend (Mayer Multiple bands vs the 200-day SMA), volatility (30d realized, percentile vs own history), cycle (a ~30-indicator top checklist incl. MVRV Z-Score, NUPL, Pi Cycle, AHR999), sentiment (Fear & Greed level, trajectory and percentile), leverage stress (derivatives-risk-index percentile), liquidity (7d spot-ETF net flows vs prior 7d), and rotation (Altcoin Season index, BTC dominance, ETH/BTC 30d). Each axis reports its state, the numbers behind it, and a +1/0/-1 vote; the overall posture is the disclosed sum-of-votes rule, with one exception — while 30d realized volatility sits at or below its 5th percentile the tape is compressed, trend structure stops being tradeable, and the Trend axis's vote is withheld (its reading is still reported). Compression is flagged structurally, and adds an informational, never-voting asymmetry lean naming which side is more exposed. Includes explicit 'would change the call' thresholds to watch. Rule-based and deterministic — same inputs, same read. Useful as a first call: most other signals (funding, sentiment, flows) read differently depending on this regime.

## Response `200`

The result.

- object
  - `data` object
    - `posture` string: Overall risk-posture label
    - `postureRule` string: The exact rule that produced posture
    - `axes` object[]
      - `name` string
      - `state` string
      - `detail` string: The numbers behind the state
      - `vote` integer: +1 risk-on, -1 risk-off, 0 neutral
    - `asymmetry` object: Which side is more exposed while compressed; a lean with a stated confidence, never a vote. Absent unless the tape is compressed and at least two of its inputs are meaningful
      - `name` string
      - `state` string
      - `detail` string
      - `vote` integer
    - `compressed` boolean: 30d realized vol at or below its 5th percentile — while true the Trend axis contributes 0 to the posture whatever its state
    - `volatilityPercentile` number: 30d realized-vol percentile vs own history; absent when no candle history was available, which is not the same as not compressed
    - `wouldChange` string[]: Thresholds that would flip an axis
    - `axesComputed` integer
    - `axesTotal` integer
  - `text` string, required: Human-readable rendering of the result.
  - `meta` ResponseMeta
    - `generatedAt` string, date-time: When the data was produced (source timestamp where the provider has one), ISO 8601 UTC

## Other responses

- `400`: An argument is missing or invalid.
- `401`: No credential was sent.
- `402`: x402 route: a priced call without a valid payment (challenge in the base64 PAYMENT-REQUIRED header). Metered routes: the account balance or access period is spent.
- `403`: The credential was rejected.
- `500`: Unexpected server error.
- `502`: The data source could not answer.

---

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