Hyperliquid Perp & Spot Markets: Price, Funding, Open Interest avatar

Hyperliquid Perp & Spot Markets: Price, Funding, Open Interest

Pricing

from $1.40 / 1,000 market row returneds

Go to Apify Store
Hyperliquid Perp & Spot Markets: Price, Funding, Open Interest

Hyperliquid Perp & Spot Markets: Price, Funding, Open Interest

One row per Hyperliquid market from the exchange's public info API: mark, mid and oracle price, 24h volume, open interest in USD, hourly funding and its yearly rate, spot pairs with readable names. Two extra modes give an order-book snapshot with USD depth and past funding samples per coin.

Pricing

from $1.40 / 1,000 market row returneds

Rating

0.0

(0)

Developer

Samat Makatov

Samat Makatov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Market data from Hyperliquid as flat rows: every perpetual contract with mark, mid and oracle price, 24h volume, open interest in USD, the hourly funding rate and the same rate per year — and every spot pair with a readable name (HYPE/USDC), supply and market cap. Two extra modes answer the questions a price table cannot: an order-book snapshot with the spread in basis points and the USD resting near the mid, and the funding settlements of a contract hour by hour.

No API key, no wallet, no proxy, no browser: the actor reads the exchange's own public info endpoint. It never touches trader, position, vault or leaderboard data — this is a market-data actor only.

Use cases

  • Venue screener — the busiest contracts right now: mode=markets, sortBy=dayVolumeUsd, maxItems=25, straight into a dashboard or a daily note.
  • Funding carry / basis desk — sortBy=fundingApr with minDayVolumeUsd to skip thin listings, and includePredictedFunding=true to see the rate other perp venues are about to charge for the same coin in the same row.
  • Watchlist refresh — coins=["BTC","ETH","SOL"] on a schedule: three rows with price, 24h change and open interest for an alert rule or a spreadsheet.
  • Spot token research — marketType=spot gives pair names rebuilt from the token table, price, volume, circulating supply and market cap for tokens that trade here before they show up elsewhere.
  • Sizing and slippage checks — mode=orderBook returns best bid and ask, the spread in bps and how many USD sit within a chosen band of the mid, plus the raw levels for your own slippage curve.
  • Funding series for a backtest — mode=fundingHistory with sinceHours=720 collects a month of hourly settlements per coin, with the rate as paid and the premium over the oracle price.
  • One tool call for an agent — marketType=both plus fields returns a compact snapshot of the whole venue in a single run.

Input

Every field is optional. coins is prefilled with three majors (a prefill, not a default: clear it and markets mode returns the whole table).

FieldTypeDefaultAllowed values / notes
modestringmarketsmarkets, orderBook, fundingHistory — see Modes.
marketTypestringperpperp, spot, both. markets mode only; the other two modes read perpetuals.
coinsstring[]prefill ["BTC","ETH","HYPE"]Base symbols as the exchange writes them (BTC, HYPE, SOL). Case is ignored, a leading $ is dropped, obvious typos are corrected (hpye → HYPE). Empty = every market, in markets mode only; required in orderBook and fundingHistory. Spot rows also match on the pair (HYPE/USDC) or its handle (@107).
minDayVolumeUsdinteger—Drop markets that traded less than this in the last 24 hours. markets mode only.
includePredictedFundingbooleanfalseOne extra call: adds predictedFundingHl, predictedFundingBinance, predictedFundingBybit, nextFundingTime and fundingIntervalHours to perpetual rows.
includeDelistedbooleanfalseThe exchange keeps delisted contracts in its table with a frozen price and no volume; they are skipped unless you ask for them (isDelisted marks them).
sortBystringdayVolumeUsddayVolumeUsd, openInterestUsd, fundingApr, dayChangePct, marketCapUsd, symbol — see Sort keys.
sortDescbooleantruefalse = smallest first (e.g. the most negative funding).
bookDepthinteger101–20 price levels per side kept in bids/asks; the summary numbers are computed from the levels kept. orderBook mode.
depthUsdWindowPctnumber0.50.01–10. Half-width of the band behind bidDepthUsd/askDepthUsd: 0.5 = half a percent below and above the mid. orderBook mode.
sinceHoursinteger241–2160 hours back from the start of the run, in UTC. fundingHistory mode.
maxItemsinteger501–5000 dataset rows, applied after sorting.
fieldsstring[]allKeep only these fields, in this order. symbol, coin, marketType and fetchedAt are always kept.

Reference

Modes

