78trust / 100

Options

by Implied Volatility & Max Pain in Onchain & crypto

x402 APIPassing, checked 2 h ago

Implied volatility (IV) of crypto options per expiry from Deribit, Bybit and OKX: 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.

GET
https://derivs.duoleads.com/v1/options
Price
$0.003
per call in USDC
Uptime
100%
last 30 days
Response time
335 ms
480 ms slowest 5%
Last check
Passed
2 h ago, next any minute now

Run a free test callHow to call it

Reliability

All checks passedSome failedAll failedNot checked

Status and outage history · Atom feed · Watch with other listings

How to call it

GET https://derivs.duoleads.com/v1/options

Each call costs $0.003 in USDC on Base, paid with the request over x402.

Run a free test callOne unpaid request, the way an agent sends it. You see the payment challenge it gets back. Nothing is charged.

Example request

From the listing.

GET https://derivs.duoleads.com/v1/options?coin=BTC

Parameters

ParameterTypeRequiredDescription
coinstringYesUnderlying coin: BTC, ETH, SOL ... (options exist mainly for BTC and ETH).
expirystringNoOptional 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 response

The provider's example. We can't check it without paying.

Example response, 152 lines
{
  "as_of": "2026-10-14T23:00:00Z",
  "available_expiries": [
    "2026-10-15",
    "2026-10-16"
  ],
  "coin": "BTC",
  "colo": null,
  "disclaimer": "Data only, not investment advice, not a benchmark; not affiliated with any exchange",
  "dvol": {
    "as_of": "2026-10-14T23:00:00Z",
    "change_24h": 0.96,
    "high_24h": 39.3,
    "low_24h": 37.75,
    "time": "2026-10-14T22:00:00Z",
    "value": 39.13,
    "venue": "deribit"
  },
  "expiries": [
    {
      "days_to_expiry": 0.375,
      "expiry": "2026-10-15T08:00:00Z",
      "venues": [
        {
          "as_of": "2026-10-14T23:00:00Z",
          "atm_iv": 0.390797,
          "max_pain": 83500,
          "oi_coins": 3102.7,
          "put_call_oi_ratio": 1.42436,
          "skew_25d": null,
          "stale": false,
          "strikes": 28,
          "underlying": 81562.84,
          "venue": "deribit"
        },
        {
          "as_of": "2026-10-14T23:00:00Z",
          "atm_iv": 0.390494,
          "max_pain": 82500,
          "oi_coins": 2832.08,
          "put_call_oi_ratio": 0.765449,
          "skew_25d": {
            "call_delta": 0.27996,
            "call_iv": 0.3866,
            "put_delta": -0.274783,
            "put_iv": 0.4155,
            "risk_reversal": -0.0289,
            "skew": 0.0289
          },
          "stale": false,
          "strikes": 28,
          "underlying": 81646.3838,
          "venue": "bybit"
        },
        {
          "as_of": "2026-10-14T23:00:00Z",
          "atm_iv": 0.386518,
          "max_pain": null,
          "oi_coins": null,
          "put_call_oi_ratio": null,
          "skew_25d": {
            "call_delta": 0.201432,
            "call_iv": 0.392882,
            "put_delta": -0.27447,
            "put_iv": 0.40066,
            "risk_reversal": -0.00777776,
            "skew": 0.00777776
          },
          "stale": false,
          "strikes": 27,
          "underlying": 81622.81366,
          "venue": "okx"
        }
      ]
    },
    {
      "days_to_expiry": 1.375,
      "expiry": "2026-10-16T08:00:00Z",
      "venues": [
        {
          "as_of": "2026-10-14T23:00:00Z",
          "atm_iv": 0.387452,
          "max_pain": 83000,
          "oi_coins": 17322.2,
          "put_call_oi_ratio": 1.42795,
          "skew_25d": null,
          "stale": false,
          "strikes": 26,
          "underlying": 81582.3,
          "venue": "deribit"
        },
        {
          "as_of": "2026-10-14T23:00:00Z",
          "atm_iv": 0.373493,
          "max_pain": 83000,
          "oi_coins": 3288.83,
          "put_call_oi_ratio": 1.08242,
          "skew_25d": {
            "call_delta": 0.235112,
            "call_iv": 0.3861,
            "put_delta": -0.216943,
            "put_iv": 0.4091,
            "risk_reversal": -0.023,
            "skew": 0.023
          },
          "stale": false,
          "strikes": 35,
          "underlying": 81565.5,
          "venue": "bybit"
        },
        {
          "as_of": "2026-10-14T23:00:00Z",
          "atm_iv": 0.379213,
          "max_pain": null,
          "oi_coins": null,
          "put_call_oi_ratio": null,
          "skew_25d": {
            "call_delta": 0.231349,
            "call_iv": 0.364241,
            "put_delta": -0.222136,
            "put_iv": 0.435268,
            "risk_reversal": -0.0710269,
            "skew": 0.0710269
          },
          "stale": false,
          "strikes": 33,
          "underlying": 81625.13401,
          "venue": "okx"
        }
      ]
    }
  ],
  "request_id": "01KEXAMPLE0000000000000000",
  "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."
  },
  "units": {
    "dvol": "Deribit volatility index, annualised percent",
    "greeks": "as published by the venue (Bybit, OKX); Deribit publishes none in bulk",
    "iv": "implied volatility as a fraction (0.45 = 45 %), annualised",
    "max_pain": "strike (USD) where option holders' intrinsic value at expiry is smallest",
    "oi_coins": "coins",
    "put_call_oi_ratio": "put open interest / call open interest",
    "skew": "put IV - call IV at 25 delta (fraction)",
    "underlying": "USD per coin (the venue's underlying / forward price)"
  },
  "venues_missing": []
}

