---
title: "Perp Levels (volume, OI, liquidations, walls)"
method: GET
path: "/flow/levels/{symbol}"
tags: ["flow"]
---

# Perp Levels (volume, OI, liquidations, walls)

`GET /flow/levels/{symbol}`

## Request

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

Perp price levels for one coin, from what printed rather than from a chart: executed volume at price on every venue that lists it (Binance, Bybit, BingX, Hyperliquid), with the value area (70% of volume around the POC), high-volume nodes and thin zones (prices crossed without trading, where moves tend to run); open-interest changes at price split into long and short entries; realized liquidations at price (OKX/Gate sample); and resting walls from deep books on several venues, counted only when a second snapshot 2 s later still shows them. Every level is graded by evidence — traded (volume, liquidations) > inferred (OI side) > resting (orders, which can be pulled) — and lists the other evidence at the same price (confluence). Walls larger than their venue's own daily volume are flagged. Use it for where price may stall, accelerate or meet forced flow; it is not a forecast.

## Path parameters

- `symbol` string, required: Coin symbol, e.g. "WAVES".

## Query parameters

- `hours` integer: Window in hours, 24–168. Default 72.

## Response `200`

The result.

- object
  - `data` object
    - `symbol` string, required
    - `spot` number, required
    - `windowHours` integer
    - `step` number: Price bin width
    - `sources` object
      - `volume` string[]
      - `flow` string
      - `takerCoveragePct` number
      - `liquidations` string[]
      - `books` object[]
        - `venue` string
        - `reachDownPct` number
        - `reachUpPct` number
        - `persisted` boolean
    - `valueArea` object
      - `poc` number
      - `low` number
      - `high` number
    - `spotContext` object
      - `inValueArea` boolean
      - `inThinZone` boolean
      - `nearestBelow` object: Nearest level below spot (same shape as levels[])
      - `nearestAbove` object: Nearest level above spot (same shape as levels[])
    - `levels` object[]
      - `kind` 'poc' | 'value_area_high' | 'value_area_low' | 'high_volume_node' | 'thin_zone' | 'long_entries' | 'short_entries' | 'long_liquidations' | 'short_liquidations' | 'bid_wall' | 'ask_wall'
      - `evidence` 'traded' | 'inferred' | 'resting'
      - `price` number: Quoted price: a value-area edge at its edge, a bin at its middle, a zone at its low end
      - `priceLo` number
      - `priceHi` number
      - `distancePct` number
      - `onLadder` boolean: Inside the volume band the view draws
      - `usd` number
      - `venue` string
      - `withKinds` string[]
      - `outsized` boolean: A wall larger than its venue's own 24h volume
      - `strength` integer
      - `readFromPrice` boolean: An entry whose side was read from price, not a taker split
    - `unconfirmedWalls` object[]: Walls larger than their venue's own 24h volume: shown, never counted as support or resistance
    - `dailyRangePct` number: Average 24h high–low range over the window, percent of price
    - `window` object: The window at a glance: price from the venue that traded most, OI from the flow venue, volume in the band, liquidations in the sample
      - `priceStart` number
      - `priceEnd` number
      - `priceChangePct` number
      - `priceVenue` string
      - `oiStartUsd` number
      - `oiEndUsd` number
      - `oiChangePct` number
      - `oiVenue` string
      - `volumeUsd` number
      - `liquidatedUsd` number
    - `resistances` object[]: Nearest levels on this side, one entry per price, strongest-first among the nearest
      - `price` number
      - `distancePct` number
      - `strength` integer
      - `kinds` string[]
      - `evidence` string[]
      - `usd` number
      - `venue` string
      - `outsized` boolean
    - `supports` object[]: Nearest levels on this side, one entry per price, strongest-first among the nearest
      - `price` number
      - `distancePct` number
      - `strength` integer
      - `kinds` string[]
      - `evidence` string[]
      - `usd` number
      - `venue` string
      - `outsized` boolean
    - `sourcesFailed` object[]
      - `source` string
      - `error` string
    - `rule` string
    - `caveats` string[]
  - `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)
