AArtery
On this page

Hyperliquid Markets

The /v1/markets/hyperliquid/* namespace covers customer-facing, normalized market data over the Hyperliquid perpetual universe. Each endpoint maps onto an HL Info call but reshapes the response into the Artery wire format — typed columns, consistent error envelope, server-side caching.

If you need the raw HL payload verbatim (e.g. for a strategy that's hard-coded against HL fields), use the /v1/hyperliquid/info/* passthrough family instead — same auth, no schema translation.

Note

HL perpetuals are all USD-quoted — each coin (BTC, ETH, SOL, …) is one perpetual contract. There's no BTC/ETH pair on HL perp. The coin identifier therefore plays the role of a symbol on cex platforms.

Endpoint summary

MethodPathCachePurpose
GET/v1/markets/hyperliquid/coins60sList every active coin in the HL perp universe.
GET/v1/markets/hyperliquid/coins/{coin}5sMark, oracle, funding, OI snapshot for one coin.
GET/v1/markets/hyperliquid/coins/{coin}/orderbook2sL2 orderbook depth (top-N bids/asks).
GET/v1/markets/hyperliquid/coins/{coin}/trades5sMost recent taker fills.
GET/v1/markets/hyperliquid/coins/{coin}/candles30sOHLC candles, flexible windowing.

All five require the read scope and meter under the markets.read SKU.

List coins

bashcurl -H "Authorization: Bearer art_live_<your-key>" \
  "https://api.artery.questflow.ai/v1/markets/hyperliquid/coins"
jsonc{
  "coins": [
    { "name": "BTC", "sizeDecimals": 5, "maxLeverage": 50 },
    { "name": "ETH", "sizeDecimals": 4, "maxLeverage": 50 },
    { "name": "SOL", "sizeDecimals": 2, "maxLeverage": 20 }
  ]
}

Delisted coins are filtered out. For the raw universe (including delisted entries plus the assetCtxs margin/funding overlay) use GET /v1/hyperliquid/info/meta from the passthrough family.

Coin snapshot

bashcurl -H "Authorization: Bearer art_live_<your-key>" \
  "https://api.artery.questflow.ai/v1/markets/hyperliquid/coins/BTC"
jsonc{
  "coin": "BTC",
  "markPx": 76905.0,
  "oraclePx": 76900.5,
  "midPx": 76904.2,
  "funding": 0.00001,
  "openInterest": 12345.67,
  "dayNtlVlm": 98765432.1,
  "dayBaseVlm": 1284.91
}
  • funding is the per-hour funding rate as a decimal (0.00001 = 0.001%/hr). Multiply by 8760 for annualized; by 24 × 365 for a more conventional APR representation. This matches HL's own convention.
  • Unknown coin → 404 unknown_coin.
  • Sandbox-aware: when called with a sandbox API key, returns a frozen mock and stamps X-Artery-Sandbox: true.

Orderbook

bashcurl -H "Authorization: Bearer art_live_<your-key>" \
  "https://api.artery.questflow.ai/v1/markets/hyperliquid/coins/BTC/orderbook?depth=20"
jsonc{
  "coin": "BTC",
  "bids": [
    { "price": 76903.5, "size": 0.42 },
    { "price": 76902.8, "size": 1.10 }
  ],
  "asks": [
    { "price": 76905.0, "size": 0.85 },
    { "price": 76906.1, "size": 0.27 }
  ],
  "ts": 1779163200000
}
ParameterTypeDefaultNotes
depthint20Clamped to [1, 100].

Recent trades

bashcurl -H "Authorization: Bearer art_live_<your-key>" \
  "https://api.artery.questflow.ai/v1/markets/hyperliquid/coins/BTC/trades?limit=50"
jsonc{
  "trades": [
    {
      "coin": "BTC",
      "price": 76904.2,
      "size": 0.05,
      "side": "buy",
      "ts": 1779163198120,
      "txHash": "0x..."
    }
  ]
}
  • side: "buy" = an aggressor lifted the ask; "sell" = one hit the bid.
  • txHash is the HL chain transaction hash (32 hex bytes).
  • limit clamped to [1, 200]; default 50.

OHLC candles

bash# Last 100 1h candles (default window)
curl -H "Authorization: Bearer art_live_<your-key>" \
  "https://api.artery.questflow.ai/v1/markets/hyperliquid/coins/BTC/candles?interval=1h&limit=100"
 
# Explicit time range — May 18 (UTC), 1h granularity, cap at 30 rows
curl -H "Authorization: Bearer art_live_<your-key>" \
  "https://api.artery.questflow.ai/v1/markets/hyperliquid/coins/BTC/candles?interval=1h&start_time=2026-05-18T00:00:00Z&end_time=2026-05-19T00:00:00Z&limit=30"
jsonc{
  "candles": [
    {
      "ts": 1779163200000,
      "open": 76757.0,
      "high": 76927.0,
      "low":  76676.0,
      "close": 76905.0,
      "volume": 658.65
    }
  ]
}

Query parameters

ParameterTypeDefaultNotes
intervalenum1hOne of 1m, 5m, 15m, 1h, 4h, 1d.
limitint100Clamped to [1, 500]. Always caps the response, even when an explicit time range would return more.
start_timestring | msderivedUnix-ms or ISO-8601. Inclusive lower bound.
end_timestring | msderivedUnix-ms or ISO-8601. Exclusive upper bound.

Windowing strategies

Four shapes, picked automatically from which bounds you set:

Caller sendsServer behavior
neither boundMost recent limit candles (most common).
both boundsEvery bucket in [start_time, end_time), capped at limit newest.
start_time onlyFrom that timestamp forward, capped at limit.
end_time onlyEnding at that timestamp, the most recent limit candles that close before it.
  • start_time and end_time accept either Unix milliseconds (1715766000000) or any ISO-8601 timestamp (2026-05-19T00:00:00Z).
  • start_time >= end_time400 validation_failed.
  • The cap exists to keep responses bounded — a 1m interval over a 30-day range would request 43,200 buckets; the cap truncates to the newest 500. Paginate via shrinking time windows when you need older data.
  • Candles are returned oldest-first within the response.

Error responses

Common to every endpoint in this family:

HTTPerror.codeWhen
400validation_failedBad interval, malformed start_time/end_time, start >= end, etc.
404unknown_coincoin not present in HL's active meta.
401unauthenticatedMissing / invalid Authorization.
403insufficient_scopeKey lacks read.
429rate_limitedOver the markets.read SKU quota.
502upstream_unavailableHL Info endpoint 5xx'd or timed out.

Caching

EndpointTTLWhy
coins60sUniverse changes only when HL lists/delists.
coin5sHot dashboard read; HL pushes mark/funding every few seconds.
orderbook2sTight enough for top-of-book quoting, loose enough to absorb hot polling.
trades5sTape moves but not by the millisecond — a 5s cache is barely visible to users.
candles30sThe newest bucket is still forming — repeated polls within 30s see the same in-flight value.

Cache hits are completely transparent; there's no header to opt out. If you need fresher data than the TTL allows, drop down to the /v1/hyperliquid/info/* passthrough family — those forward upstream without caching.

Edit this page on GitHubLast updated
Hyperliquid Markets · Artery API Docs