# Positioning (`research_positioning`)

> Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching.

- Category: Research & risk
- MCP tool: `research_positioning`
- REST: `GET /research/positioning/{symbol}`
- MCP App: hosts that support MCP Apps render the result as an interactive view
- x402 price: $0.05 per call (USDC on Base)
- HTML: https://www.f1ow.com/docs/tools/research_positioning

## What it does

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 on-chain 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 (the on-chain exchange's 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.

## Parameters

| Name | Type | In | Required | Description |
| --- | --- | --- | --- | --- |
| `symbol` | string | path | yes | Coin symbol, e.g. "BTC" or "ETH". |

## Call it

### cURL

```bash
curl "https://mcp.f1ow.com/v1/research/positioning/BTC" \
  -H "Authorization: Bearer $F1OW_API_KEY"
```

### MCP

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "research_positioning",
    "arguments": {
      "symbol": "BTC"
    }
  }
}
```

### TypeScript

```ts
const res = await fetch("https://mcp.f1ow.com/v1/research/positioning/BTC", {
  headers: { Authorization: `Bearer ${process.env.F1OW_API_KEY}` },
});
const data = await res.json(); // the tool's result as JSON, typed in the OpenAPI spec
console.log(data);
```

### Python

```python
import os, requests

res = requests.get(
    "https://mcp.f1ow.com/v1/research/positioning/BTC",
    headers={"Authorization": f"Bearer {os.environ['F1OW_API_KEY']}"},
)
data = res.json()  # the tool's result as JSON, typed in the OpenAPI spec
print(data)
```

### WebSocket

```jsonc
// wss://mcp.f1ow.com/v1/ws — subprotocol "jsonrpc-2.0", Authorization: Bearer <key>
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "research_positioning",
    "arguments": {
      "symbol": "BTC"
    }
  }
}

