Crypto Derivatives Data API
10 pay-per-call crypto derivatives data tools for agents: perp funding rates, funding arbitrage, open interest, futures basis, implied volatility, liquidations and order book depth across 8 exchanges. $0.003-$0.005 per tool call via x402 (USDC on Base); no account or API key.
Servidor MCP alojado
npx add-mcp 'https://derivs.duoleads.com/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
Crypto Derivatives Data API: documentation
Payment
Every data route is paid per call over x402 v2 (scheme exact): HTTP 402 plus USDC on Base (CAIP-2 eip155:8453), settled through the Coinbase CDP facilitator. An unpaid request returns 402 with a base64 PAYMENT-REQUIRED header (price, payTo, asset) and a JSON body with a hint. Sign an EIP-3009 authorization for exactly that amount and send the request with its required parameters and a base64 PAYMENT-SIGNATURE header; the 200 response carries a base64 PAYMENT-RESPONSE receipt. Malformed input (400), unknown paths (404) and the wrong method (405) are answered before the paywall and never charged. When fewer venues answer than the route needs you get a 503, and a coin no venue lists gets a 404: in both cases your authorization is NOT settled.
Quick start
Try it from a terminal: npx agentcash try https://derivs.duoleads.com
Python (requests):
# pip install "x402[requests,evm]"
import os
from eth_account import Account
from x402 import x402ClientSync
from x402.http.clients import x402_requests
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client
client = x402ClientSync()
register_exact_evm_client(client, EthAccountSigner(Account.from_key(os.environ["PRIVATE_KEY"]))) # a Base wallet holding USDC
session = x402_requests(client) # pays the 402 and retries for you
r = session.get("https://derivs.duoleads.com/v1/funding-rates?coin=BTC", timeout=30)
print(r.status_code, r.json())
TypeScript (fetch):
// npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PRIVATE_KEY as \`0x${string}\`); // a Base wallet holding USDC
const pay = wrapFetchWithPayment(fetch, new x402Client().register("eip155:8453", new ExactEvmScheme(account)));
const res = await pay("https://derivs.duoleads.com/v1/funding-rates?coin=BTC", { signal: AbortSignal.timeout(30_000) });
process.stdout.write(\`${res.status} ${JSON.stringify(await res.json())}\n\`);
Most paid answers take 1-5 s, some up to about 20 s: give your HTTP client a timeout of at least 30 s. The payment settles only after the answer is ready, so a call that fails before that is never charged.
A bare URL without any parameters answers with the 402 (that is how discovery probes see the price); a request with missing or malformed parameters is a free 400 that says what would be accepted.
Answers
Every 200 answer carries as_of (when the answer was built) and, per venue row, the venue data's own as_of and stale (served from the cache past its TTL, at most 10 minutes); venues_missing lists each venue not in the answer with a reason (not_listed, timeout, blocked, error, unavailable, not_cached = not refreshed in this request, symbol_mismatch = its price was more than 2 % off the cross-venue median, not_covered); units explains every unit, colo names the Cloudflare location that fetched the data (venue reach differs by location), see_also points to the next useful route, and disclaimer says: data only, not investment advice, not a benchmark, not affiliated with any exchange. Funding: rate is per funding interval, rate_8h = rate x 8 / interval_h, apr_pct = rate x 24 / interval_h x 365 x 100 (simple). Prices are USD per coin (USDT and USDC at par), sizes per coin after the venue's contract multiplier (1000PEPE, kPEPE).
Coins
coin takes a base symbol in any common form: BTC, btc, BTCUSDT, BTC-USDT, BTC-PERP, BTC-USD, XBT (= BTC), 1000PEPE or kPEPE (= PEPE; the venue's contract multiplier is applied for you). A malformed symbol is a free 400; a well-formed coin that no venue lists is a 404 and is not charged.
Methods
Methods: every route is a GET with query parameters. Also accepts POST with the same parameters as a JSON object body (numbers may be JSON numbers), or the same query string with an empty body. Unknown parameters are a free 400 either way; any other method is a free 405.
Errors
Errors are {error:{status, code, message, param, expected}, request_id, disclaimer}: 400 for bad input (free), 404 (unknown path, or a coin / expiry no venue lists: not charged), 405, 402 (payment required or refused), 503 when fewer venues answered than the route needs (nothing was charged; retry in a minute), 500 when a settlement could not be confirmed (the data was withheld; contact us with the request id).
MCP
Streamable HTTP at https://derivs.duoleads.com/mcp (stateless, JSON responses). tools/list is free; tools/call is paid with x402 (the payment goes in _meta["x402/payment"], the receipt comes back in _meta["x402/payment-response"]). Tools: perp_funding_rates ($0.003), funding_rate_history ($0.003), funding_arbitrage_scan ($0.005), perp_screener ($0.005), open_interest ($0.003), futures_basis ($0.003), implied_volatility ($0.003), liquidations ($0.003), order_book_depth ($0.003), derivatives_snapshot ($0.005). Same checks, prices and order as HTTP.
A2A
JSON-RPC at https://derivs.duoleads.com/a2a (A2A 1.0 SendMessage and 0.3 message/send, stateless), agent card at https://derivs.duoleads.com/.well-known/agent-card.json. A message without a skill is a free list of skills. To run one, send a DataPart {"skill": "<MCP tool name>", "params": {...}} with the header A2A-Extensions: https://github.com/google-agentic-commerce/a2a-x402/blob/main/spec/v0.2: you get a task in input-required state with x402.payment.required. Sign it and resend with the taskId and metadata x402.payment.status "payment-submitted" and x402.payment.payload; the completed task carries the result artifact and x402.payment.receipts. Same checks, prices and order as HTTP.
GET /v1/funding-rates ($0.003)
Funding rates for perpetual futures (perp funding) of one coin across 8 exchanges: Bybit, Hyperliquid, dYdX, Gate, Kraken, Bitfinex, Deribit, OKX. Per venue the current funding rate, interval, 8h rate, APR, next funding time, mark and index; predicted funding incl. Binance and Bybit (via Hyperliquid); the last 24 hourly prints with avg/min/max/% positive. Perpetual swap funding for BTC, ETH, SOL and more. Data only. Bad input is free; under 3 venues not charged.
MCP tool: perp_funding_rates. Needs at least 3 venues answering, else 503 and nothing is charged.
| Parameter | Required | Description |
|---|---|---|
coin | yes | Coin symbol: BTC, ETH, SOL, PEPE... (also BTCUSDT, BTC-PERP, XBT, 1000PEPE, kPEPE). |
Example request
curl -i 'https://derivs.duoleads.com/v1/funding-rates?coin=BTC'
Example answer (200, trimmed)
{
"coin": "BTC",
"venues": [
{
"venue": "bybit",
"symbol": "BTCUSDT",
"quote": "USDT",
"contract_multiplier": 1,
"rate": 0.00003501,
"interval_h": 8,
"rate_8h": 0.00003501,
"apr_pct": 3.83359,
"next_funding_time": "2026-10-15T00:00:00Z",
"predicted_rate": null,
"mark": 81631.8,
"index": 81672.62,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
},
{
"venue": "hyperliquid",
"symbol": "BTC",
"quote": "USDC",
"contract_multiplier": 1,
"rate": 0.0000125,
"interval_h": 1,
"rate_8h": 0.0001,
"apr_pct": 10.95,
"next_funding_time": "2026-10-15T00:00:00Z",
"predicted_rate": null,
"mark": 81624,
"index": 81658,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
],
"summary": {
"venues": 8,
"avg_rate_8h": 0.000048465931,
"avg_apr_pct": 5.30702,
"min_apr": {
"venue": "dydx",
"apr_pct": 0
},
"max_apr": {
"venue": "kraken",
"apr_pct": 11.8121
},
"spread_apr_pct": 11.8121
},
"predicted": {
"as_of": "2026-10-14T23:00:00Z",
"rows": [
{
"source": "binance",
"rate": -0.00004729,
"interval_h": 8,
"rate_8h": -0.00004729,
"apr_pct": -5.17826,
"next_funding_time": "2026-10-15T00:00:00Z"
},
{
"source": "bybit",
"rate": 0.00003501,
"interval_h": 8,
"rate_8h": 0.00003501,
"apr_pct": 3.83359,
"next_funding_time": "2026-10-15T00:00:00Z"
}
]
},
"recent": {
"venue": "hyperliquid",
"hours": 24,
"prints": [
{
"time": "2026-10-13T23:00:00Z",
"rate": 0.0000125,
"rate_8h": 0.0001
},
{
"time": "2026-10-14T00:00:00Z",
"rate": 0.000006651,
"rate_8h": 0.000053208
}
],
"stats": {
"n": 24,
"avg_rate_8h": 0.00009098383333,
"min_rate_8h": 0.0000346392,
"max_rate_8h": 0.0001,
"pct_positive": 100,
"avg_apr_pct": 9.96273
},
"as_of": "2026-10-14T23:00:00Z"
},
"venues_missing": [],
"units": {
"rate": "fraction per funding interval (0.0001 = 0.01 %)",
"interval_h": "hours between funding payments",
"rate_8h": "fraction per 8 hours = rate * 8 / interval_h",
"apr_pct": "simple annualised percent = rate * 24 / interval_h * 365 * 100",
"mark": "USD per coin (USDT/USDC at par)",
"index": "USD per coin (oracle price on Hyperliquid and dYdX)",
"times": "ISO 8601 UTC"
},
"as_of": "2026-10-14T23:00:00Z",
"colo": null,
"disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
"see_also": {
"endpoint": "https://derivs.duoleads.com/v1/funding-arbitrage",
"params": [
"min_apr",
"min_volume_usd"
],
"reason": "Looking for the widest funding spread across venues? The arbitrage scanner ranks every coin, fee-adjusted."
},
"request_id": "01KEXAMPLE0000000000000000"
}
GET /v1/funding-history ($0.003)
Funding rate history of one coin on one exchange (default Hyperliquid; or Bybit, dYdX, Gate, Kraken, Deribit, OKX), up to 30 days: every past funding print with interval, 8h rate and APR, plus avg/min/max/% positive and the window covered. Historical perpetual swap funding for backtests and carry studies on BTC, ETH, SOL and more. Data only. Bad input is free; a venue that fails is not charged.
MCP tool: funding_rate_history. Needs at least 1 venue answering, else 503 and nothing is charged.
| Parameter | Required | Description |
|---|---|---|
coin | yes | Coin symbol: BTC, ETH, SOL... (also BTCUSDT, BTC-PERP, XBT, 1000PEPE). |
venue | no | The exchange whose funding history to return. Default hyperliquid. Bybit refuses some US locations (a free 503); hyperliquid always answers. One of: bybit, hyperliquid, dydx, gate, kraken, deribit, okx. |
days | no | Days back, 1-30. Default 7. |
Example request
curl -i 'https://derivs.duoleads.com/v1/funding-history?coin=BTC&venue=hyperliquid&days=7'
Example answer (200, trimmed)
{
"coin": "BTC",
"venue": "hyperliquid",
"symbol": "BTC",
"days": 7,
"interval_h": 1,
"prints": [
{
"time": "2026-10-07T23:00:00Z",
"rate": 0.0000125,
"interval_h": 1,
"rate_8h": 0.0001,
"apr_pct": 10.95
},
{
"time": "2026-10-08T00:00:00Z",
"rate": 0.0000125,
"interval_h": 1,
"rate_8h": 0.0001,
"apr_pct": 10.95
}
],
"stats": {
"n": 168,
"avg_rate_8h": 0.00005047508095,
"min_rate_8h": -0.000111848,
"max_rate_8h": 0.0001,
"avg_apr_pct": 5.52702,
"pct_positive": 79.1667
},
"coverage": {
"from": "2026-10-07T23:00:00Z",
"to": "2026-10-14T22:00:00Z",
"requested_from": "2026-10-07T23:00:00Z",
"complete": true
},
"venue_as_of": "2026-10-14T23:00:00Z",
"stale": false,
"venues_missing": [],
"units": {
"rate": "fraction per funding interval",
"interval_h": "hours between funding payments (per print: the gap to its neighbouring print, whole hours 1-8)",
"rate_8h": "fraction per 8 hours = rate * 8 / interval_h",
"apr_pct": "simple annualised percent = rate * 24 / interval_h * 365 * 100",
"times": "ISO 8601 UTC"
},
"as_of": "2026-10-14T23:00:00Z",
"colo": null,
"disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
"see_also": {
"endpoint": "https://derivs.duoleads.com/v1/funding-rates",
"params": [
"coin"
],
"reason": "Current funding on every venue, with predicted next funding (incl. Binance and Bybit via Hyperliquid)."
},
"request_id": "01KEXAMPLE0000000000000000"
}
GET /v1/funding-arbitrage ($0.005)
Funding arbitrage scanner across 8 exchanges (Bybit, Hyperliquid, dYdX, Gate, Kraken, Bitfinex, Deribit, OKX): for every coin the widest cross-venue perp funding spread, the long and short venue, both funding rates, gross and fee-adjusted net APR and breakeven days, with a 24h volume liquidity filter. Funding rate arbitrage, basis trade and carry screening of perpetual swaps. Data only, no advice. Bad input is free; under 3 venues not charged. Empty filter results are still charged.
MCP tool: funding_arbitrage_scan. Needs at least 3 venues answering, else 503 and nothing is charged.
| Parameter | Required | Description |
|---|---|---|
min_apr | no | Minimum gross spread, in APR percent (0-10000). Default 10. |
min_volume_usd | no | Liquidity filter: both legs need at least this 24 h volume in USD (a plain decimal number from 0 to 1000000000000). Venues that publish no volume are excluded when > 0. Default 0. |
fee_pct | no | Taker fee per fill in percent of notional (0-1); 4 fills per round trip. Default 0.05. |
holding_days | no | Days the position is held, to amortise the fees in net_apr_pct (1-365). Default 30. |
limit | no | Opportunities returned, 1-100. Default 20. |
Example request
curl -i 'https://derivs.duoleads.com/v1/funding-arbitrage?min_apr=10'
Example answer (200, trimmed)
{
"filters": {
"min_apr": 10,
"min_volume_usd": 0
},
"fees": {
"taker_fee_pct": 0.05,
"fills": 4,
"holding_days": 30
},
"coins_scanned": 188,
"count": 20,
"opportunities": [
{
"coin": "MOG",
"long": {
"venue": "kraken",
"symbol": "PF_MOGUSD",
"rate": -0.000127961375,
"interval_h": 1,
"apr_pct": -112.094,
"volume_24h_usd": 553.84639,
"oi_usd": 18305.125,
"next_funding_time": "2026-10-15T00:00:00Z"
},
"short": {
"venue": "deribit",
"symbol": "1000MOG_USDC-PERPETUAL",
"rate": 0.00152027,
"interval_h": 8,
"apr_pct": 166.47,
"volume_24h_usd": 0,
"oi_usd": 55856.904,
"next_funding_time": null
},
"gross_apr_pct": 278.564,
"fee_cost_pct": 0.2,
"net_apr_pct": 276.13,
"breakeven_days": 0.262059,
"venues_compared": 4
}
],
"venues": [
{
"venue": "bybit",
"coins": 23,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
},
{
"venue": "hyperliquid",
"coins": 178,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
],
"venues_missing": [],
"units": {
"apr_pct": "simple annualised funding in percent",
"gross_apr_pct": "short-leg APR minus long-leg APR",
"fee_cost_pct": "round-trip fees in percent of one leg's notional (4 fills x fee_pct)",
"net_apr_pct": "gross_apr_pct - fee_cost_pct * 365 / holding_days",
"breakeven_days": "days of the gross spread that pay the round-trip fees",
"volume_24h_usd": "USD",
"oi_usd": "USD"
},
"as_of": "2026-10-14T23:00:00Z",
"colo": null,
"disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
"see_also": {
"endpoint": "https://derivs.duoleads.com/v1/funding-history",
"params": [
"coin",
"venue"
],
"reason": "Check how stable a spread is: past funding prints of one venue, up to 30 days."
},
"request_id": "01KEXAMPLE0000000000000000"
}
GET /v1/perp-screener ($0.005)
Perp screener for all coins: every perpetual future on Bybit, Hyperliquid, dYdX, Gate, Kraken, Bitfinex, Deribit and OKX in one call, sorted by funding rate (APR), open interest (OI), 24h volume or 24h change, with the highest and lowest funding views. A funding screener and perpetuals market ranking for BTC, ETH, SOL and hundreds of altcoins. Data only. Bad input is free; under 3 venues not charged. Empty filter results are still charged.
MCP tool: perp_screener. Needs at least 3 venues answering, else 503 and nothing is charged.
| Parameter | Required | Description |
|---|---|---|
sort | no | funding = average funding APR across venues; oi = total open interest USD; volume = total 24 h volume USD; change = median 24 h price change. One of: funding, oi, volume, change. |
order | no | desc (highest first) or asc. One of: desc, asc. |
limit | no | Coins returned, 1-200. Default 50. |
min_volume_usd | no | Only coins whose total 24 h volume is at least this (USD), a plain decimal number from 0 to 1000000000000. Default 0. |
Example request
curl -i 'https://derivs.duoleads.com/v1/perp-screener?sort=funding&order=desc&limit=20'
Example answer (200, trimmed)
{
"sort": "funding",
"order": "desc",
"coins_total": 188,
"count": 20,
"rows": [
{
"coin": "CASHCAT",
"venues": [
"hyperliquid"
],
"price": 0.12892,
"avg_apr_pct": 35.5359,
"max_apr": {
"venue": "hyperliquid",
"apr_pct": 35.5359
},
"min_apr": {
"venue": "hyperliquid",
"apr_pct": 35.5359
},
"oi_usd": 28626661.25,
"volume_24h_usd": 13195929.17,
"change_24h_pct": 15.9457
},
{
"coin": "MOG",
"venues": [
"bybit",
"deribit"
],
"price": 1.02275e-7,
"avg_apr_pct": 19.0689,
"max_apr": {
"venue": "deribit",
"apr_pct": 166.47
},
"min_apr": {
"venue": "kraken",
"apr_pct": -112.094
},
"oi_usd": 840781.2901,
"volume_24h_usd": 288716.6037,
"change_24h_pct": -2.3
}
],
"extremes": {
"highest_funding": [
{
"coin": "CASHCAT",
"avg_apr_pct": 35.5359,
"venues": 1
},
{
"coin": "MOG",
"avg_apr_pct": 19.0689,
"venues": 4
}
],
"lowest_funding": [
{
"coin": "BLUR",
"avg_apr_pct": -1232.98,
"venues": 1
},
{
"coin": "BERA",
"avg_apr_pct": -114.443,
"venues": 1
}
]
},
"venues": [
{
"venue": "bybit",
"coins": 12,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
},
{
"venue": "hyperliquid",
"coins": 178,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
],
"venues_missing": [],
"units": {
"avg_apr_pct": "mean of the venues' simple annualised funding, percent",
"oi_usd": "USD, sum over venues",
"volume_24h_usd": "USD, sum over venues that publish it",
"change_24h_pct": "percent, median over venues",
"price": "USD per coin, median over venues"
},
"as_of": "2026-10-14T23:00:00Z",
"colo": null,
"disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
"see_also": {
"endpoint": "https://derivs.duoleads.com/v1/derivatives-snapshot",
"params": [
"coin"
],
"reason": "Drill into one coin: funding, open interest, basis, liquidations and long/short in one call."
},
"request_id": "01KEXAMPLE0000000000000000"
}
GET /v1/open-interest ($0.003)
Open interest (OI) of one coin's perpetual futures by exchange: Bybit, Hyperliquid, dYdX, Gate, Kraken, Bitfinex, Deribit, OKX. Per venue OI in coins and USD and its share, the total, and the OI change over 1h, 4h and 24h from the venues' own history. Perp open interest and futures open interest for BTC, ETH, SOL and more. Data only. Bad input is free; under 2 venues (3 for a coin listed on 3+) not charged.
MCP tool: open_interest. Needs at least 2 venues (3 when the coin is listed on 3 or more; a venue whose listing could not be loaded counts as listed) answering, else 503 and nothing is charged.
| Parameter | Required | Description |
|---|---|---|
coin | yes | Coin symbol: BTC, ETH, SOL, PEPE... (also BTCUSDT, BTC-PERP, XBT, 1000PEPE). |
Example request
curl -i 'https://derivs.duoleads.com/v1/open-interest?coin=BTC'
Example answer (200, trimmed)
{
"coin": "BTC",
"venues_used": 8,
"venues_listed": 8,
"total_oi_usd": 15396127720,
"total_oi_coins": 188622.1742,
"venues": [
{
"venue": "gate",
"symbols": [
"BTC_USDT"
],
"oi_coins": 53224.3312,
"oi_usd": 4344915053,
"share_pct": 28.2208,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
},
{
"venue": "hyperliquid",
"symbols": [
"BTC"
],
"oi_coins": 40178.15264,
"oi_usd": 3279501531,
"share_pct": 21.3008,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
],
"change": [
{
"venue": "bybit",
"symbol": "BTCUSDT",
"unit": "coins",
"latest": 30086.085,
"latest_time": "2026-10-14T22:00:00Z",
"change_1h_pct": 0.645335,
"change_4h_pct": 1.4056,
"change_24h_pct": 7.46048,
"as_of": "2026-10-14T23:00:00Z"
},
{
"venue": "gate",
"symbol": "BTC_USDT",
"unit": "usd",
"latest": 4343972013,
"latest_time": "2026-10-14T22:00:00Z",
"change_1h_pct": -0.00334619,
"change_4h_pct": -0.0314464,
"change_24h_pct": 1.28509,
"as_of": "2026-10-14T23:00:00Z"
}
],
"venues_missing": [],
"units": {
"oi_coins": "coins (one side of the book), all perpetuals of the coin on the venue",
"oi_usd": "USD (OI x mark price)",
"share_pct": "percent of the total oi_usd",
"venues_used": "venues in this answer (at least 2; at least 3 when venues_listed is 3 or more)",
"venues_listed": "venues listing the coin; a venue whose listing could not be loaded counts as listed",
"change_pct": "percent change of the venue's own OI series (unit in \`unit\`)",
"times": "ISO 8601 UTC"
},
"as_of": "2026-10-14T23:00:00Z",
"colo": null,
"disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
"see_also": {
"endpoint": "https://derivs.duoleads.com/v1/liquidations",
"params": [
"coin",
"hours"
],
"reason": "Open interest falling? See the recent long and short liquidations per venue."
},
"request_id": "01KEXAMPLE0000000000000000"
}
GET /v1/basis ($0.003)
Futures basis and term structure of one coin: dated futures on Bybit, Deribit, Kraken, Gate and OKX with days to expiry, basis vs index and annualised basis (contango or backwardation, the carry), the perp premium (mark vs index/oracle) on Hyperliquid, dYdX, Bitfinex and the others, and predicted funding. Crypto futures basis for BTC, ETH and more. Data only. Bad input is free; under 2 venues not charged.
MCP tool: futures_basis. Needs at least 2 venues answering, else 503 and nothing is charged.
| Parameter | Required | Description |
|---|---|---|
coin | yes | Coin symbol: BTC, ETH, SOL... (also BTCUSDT, BTC-PERP, XBT). |
Example request
curl -i 'https://derivs.duoleads.com/v1/basis?coin=BTC'
Example answer (200, trimmed)
{
"coin": "BTC",
"futures": [
{
"venue": "deribit",
"symbol": "BTC-15OCT26",
"quote": "USD",
"expiry": "2026-10-15T08:00:00Z",
"days_to_expiry": 0.375,
"mark": 81562.96,
"index": 81563.54,
"basis_pct": -0.000711102,
"annualised_basis_pct": null,
"oi_usd": 1362060,
"volume_24h_usd": 1294160,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
},
{
"venue": "bybit",
"symbol": "BTCUSDT-16OCT26",
"quote": "USDT",
"expiry": "2026-10-16T08:00:00Z",
"days_to_expiry": 1.375,
"mark": 81542.6,
"index": 81654,
"basis_pct": -0.136429,
"annualised_basis_pct": -36.2158,
"oi_usd": 6074760.61,
"volume_24h_usd": 146515.9953,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
],
"term_structure": [
{
"expiry_date": "2026-10-15",
"days_to_expiry": 0.375,
"venues": [
"deribit"
],
"avg_annualised_basis_pct": null
},
{
"expiry_date": "2026-10-16",
"days_to_expiry": 1.375,
"venues": [
"bybit",
"deribit"
],
"avg_annualised_basis_pct": -7.39756
}
],
"perp_premium": [
{
"venue": "bybit",
"symbol": "BTCUSDT",
"mark": 81631.8,
"index": 81672.62,
"premium_pct": -0.04998,
"funding_rate_8h": 0.00003501,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
},
{
"venue": "hyperliquid",
"symbol": "BTC",
"mark": 81624,
"index": 81658,
"premium_pct": -0.0416371,
"funding_rate_8h": 0.0001,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
],
"predicted_funding": {
"as_of": "2026-10-14T23:00:00Z",
"rows": [
{
"source": "binance",
"rate": -0.00004729,
"interval_h": 8,
"rate_8h": -0.00004729,
"apr_pct": -5.17826,
"next_funding_time": "2026-10-15T00:00:00Z"
},
{
"source": "bybit",
"rate": 0.00003501,
"interval_h": 8,
"rate_8h": 0.00003501,
"apr_pct": 3.83359,
"next_funding_time": "2026-10-15T00:00:00Z"
}
]
},
"venues_missing": [
{
"venue": "dydx",
"reason": "not_listed"
}
],
"units": {
"mark": "USD per coin",
"index": "USD per coin (the venue's index; oracle on Hyperliquid and dYdX)",
"basis_pct": "(future - index) / index * 100",
"annualised_basis_pct": "basis_pct * 365 / days_to_expiry (simple); null when the future expires in less than 1 day (and left out of the term-structure average)",
"premium_pct": "(perp mark - index) / index * 100",
"days_to_expiry": "days (fractional)",
"times": "ISO 8601 UTC"
},
"as_of": "2026-10-14T23:00:00Z",
"colo": null,
"disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
"see_also": {
"endpoint": "https://derivs.duoleads.com/v1/funding-rates",
"params": [
"coin"
],
"reason": "Compare the futures basis with perpetual funding on every venue."
},
"request_id": "01KEXAMPLE0000000000000000"
}
GET /v1/options ($0.003)
Implied volatility (IV) of crypto options per expiry from Deribit (always; Bybit and OKX when their cached chains are fresh): ATM IV, 25-delta skew, put/call open interest ratio, max pain and Deribit's DVOL index; with an expiry, the options chain per strike with the greeks as each venue publishes them. Volatility surface inputs for BTC and ETH options. Data only. Bad input is free; nothing is charged when no venue answers.
MCP tool: implied_volatility. Needs at least 1 venue answering, else 503 and nothing is charged.
| Parameter | Required | Description |
|---|---|---|
coin | yes | Underlying coin: BTC, ETH, SOL... (options exist mainly for BTC and ETH). |
expiry | no | Optional expiry date YYYY-MM-DD (UTC): only that expiry, plus its chain per strike with the venues' greeks. Default: the 6 nearest expiries, no chain. |
Example request
curl -i 'https://derivs.duoleads.com/v1/options?coin=BTC'
Example answer (200, trimmed)
{
"coin": "BTC",
"expiries": [
{
"expiry": "2026-10-15T08:00:00Z",
"days_to_expiry": 0.375,
"venues": [
{
"venue": "deribit",
"underlying": 81562.84,
"atm_iv": 0.390797,
"skew_25d": null,
"put_call_oi_ratio": 1.42436,
"max_pain": 83500,
"oi_coins": 3102.7,
"strikes": 28,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
},
{
"venue": "bybit",
"underlying": 81646.3838,
"atm_iv": 0.390494,
"skew_25d": {
"call_iv": 0.3866,
"put_iv": 0.4155,
"call_delta": 0.27996,
"put_delta": -0.274783,
"skew": 0.0289,
"risk_reversal": -0.0289
},
"put_call_oi_ratio": 0.765449,
"max_pain": 82500,
"oi_coins": 2832.08,
"strikes": 28,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
]
},
{
"expiry": "2026-10-16T08:00:00Z",
"days_to_expiry": 1.375,
"venues": [
{
"venue": "deribit",
"underlying": 81582.3,
"atm_iv": 0.387452,
"skew_25d": null,
"put_call_oi_ratio": 1.42795,
"max_pain": 83000,
"oi_coins": 17322.2,
"strikes": 26,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
},
{
"venue": "bybit",
"underlying": 81565.5,
"atm_iv": 0.373493,
"skew_25d": {
"call_iv": 0.3861,
"put_iv": 0.4091,
"call_delta": 0.235112,
"put_delta": -0.216943,
"skew": 0.023,
"risk_reversal": -0.023
},
"put_call_oi_ratio": 1.08242,
"max_pain": 83000,
"oi_coins": 3288.83,
"strikes": 35,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
]
}
],
"dvol": {
"venue": "deribit",
"value": 39.13,
"time": "2026-10-14T22:00:00Z",
"change_24h": 0.96,
"high_24h": 39.3,
"low_24h": 37.75,
"as_of": "2026-10-14T23:00:00Z"
},
"available_expiries": [
"2026-10-15",
"2026-10-16"
],
"venues_missing": [],
"units": {
"iv": "implied volatility as a fraction (0.45 = 45 %), annualised",
"skew": "put IV - call IV at 25 delta (fraction)",
"put_call_oi_ratio": "put open interest / call open interest",
"max_pain": "strike (USD) where option holders' intrinsic value at expiry is smallest",
"oi_coins": "coins",
"underlying": "USD per coin (the venue's underlying / forward price)",
"dvol": "Deribit volatility index, annualised percent",
"greeks": "as published by the venue (Bybit, OKX); Deribit publishes none in bulk"
},
"as_of": "2026-10-14T23:00:00Z",
"colo": null,
"disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
"see_also": {
"endpoint": "https://derivs.duoleads.com/v1/basis",
"params": [
"coin"
],
"reason": "The futures term structure (annualised basis per expiry) next to the options' implied volatility."
},
"request_id": "01KEXAMPLE0000000000000000"
}
GET /v1/liquidations ($0.003)
Liquidations of one coin's perpetual futures: recent forced liquidations from the Gate, Bitfinex, dYdX, Deribit and OKX public feeds, long and short liquidations in USD per venue, the totals and the largest events over 1-24h. Liquidation data for BTC, ETH, SOL and more; Bybit, Hyperliquid and Kraken are listed as not covered (WebSocket only). Data only. Bad input is free; under 2 feeds not charged.
MCP tool: liquidations. Needs at least 2 venues answering, else 503 and nothing is charged.
| Parameter | Required | Description |
|---|---|---|
coin | yes | Coin symbol: BTC, ETH, SOL... (also BTCUSDT, BTC-PERP, XBT). |
hours | no | Look-back window in hours, 1-24. Default 24. |
Example request
curl -i 'https://derivs.duoleads.com/v1/liquidations?coin=BTC&hours=24'
Example answer (200, trimmed)
{
"coin": "BTC",
"hours": 24,
"totals": {
"long_usd": 2039006.657,
"short_usd": 38256.80723,
"total_usd": 2077263.464,
"count": 141,
"long_share_pct": 98.1583,
"partial": true,
"partial_venues": [
"okx"
]
},
"venues": [
{
"venue": "gate",
"long_usd": 305655.3674,
"short_usd": 34040.14805,
"count": 29,
"window_start": "2026-10-13T23:00:00Z",
"covered_hours": 24,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
},
{
"venue": "bitfinex",
"long_usd": 469920.1238,
"short_usd": 0,
"count": 12,
"window_start": "2026-10-13T23:00:00Z",
"covered_hours": 24,
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
],
"largest": [
{
"venue": "okx",
"symbol": "BTC-USDT-SWAP",
"time": "2026-10-14T21:03:30Z",
"side": "long",
"price": 81646.4,
"size_coins": 6,
"size_usd": 489878.4
},
{
"venue": "okx",
"symbol": "BTC-USDT-SWAP",
"time": "2026-10-14T21:03:34Z",
"side": "long",
"price": 81630.8,
"size_coins": 2.08,
"size_usd": 169792.064
}
],
"venues_missing": [
{
"venue": "bybit",
"reason": "not_covered"
},
{
"venue": "hyperliquid",
"reason": "not_covered"
}
],
"units": {
"side": "the side of the position that was liquidated (long = forced sell)",
"price": "USD per coin (execution or bankruptcy price as the venue publishes)",
"size_coins": "coins",
"size_usd": "USD = size_coins x price",
"covered_hours": "hours back from as_of that the venue's feed reaches (<= hours)",
"times": "ISO 8601 UTC"
},
"as_of": "2026-10-14T23:00:00Z",
"colo": null,
"disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
"see_also": {
"endpoint": "https://derivs.duoleads.com/v1/open-interest",
"params": [
"coin"
],
"reason": "Open interest per venue with its 1 h / 4 h / 24 h change."
},
"request_id": "01KEXAMPLE0000000000000000"
}
GET /v1/orderbook ($0.003)
Order book depth of one coin's perpetual on Bybit, Hyperliquid, dYdX, Gate, Kraken, Bitfinex, Deribit and OKX: best bid/ask, spread in bps, market depth in USD within 0.1/0.5/1/2% of mid, bid/ask imbalance, estimated slippage for your order size and the largest resting orders (walls). L2 orderbook liquidity for BTC, ETH, SOL and more. Data only. Bad input is free; under 2 venues not charged.
MCP tool: order_book_depth. Needs at least 2 venues answering, else 503 and nothing is charged.
| Parameter | Required | Description |
|---|---|---|
coin | yes | Coin symbol: BTC, ETH, SOL, PEPE... (also BTCUSDT, BTC-PERP, XBT, 1000PEPE, kPEPE). |
size_usd | no | Order size in USD for the slippage estimate, a plain decimal number from 1 to 1000000000. Default 100000. |
levels | no | Also return the top N price levels per side (0-20). Default 0. |
Example request
curl -i 'https://derivs.duoleads.com/v1/orderbook?coin=BTC&size_usd=100000'
Example answer (200, trimmed)
{
"coin": "BTC",
"size_usd": 100000,
"venues": [
{
"venue": "bybit",
"symbol": "BTCUSDT",
"best_bid": 81644.9,
"best_ask": 81645,
"mid": 81644.95,
"spread_bps": 0.0122482,
"depth": [
{
"pct": 0.1,
"bid_usd": 8009555.947,
"ask_usd": 7913202.056,
"imbalance": 0.00605133
},
{
"pct": 0.5,
"bid_usd": 8009555.947,
"ask_usd": 7913202.056,
"imbalance": 0.00605133
}
],
"slippage": {
"size_usd": 100000,
"buy": {
"filled": true,
"filled_usd": 100000,
"avg_price": 81645,
"slippage_bps": 0.00612408
},
"sell": {
"filled": true,
"filled_usd": 100000,
"avg_price": 81644.9,
"slippage_bps": 0.00612408
}
},
"walls": {
"bids": [
{
"price": 81634.1,
"size_usd": 642378.7329
},
{
"price": 81644.9,
"size_usd": 483174.5182
}
],
"asks": [
{
"price": 81672,
"size_usd": 510695.016
},
{
"price": 81669.3,
"size_usd": 452692.9299
}
]
},
"levels_held": {
"bids": 200,
"asks": 200
},
"book_time": "2026-10-14T22:50:24Z",
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
],
"aggregate": {
"depth": [
{
"pct": 0.1,
"bid_usd": 41381002.89,
"ask_usd": 42793969.58,
"imbalance": -0.0167861
},
{
"pct": 0.5,
"bid_usd": 109389514.7,
"ask_usd": 104580954.7,
"imbalance": 0.022473
}
],
"tightest_spread": {
"venue": "bybit",
"value": 0.0122482
},
"lowest_buy_slippage": {
"venue": "bybit",
"value": 0.00612408
},
"lowest_sell_slippage": {
"venue": "bybit",
"value": 0.00612408
}
},
"venues_missing": [],
"units": {
"prices": "USD per coin",
"spread_bps": "(ask - bid) / mid x 10,000",
"depth_usd": "USD resting within +/- pct % of mid (price x size)",
"imbalance": "(bid_usd - ask_usd) / (bid_usd + ask_usd), -1..1",
"slippage_bps": "average fill vs mid in basis points (>= 0 is worse than mid)",
"levels": "[price USD, size coins]",
"times": "ISO 8601 UTC"
},
"as_of": "2026-10-14T23:00:00Z",
"colo": null,
"disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
"see_also": {
"endpoint": "https://derivs.duoleads.com/v1/liquidations",
"params": [
"coin",
"hours"
],
"reason": "Recent forced liquidations that hit these books."
},
"request_id": "01KEXAMPLE0000000000000000"
}
GET /v1/derivatives-snapshot ($0.005)
Crypto derivatives snapshot of one coin in one call: perp funding rates per exchange with predicted funding, open interest (OI) per venue, perp premium and the nearest futures basis, 24h liquidations and the long/short ratio. Venues: Bybit, Hyperliquid, dYdX, Gate, Kraken, Bitfinex, Deribit, OKX. The derivatives data bundle for trading agents on BTC, ETH, SOL and more. Data only. Bad input is free; under 3 venues not charged.
MCP tool: derivatives_snapshot. Needs at least 3 venues answering, else 503 and nothing is charged.
| Parameter | Required | Description |
|---|---|---|
coin | yes | Coin symbol: BTC, ETH, SOL, PEPE... (also BTCUSDT, BTC-PERP, XBT, 1000PEPE, kPEPE). |
Example request
curl -i 'https://derivs.duoleads.com/v1/derivatives-snapshot?coin=BTC'
Example answer (200, trimmed)
{
"coin": "BTC",
"price": 81626.2,
"funding": {
"venues": [
{
"venue": "bybit",
"symbol": "BTCUSDT",
"rate": 0.00003501,
"interval_h": 8,
"rate_8h": 0.00003501,
"apr_pct": 3.83359,
"next_funding_time": "2026-10-15T00:00:00Z"
}
],
"summary": {
"venues": 8,
"avg_rate_8h": 0.000048465931,
"avg_apr_pct": 5.30702,
"min_apr": {
"venue": "dydx",
"apr_pct": 0
},
"max_apr": {
"venue": "kraken",
"apr_pct": 11.8121
},
"spread_apr_pct": 11.8121
},
"predicted": [
{
"source": "binance",
"rate": -0.00004729,
"interval_h": 8,
"rate_8h": -0.00004729,
"apr_pct": -5.17826,
"next_funding_time": "2026-10-15T00:00:00Z"
}
]
},
"open_interest": {
"total_usd": 15119084900,
"total_coins": 185224.8895,
"venues": [
{
"venue": "bybit",
"oi_coins": 30908.842,
"oi_usd": 2523081487
}
]
},
"basis": {
"perp_premium": [
{
"venue": "bybit",
"premium_pct": -0.04998
}
],
"nearest_future": {
"venue": "deribit",
"symbol": "BTC-16OCT26",
"expiry": "2026-10-16T08:00:00Z",
"days_to_expiry": 1.375,
"basis_pct": 0.0231231,
"annualised_basis_pct": 6.13813
}
},
"liquidations_24h": {
"long_usd": 6839221.13,
"short_usd": 1348389.598,
"sources": [
{
"venue": "gate",
"method": "hourly sums",
"hours": 24,
"long_usd": 6369301.006,
"short_usd": 1348389.598,
"as_of": "2026-10-14T23:00:00Z"
}
]
},
"long_short": [
{
"venue": "bybit",
"symbol": "BTCUSDT",
"ratio": 1.76243,
"long_share": 0.638,
"short_share": 0.362,
"time": "2026-10-14T22:00:00Z",
"ratio_24h_ago": 1.50627,
"as_of": "2026-10-14T23:00:00Z"
}
],
"venues": [
{
"venue": "bybit",
"as_of": "2026-10-14T23:00:00Z",
"stale": false
}
],
"venues_missing": [],
"units": {
"rate": "fraction per funding interval",
"rate_8h": "fraction per 8 hours",
"apr_pct": "simple annualised percent",
"oi": "coins and USD",
"premium_pct": "(perp mark - index) / index * 100",
"basis_pct": "(future - index) / index * 100; annualised = * 365 / days",
"liquidations": "USD, side = the liquidated position",
"long_short_ratio": "accounts net long / accounts net short",
"times": "ISO 8601 UTC"
},
"as_of": "2026-10-14T23:00:00Z",
"colo": null,
"disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
"see_also": {
"endpoint": "https://derivs.duoleads.com/v1/perp-screener",
"params": [
"sort"
],
"reason": "Every perpetual across venues at once, sorted by funding, open interest, volume or 24 h change."
},
"request_id": "01KEXAMPLE0000000000000000"
}