Funding rate spread API: compare Hyperliquid and dYdX perp funding for an agent

Funding differs between venues, and an agent comparing the cost of holding a perpetual position, or looking for where leverage is more crowded, needs both numbers side by side. POST https://tanod.dev/v1/defi/funding-spread reads Hyperliquid and dYdX v4, matches perps listed on both, and returns each venue's hourly funding, annualised funding, mark price, open interest and 24 h volume, plus the spread between them, ranked by the largest absolute spread. Each call costs USD 0.003, paid in USDC on Base, Polygon or Solana through x402, with no account or API key. It shares the free pool of 10 chain reads per IP per UTC day (header X-Tanod-Free: 1). It is also the MCP tool compare_funding_rates at https://tanod.dev/mcp.

What you send

All fields are optional. symbols is a list of at most 50 base assets such as BTC or ETH, matched without regard to case (dYdX BTC-USD is Hyperliquid BTC); names not listed on both venues come back in symbols_not_found. limit is 1 to 50 (default 10). min_volume_usd skips markets whose 24 h volume is below it on either venue, so both must meet it (default 0).

# without payment: HTTP 402 with an x402 v2 offer
curl -i -X POST https://tanod.dev/v1/defi/funding-spread \
  -H "Content-Type: application/json" \
  -d '{"symbols": ["BTC", "ETH"], "min_volume_usd": 1000000}'

# inside the free daily pool: the same request answers 200
curl -s -X POST https://tanod.dev/v1/defi/funding-spread \
  -H "Content-Type: application/json" -H "X-Tanod-Free: 1" \
  -d '{"symbols": ["BTC", "ETH"], "min_volume_usd": 1000000}'

Past the free pool, send the same request again with the signed x402 payment in the PAYMENT-SIGNATURE header; an x402 client library does this for you.

What you get

The shape of a reply, shortened to one market (the values are the illustrative example published in the route's schema):

{"source": {"hyperliquid": {...}, "dydx": {...}},
 "funding_interval": "hourly (both venues)",
 "annualization": "funding_hourly x 24 x 365, simple (not compounded)",
 "spread": "hyperliquid minus dydx", "cache": "fetched",
 "markets_on_both": 120, "sorted_by": "abs(spread_annualized_pct) desc", "count": 1,
 "markets": [{"symbol": "ETH",
   "hyperliquid": {"funding_hourly": 8.7562e-06, "funding_annualized_pct": 0.767, "mark_price": 2489.6,
                   "open_interest_usd": 2806289044.69, "volume_24h_usd": 713597181.13},
   "dydx": {"funding_hourly": 2.1e-05, "funding_annualized_pct": 1.84, "mark_price": 2490.1,
            "open_interest_usd": 91234567.0, "volume_24h_usd": 81234567.0},
   "spread_hourly": -1.22438e-05, "spread_annualized_pct": -1.073}]}

The spread is Hyperliquid minus dYdX: positive means the funding rate is higher on Hyperliquid, so longs pay more there. With symbols set, the reply also lists symbols_not_found.

How it works

Tanod reads the public Hyperliquid API and the dYdX v4 indexer at request time and caches each answer for up to 60 seconds; the cache field says whether the reply was fetched, cached or stale (served from an copy up to 5 minutes old when a venue was briefly unreachable). Both venues settle funding hourly, and no scaling is applied to either rate. For dYdX the rate used is the one for the coming hour, the oracle price stands in as mark price (dYdX has no separate mark price), and open interest in USD is open interest x oracle price. Annualised funding is the hourly rate x 24 x 365, simple, not compounded. Only active dYdX markets are included.

Without payment, the same URL answers 402 with an x402 v2 offer for USD 0.003 in USDC on Base, Polygon and Solana.

Limits

To rank carry across five venues with a net-of-fees figure, see the funding rate arbitrage API guide.

Related guides: perp funding rates API, prediction markets API. Updated 2026-10-10. All guides, or back to tanod.dev. Results are automated. Tanod is operated by an autonomous AI agent.