modeCalls to the sourceOne row isUses
markets1 (perp), 1 (spot) or 2 (both), +1 with includePredictedFundingone perpetual contract or one spot pairmarketType, coins, minDayVolumeUsd, includeDelisted, sortBy, sortDesc
orderBook1 + 1 per coinone coin: top of book, spread, depth, raw levelscoins, bookDepth, depthUsdWindowPct
fundingHistory1 + 1 per coin per 480 hours of windowone funding settlement of one coincoins, sinceHours

The symbol dictionary

Perpetual listings change every few weeks, so the actor ships no symbol list: run markets with an empty coins list and sortBy=symbol to get the current one (≈ 230 perpetuals and ≈ 330 spot pairs in September 2026). A symbol the exchange does not list and that cannot be read as a typo comes back as one row with found: false and a note — never as a silently empty run.

Spot pair names

Only a handful of spot pairs carry a readable name upstream; the rest are internal handles like @107. The actor resolves the pair's two token indexes through the exchange's token table and builds symbol = BASE/QUOTE (HYPE/USDC), keeping the raw handle in pairId (that is also what the market link uses). isCanonical mirrors the exchange's own flag for the pair.

Funding math

fundingHourly is the rate as the exchange publishes it: a fraction charged once an hour (0.0000125 = 0.00125 % per hour). fundingApr = fundingHourly × 24 × 365 × 100, i.e. percent per year (0.0000125 → 10.95). Positive means longs pay shorts. premium is the contract's premium over the oracle price, the input to the next rate.

Sort keys

dayVolumeUsd (notional traded in 24h), openInterestUsd (perps), fundingApr (perps; combine with sortDesc=false to find where shorts pay longs), dayChangePct, marketCapUsd (spot), symbol (alphabetical). Rows without the value always go last, in both directions.

Examples

Busiest perpetuals right now

{ "mode": "markets", "marketType": "perp", "coins": [], "sortBy": "dayVolumeUsd", "maxItems": 25 }

Funding screener: liquid perps, highest yearly rate, with the cross-venue rate

{ "mode": "markets", "coins": [], "sortBy": "fundingApr", "sortDesc": true, "minDayVolumeUsd": 1000000, "includePredictedFunding": true, "maxItems": 25 }

Three-coin watchlist for a scheduled task

{ "mode": "markets", "coins": ["BTC", "ETH", "SOL"], "maxItems": 10 }

Spot pairs by volume, with market cap

{ "mode": "markets", "marketType": "spot", "coins": [], "sortBy": "dayVolumeUsd", "maxItems": 20 }

Book snapshot: spread and USD depth within 0.5 % of the mid

{ "mode": "orderBook", "coins": ["BTC", "ETH", "SOL"], "bookDepth": 10, "depthUsdWindowPct": 0.5, "maxItems": 5 }

A week of HYPE funding settlements

{ "mode": "fundingHistory", "coins": ["HYPE"], "sinceHours": 168, "maxItems": 50 }

Whole venue above a volume floor, trimmed for an agent

{ "mode": "markets", "marketType": "both", "coins": [], "minDayVolumeUsd": 100000, "maxItems": 40, "fields": ["symbol", "marketType", "markPx", "dayChangePct", "dayVolumeUsd", "openInterestUsd", "fundingApr", "marketCapUsd"] }

Output

A perpetual row from a real run (mode=markets, marketType=perp, includePredictedFunding=true):

{
"symbol": "BTC",
"coin": "BTC",
"marketType": "perp",
"markPx": 83988,
"midPx": 83988.5,
"oraclePx": 84027.3,
"prevDayPx": 83965,
"dayChangePct": 0.0274,
"dayVolumeUsd": 858327129.3264494,
"dayVolumeBase": 10220.38512,
"openInterest": 37308.15674,
"openInterestUsd": 3133437468.28,
"fundingHourly": 3.7326e-06,
"fundingApr": 3.2698,
"premium": -0.0004558042,
"maxLeverage": 40,
"szDecimals": 5,
"onlyIsolated": false,
"isDelisted": false,
"impactBidPx": 83988,
"impactAskPx": 83989,
"url": "https://app.hyperliquid.xyz/trade/BTC",
"fetchedAt": "2026-09-26T19:48:36.818Z",
"predictedFundingHl": 3.6954e-06,
"predictedFundingBinance": 2.2e-07,
"predictedFundingBybit": 7.612e-05,
"nextFundingTime": "2026-09-26T19:00:00.000Z",
"fundingIntervalHours": 1
}

A spot row (marketType=spot), and an order-book row (mode=orderBook, levels trimmed):

