{
  "id": "surf.market.onchain-indicator",
  "object": "tool",
  "name": "On-Chain Indicator",
  "summary": "Returns on-chain indicator time-series for BTC or ETH.",
  "description": "Returns on-chain indicator time-series for BTC or ETH. Available metrics: nupl, sopr, mvrv, puell-multiple, nvm, nvt, nvt-golden-cross, exchange-flows (inflow/outflow/netflow/reserve). Long ranges: each response is capped at about 100 data points. When meta.has_more=true, split from/to into smaller windows (about 90 days for daily data) and merge by timestamp client-side. For exchange-flow metrics, all_exchange, spot_exchange, and derivative_exchange are aggregate filters, not sums over the curated individual exchange list.\n\nRaw surf#market/onchain-indicator endpoint: input is { body, queryParams, pathParams } as the provider documents them (https://docs.asksurf.ai/data-api/market/onchain-indicator).",
  "category": "lookup",
  "hosted_by": "Surf",
  "runtime": "partner",
  "side_effects": false,
  "status": "live",
  "credits": 0,
  "price": null,
  "providers": [
    {
      "id": "surf",
      "name": "Surf",
      "price": null,
      "own_key_only": true
    }
  ],
  "mcp_name": "surf_market_onchain-indicator",
  "input_schema": {
    "type": "object",
    "properties": {
      "queryParams": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string",
            "enum": [
              "BTC",
              "ETH"
            ],
            "description": "Token ticker symbol. Can be BTC or ETH. Example: BTC."
          },
          "metric": {
            "type": "string",
            "enum": [
              "nupl",
              "sopr",
              "mvrv",
              "puell-multiple",
              "nvm",
              "nvt",
              "nvt-golden-cross",
              "exchange-flows/inflow",
              "exchange-flows/outflow",
              "exchange-flows/netflow",
              "exchange-flows/reserve"
            ],
            "description": "On-chain metric name. Can be nupl, sopr, mvrv, puell-multiple, nvm, nvt, nvt-golden-cross, or exchange-flows/{inflow,outflow,netflow,reserve}. Example: nupl."
          },
          "granularity": {
            "default": "day",
            "type": "string",
            "enum": [
              "day"
            ],
            "description": "Aggregation granularity. Example: day. Defaults to \"day\"."
          },
          "from": {
            "type": "string",
            "minLength": 1,
            "description": "Start of time range. Accepts Unix seconds or date string (YYYY-MM-DD). Defaults to 90 days ago when omitted. Maximum range is 365 days. Responses are capped at about 100 data points; when meta.has_more is true, split from/to into smaller windows (about 90 days for daily data). Example: 2026-01-01."
          },
          "to": {
            "type": "string",
            "minLength": 1,
            "description": "End of time range. Accepts Unix seconds or date string (YYYY-MM-DD). Defaults to today when omitted. Maximum range is 365 days. Responses are capped at about 100 data points; when meta.has_more is true, split from/to into smaller windows (about 90 days for daily data). Example: 2026-03-01."
          },
          "exchange": {
            "default": "all_exchange",
            "type": "string",
            "enum": [
              "all_exchange",
              "spot_exchange",
              "derivative_exchange",
              "coinbase_prime",
              "binance",
              "coinbase_advanced",
              "okx",
              "kraken",
              "bybit",
              "bitstamp",
              "gemini",
              "bitget",
              "kucoin",
              "bitfinex",
              "gate_io",
              "deribit",
              "mexc",
              "htx_global",
              "bitflyer",
              "coinone",
              "bithumb",
              "upbit",
              "hashkey_exchange"
            ],
            "description": "Curated exchange filter for exchange-flow metrics. Use /v1/market/exchange-flow/exchanges to list labels. Example: all_exchange. Defaults to \"all_exchange\"."
          }
        },
        "required": [
          "symbol",
          "metric"
        ],
        "additionalProperties": false
      }
    },
    "required": [
      "queryParams"
    ],
    "additionalProperties": false
  },
  "kind": "endpoint"
}