---
title: "Get Trade Flow"
method: GET
path: "/api/v1/hyperliquid/trade-flow"
tags: ["Hyperliquid"]
---

# Get Trade Flow

`GET /api/v1/hyperliquid/trade-flow`

## Request

- Base URL: `https://cryptodataapi.com`
- URL: `https://cryptodataapi.com/api/v1/hyperliquid/trade-flow`
- Auth: API key in header `X-API-Key`

Per-minute taker buy/sell flow for one perp, newest last, dense.

Every row is one closed UTC minute. ``buy_notional`` / ``sell_notional``
are USD notional by AGGRESSOR side (HL ``B`` = taker bought, ``A`` = taker
sold); their sum is the minute's total traded notional. ``vwap`` is that
minute's notional-weighted price; ``max_fill_usd`` the largest single
fill; ``large_fill_share`` the share of notional from fills at or above
``large_fill_usd`` (``null`` when none qualify). ``cvd_usd`` is the
cumulative buy-minus-sell notional running from ``window_start`` — it
resets per request, so compare rows within one response only.

``partial: true`` means our socket did not watch the whole minute (a
reconnect, a deploy). Such minutes come back with ``null`` notional when
nothing was captured, and are NOT back-filled — HL's public stream has no
replay. A covered minute with no fills is a genuine zero (``0.0``,
``partial: false``). ``stream.coverage_pct`` is the share of the last 60
minutes fully watched.

The current, still-open minute is never included. 503
``trade_flow_warming`` until the first bucket closes (about a minute
after the collector starts); 404 for a coin HL does not list. Pro.

## Query parameters

- `coin` string: HL coin name (BTC, ETH, kPEPE — case-sensitive after the first letter for k-prefixed perps)
- `minutes` integer: Trailing window in whole minutes (max 24h)

## Response `200`

Successful Response

- HLTradeFlowResponse
  - `coin` string, required
  - `minutes` integer, required
  - `bucket` string
  - `large_fill_usd` number, required
  - `window_start` integer, required
  - `window_end` integer, required: Exclusive; the open minute is never included
  - `stream` HLTradeFlowStream, required
    - `connected` boolean, required
    - `connected_since` integer, nullable, required: unix ms, or null when disconnected
    - `coverage_pct` number, required: Share (0..100) of the last 60 minutes fully watched
  - `data` HLTradeFlowBucket[], required
    - `time` integer, required: Minute start, unix ms (UTC)
    - `coin` string, required
    - `buy_notional` number, nullable, required: USD notional where the taker BOUGHT (HL side B)
    - `sell_notional` number, nullable, required: USD notional where the taker SOLD (HL side A)
    - `n_trades` integer, nullable, required
    - `vwap` number, nullable, required: Notional-weighted price for the minute
    - `max_fill_usd` number, nullable, required: Largest single fill, USD
    - `large_fill_share` number, nullable, required: Share (0..1) of notional from fills >= large_fill_usd; null when none
    - `partial` boolean, required: True when our socket did not cover the whole minute
    - `cvd_usd` number, nullable: Running buy-minus-sell notional from window_start (served only)
  - `count` integer, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/cryptodataapi/apis/crypto-data-api.md) · [All operations](https://skmtc.dev/cryptodataapi/apis/crypto-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cryptodataapi/apis/crypto-data-api/revisions/8628b754ca81?raw)