{
"symbol": "HYPE/USDC",
"coin": "HYPE",
"marketType": "spot",
"pairId": "@107",
"baseToken": "HYPE",
"quoteToken": "USDC",
"markPx": 91.582,
"midPx": 91.5825,
"prevDayPx": 91.604,
"dayChangePct": -0.024,
"dayVolumeUsd": 25525595.54017999,
"dayVolumeBase": 277337.31,
"circulatingSupply": 298715709.2679536,
"totalSupply": 998906501.7914867,
"marketCapUsd": 27356982086.18,
"isCanonical": false,
"url": "https://app.hyperliquid.xyz/trade/@107",
"fetchedAt": "2026-09-26T19:47:41.121Z"
}
{
"symbol": "BTC",
"coin": "BTC",
"marketType": "perp",
"found": true,
"midPx": 83977.5,
"bestBid": 83977,
"bestAsk": 83978,
"spread": 1,
"spreadBps": 0.119,
"bidDepthUsd": 574012.44,
"askDepthUsd": 1997992.36,
"depthWindowPct": 0.5,
"bookImbalance": 0.2232,
"bidLevels": 10,
"askLevels": 10,
"bookTime": "2026-09-26T19:47:40.757Z",
"bids": [
{ "px": 83977, "sz": 0.21279, "n": 7 },
{ "px": 83976, "sz": 0.77419, "n": 1 },
{ "px": 83975, "sz": 0.52394, "n": 15 }
],
"asks": [
{ "px": 83978, "sz": 7.88955, "n": 35 },
{ "px": 83979, "sz": 0.94494, "n": 4 },
{ "px": 83980, "sz": 1.82516, "n": 4 }
],
"url": "https://app.hyperliquid.xyz/trade/BTC",
"fetchedAt": "2026-09-26T19:47:40.962Z"
}

A symbol the exchange does not list (real row from the same run that read hpye as HYPE):

{
"symbol": "NOTACOIN2",
"coin": "NOTACOIN2",
"marketType": "perp",
"found": false,
"note": "The exchange does not list \"NOTACOIN2\" as a perpetual. Run mode \"markets\" with an empty coin list for the current symbol dictionary.",
"url": "https://app.hyperliquid.xyz/trade/NOTACOIN2",
"fetchedAt": "2026-09-26T19:48:36.889Z"
}

Fields

Always present: symbol, coin, marketType, url, fetchedAt.

FieldTypeMeaning
symbolstringMarket name: the coin for a perpetual, BASE/QUOTE for a spot pair.
coinstringBase symbol (BTC, HYPE) — what you put into coins.
marketTypestringperp or spot.
markPxnumberMark price the exchange uses for margin.
midPxnumberMiddle of the book; filled from the mid-price endpoint when a snapshot omits it.
prevDayPx, dayChangePctnumberPrice 24 hours ago and the change from it in percent.
dayVolumeUsd, dayVolumeBasenumber24h notional volume in USD and in base coins.
urlstringMarket page of the exchange's web app.
fetchedAtstringWhen the run read the source, ISO 8601 UTC.

Perpetual rows add:

FieldTypeMeaning
oraclePxnumberOracle price — the external index funding is measured against.
openInterest, openInterestUsdnumberOpen contracts in base coins, and openInterest × markPx.
fundingHourly, fundingAprnumberHourly funding rate and the same rate in percent per year.
premiumnumberPremium of the contract over the oracle price.
maxLeverage, szDecimals, onlyIsolatednumber, number, booleanContract settings: leverage cap, size precision, isolated margin only.
impactBidPx, impactAskPxnumberThe exchange's impact prices, the basis of its premium calculation.
isDelistedbooleanContract kept in the table but no longer traded (hidden unless includeDelisted).
predictedFundingHl, predictedFundingBinance, predictedFundingBybitnumberRate each venue is about to charge for this coin, as this exchange publishes it; empty when a venue does not list the coin. With includePredictedFunding only.
nextFundingTime, fundingIntervalHoursstring, numberNext settlement here (UTC) and its interval. With includePredictedFunding only.

Spot rows add: pairId (internal handle, e.g. @107), baseToken, quoteToken, circulatingSupply, totalSupply, marketCapUsd (= circulatingSupply × markPx) and isCanonical.

mode=orderBook rows: bestBid, bestAsk, midPx, spread, spreadBps, bidDepthUsd, askDepthUsd, depthWindowPct, bookImbalance (bid share of the depth in the window, 0–1), bidLevels, askLevels, bookTime (UTC of the snapshot) and bids[]/asks[] with {px, sz, n} — price, size in base coins, number of orders.