Call it from code

The curl command shows the payment challenge. The JavaScript and Python versions pay and call, and never pay more than $0.003.

curl: see the payment challenge
# bash or zsh: see the payment challenge. Nothing is charged.
curl -sS -g -i 'https://derivs.duoleads.com/v1/options?coin=BTC'

# x402 v2 sends the challenge base64-encoded in the PAYMENT-REQUIRED header (v1 sends it in the body).
# To read the header:
curl -sS -g -o /dev/null -D - 'https://derivs.duoleads.com/v1/options?coin=BTC' \
  | grep -i '^payment-required:' | cut -d' ' -f2 | tr -d '\r' | base64 --decode
JavaScript: pay and call
// npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

// Pays at most $0.003 per call.
const client = new x402Client().setSpendControls({ maxAmountPerPayment: "$0.003" });
registerExactEvmScheme(client, { signer: privateKeyToAccount(process.env.EVM_PRIVATE_KEY) });
const pay = wrapFetchWithPayment(fetch, client);

// Not sure it's safe to pay? ToolVet checks it first for $0.005. Pay for that from a separate
// client: this one is capped at $0.003 per payment. GET https://toolvet.app/api/v1/check?url=https%3A%2F%2Fderivs.duoleads.com%2Fv1%2Foptions
const res = await pay("https://derivs.duoleads.com/v1/options?coin=BTC");
console.log(res.status, await res.text());
Python: pay and call
# 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

# Pays at most $0.003 per call.
client = x402ClientSync().set_spend_controls({"max_amount_per_payment": "$0.003"})
register_exact_evm_client(client, EthAccountSigner(Account.from_key(os.environ["EVM_PRIVATE_KEY"])))

with x402_requests(client) as session:
    res = session.get("https://derivs.duoleads.com/v1/options?coin=BTC")
    print(res.status_code, res.text)

Security scan

No findings

We scan names, descriptions and tool definitions for hidden instructions and other prompt-injection patterns.

Recent checks

WhenResultHTTPTimePrice
2 h agoPassed402393 ms$0.003
7 h agoPassed402358 ms$0.003
11 h agoPassed402335 ms$0.003
16 h agoPassed402152 ms$0.003
20 h agoPassed402304 ms$0.003
Show 3 older checks
25 h agoPassed402402 ms$0.003
29 h agoPassed402480 ms$0.003
39 h agoPassed40253 ms$0.003