Skip to main content
Measure how much of a venue is in an uptrend: the share of Hyperliquid core perps, or of HIP-3 perps, trading above their n-day moving average, and the quartiles of how far above or below they are. Choose the length, 5, 20, 50 or 200 days, read the newest reading or a history at intervals from one minute to one day, and compare the venue with itself over time. Breadth above the moving average comes with the Build, Pro, Scale and Enterprise plans. It is a separate measure from breadth above session VWAP, which compares each instrument with its VWAP for the current UTC day and is on every plan.

How a reading is computed

The method is ma-breadth/1, named in every record. The counts check each other:

Routes

There is no Spot or HIP-4 series: those paths answer 404 with error_code unsupported_for_venue.

Plans and credits

Breadth above the moving average comes with the Build, Pro, Scale and Enterprise plans. A Free key receives 403 with error_code forbidden, the datatype (breadth_ma), 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

n is required on every route: 5, 20, 50 or 200. There is no default, because the lengths answer different questions, a 5-day and a 200-day reading of the same venue often point opposite ways, and each length starts on its own date. A missing or other value returns 400 with error_code invalid_parameter and the accepted valid_values. /current takes n only and returns the newest one-minute reading. Any window parameter returns 400, naming the history route. The history route also accepts: A page holds the buckets whose open is in [start, end], oldest first. Set both start and end when paging, because the default window moves with the clock, and keep paging while meta.has_more is true. The cursor is opaque: it is not a calculated_at value, so do not reuse the paging logic of breadth above session VWAP.

Example response

The response above is trimmed to its first bucket. /current returns one record as an object in data, with meta.count of 1.

Response fields

Read the number correctly

A bucket carries its last reading. Each bucket holds the reading as of its end, and the bucket still forming holds the reading as of the newest settled minute, about 4 minutes behind now. /current is that newest minute. Percentages are never averaged across buckets; to reduce resolution, pick a longer interval. Null is not zero. value_pct and the quartiles are null when nothing is eligible. Carry the null through as a gap. coverage_ratio is not a quality score. It depends on n, because younger perps are excluded at longer lengths, and it falls as perps delist, because delisted perps stay candidates. It is not comparable with the coverage_ratio of breadth above session VWAP. A final reading can still be rebuilt. is_final means the candles behind the reading are final. If those candles are rebuilt, or a listing reaches the candidate list late, the reading can change. A 503 is retryable. While a series is still being prepared, or when many history pages below 1h are requested at once, the route answers 503 with error_code upstream_unavailable and Retry-After. Retry after the delay.

Available history

Each length starts on its own date, n days after the venue’s first candle day. A window that ends before its length’s start returns an empty page with meta.coverage_from and meta.notice; a window that straddles it is served from it. Each start is 00:00 UTC. In GET /v1/capabilities, the row’s available_from is the n=5 start, and its notes give the others.

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 WebSocket channel for this series. Poll /current once a minute at most; a new reading appears each minute.

Use it from an agent

Next step

Last modified on November 4, 2026