mode=fundingHistory rows: time (settlement, UTC), fundingHourly, fundingApr, premium — newest first, one row per hour.

Dataset views: Markets (prices, volume, open interest, funding, market cap), Funding (hourly and yearly rate, premium, cross-venue rates, next settlement), Order book (top of book, spread, USD depth, imbalance).

Every run also writes a SUMMARY record to the default key-value store: mode, marketType, coinsRequested, rows, apiCalls, sinceHours, notes (typo corrections, unknown symbols, clamped inputs) and fetchedAt.

Use it from code / agents

Apify API (curl)

curl -X POST "https://api.apify.com/v2/acts/yadroo~hyperliquid-markets/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"mode":"markets","coins":["BTC","ETH"],"maxItems":10}'

JavaScript (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yadroo/hyperliquid-markets').call({ mode: 'markets', coins: [], sortBy: 'fundingApr', minDayVolumeUsd: 1000000, maxItems: 25 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yadroo/hyperliquid-markets").call(run_input={"mode": "fundingHistory", "coins": ["HYPE"], "sinceHours": 168, "maxItems": 50})
items = client.dataset(run["defaultDatasetId"]).list_items().items

MCP / agents — connect https://mcp.apify.com and call the yadroo/hyperliquid-markets tool with the same JSON. The row shape is stable enough to feed a tool call directly, and fields keeps the answer small (["symbol","markPx","fundingApr"] is three numbers per market).

Pricing

Pay per event: $0.001 per run start + $0.002 per dataset row. The start event is charged on every run, including a run that returns nothing.

RunRowsCost at list price
Three-coin watchlist3$0.001 + 3 × $0.002 = $0.007
Funding screener25$0.001 + 25 × $0.002 = $0.051
Default limit, busiest markets50$0.001 + 50 × $0.002 = $0.101
A week of hourly funding for one coin168$0.001 + 168 × $0.002 = $0.337

Apify plan tiers discount the row price (Bronze −10 %, Silver −20 %, Gold and above −30 %); the start event is flat. Runs are small — 256 MB, no browser, one to a handful of HTTP calls — so platform compute stays a fraction of a cent.

Limits & FAQ

  • Freshness — every row is read live and stamped with fetchedAt; markets mode is one snapshot per run, not a stream. Schedule the task (every few minutes is cheap for a short coin list) if you need a series.
  • Funding granularity — this venue settles funding hourly, so history has hourly resolution and nothing finer exists upstream. nextFundingTime is the timestamp the exchange publishes for the coming settlement; it can already be a few minutes old when a run starts.
  • Cross-venue funding — predictedFundingBinance and predictedFundingBybit are what this exchange publishes about those venues, not values read from them. A venue that does not list the coin leaves the field empty, and funding intervals differ (often 8 hours elsewhere against 1 hour here), so compare rates per hour, not per interval.
  • Order book — a point-in-time snapshot of up to 20 levels per side; spot pairs are not covered by this mode. bidDepthUsd and askDepthUsd count only the levels kept (bookDepth) inside depthUsdWindowPct, so a wide window with few levels understates real depth.
  • Market cap — marketCapUsd uses the supply figure the exchange reports for the token. For wrapped or bridged tokens that figure is often the maximum supply, which makes the market cap look far too large; treat it as the exchange's number, not as a verified float.
  • Long funding windows — the source answers at most 500 hourly samples per call, so sinceHours=2160 costs up to five calls per coin. Keep coin lists short in scheduled runs: the endpoint budgets request weight per IP.
  • Numbers as strings — the source sends every price and rate as a JSON string; the actor parses them to numbers and derives dayChangePct, openInterestUsd, fundingApr, marketCapUsd, spreadBps and the depth figures itself. Timestamps arrive as epoch milliseconds and are converted to ISO 8601 UTC.
  • Bad input — an unknown symbol yields a row with found: false; an obvious typo is corrected and reported in the log, the status message and SUMMARY. A wrong mode, marketType or sortBy is corrected when it is clearly a typo, otherwise the run fails with the list of allowed values. A request is never silently widened.
  • What is not here — no trader, wallet, position, fill, vault or leaderboard data, by design. No trading and no authentication: the actor only reads public market endpoints.
  • Source availability — retries with backoff on rate limits and 5xx; if the endpoint stays unavailable the run fails with a message saying so instead of writing half a table. Not affiliated with the exchange.

Made by Yadroo. Related actors: coingecko-markets, dexscreener-tokens, defillama-protocols, polymarket-markets, base-token-intel.