Hyperliquid Perp & Spot Markets: Price, Funding, Open Interest
Pricing
from $1.40 / 1,000 market row returneds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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=fundingAprwithminDayVolumeUsdto skip thin listings, andincludePredictedFunding=trueto 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=spotgives 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=orderBookreturns 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=fundingHistorywithsinceHours=720collects 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=bothplusfieldsreturns 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).
| Field | Type | Default | Allowed values / notes |
|---|---|---|---|
mode | string | markets | markets, orderBook, fundingHistory — see Modes. |
marketType | string | perp | perp, spot, both. markets mode only; the other two modes read perpetuals. |
coins | string[] | 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). |
minDayVolumeUsd | integer | — | Drop markets that traded less than this in the last 24 hours. markets mode only. |
includePredictedFunding | boolean | false | One extra call: adds predictedFundingHl, predictedFundingBinance, predictedFundingBybit, nextFundingTime and fundingIntervalHours to perpetual rows. |
includeDelisted | boolean | false | The 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). |
sortBy | string | dayVolumeUsd | dayVolumeUsd, openInterestUsd, fundingApr, dayChangePct, marketCapUsd, symbol — see Sort keys. |
sortDesc | boolean | true | false = smallest first (e.g. the most negative funding). |
bookDepth | integer | 10 | 1–20 price levels per side kept in bids/asks; the summary numbers are computed from the levels kept. orderBook mode. |
depthUsdWindowPct | number | 0.5 | 0.01–10. Half-width of the band behind bidDepthUsd/askDepthUsd: 0.5 = half a percent below and above the mid. orderBook mode. |
sinceHours | integer | 24 | 1–2160 hours back from the start of the run, in UTC. fundingHistory mode. |
maxItems | integer | 50 | 1–5000 dataset rows, applied after sorting. |
fields | string[] | all | Keep only these fields, in this order. symbol, coin, marketType and fetchedAt are always kept. |
Reference
Modes
mode | Calls to the source | One row is | Uses |
|---|---|---|---|
markets | 1 (perp), 1 (spot) or 2 (both), +1 with includePredictedFunding | one perpetual contract or one spot pair | marketType, coins, minDayVolumeUsd, includeDelisted, sortBy, sortDesc |
orderBook | 1 + 1 per coin | one coin: top of book, spread, depth, raw levels | coins, bookDepth, depthUsdWindowPct |
fundingHistory | 1 + 1 per coin per 480 hours of window | one funding settlement of one coin | coins, 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.
| Field | Type | Meaning |
|---|---|---|
symbol | string | Market name: the coin for a perpetual, BASE/QUOTE for a spot pair. |
coin | string | Base symbol (BTC, HYPE) — what you put into coins. |
marketType | string | perp or spot. |
markPx | number | Mark price the exchange uses for margin. |
midPx | number | Middle of the book; filled from the mid-price endpoint when a snapshot omits it. |
prevDayPx, dayChangePct | number | Price 24 hours ago and the change from it in percent. |
dayVolumeUsd, dayVolumeBase | number | 24h notional volume in USD and in base coins. |
url | string | Market page of the exchange's web app. |
fetchedAt | string | When the run read the source, ISO 8601 UTC. |
Perpetual rows add:
| Field | Type | Meaning |
|---|---|---|
oraclePx | number | Oracle price — the external index funding is measured against. |
openInterest, openInterestUsd | number | Open contracts in base coins, and openInterest × markPx. |
fundingHourly, fundingApr | number | Hourly funding rate and the same rate in percent per year. |
premium | number | Premium of the contract over the oracle price. |
maxLeverage, szDecimals, onlyIsolated | number, number, boolean | Contract settings: leverage cap, size precision, isolated margin only. |
impactBidPx, impactAskPx | number | The exchange's impact prices, the basis of its premium calculation. |
isDelisted | boolean | Contract kept in the table but no longer traded (hidden unless includeDelisted). |
predictedFundingHl, predictedFundingBinance, predictedFundingBybit | number | Rate 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, fundingIntervalHours | string, number | Next 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 ApifyClientclient = 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.
| Run | Rows | Cost at list price |
|---|---|---|
| Three-coin watchlist | 3 | $0.001 + 3 × $0.002 = $0.007 |
| Funding screener | 25 | $0.001 + 25 × $0.002 = $0.051 |
| Default limit, busiest markets | 50 | $0.001 + 50 × $0.002 = $0.101 |
| A week of hourly funding for one coin | 168 | $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;marketsmode 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.
nextFundingTimeis the timestamp the exchange publishes for the coming settlement; it can already be a few minutes old when a run starts. - Cross-venue funding —
predictedFundingBinanceandpredictedFundingBybitare 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.
bidDepthUsdandaskDepthUsdcount only the levels kept (bookDepth) insidedepthUsdWindowPct, so a wide window with few levels understates real depth. - Market cap —
marketCapUsduses 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=2160costs 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,spreadBpsand 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 andSUMMARY. A wrongmode,marketTypeorsortByis 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.