// Or push a fresh result whenever it changes (minimum interval 15 s)
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "subscriptions/subscribe",
  "params": {
    "name": "research_positioning",
    "arguments": {
      "symbol": "BTC"
    },
    "intervalSeconds": 60
  }
}
```

### x402

```bash
# No account: the first call answers 402 with a PAYMENT-REQUIRED challenge;
# an x402 client pays it in USDC on Base and retries.
curl "https://mcp.f1ow.com/x402/v1/research/positioning/BTC"
```

## Sample response

Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed):

```json
{
  "axes": [
    {
      "actors": "funding arbs, retail crowd",
      "detail": "funding +0.0002%/h (ann +1.8% vs anchor +10.9%) | crowd L/S 3.32 vs top traders 2.14 — crowd 1.55x more long-skewed | longs paying ~$2.4M/day market-wide | venue funding +3.3pp vs merged | series at +1.8% ann sits 5th pct of its own 30-point window (+0.1% to +12.2%) | CoinGlass 2026-11-13 08:00 UTC bucket",
      "metrics": {
        "fundingRatePctPerHour": 0.0002105,
        "annualizedFundingPct": 1.84398,
        "fundingRateIsOiWeighted": 1,
        "anchorAnnualPct": 10.95,
        "fundingDragUsdPerDay": 2411081.02544037,
        "longShortRatio": 3.32,
        "crowdVsTopDivergence": 1.18,
        "crowdLongShortRatio": 3.32,
        "topTraderLongShortRatio": 2.14,
        "crowdVsTopSkewRatio": 1.55140186915888,
        "fundingVenueDispersionPct": 3.316098,
        "fundingWindowPercentile": 5,
        "fundingWindowLowPct": 0.09855,
        "fundingWindowHighPct": 12.20706,
        "fundingWindowSpreadPct": 12.10851,
        "fundingWindowRankedPct": 1.84398
      },
      "name": "Crowding",
      "state": "STRETCHED SHORT (bottom of its own window)",
      "vote": -1
    },
    {
      "actors": "new entrants, closing leverage",
      "detail": "price -6.8% / OI -6.3% over 24h ($50.93B -> $47.73B) | funding +8.5% -> +1.8% ann (falling) | 3th pct of 53 rolling 24h moves (-6.5% to +3.6%) — a move for this tape, under the absolute band — positions closing | CoinGlass 2026-11-13 08:00 UTC bucket",
      "metrics": {
        "priceChangePct24h": -6.79676,
        "oiChangePct24h": -6.28777326501869,
        "oiPriorUsd": 50927482234,
        "oiNowUsd": 47725277621.5434,
        "annualizedFundingPriorPct": 8.482965,
        "annualizedFundingPct": 1.84398,
        "oiChangeWindowPercentile": 2.83018867924528,
        "oiChangeWindowLowPct": -6.48941665693922,
        "oiChangeWindowHighPct": 3.59523545652303,
        "oiBuildThresholdPct": 5
      },
      "name": "Buildup",
      "state": "LONG LIQUIDATION",
      "vote": 0
    },
    {
      "actors": "market makers / HFT",
      "detail": "spread 0.1 bps | depth $3.9M bid / $12.0M ask | ask-heavy book (-51% imbalance)",
      "metrics": {
        "spreadBps": 0.145644147654037,
        "imbalancePct": -50.9388172371789,
        "bidDepthUsd": 3892521.77123,
        "askDepthUsd": 11975508.92851
      },
      "name": "Liquidity",
      "state": "TIGHT",
      "vote": 1
    },
    {
      "actors": "cross-venue / spot-perp arbs",
      "detail": "perp -4.1 bps vs oracle (mark $68654 / oracle $68686) | venue funding +0.0006%/h",
      "metrics": {
        "premiumBps": -4.076522,
        "markPriceUsd": 68654,
        "oraclePriceUsd": 68686
      },
      "name": "Basis",
      "state": "FLAT",
      "vote": 0
    },
    {
      "actors": "liquidation hunters",
      "detail": "24h liq $918.6M = 1.92% of $47.73B market-wide OI",
      "metrics": {
        "liqIntensityPct": 1.92481223638172,
        "liquidation24hUsd": 918621983.506613,
        "marketWideOpenInterestUsd": 47725277621.5434
      },
      "name": "Fragility",
      "state": "DELEVERAGING",
      "vote": -1
    },
    {
      "actors": "directional whales, hunters",
      "detail": "5 visible positions >=$1.0M ($265.7M = 10.4% of venue OI) | exposed within 2 sigma: 0 ($0) | 30d daily sigma 2.0%",
      "metrics": {
        "visiblePositions": 5,
        "visibleNotionalUsd": 265705194.2608,
        "visibleShareOfVenueOi": 0.103786653312487,
        "venueOpenInterestUsd": 2560109472.4656,
        "exposedCount": 0,
        "exposedNotionalUsd": 0,
        "dailySigmaPct": 1.97356463971501,
        "nearestLiqDistanceSigmas": 23.2465772650821,
        "bidDepthUsd": 3892521.77123,
        "askDepthUsd": 11975508.92851
      },
      "name": "Predation",
      "state": "NO EXPOSED MAJORS",
      "vote": 1
    },
    "… 3 more"
  ],
  "axesComputed": 9,
  "axesTotal": 9,
  "farmed": "no cohort clearly farmed — funding near the anchor, no systemic trap, no exposed majors (longs pay the carry, bleeding ~$2.4M/day carry)",
  "focalPoints": [
    {
      "priceUsd": 68831.3,
      "reason": "visible $4.0M long underwater (-$10k uPnL) entered here — breakeven exit level",
      "side": "long breakeven"
    }
  ],
  "skippedAxes": [],
  "stance": "LEAN CLEAN (vote score +1 across 9 axes)",
  "stanceRule": "stance = sum of axis votes (+1 clean / 0 neutral / -1 crowded-fragile): >= +3 CLEAN BOARD, +1..+2 LEAN CLEAN, 0 MIXED, -1..-2 CROWDED, <= -3 FRAGILE",
  "symbol": "BTC",
  "thresholds": [
    {
      "comparator": ">=",
      "current": 1.84398,
      "flipsTo": "CROWDED LONG",
      "metric": "annualizedFundingPct",
      "value": 30.95
    },
    {
      "comparator": "<=",
      "current": 1.84398,
      "flipsTo": "CROWDED SHORT",
      "metric": "annualizedFundingPct",
      "value": -9.05
    },
    {
      "comparator": ">=",
      "current": 5,
      "flipsTo": "STRETCHED LONG",
      "metric": "fundingWindowPercentile",
      "value": 85
    },
    {
      "comparator": "<=",
      "current": 5,
      "flipsTo": "STRETCHED SHORT",
      "metric": "fundingWindowPercentile",
      "value": 15
    },
    {
      "comparator": ">=",
      "current": 1.55140186915888,
      "flipsTo": "COHORTS SPLIT",
      "metric": "crowdVsTopSkewRatio",
      "value": 1.5
    },
    {
      "comparator": ">=",
      "current": -6.28777326501869,
      "flipsTo": "BUILDING",
      "metric": "oiChangePct24h",
      "value": 5
    },
    "… 7 more"
  ],
  "wouldChange": [
    "annualized funding >= +30.9% -> crowded long; <= -9.1% -> crowded short (now +1.8%)",
    "funding at/above the 85th pct of its own window -> stretched long; at/below the 15th -> stretched short (now 5th)",
    "crowd and top traders are 1.55x apart — the clean vote is withheld until they converge inside 1.5x",
    "24h OI change >= +5.0% -> positions building; <= -5.0% -> unwinding (now -6.3%)",
    "or a 24h move at/above the 85th pct of this window's own moves (now 3th)",
    "spread >= 5.0 bps -> makers backing off (now 0.1 bps)",
    "… 4 more"
  ],
  "options": {
    "informational": true,
    "nextExpiry": "2026-11-14T08:00:00Z",
    "nextExpiryMaxPainTheoretical": 73500,
    "observedAt": "2026-11-13T08:05:16Z",
    "oiNotionalUsd": 22726606453.448,
    "provider": "Deribit",
    "putCallOi": 0.786936722608645,
    "riskReversal25At30d": -4.13282585233276,
    "skewState": "PUTS OVER CALLS",
    "state": "BALANCED",
    "gamma": {
      "flips": [
        76832.5074174907
      ],
      "gammaState": "NEGATIVE MODELED GAMMA",
      "grossUsdPer1Pct": 329834819.687822,
      "largestGammaStrikes": [
        70000,
        72000,
        80000
      ],
      "observed": false,
      "regime": [
        "NEGATIVE MODELED GAMMA"
      ],
      "scenario": "calls_long_puts_short",
      "signedUsdPer1Pct": -176374379.632186,
      "spotUsd": 68625.86
    }
  },
  "generatedAt": "2026-11-13T08:05:50.6034395+00:00"
}
```

Over MCP the text report a model reads comes with it:

```text
=== BTC Positioning — 2026-11-13 08:05 UTC ===
Stance: LEAN CLEAN (vote score +1 across 9 axes)
Rule: stance = sum of axis votes (+1 clean / 0 neutral / -1 crowded-fragile): >= +3 CLEAN BOARD, +1..+2 LEAN CLEAN, 0 MIXED, -1..-2 CROWDED, <= -3 FRAGILE
Farmed: no cohort clearly farmed — funding near the anchor, no systemic trap, no exposed majors (longs pay the carry, bleeding ~$2.4M/day carry)

  Crowding      STRETCHED SHORT (bottom of its own window) funding +0.0002%/h (ann +1.8% vs anchor +10.9%) | crowd L/S 3.32 vs top traders 2.14 — crowd 1.55x more long-skewed | longs paying ~$2.4M/day market-wide | venue funding +3.3pp vs merged | series at +1.8% ann sits 5th pct of its own 30-point window (+0.1% to +12.2%) | CoinGlass 2026-11-13 08:00 UTC bucket  [funding arbs, retail crowd]
  Buildup       LONG LIQUIDATION   price -6.8% / OI -6.3% over 24h ($50.93B -> $47.73B) | funding +8.5% -> +1.8% ann (falling) | 3th pct of 53 rolling 24h moves (-6.5% to +3.6%) — a move for this tape, under the absolute band — positions closing | CoinGlass 2026-11-13 08:00 UTC bucket  [new entrants, closing leverage]
  Liquidity     TIGHT              spread 0.1 bps | depth $3.9M bid / $12.0M ask | ask-heavy book (-51% imbalance)  [market makers / HFT]
  Basis         FLAT               perp -4.1 bps vs oracle (mark $68654 / oracle $68686) | venue funding +0.0006%/h  [cross-venue / spot-perp arbs]
  Fragility     DELEVERAGING       24h liq $918.6M = 1.92% of $47.73B market-wide OI  [liquidation hunters]
  Predation     NO EXPOSED MAJORS  5 visible positions >=$1.0M ($265.7M = 10.4% of venue OI) | exposed within 2 sigma: 0 ($0) | 30d daily sigma 2.0%  [directional whales, hunters]
  Trap          CLEAN              $4.0M of $265.7M tracked (2%) underwater on the paying side (longs pay) = 0.2% of $2.56B venue OI | single-name (largest $4.0M = 100% of trapped)  [trapped whales]
  House book    BOOK TOO SMALL TO READ HLP holds only $6k gross in BTC against $49.3M vault equity (readable at $246k) — the vault is flat here, not positioned, so its 11% net-to-gross is residue rather than a direction (informational)  [DEX LP vault (HLP)]
  Disagreement  ODDS               Will Bitcoin dip to $45,000 by December 31, 2026? -> 'No' 95% ($9511k volume, resolves 2027-01-01T05:00:00Z) — check against funding's implied lean  [informed flow (proxy)]

