Skip to main content
Split a market’s volume by why it traded: new longs and shorts, profit taken, positions stopped out, and flips through zero, with market makers counted apart. Each bucket also shows what the market’s winners and losers over the last 72 hours hold and trade, as aggregates. Trade intent covers Hyperliquid core and HIP-3 markets, one market per request, and comes with the Build, Pro, Scale and Enterprise plans.

How a trade is classified

Every fill has two sides, and both are counted. Each side lands in one bucket by what it did to its own position: A wallet is a market maker for a fill when, over its fills on that market in the 7 days before, it has at least 200 fills, at least 80% of its notional filled as the resting (maker) side, and at least 20 flips. Because both sides count, the eight buckets plus mm_usd add up to twice the bucket’s traded notional. Delisting settlements are in no bucket.

Winners and losers

Winners and losers are the wallets up and down the most on the market over the trailing 72 hours, market makers excluded. A wallet counts in proportion to how far up or down it is, in full from the 50th-largest gain or loss on that market, and a large position close to break-even barely counts. They are served as aggregates only; no wallet is named. A cohort’s net position lags turns by construction: after a reversal, the wallets already positioned the new way become the winners. The flow does not have that lag.

Routes

HIP-3 symbols keep their builder prefix and case, such as xyz:XYZ100. HIP-4, Spot and Lighter paths answer 404 with error_code unsupported_for_venue.

Plans and credits

Trade intent comes with the Build, Pro, Scale and Enterprise plans. A Free key receives 403 with error_code forbidden, the datatype (trade_intent), the required_plans and an upgrade_url. A refused request is not charged. Each request costs 1 credit, whatever its number of buckets.

Request parameters

A page holds the buckets whose open is in [start, end], oldest first, so the bucket holding end is served whole. It never goes past the bucket holding now. Set both start and end when paging: without them each request takes the 24 hours before its own now, and a long walk slides. The default page starts at the beginning of that window, not at its newest buckets. Stop paging when meta.next_cursor is absent. A page can hold fewer buckets than limit, or none, and still carry a cursor, because quiet seconds and idle markets have no records.

Example response

The response above is trimmed to its first bucket. Every USD figure is rounded to the cent.

Response fields

Read the series correctly

A missing bucket is a gap, not zero. A market that did not trade for more than 7 days has no buckets for that time. A second without trades has no record: up to meta.built_through it had no trades, and after it nothing is known yet. Second intervals carry the additive figures only. At 1s, 5s and 15s a record has the intent buckets, mm_usd and the cohort flows, but no close, price_source, cohort positions or counts. Wait for is_final before storing. Buckets after the archive’s end, normally the current hour, are preliminary and change as the archive is built. A bucket marked is_final does not change. A 503 is retryable. If a read runs out of time the route answers 503 with error_code upstream_unavailable and Retry-After. Retry, or lower limit or narrow start and end.

Available history

A window that ends before its interval’s coverage returns an empty page with meta.coverage_from and meta.notice; a window that straddles it is served from it. At the HIP-3 start, a 4h or 1d bucket opens before 12:00 UTC and holds the rows from 12:00 on.

Access

Each venue’s start date, plans and page limit come from GET /v1/capabilities, followed by the SDK, CLI and MCP names for the same data. Send 0xArchive-Version: 2026-10-01 for the current response contract; see API conventions.

Stream it live

There is no trade intent WebSocket channel. Poll the route for the preliminary buckets of the current hour, and read them again once is_final is true.

Use it from an agent

Next step

Last modified on November 4, 2026