---
title: "Positioning Analysis"
method: GET
path: "/research/positioning/{symbol}"
tags: ["research"]
---

# Positioning Analysis

`GET /research/positioning/{symbol}`

## Request

- Base URL: `https://mcp.f1ow.com/v1`
- URL: `https://mcp.f1ow.com/v1/research/positioning/{symbol}`
- Auth: one of:
  - HTTP bearer
  - none

Deterministic positioning read for one coin — the game-state companion to research_regime, answering 'who is crowded, who is paying, who is trapped, and where'. Up to nine axes, each tagged with the market-actor cohort it reads: crowding (annualized funding vs the venue-standard 0.01%/8h anchor, long/short skew, dollars/day the majority pays to hold, crowd-vs-top-trader divergence, and cross-venue funding dispersion), buildup (24h price vs open-interest direction and the funding trend — whether positions are being added into the move or closed out), liquidity (order-book spread and imbalance — makers backing off), basis (perp vs oracle premium — spot-perp froth or hedging pressure, informational), fragility (24h liquidations as a share of market-wide open interest; the axis degrades rather than substituting a single venue's OI, since the liquidation total is cross-exchange), predation (visible Hyperliquid whale positions within 2 daily sigmas of their liquidation price, with defending book depth), trap (share of tracked whale notional underwater on the funding-paying side — attrition fuel), house book (Hyperliquid HLP LP-vault inventory, summed across its child sub-vaults — the literal venue counterparty, so the inventory it carries mirrors how traders are crowded; measured as net over its own gross book, since a market maker's net is a rounding error against venue open interest; informational), and disagreement (the most liquid matching prediction market, volume-gated, informational). Each axis reports its state, the numbers, and a +1/0/-1 fragility vote (+1 clean, -1 crowded/fragile); the stance is the disclosed sum-of-votes rule. Also returns a one-line 'farmed' synthesis (which cohort the board is currently farming, or an explicit statement that none is), focal points — reachable liquidation and breakeven price levels the whole market can see — and 'would change the call' thresholds a polling agent can watch statelessly. Reports the board, not a direction: crowding says who is paying, not where price goes. Deterministic — same inputs, same read. Call research_regime first for market context, then this per coin before sizing or timing decisions.

## Path parameters

- `symbol` string, required: Coin symbol, e.g. "BTC" or "ETH".

## Response `200`

The result.

- object
  - `data` object
    - `symbol` string
    - `stance` string: Overall positioning-fragility label
    - `stanceRule` string: The exact rule that produced stance
    - `farmed` string: One-line synthesis of which cohort the board is currently farming. Always populated: when no cohort clears the trap/crowding/predation bars it says so explicitly and names who is paying the carry.
    - `axes` object[]
      - `name` string
      - `state` string
      - `detail` string: The numbers behind the state, as prose
      - `metrics` object: The same numbers keyed by metric name, e.g. annualizedFundingPct, trappedShare
      - `actors` string: The market-actor cohort(s) this axis reads — the counterparty tag
      - `vote` integer: +1 clean, -1 crowded/fragile, 0 neutral or informational
    - `focalPoints` object[]: Price levels that are common knowledge on the board, nearest to spot first
      - `priceUsd` number: A known price level: a visible liquidation or a breakeven exit level
      - `side` string: e.g. long liquidation, short liquidation, long breakeven
      - `reason` string: The position behind the level
    - `wouldChange` string[]: Thresholds that would flip an axis, as prose
    - `thresholds` object[]: The wouldChange lines in machine-readable form for stateless alerting
      - `metric` string
      - `comparator` string: >= or <=
      - `value` number: The disclosed flip threshold
      - `current` number: Where the metric stands now
      - `flipsTo` string: The state the axis flips to at the threshold
    - `skippedAxes` object[]: Axes attempted but not computed; the stance is over the computed ones only
      - `name` string
      - `reason` string: The feed that was offline, or what the coin lacks
    - `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)
