vike

Recipe 47 of 65

Which Hyperliquid coin had the best funding carry over the last 30 days?

Ask /v1/hyperliquid/symbols/hourly for up to 64 perps with days=30 and rank them by mean hourly funding_rate; the share of positive hours says how steady the carry was.

GET /v1/hyperliquid/symbols/hourly answers it in one call per 64 coins: one row per perp and hour with the close, open interest, funding_rate and premium, up to 400 days back. Average funding_rate per symbol over days=30 and sort. A positive rate means longs pay shorts, so the top of the list is where a short perp, hedged with spot, collected the most. The full parameter list is on Coins hourly.

Quick answer

Ask for the coins you want to compare over days=30 and rank them on your side.

cURL
# 30 days of hourly funding for six perps, ranked by mean hourly rate, with the share of hours it was positive
curl -s -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/symbols/hourly?symbols=BTC,ETH,SOL,HYPE,XRP,DOGE&days=30" \
  | jq '.rows | group_by(.[1]) | map({symbol: .[0][1], hours: length, mean_hourly: ([.[][4] | select(. != null)] | add / length), positive_share: (([.[][4] | select(. != null and . > 0)] | length) / length)}) | map(.apr_pct = .mean_hourly * 24 * 365 * 100) | sort_by(-.mean_hourly)'

Example response

Captured from the live API on 2026-10-24 at 17:16 UTC, trimmed to the first 3 DOGE rows of 4,320 (6 symbols x 720 hours).

Each row is an array in columns order; ts is epoch seconds and funding_rate is a fraction per hour (0.0000125 is 0.00125% an hour). Run through the jq filter, this capture ranked DOGE first at a mean of 0.0000117 an hour (10.2% a year, positive in 94% of hours), then XRP 9.0%, BTC 8.2%, ETH 8.1%, HYPE 8.0% and SOL 6.8%.

Example response
{
  "symbols": ["BTC", "ETH", "SOL", "HYPE", "XRP", "DOGE"],
  "tz": "UTC",
  "source": "1h fills rollup + hourly asset summary",
  "start": 1790270179,
  "end": 1792862179,
  "columns": ["ts", "asset", "close", "open_interest", "funding_rate", "premium"],
  "rows": [
    [1790272800, "DOGE", 0.096784, 1241308529.6666667, 1.2500000000000004e-05, 0.0005359872416666666],
    [1790276400, "DOGE", 0.096298, 1254175347.5, 1.2500000000000004e-05, 0.0005398082333333334],
    [1790280000, "DOGE", 0.095875, 1250624021.5, 1.2500000000000004e-05, 0.0005331478083333334]
  ]
}

Variations

Every perp, in batches of 64. List the core perps that traded in the last hour, then pass them to symbols 64 at a time.

cURL — symbol list
# comma-separated core perp tickers that traded in the last hour
curl -s -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/ohlcv/latest?dex=HL" \
  | jq -r '[.candles[] | select(.symbol | startswith("#") | not) | .symbol] | join(",")'

A pinned window. days counts back from the server's clock at call time. Pin start and end (exclusive) to rerun the same ranking.

cURL — pinned
# September 2026 only
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/symbols/hourly?symbols=BTC,ETH,SOL,HYPE,XRP,DOGE&start=2026-09-01T00:00:00Z&end=2026-10-01T00:00:00Z"

What one wallet actually received. The panel is the market rate. A wallet's real payments, per hour and coin, are on its funding history.

cURL — paid and received
# the funding one wallet paid or received; negative payment_usd = the wallet paid
curl -H "X-API-Key: $VIKE_API_KEY" \
  "https://data.vike.io/v1/hyperliquid/wallets/0x25773676902085225ae5751075e4161369334897/funding?limit=100"

Before you rely on it

funding_rate is an hourly average of samples, not the settled payment

The panel's funding_rate is the venue's published rate, sampled about every 5 minutes and averaged over the hour. It is not the settlement itself, and the newest row is the hour still in progress. A carry trade also pays the spread on both legs and carries price risk on the hedge, none of which is in this number.

Rows exist only for hours with a trade

The join starts from the traded close, so an hour with no fill in that perp has no row at all, and a missing funding or open-interest sample arrives as null, never 0. The filter skips the nulls. Rows come sorted by symbol, then hour, not in the order you listed the symbols. More than 64 symbols, or a window over 256,000 rows, is refused with a 400.

Ask your agent

No MCP tool returns funding history: perp_funding gives current rates only, so run the Quick answer call.

Example response
{  "symbols": ["BTC", "ETH", "SOL", "HYPE", "XRP", "DOGE"],  "tz": "UTC",  "source": "1h fills rollup + hourly asset summary",  "start": 1790270179,  "end": 1792862179,  "columns": ["ts", "asset", "close", "open_interest", "funding_rate", "premium"],  "rows": [    [1790272800, "DOGE", 0.096784, 1241308529.6666667, 1.2500000000000004e-05, 0.0005359872416666666],    [1790276400, "DOGE", 0.096298, 1254175347.5, 1.2500000000000004e-05, 0.0005398082333333334],    [1790280000, "DOGE", 0.095875, 1250624021.5, 1.2500000000000004e-05, 0.0005331478083333334]  ]}