Focal points (known price levels, nearest first):
- $68831.3 (long breakeven): visible $4.0M long underwater (-$10k uPnL) entered here — breakeven exit level

Would change the call:
- annualized funding >= +30.9% -> crowded long; <= -9.1% -> crowded short (now +1.8%)
- funding at/above the 85th pct of its own window -> stretched long; at/below the 15th -> stretched short (now 5th)
- crowd and top traders are 1.55x apart — the clean vote is withheld until they converge inside 1.5x
- 24h OI change >= +5.0% -> positions building; <= -5.0% -> unwinding (now -6.3%)
- or a 24h move at/above the 85th pct of this window's own moves (now 3th)
- spread >= 5.0 bps -> makers backing off (now 0.1 bps)
- 24h liquidations >= 1.0% of market-wide OI -> deleveraging (now 1.92%)
- a visible >=$1.0M position moving within 2 daily sigmas of its liquidation flips Predation
- >=50% of tracked AND >=5% of venue OI underwater on the paying side -> trapped majority (now 2% of tracked, 0.2% of venue OI)
- HLP's book in BTC reaching $246k gross (0.5% of its $49.3M equity) makes the axis readable (now $6k)

Inputs: 9/9 axes computed

Options (Deribit; option-holder cohort, informational, no vote):
  OI $22.73B, put/call OI 0.79 → BALANCED | 25Δ RR 30d -4.1 (PUTS OVER CALLS) | next expiry 14 Nov 2026 $160.9M (1% of OI), max pain $73500.00 (theoretical)
  modeled gamma (dealers long calls / short puts, not observed): NEGATIVE MODELED GAMMA, signed -$176.4M of gross $329.8M per 1% | nearest flip $76832.51 (+12.0%) | nearest large gamma strike $70000.00 (+2.0%)
```

## Related tools

- [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call.
- [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge.
- [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) — Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored.
- [Token Dossier](https://www.f1ow.com/docs/tools/research_token_view) — One coin, fully assembled. Market data, technicals, on-chain, cited narrative synthesis, catalysts, social, ETF flows and prediction odds — the entire dossier from a single call.
